Abstraction, not syntax
Alternative configuration formats solve superficial problems. Configuration languages solve the deeper problem: the need for abstraction.
Alternative configuration formats solve superficial problems. Configuration languages solve the deeper problem: the need for abstraction.
One of my longest running side projects is Musium, the music player I built for myself. In this post I explain why I built it, and I highlight some interesting parts of the process.
Configuration formats that humans can read and maintain, are hard for scripts to edit safely. With the new patch feature, RCL now has a principled way to enable safe, automated edits.
I revoked my former PGP/GPG key on July 29, 2025.
In this post I explore the design space of adding floats to RCL, a gradually typed configuration language. With floats in place, RCL is finally a true json superset.
Building connections with other people is what makes life fun. When humans communicate through LLM-written text, we lose that.
I am adding a type system to RCL, my configuration language. In part 4, we look at how the typechecker is implemented in Rust, and at how it is able to generate good error messages.
I am adding a type system to RCL, my configuration language. In part 2, I explain how the type system works. It is based on lattices and features a generalized subtype check.
I am adding a type system to RCL, my configuration language. The type system is based on ideas from other systems. In part 3, I highlight prior work, and I contrast RCL’s type system with that of other configuration languages.
I am adding a type system to RCL, my configuration language. In part 1, I explain what I want from the type system.
In this post I share resources for learning more about AI alignment, and why misalignment is a risk that I take seriously.
I was fed up with the poor opportunities for abstraction in configuration formats. The many configuration languages that exist already were not invented here, so I wrote my own, at first just for fun. But then it became useful.
When shuffling a playlist, a true shuffle is rarely what we want, because it might play the same artist twice in a row. In this post I introduce an algorithm that avoids this when possible.
As a data format, yaml is extremely complicated and it has many footguns. In this post I explain some of those pitfalls by means of an example, and I suggest a few simpler and safer yaml alternatives.
Using strong types, or putting units in names, is a small effort that can make a tremendous difference for code readability.