rel:: [[Programming Languages]]
rel:: [[configuration]]
rel:: [[devops]]
# nickel
## Description
> Nickel is a generic configuration language. Its purpose is to automate the generation of static configuration files - think JSON, YAML, XML, or your favorite data representation language - that are then fed to another system. It is designed to have a simple, well-understood core: it is in essence JSON with functions.
- optional typing
- design by contract
> The motivating use cases are in particular:
> - The Nix package manager: Nix is a declarative package manager using its own language for specifying packages. Nickel is an evolution of the Nix language, while trying to overcome some of its limitations.
> - Infrastructure as code: infrastructure is becoming increasingly complex, requiring a rigorous approach to deployment, modification and configuration. This is where a declarative approach also shines, as adopted by Terraform, NixOps or Kubernetes, all requiring potentially complex generation of configuration.
> - Build systems: build systems (like Bazel) need a specification of the dependency graph.
## [[Reference]]
- <https://nickel-lang.org/>
- [user manual](https://nickel-lang.org/user-manual/)
- [1.0 announcement](https://www.tweag.io/blog/2023-05-17-nickel-1.0-release/) [[2023-05-17]]