pkl
rcl
| pkl | rcl | |
|---|---|---|
| 20 | 28 | |
| 11,384 | 383 | |
| 0.5% | 2.3% | |
| 9.4 | 9.0 | |
| 7 days ago | 11 days ago | |
| Java | Rust | |
| Apache License 2.0 | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
pkl
- Pkl from Apple: configuration as code language with rich validation and tooling
-
Pkl Has a Free API — Apple's Configuration Language That Validates Before Deploy
Pkl solves the "bad config in production" problem:
-
MAML – a new configuration language (similar to JSON, YAML, and TOML)
The other deserving a mention is Pkl. Common denominator of being backed by a FAANG and having a lot of real world use.
https://github.com/apple/pkl
-
Configuration files are user interfaces
Apple has a similar project called Pkl which they use for their internal cloud configuration. http://pkl-lang.org/
It can be converted to JSON, yaml, and a bunch of other formats, and whilst it looks a bit like JSON it's actually a full blown functional programming language designed for creating config trees. The nice thing about Pkl is that it's got full IDE support and the standard library is patterned after Kotlin. So all the method names are very obvious and intuitive especially if you know Java or Kotlin. It has lots of features for validation like range types and so on, so you can get a lot of semantic checking before any config is emitted. It's the first config-as-language language I've seen that is actually good.
KSON looks more like an alternate syntax than a language, which is fine, but because JSON/YAML are just data structures sometimes you really want to do a for loop.
-
JSON5 – JSON for Humans
When I manage a project and have the freedom to choose my configuration structure, then I always use typescript. I never understood the desire to have configuration be in ini/json/jsonnet/yaml. A strongly typed configuration with code completion seems so much more robust. Except of course your usecase is to load or change the config via an API.
I like what apple is doing with https://pkl-lang.org/ though.
- New better alterative to XML, JSON and YAML
-
Thoughts on ThoughtWorks Radar 2024
I was first turned onto Pkl during my Dhall Trough of Disillusionment phase (Dhall is cool, but man is it hard) by James Ward. It looked to be a language that had enough types to compile YAML/JSON configuration files wayyyy more safely. I’ve had enough YAML/JSON misconfigurations break production, that I started looking into ways to compile those problems away, and Dhall helped a lot, but the learning curve and compiler errors are brutal to work through, and I never got excitement amongst peers. Hoping Pkl makes in-roads here.
-
HCL: Toolkit for Structured Configuration Languages
https://github.com/apple/pkl-go/blob/v0.6.0/.circleci/config... seems to imply it's "curl && chmod" so maybe you're thinking of developing pkl itself?
I happened to have a container that I am certain contains no Java and it fired right up
$ docker run -it --rm --entrypoint=/usr/bin/env public.ecr.aws/aws-cli/aws-cli:2.15.38 bash -c 'curl -fsSLO https://github.com/apple/pkl/releases/download/0.25.3/pkl-linux-aarch64; chmod a+x pkl-linux-aarch64; ./pkl-linux-aarch64 --help' -
Exploring Pkl: Apple's Fresh Approach to Configuration Languages
Pkl Official Documentation
-
Apple Pkl
Very cool!
You might want to consider also publishing a schema for it too, as a Pkl package. The package can simply be published as a GitHub release (see details in this post here: https://github.com/apple/pkl/discussions/85#discussioncommen...)
rcl
-
FracturedJson
RCL (https://github.com/ruuda/rcl) pretty-prints its output by default. Pipe to `rcl e` to pretty-print RCL (which has slightly lighter key-value syntax, good if you only want to inspect it), while `rcl je` produces json output.
It doesn’t align tables like FracturedJson, but it does format values on a single line where possible. The pretty printer is based on the classic A Prettier Printer by Philip Wadler; the algorithm is quite elegant. Any value will be formatted wide if it fits the target width, otherwise tall.
- The RCL Configuration Language
- Ask HN: What Are You Working On? (September 2025)
-
The YAML Document from Hell
The author of this article created RDL:
> RCL is a domain-specific language for generating configuration files and querying json documents. It extends json into a simple, gradually typed, functional programming language that resembles Python and Nix.
https://github.com/ruuda/rcl
https://rcl-lang.org
-
A Common Lisp jq replacement
If like me you can do basic queries in jq, but as soon as it gets slightly more complex (e.g. filter objects where some nested property that may not exist has a particular value), you wish you could do it with familiar Python/Rust/Javascript-like expressions and map/filter, try https://rcl-lang.org/#intuitive-json-queries.
-
The Pain That Is GitHub Actions
If you have to deal with tools that need to be configured with yaml, give https://rcl-lang.org/ a try! It can be "coded" to avoid duplication, with real variables, functions, and loops. It can show you the result that it evaluates to. It can do debug tracing, and it has a built-in build command to generate files like GitHub Actions workflows from an RCL file.
-
cue VS rcl - a user suggested alternative
2 projects | 15 Mar 2025
Cue and RCL are both json supersets, though in very different ways. Cue is based on graph unification, while RCL is a more traditional functional language. Both are typed, though the type systems are very different. Like RCL, Cue can be used to query json documents, but in RCL this is a first-class feature with similar ergonomics to jq.
-
jsonnet VS rcl - a user suggested alternative
2 projects | 15 Mar 2025
Jsonnet is quite similar to RCL: both are json supersets that add variables and functions in similar ways. Jsonnet is dynamically typed, while RCL features an optional gradual type system. Where Jsonnet draws inspiration from Go, RCL draws inspiration from Python and Rust.
-
nickel VS rcl - a user suggested alternative
2 projects | 15 Mar 2025
Like Nickel, RCL is a gradually typed functional configuration language. Where Nickel has Haskell-like syntax, RCL has C/Rust/Javascript-like syntax with inspiration from Python.
-
dhall VS rcl - a user suggested alternative
2 projects | 15 Mar 2025
What are some alternatives?
hcl - HCL is the HashiCorp configuration language.
wadec - A WebAssembly binary format decoder / parser
bcl - Basic Configuration Language
jaq - A jq clone focussed on correctness, speed, and simplicity
jsonnet - Jsonnet - The data templating language
Ptah.sh - Self-hosted alternative to Heroku