---
name: "nix3-registry"
section: "1"
platform: "linux"
package: "nix-bin"
version: "2.26.3+dfsg-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/nix3-registry"
---

# nix3-registry(1)

manage the flake registry

**Warning** \
 This program is **experimental** ⟨@docroot@/development/experimental-features.md#xp-feature-nix-command⟩ and its interface is subject to change.

## Name

`nix registry` - manage the flake registry

## Synopsis

`nix registry` \[*option*…\] *subcommand*

where *subcommand* is one of the following:

- •

  `nix registry add` ⟨./nix3-registry-add.md⟩ - add/replace flake in user flake registry

- •

  `nix registry list` ⟨./nix3-registry-list.md⟩ - list available Nix flakes

- •

  `nix registry pin` ⟨./nix3-registry-pin.md⟩ - pin a flake to its current version or to the current version of a flake URL

- •

  `nix registry remove` ⟨./nix3-registry-remove.md⟩ - remove flake from user flake registry

## Description

`nix registry` provides subcommands for managing *flake* *registries*. Flake registries are a convenience feature that allows you to refer to flakes using symbolic identifiers such as `nixpkgs`, rather than full URLs such as `git://github.com/NixOS/nixpkgs`. You can use these identifiers on the command line (e.g. when you do `nix` `run nixpkgs#hello`) or in flake input specifications in `flake.nix` files. The latter are automatically resolved to full URLs and recorded in the flake’s `flake.lock` file.

In addition, the flake registry allows you to redirect arbitrary flake references (e.g. `github:NixOS/patchelf`) to another location, such as a local fork.

There are multiple registries. These are, in order from lowest to highest precedence:

- •

  The global registry, which is a file downloaded from the URL specified by the setting `flake-registry`. It is cached locally and updated automatically when it’s older than `tarball-ttl` seconds. The default global registry is kept in a GitHub repository ⟨https://github.com/NixOS/flake-registry⟩\\c .

- •

  The system registry, which is shared by all users. The default location is `/etc/nix/registry.json`. On NixOS, the system registry can be specified using the NixOS option `nix.registry`.

- •

  The user registry `~/.config/nix/registry.json`. This registry can be modified by commands such as `nix registry pin`.

- •

  Overrides specified on the command line using the option `--override-flake`.

Note that the system and user registries are not used to resolve flake references in `flake.nix`. They are only used to resolve flake references on the command line.

## Registry format

A registry is a JSON file with the following format:

```
{
  "version": 2,
  "flakes": [
    {
      "from": {
        "type": "indirect",
        "id": "nixpkgs"
      },
      "to": {
        "type": "github",
        "owner": "NixOS",
        "repo": "nixpkgs"
      }
    },
    ...
  ]
}
```

That is, it contains a list of objects with attributes `from` and `to`, both of which contain a flake reference in attribute representation. (For example, `{"type": "indirect", "id": "nixpkgs"}` is the attribute representation of `nixpkgs`, while `{"type":` `"github", "owner": "NixOS", "repo": "nixpkgs"}` is the attribute representation of `github:NixOS/nixpkgs`.)

Given some flake reference *R*, a registry entry is used if its `from` flake reference *matches* *R*. *R* is then replaced by the *unification* of the `to` flake reference with *R*.

## Matching

The `from` flake reference in a registry entry *matches* some flake reference *R* if the attributes in `from` are the same as the attributes in `R`. For example:

- •

  `nixpkgs` matches with `nixpkgs`.

- •

  `nixpkgs` matches with `nixpkgs/nixos-20.09`.

- •

  `nixpkgs/nixos-20.09` does not match with `nixpkgs`.

- •

  `nixpkgs` does not match with `git://github.com/NixOS/patchelf`.

## Unification

The `to` flake reference in a registry entry is *unified* with some flake reference *R* by taking `to` and applying the `rev` and `ref` attributes from *R*, if specified. For example:

- •

  `github:NixOS/nixpkgs` unified with `nixpkgs` produces `github:NixOS/nixpkgs`.

- •

  `github:NixOS/nixpkgs` unified with `nixpkgs/nixos-20.09` produces `github:NixOS/nixpkgs/nixos-20.09`.

- •

  `github:NixOS/nixpkgs/master` unified with `nixpkgs/nixos-20.09` produces `github:NixOS/nixpkgs/nixos-20.09`.

## Options

### Logging-related options

- •

  `--debug` ⟨#opt-debug⟩

-

  Set the logging verbosity level to ‘debug’.

- •

  `--log-format` ⟨#opt-log-format⟩ *format*

-

  Set the format of log output; one of `raw`, `internal-json`, `bar` or `bar-with-logs`.

- •

  `--print-build-logs` ⟨#opt-print-build-logs⟩ / `-L`

-

  Print full build logs on standard error.

- •

  `--quiet` ⟨#opt-quiet⟩

-

  Decrease the logging verbosity level.

- •

  `--verbose` ⟨#opt-verbose⟩ / `-v`

-

  Increase the logging verbosity level.

### Miscellaneous global options

- •

  `--help` ⟨#opt-help⟩

-

  Show usage information.

- •

  `--offline` ⟨#opt-offline⟩

-

  Disable substituters and consider all previously downloaded files up-to-date.

- •

  `--option` ⟨#opt-option⟩ *name* *value*

-

  Set the Nix configuration setting *name* to *value* (overriding `nix.conf`).

- •

  `--refresh` ⟨#opt-refresh⟩

-

  Consider all previously downloaded files out-of-date.

- •

  `--version` ⟨#opt-version⟩

-

  Show version information.

  **Note**

  See `man nix.conf` ⟨@docroot@/command-ref/conf-file.md#command-line-flags⟩ for overriding configuration settings with command line flags.
