NUR: a user-run package layer for Nix that trades review for speed
Nix User Repository: User contributed nix packages [maintainer=@Pandapip1].
At a glance
- What is it?
- The Nix User Repository is a community meta-repository that indexes user-maintained Nix expressions. It gives fast, decentralized access to packages outside Nixpkgs, with the explicit cost that nothing in it is reviewed.
- Who is it for?
- Adopt NUR if you need a package that is not in Nixpkgs and you are willing to read its source before every install. Do not adopt it for critical infrastructure or for users who expect Nixpkgs-level review.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What NUR actually is and who should care
NUR is a meta-repository, not a package set. It holds pointers to many user-maintained Git repositories, each of which contains Nix expressions. When you install `nur.repos.mic92.hello-nur`, NUR fetches that user's repository and evaluates the expression inside. The project was started in 2018 by Mic92 and is now maintained by Pandapip1. The audience is Nix users who want a package that is not in Nixpkgs, or who want a newer version than Nixpkgs carries. The trade is explicit: packages are built from source and are not reviewed by any Nixpkgs member. That sentence is the core of the project. Everything else in NUR is a mechanism to make that unreviewed content reachable.
How the evaluation pipeline works
NUR does not build packages itself. It runs a repository list and performs evaluation checks before propagating updates. The README says NUR automatically checks its list of repositories and performs evaluation checks before it propagates the updates. That means the central service verifies that each registered repository evaluates without errors, but it does not build or test the resulting derivations. The checked result is published as the `nur-combined` repository, which contains all Nix expressions from all users. You can search that combined repo on GitHub. The evaluation check is a gate for syntax and structure, not for safety or correctness. A repository can pass evaluation and still contain a malicious builder script.
Installing NUR: flakes versus packageOverrides
There are two main installation paths. With flakes, you add NUR as an input and let its nixpkgs follow yours. The README shows this input block: `nur = { url = "github:nix-community/NUR"; inputs.nixpkgs.follows = "nixpkgs"; };`. Then you use either the overlay `overlays.default` or `legacyPackages.<system>`. Without flakes, you add NUR to `packageOverrides` in `~/.config/nixpkgs/config.nix` using `builtins.fetchTarball`. For NixOS, you put the same override in `nixpkgs.config.packageOverrides` inside `/etc/nixos/configuration.nix`. The README warns that if you use NUR in `nix-env`, home-manager, or `nix-shell`, you also need it in the user-level config file. That is a concrete gotcha: missing the user config means NUR is not visible to those tools.
Pinning is not optional for reproducibility
The unpinned `fetchTarball` path caches for only one hour by default. That means every build needs internet access, and worse, the content can change between builds. The README explicitly says this and shows how to pin. You take a specific commit URL and a sha256 hash obtained with `nix-prefetch-url --unpack`. The example pins to commit `3a6a6f4da737da41e27922ce2cfacf68a109ebce` with a hash. Flakes users get pinning for free because flake inputs are locked. But the non-flake path, which many existing NixOS users still rely on, defaults to floating. If you use NUR without pinning, you are building from a moving target. That is a real reliability cost, and the README does not sugarcoat it.
Using NUR in devshells, NixOS modules, and Home Manager
The README gives three integration patterns. In a devshell, you add the NUR overlay to `pkgs` and then reference `pkgs.nur.repos.mic92.hello-nur` inside `mkShell`. For NixOS, you import `nur.modules.nixos.default` to get the overlay, then you can import user modules directly, for example `nur.repos.iopq.modules.nixos.xraya`. For Home Manager, you import `lib.attrValues nur.repos.moredhel.modules.homeManager` and then configure services like `services.unison`. Each repo can provide its own modules, so the integration surface is not fixed. That flexibility is useful, but it also means you must inspect each repo's module interface yourself. There is no central schema for what a module looks like.
The security model is a warning, not a feature
The README contains a direct warning: NUR does not check the repository for malicious content on a regular basis and it is recommended to check expressions before installing them. That is the opposite of Nixpkgs, where maintainers review changes. With NUR, the repository owner controls the expressions, and the central service only checks evaluation. An attacker who registers a plausible repo name and passes evaluation can ship a builder that runs arbitrary code. The README's example package is `hello-nur`, which is trivial, but real repos may contain complex build scripts. The project does not even attempt to sandbox or scan. If you install from NUR, you are the reviewer. That is a design choice, but it is a hard boundary.
NUR versus Nixpkgs and other channels
The main alternative is Nixpkgs itself. Nixpkgs is reviewed, tested, and has a stable release process. NUR exists precisely because Nixpkgs review is slow and selective. The difference is not just speed: Nixpkgs has a formal structure, a security team, and a large set of CI checks. NUR has evaluation checks only. Another alternative is to vendor a package yourself by writing a local derivation. That gives you full control and no third-party trust, but it costs time and requires Nix expertise. NUR sits in between: faster than Nixpkgs, less trusted than a local expression. For a package you need today and can read in five minutes, NUR is reasonable. For a package you cannot understand, Nixpkgs or a vendored expression is safer.
Maintenance cost and license
NUR is MIT licensed, which is permissive and should not block adoption. The maintenance burden is on the central maintainer, currently Pandapip1, who manages the repository list and the evaluation checks. The README does not document a release process or a versioning scheme. There are no recent releases listed, and the project tracks `main`. That means the central NUR repository is a moving target unless you pin. For users, the maintenance cost is the review obligation: every time you update your lockfile or your `fetchTarball` hash, you should re-read the repos you depend on. The project itself does not promise stability. If the maintainer steps away, the service could stop, though the combined repo and the individual repos would remain usable. That is a real risk to consider before building your workflow around NUR.
Editorial conclusion
Adopt NUR if you need a package that is not in Nixpkgs and you are willing to read its source before every install. Do not adopt it for critical infrastructure or for users who expect Nixpkgs-level review. Before using any repo, check its default.nix, look at the maintainer history, and pin the NUR revision you trust. NUR is a distribution channel, not a guarantee.
Community notes