--- name: SOLNIX-PACKAGER description: Write recipes and package software for illumos on Solnix. Use when adding a new package, fixing a build, or understanding the recipe schema, the illumos ELF/RUNPATH rules, and how a package becomes cached and searchable. --- # Packaging for Solnix A package becomes available when a **recipe** builds it, the output is submitted to the cache, signed, and published, and the indexer records it. ## The recipe schema (10 columns, TSV) `pname version url sha256 buildsys deps flags system out debug` See [recipe-schema](community/conventions/recipe-schema.md) for each field. The recipe ledger (`recipes.tsv`) is a **build-output ledger** — it records what was built, it cannot seed packages ahead of a real build. ## illumos realities you must respect - **ELF / RUNPATH**: illumos linking differs from Linux. Libraries resolve via RUNPATH; `$ORIGIN` works; don't assume glibc. See [illumos-elf-runpath](community/conventions/illumos-elf-runpath.md). - **No systemd**: services are SMF. If your package ships a daemon, ship an SMF manifest, not a unit file. See [smf-manifests](community/conventions/smf-manifests.md). - **Nix on illumos** has its own gotchas (sandbox, seed toolchain, platform tuple `x86_64-solaris`). See [nix-on-illumos](community/conventions/nix-on-illumos.md). ## Build inputs are protected Seeds, proto, toolchain, and images are a **protected durability class** — they reference `/usr` by design and must never be judged by the leaf-installability gate or garbage-collected. If you're packaging a build input, say so. ## Make it searchable Ship man pages under `$out/share/man` and mark `has_manpages=y`; ship other docs under `$out/share/{info,doc}` and mark `has_docs=y`. The indexer picks them up within the hour and they become searchable at `/docs` and via the API/MCP. ## Workflow Follow [submit-a-package](generic/workflows/submit-a-package.md) end to end.