Install modes: pixi vs. submodules

Tins install either as pixi git source dependencies or as git submodules. Both are pinned by the registry to published commits; they differ in who does the building and where the source lives.

What pixi mode does better

Why submodules still earn their keep

Note — submodule mode means you do the build. Pixi mode compiles tins for you; with submodules you point the Mojo compiler at each tin's source yourself (-I shelf/<name>/src), and FFI tins additionally need their native shim built and reachable at runtime. The build is not a secret: every tin repo carries its own definition — the [package] sections in its pixi.toml and, for shims, a shim/ or ffi/ subpackage (CMake or a rattler-build recipe). The shortcut: run pixi install inside the tin's checkout and it builds everything, including the shim, into that environment.

Which should I use?

Prefer pixi mode when every tin you need supports it; fall back to submodules otherwise. The two modes coexist in one project. A stable tin can also be graduatedshelf graduate turns its pixi-build setup into a binary conda package submission for the modular-community channel. Submodule mode will be retired only when every published tin is pixi-consumable and pixi-build has stabilized — and with a documented migration path (shelf remove each tin, then pixi shelf add).

The naming pattern: one tin, two namespaces

In pixi mode a tin's name becomes a conda package name in the consumer's environment. A tin named after an existing conda package the environment also needs (directly or transitively) makes the dependency solver's job impossible — there cannot be two packages called zlib in one environment, and the real one is required by half the ecosystem.

The pattern: