Skip to content

Cannot specify world to target for package referenced from a registry #399

Open

Description

@kate-goldenring

I have a component that adds two numbers. It uses the adder world defined in ghcr.io/bytecodealliance/docs/adder:0.1.0. In my Cargo.toml, I get an error if I specify the world within the package i want to target. This happens to be redundant in this case as only the adder world exists in the package, but I would expect it to still be permitted.

Example app

Cargo.toml:

[package.metadata.component.target]
# The registry which contains the package
registry = "ghcr.io/bytecodealliance"
# The package name
package = "docs:adder"
# The package version
version = "0.1.0"
# Adding the following incurs an erro
world = "adder"

Error during cargo component build --release:

error: failed to create a target world for package `adder` (/Users/kagold/Programs/component-docs/component-model/examples/tutorial/adder/Cargo.toml)

Caused by:
    0: failed to select world from target package `docs:adder`
    1: no world named `adder` in package
For now, i'll leave the world out but ill file an issue with cargo-component

WIT can be fetched

wkg get --format wit docs:adder@0.1.0 --output adder.wit  --registry ghcr.io

WIT:

package docs:adder@0.1.0;

interface add {
  add: func(a: u32, b: u32) -> u32;
}

world adder {
  export add;
}

Activity

  1. kate-goldenring commented on May 1, 2025

    @kate-goldenring
    Author

    I am using cargo-component 0.21.1

  2. macovedj commented on May 8, 2025

    @macovedj
    Collaborator

    So it looks to me like the issue might be that the wit you provided is different from the wit in the registry. When I look at the thing being fetched here, I see the following wit:

    package root:component;
    
    world root {
      export docs:adder/add@0.1.0;
    }
    package docs:adder@0.1.0 {
      interface add {
        add: func(x: u32, y: u32) -> u32;
      }
    }
    

    I am able to properly scaffold out a component using that world with the following command though:

    cargo component new --lib --target docs:adder/root foo

    where I had to use root to specify the world I wanted to target.

    After some discussion about how config should be addressed, we could probably use this when handling bytecodealliance/component-docs#255

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions