# The RCL Configuration Language
[RCL][org] is a domain-specific language for specifying human-written data
with just enough abstraction features to avoid repetition. It is a superset
of JSON that extends it into a simple functional programming
language that resembles [Python][python] and [Nix][nix]. Use cases include:
* Querying JSON documents, like [`jq`][jq], but with a more
familiar language.
* Generating repetitive configuration files, such as GitHub Actions workflows
or Terraform configuration.
* Sharing configuration between tools that do not natively share data. For
example, import the same user account definitions into Terraform, Tailscale,
Kubernetes, and Ansible.
RCL can be used through [the `rcl` command-line tool][rcl] that can export
documents to JSON, YAML, TOML, and [other
formats][output]. It can also be used through [a native Python module][pythonm],
with an interface similar to the `json` module.
[org]: https://rcl-lang.org/
[jq]: https://jqlang.github.io/jq/manual/
[nix]: https://nixos.org/manual/nix/stable/language/
[output]: rcl_evaluate.md#-f-format-format
[python]: https://www.python.org/
[pythonm]: python_bindings.md
[rcl]: rcl.md
## Example
```rcl
// Configuration that defines cloud storage buckets for storing backups of two
// databases, "alpha" and "bravo", at three different frequencies. This schema
// is for a hypothetical infrastructure-as-code tool. See the tutorial for more
// details.
{
backup_buckets = [
let retention_days = { hourly = 4, daily = 30, monthly = 365 };
for database in ["alpha", "bravo"]:
for period, days in retention_days:
{
name = f"{database}-{period}",
region = "eu-west",
lifecycle_policy = { delete_after_seconds = days * 24 * 3600 },
}
],
}
```
For an interactive demo in your browser, see .
## Status
RCL is usable and useful, well-tested, and well-documented. It is still pre-1.0,
though backwards-incompatible changes have been rare in the past years. Syntax
highlighting is available for major editors like Vim, Emacs, Helix, and Zed.
RCL is a community project without commercial support.
## License
RCL is free/libre software, licensed under the [Apache 2.0][apache2] license.
The project is developed in the open and the source code is available on
[GitHub][github] and [Codeberg][codeberg].
[apache2]: https://www.apache.org/licenses/LICENSE-2.0
[github]: https://github.com/ruuda/rcl
[codeberg]: https://codeberg.org/ruuda/rcl