Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/pg83/ix/llms.txt

Use this file to discover all available pages before exploring further.

In IX, a package’s name is its path under pkgs/. There is no separate registry or manifest — the directory structure is the package identifier. The naming conventions are strict and non-trivial: compound names are split by word boundaries, hyphens become path separators, version numbers become path components, and variants are expressed as nested subdirectories. Understanding these rules is essential for both finding existing packages and naming new ones correctly.

The Fundamental Rule

The package path equals the package name. The ix.sh recipe file at a given directory path defines the package whose name is that path, relative to pkgs/:
Recipe pathPackage name
pkgs/bin/neo/vim/ix.shbin/neo/vim
pkgs/lib/openssl/ix.shlib/openssl
pkgs/bld/cmake/ix.shbld/cmake
The path you use in ix mut, ix build, and ix dep must match the directory path exactly.

Naming Rules

1

Compound names split by word boundaries

Multi-word project names are decomposed into their component words, each becoming a path segment. Word boundaries are identified by the maintainer based on the natural etymology of the name.
Upstream nameIX package name
neovimbin/neo/vim
autoconfbin/auto/conf
ghostscriptbin/ghost/script
firejailbin/fire/jail
netcatbin/net/cat
nettoolsbin/net/tools
2

Hyphens and underscores become /

Any hyphen (-) or underscore (_) in the upstream project name is replaced with a path separator:terminal-usebin/terminal/use
3

Well-known single-word names stay as-is

Established project names that are commonly recognized as a single word are kept intact without splitting:wireshark, openssh, openssl, darktable, coreutils, fontconfig, wirez
4

Version numbers become path components

When multiple versions of a package must coexist, the version number is appended as additional path segments. Dots in version numbers also become path separators:
Package + versionIX package name
autoconf 2.72bin/auto/conf/2/72
bash 5bin/bash/5
5

Variants and sub-packages are nested

When a package has meaningfully different build configurations (e.g. different TLS backends) or sub-components, they are expressed as children of the base package path:bin/curl/openssl, bin/curl/gnutls

Special Suffixes

Certain suffix path components have reserved meanings across all namespaces:
SuffixMeaning
unwrapFull package with all runtime dependencies included. The base package (without unwrap) is the minimal or library-only version; unwrap is what you install when you want the complete, runnable program.
runitService and init scripts for the runit supervisor. Applied to packages that ship a supervised service definition.
tIntermediate template package. Not intended for direct installation; acts as a shared base for other packages.
Example: bin/neo/vim is the minimal neovim build; bin/neo/vim/unwrap is neovim bundled with all its runtime dependencies.

Top-Level Namespaces

Every package lives under one of these top-level directories:
NamespaceContents
bin/Executable binaries built for the target platform
lib/Libraries built for the target platform
bld/Build-time host tools: compilers, code generators, build systems. Built for the host, not the target. Only used during the build of other packages; never installed at runtime.
aux/Runtime data: fonts, terminfo databases, vendored source archives
etc/Configuration files and init scripts
set/Meta-package sets that pull in a collection of related packages
Everything outside bld/ must be able to cross-compile for the target platform. Packages in bld/ only need to run on the build host.

Examples

A consolidated reference of real package name conversions:
Upstream nameIX package name
neovimbin/neo/vim
autoconfbin/auto/conf
autoconf 2.72bin/auto/conf/2/72
ghostscriptbin/ghost/script
firejailbin/fire/jail
netcatbin/net/cat
nettoolsbin/net/tools
terminal-usebin/terminal/use
opensshbin/openssh
wiresharkbin/wireshark
curl (OpenSSL variant)bin/curl/openssl
curl (GnuTLS variant)bin/curl/gnutls
neovim (full, with runtime deps)bin/neo/vim/unwrap
The canonical form of a name is determined by the maintainer who first adds the package. When adding a new package, search pkgs/ for packages with similar upstream names and follow the established pattern for that word root. When in doubt, prefer splitting compound words rather than keeping them joined.

Build docs developers (and LLMs) love