## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# Release 2.18 (2023-09-20)

- Two new builtin functions, `builtins.parseFlakeRef` and `builtins.flakeRefToString`, have been added. These functions are useful for converting between flake references encoded as attribute sets and URLs.

- `builtins.toJSON` now prints --show-trace items for the path in which it finds an evaluation error.

- Error messages regarding malformed input to `nix derivation add` are now clearer and more detailed.

- The `discard-references` feature has been stabilized. This means that the unsafeDiscardReferences attribute is no longer guarded by an experimental flag and can be used freely.

- The JSON output for derived paths which are store paths is now a string, not an object with a single `path` field. This only affects `nix-build --json` when "building" non-derivation things like fetched sources, which is a no-op.

- A new builtin `outputOf` has been added. It is part of the `dynamic-derivations` experimental feature.

- Flake follow paths at depths greater than 2 are now handled correctly, preventing "follows a non-existent input" errors.

- `nix-store --query` gained a new type of query: `--valid-derivers`. It returns all `.drv` files in the local store that can be used to build the output passed in argument. This is in contrast to `--deriver`, which returns the single `.drv` file that was actually used to build the output passed in argument. In case the output was substituted from a binary cache, this `.drv` file may only exist on said binary cache and not locally.