figsoda/unnix
{ "createdAt": "2026-02-04T05:56:09Z", "defaultBranch": "main", "description": "Reproducible Nix environments without installing Nix", "fullName": "figsoda/unnix", "homepage": "", "language": "Rust", "name": "unnix", "pushedAt": "2026-06-04T02:07:03Z", "stargazersCount": 106, "topics": [ "cache", "ci", "devbox", "hydra", "nix", "nixos" ], "updatedAt": "2026-06-04T02:07:00Z", "url": "https://github.com/figsoda/unnix"}Reproducible Nix environments without installing Nix
[!Warning] Unnix is alpha software. I recommend against running it on long-running production servers in its current state.
| Try with Nix flakes | Install from crates.io | Download prebuilt binaries |
|---|---|---|
|
|
To use unnix, start by creating unnix.kdl, [unnix’s manifest file]!(docs/manifest.md)
unnix init -p jq ripgrepNow you can enter the environment with
unnix envThis will generate unnix.lock.json and put you in a shell with jq and rg.
Make sure to commit the lockfile to your VCS to keep your environment reproducible.
How it works
Section titled “How it works”This is a very simplified view of what happens when you run nix develop.
flowchart TB
nix(nix) --> | download | expr --> | evaluate | drvdrv --> | outputs | path --> | query | cache
cache -->| hit | download(download to the Nix store)cache -->| miss | build(build the derivation)drv -.- build
cache( binary cache e.g. cache.nixos.org)
drv(derivations)
expr( Nix expressions e.g. Nixpkgs)
path(store paths)Downloading and evaluating Nixpkgs can take a long time, especially in ephemeral environments like CI pipelines. Unnix avoids that by removing derivations from the picture altogether, and getting the store paths directly from services like [Hydra] or [Devbox].
flowchart TBunnix --> | lockfile absent or outdated | update --> | Hydra / Devbox | pathsunnix --> | up-to-date lockfile | pathspaths --> | query | cache
cache --> | hit | download(download to the unnix store)cache --> | miss | miss
cache( binary cache e.g. cache.nixos.org)
miss( fail)
paths(store paths)
unnix(unnix)
update(update lockfile)Platform support
Section titled “Platform support”| aarch64-darwin | aarch64-linux | x86_64-darwin | x86_64-linux | |
|---|---|---|---|---|
| CLI | partial[^1] | yes | partial[^1] | yes |
| [GitHub action] | yes | yes | no | yes |
| [prebuilt binaries] | yes | yes | no | yes |
| cached by the default cache | yes | yes | yes[^2] | yes |
[^1] !: unnix env relies on [bubblewrap], which only works on Linux. An alternative darwin backend is work in progress.
[^2] !: x86_64-darwin will be deprecated in Nixpkgs 26.11.
Limitations
Section titled “Limitations”-
No setup hooks
Unnix does not have access to stdenv, and therefore cannot run the setup hooks or any user-specified
shellHooks. Instead, it tries its best to emulate the behavior of setup hooks likepkg-config, so that dependencies can be picked up without executing any hooks. -
No evaluation
Unnix does not evaluate Nix expressions. You cannot use
.overrideor.overrideAttrson packages, and are limited to the attributes the resolver exposes, e.g. [Hydra] jobs. -
No builds
Unnix cannot build anything, and strictly relies on binary caches. This means no unfree packages if you are using the default set of caches.
Related projects
Section titled “Related projects”Documentation
Section titled “Documentation”See [docs/README.md]!(docs)
Changelog
Section titled “Changelog”See [CHANGELOG.md]!(CHANGELOG.md)
[Devbox] !: https://www.nixhub.io/ [GitHub action] !: https://github.com/figsoda/unnix-action [Hydra] !: https://github.com/nixos/hydra [bubblewrap] !: https://github.com/containers/bubblewrap [prebuilt binaries] !: https://github.com/figsoda/unnix/releases