Lix is a Nix implementation built for growth, not for the past
[MIRROR, PRs ok! Issues: https://git.lix.systems/lix-project/lix/issues] A modern, delicious implementation of the Nix package manager, focused on correctness, usability, and growth — and committed to doing right by its community
At a glance
- What is it?
- Lix is an independent implementation of the Nix package manager written in C++ and Rust, licensed LGPL-2.1-or-later and developed in the open on its own Git forge. It installs with a single curl command and builds with meson and cargo through a justfile.
- Who is it for?
- Lix fits a team that depends on Nix today and wants a project where the roadmap, the review process and the code are visible rather than steered by a single vendor, and an organisation that can accept a package manager whose licence is LGPL-2.1-or-later rather than the GPL terms of other Nix implementations. It does not fit a user who needs binary packages for a platform Lix does not cover, or a team that cannot host a source build of the tool itself.
- Can I use it commercially?
- Yes, with conditions. LGPL-2.1 is a weak copyleft licence: you can use it inside commercial and closed-source software, but if you distribute changes to its own files, you must publish those changes under the same licence.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A Nix implementation that lives on its own forge
Lix describes itself as an implementation of Nix, a package management system for Linux and other Unix systems that makes package management reliable and reproducible. The repository description adds the part that matters for anyone weighing it: the focus is on correctness, usability and growth, and the project is committed to doing right by its community. It is a mirror, and the README says pull requests are welcome, but issues are tracked on the project's own Git forge at git.lix.systems rather than on GitHub. That is a structural choice with real consequences. Governance, review and issue triage happen where the maintainers work, and the GitHub copy is a read-friendly mirror rather than the source of truth. The project publishes no GitHub releases, so version tracking also happens on the forge and in the manual.
One curl command installs it on Linux and macOS
Installation on Linux and macOS is a single shell command, run as a user other than root:
$ curl -sSf -L https://install.lix.systems/lix | sh -s -- installFor systems that already have a Nix implementation installed, such as NixOS systems, the README points to the install page on lix.systems rather than to the script, which is the sensible split since the coexistence question is the hard one and the script cannot answer it for you. The project homepage is lix.systems, and the manual is published in two channels, stable and nightly, with an explicit note that the nightly manual is not automatically updated yet, tracked as an issue in the project tracker. That note is the kind of thing most READMEs omit, and it matters for anyone scripting against the nightly documentation.
meson for the C++ core, cargo for the Rust tooling
The build is a two-language affair and the repository shows both halves. The primary language of the project is C++, and meson drives that side through meson.build, meson.options and a meson/ directory, with a Cargo workspace alongside for the Rust crates, namely lix/lix-doc, lix/lix-rs and tools/licxxbridge. The Cargo workspace pins a long dependency list, from clap and tokio to rusqlite with the modern_sqlite, trace, fallible_uint and functions features, and a nix crate with the pthread feature. Two entries stand out. zngur comes from a git repository pinned to a specific revision, which is a reminder that a Cargo workspace can pull code straight from a git host. And the release profile turns on debug-assertions and overflow-checks, so a release build still asserts, which is a deliberate trade of some speed for catching bugs in shipped binaries.
A justfile that spells out the developer loop
Build orchestration is handled by just, and the justfile is unusually well commented about why it works the way it does. The shell is pinned to bash with the -uc flags, and the comment explains the reasoning: just provides positional arguments and an @ prefix to forward arguments to the inner commands, which is required because template options do not escape values, so an extra level of shell escaping would otherwise be needed for values containing spaces. The targets map to meson directly. Setup configures the build directory with meson setup, build and its compile alias run meson compile, install runs meson install for local development, and test runs meson test with error logs printed and a 10000 line cap, with test-unit and test-integration aliases that select the check and installcheck suites. The setup, build, install and test targets all accept positional arguments, so extra meson flags can be passed straight through.
Rust lint policy that denies the easy mistakes
The Cargo workspace also carries a clippy configuration that reads like a code review policy written in lints. Complexity, perf and suspicious groups are all set to deny at priority -1. Then there are the named restrictions: clone-on-ref-ptr, rc-mutex and todo are denied outright, and unwrap-used is denied as well, which means a panic path in this codebase has to be written deliberately rather than left behind an unwrap. The dev profile sets opt-level to 1 rather than 0, which keeps development builds usable for profiling without paying full optimisation cost. On the Python side of the tree, pyproject.toml configures ruff with a line length of 100 and requires Python 3.12 or newer, with fix enabled by default but unsafe-fixes disabled so the tool will not apply changes that could break things.
The repository is the whole project, not just the source
The top level file listing explains how a project like this is organised, and several entries point to infrastructure a user may never see in a binary. There is a maintainers/ directory and an OWNERS file, releng/ for release engineering, nix-support/, package.nix, default.nix, release.nix and a flake.nix with a flake.lock, so Lix is packaged for Nix systems by the same ecosystem it implements. The justfile, treefmt.toml, rustfmt.toml, .clang-format, .clang-tidy and .editorconfig together define how the mixed C++, Rust, Python and Perl tree is kept consistent, and pyproject.toml, perl/ and tools/ point at the languages actually present. Contrib/ and misc/ hold community and miscellaneous pieces. The .this-is-lix file is a small signal worth noticing, a marker in the root that identifies the tree.
LGPL terms, a fork-shaped project and the question it raises
Lix is released under LGPL-2.1-or-later, with the COPYING file holding the text. That licence choice is one of the clearest ways it differs from other Nix implementations you may have encountered, and it has a concrete consequence for anyone who links Lix into a larger product, since the LGPL's requirements around relinking and providing the library source apply. That is a legal question rather than a technical one, and the copying file and the project's own licensing documentation are the places to read, not a summary in a review. The community side is documented too, with a wiki at wiki.lix.systems, a Matrix space, a reference manual, and a hacking guide in the manual that covers setting up a development environment and building from source. The last push was on 2026-10-19.
Editorial conclusion
Lix fits a team that depends on Nix today and wants a project where the roadmap, the review process and the code are visible rather than steered by a single vendor, and an organisation that can accept a package manager whose licence is LGPL-2.1-or-later rather than the GPL terms of other Nix implementations. It does not fit a user who needs binary packages for a platform Lix does not cover, or a team that cannot host a source build of the tool itself. Verify first that your target platform is supported by the install script, that the manual's stable channel covers the features you rely on, and that the nightly documentation lag tracked in the project does not affect the commands you plan to script.
Frequently asked questions
How do I install Lix on Linux or macOS?
Run curl -sSf -L https://install.lix.systems/lix | sh -s -- install as a user other than root. For systems that already have a Nix implementation installed, such as NixOS systems, the project directs you to its install page on lix.systems instead.
Where are Lix issues and pull requests handled?
The GitHub repository is a mirror and pull requests are welcome there, but issues are tracked on the project's own Git forge at git.lix.systems. The repository also publishes no GitHub releases, so version information comes from the forge and the manual.
How do you build Lix from source?
The hacking guide in the Lix manual covers setting up a development environment and building from source. The build uses meson for the C++ side and a cargo workspace for the Rust crates, with the justfile providing setup, build, install and test targets that pass extra meson flags through as positional arguments.
What licence is Lix released under?
Lix is released under LGPL-2.1-or-later, with the license text in the COPYING file at the root of the repository. The project is implemented in C++ and Rust, with a Cargo workspace covering lix/lix-doc, lix/lix-rs and tools/licxxbridge.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/lix-project-lix)Was this useful?