frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Open in hackernews

Things I don't like in configuration languages

https://medv.io/blog/things-i-dont-like-in-configuration-languages
45•birdculture•10h ago

Comments

theamk•2h ago
Very interesting (and opinionated) overview of the existing configuration languages.

At the very bottom, author is presenting its own language (maml.dev). It is yet another JSON with comments, multiline strings, and optional commas. It's the most boring part of the page.

skrebbel•1h ago
A good configuration syntax isn’t supposed to be exciting.
XorNot•1h ago
No but you'd have to do a lot of work to convince me it's really any better then basic YAML (yaml without going nuts with anchors and indirection).
cespare•1h ago
Personally, I like configuration languages that don't let you "go nuts" in the first place.
padjo•1h ago
My problem with YAML is that even when you try to keep it simple it tries its best to trip you up with some obscure feature you never wanted to deal with
tempest_•1h ago
The Kubernetes ecosystem has made me hate YAML so much. Maybe I am just not using the tooling correctly but anchors all over the place, templating, etc.

I have yet to see a solution to that type of thing though as every config language exists on a spectrum of syntax to full blown programing language.

sunrunner•1h ago
There's a direct correlation between how exciting and fun a configuration syntax looks and how much you'll despise it after a year of having to deal with the fallout of those 'exciting features'.

Speaking of which, Pkl looks absolutely fascinating, I might have to check that out...

theamk•43m ago
agreed, but then even some third-party project is too exciting.

My choice is "whatever is available in the standard library" - which used to be INI, JSON or YAML. But with python 3.11 there is also TOML, which is nice...

skrebbel•1h ago
I don't like this article all that much but I do like the MAML format the author wrote this to promote. It seems like it’s everything that’s good about JSON, plus everything fixed for human writing, and nothing more.

Hats off, wish my package.json and build.yml were package.maml and build.maml.

dim13•1h ago
To be honest, all I see is https://xkcd.com/927/

All config formats are bad. You either don't need all the features at all, except key:value. Or you quickly run into weird limitations and quirks.

What I rather like instead, are custom build english-like DSL's, like:

- https://man.openbsd.org/pf.conf - https://man.openbsd.org/smtpd.conf - https://man.openbsd.org/httpd.conf - … and many more

seanw444•1h ago
OpenBSD's daemons' configs are pleasant. But then you have to maintain a DSL for even small projects. Most people aren't going to want to implement and maintain a whole one-off config language for their small project. Which is why having a common, minimal option is nice.
eduction•1h ago
Shallow. Especially “ The era of XML is in the past… now it's dead.”

That’s not an argument against the merits of XML, it’s just a fashion declaration.

It’s also wrong. Podcasting boils down to XML files. It even heavily uses XML’s extension mechanism. XML is the basis for RSS and Atom. XML is the basis for LibreOffice and modern Microsoft Office files. XML is at the core of the epub digital book standard. And on and on.

XML may not be ideal for config (reasonable people can disagree on the topic) but it’s not dead.

It’s also interesting that he declares JSON “won” then adds a bunch of XML features to it like ordered entries and not having to quote element/attribute names.

JSON “won” for web apis - e.g. browser-server data interchange. It is not, and was never claimed to be, good for serial documents like config, or for when you need an extensible format (the “X” in XML). It’s fine for what it is, and so is XML, which, when it “won”, was similarly overused, like for web apis.

c-hendricks•1h ago
Are those examples using XML because it was the style at the time though?
m463•1h ago
I like json

I kind of wish it had two and only two features: defined ordering, and comments

As to languages for configuration (specifically), I wish there was a good specification for a program config, where you would have one well-defined configuration file for defaults, and a user-specified configuration file for the values you have set/overriden.

say default.config:

  {"player_name":"player", "mouse_speed":5}
and my.config:

  {"player_name":"me"}
in some way that upgrading the program could do stuff with default.config without destroying your existing config.
joombaga•1h ago
That's a pretty common config pattern. SublimeText does that, and when you edit the settings it opens a 2 paned editor with the default config on the left and user config on the right.
stray•1h ago
So, yaml with squiggles. Roger roger.
unfunco•1h ago
JSON sans commas, but with extra strings.
ngruhn•1h ago
name-of-config-language

meh.

kccqzy•1h ago
Just some opinions with no serious arguments. Okay XML is in the past but so what? There are still use cases for it. And Pkl/CUE/Dhall/Starlark looking like full-blown programming languages is a feature, but being deliberately weaker than say TypeScript is also a feature (no arbitrary I/O, in some cases no Turing completeness). I don’t think the author understands or appreciates why.
q3k•1h ago
> Well, this is some sort of programming language with dynamic types. But there are so many good programming languages, so I don't know why this one needs to be used.

RE: Jsonnet and others: because it has nice guarantees, like lack of arbitrary I/O and pure execution.

See: https://sre.google/workbook/configuration-specifics/#pitfall...

tikhonj•1h ago
In the world of human-readable data formats (ie not programming languages), the best one I ever used was Jane Street's sexplib[1] s-expression format.

It was concise and expressive. There was a direct way to describe variants (types with multiple constructors), which is always awkward in JSON, but the format was still surprisingly low-noise for reading and editing by hand. I remember you could even use it as a lightweight markup format:

    (here is some text with (em formatting) information)
(The format leaves the interpretation of things like (em ...) up to you; you could use it as a slightly more verbose Markdown, but you could also use it to structure readable text with other sorts of metadata instead.)

And, unlike certain other formats I won't name, it has comments!

It also helps that Emacs with Paredit makes editing s-expressions flow. The tool doesn't need to know anything about the sexplib format specifically; just relying on basic s-expression structure gives us fluid but simple structural editing.

I am constantly sad that nobody else uses this sort of format, and I have to deal with a mixture of JSON, YAML, TOML and other ad-hoc formats instead.

[1]: https://github.com/janestreet/sexplib

rdtsc•1h ago
Agree, sexp is quite nice. That was my favorite before json came around. Not that I like json particularly, it just ate the world so it's easier to go along with it.
dist-epoch•1h ago
I think this proposed format is terrible. Almost like JSON, but not quite, so both humans and LLMs will be confused by it, and forget the rules.
curious_curios•1h ago
I've actually been getting a lot of mileage out of textproto: https://protobuf.dev/reference/protobuf/textformat-spec/

Well typed, simple syntax. Maps are annoying though.

bjackman•1h ago
I agree on this in general. The awkward things here are that:

a) textprotos aren't really touted by the protobuf folks as a thing to use outside Google. I'm not 100% sure why this is.

b) inside Google, there's a perception that you shouldn't use textprotos for much other than hardcoding proto values inside the monorepo (where there aren't really schema-versioning concerns). I think this perception is misplaced, you just have to be aware that a given schema is used in textprotos. Which is usually an easy thing to be aware of. This is just because the schema-versioning concerns are different than with binary photos (e.g. field renames are now breaking).

c) IIRC most parsers unconditionally reject unknown fields. I think the reason for this is highlighted in the docs: you can't safely go from a textproto with an unknown field to a binary serialisation of that proto. IIRC there are some parsers that let you parse unknown fields anyway but then I think you're a bit more tied to a specific implementation than you'd like...

One strange but quite handy alternative is actually the JSON representation. You can use .proto files as a schema but then serialise the values to JSON as there's a canonical mapping. Then you get something that's human readable but with the type safety of protos. Although of course it's not really writable since... It's JSON.

spprashant•1h ago
I agree that YAML has its issues. But saying it's bad because it has too many features seems misguided. Do those advanced features get in the way of using a simple YAML file? At least not in my experience.

That being said TOML would be my choice.

larkost•35m ago
Yes, the features in YAML absolutely get in the way. The "Norway problem" for example ("no" translates to "False" in versions prior to YAML 1.2), but that is just the one more people ran into. Here is a nice overview of some of the problems:

https://ruudvanasseldonk.com/2023/01/11/the-yaml-document-fr...

I would argue that most, if not all, of those problems stem from too many features.

sunrunner•1h ago
No mention of The Configuration Complexity Clock [1] which I always think deserves a link, but credit to the author for actually keeping it slim and readable over (IMHO) most of the newer additions to the landscape which either declare themselves as 'obvious' and aren't or just add features such as Pkl's extends keyword, moving us further round the complexity clock.

Of course just adding multiline strings is the start of the rabbit hole, now you need to think about leading line breaks, trailing line breaks, intermediate line breaks, whitespace chomping, and- oh heavens I've reinvented YAML, I think I need to lie down.

[1] https://mikehadlow.blogspot.com/2012/05/configuration-comple...

Terr_•1h ago
One kinda-exception I'd like to raise: Cases where you'd like to use the regular proper programming language from the very beginning, but there are trust issues, and there's no good/reliable sandboxing option.

For example, B2B stuff where every customer has their own idiosyncratic sets of rules for if-this-then-that, which change at a different cadence than your releases.

In those cases, it's less that configuration slowly becomes too complex and evolves into code, and more that code is wanted from the get-go but configuration is the compromise.

sunrunner•51m ago
> every customer has their own idiosyncratic sets of rules for if-this-then-that

So Varnish Configuration Language? It's definitely an awkward case that doesn't seem to fit neatly into the landscape.

causal•43m ago
Thanks for this - it expresses something I've felt for a while. Solve too hard and you end up back at midnight.
sunrunner•19m ago
I'm sure there's no relation to The Doomsday Clock.
wry_discontent•1h ago

    Here will be a list of ... things I don't like about them.
I did not see a list of things not to like. Just a set of vague thoughtless complaints.
throw0101c•1h ago
What is the name of the style found in (e.g.) ISC BIND9:

* https://www.zytrax.com/books/dns/ch6/#master

* https://bind9.readthedocs.io/en/latest/manpages.html#named-c...

ISC-style? (E/A)BNF-ish?

Personally I like (a) the open/close braces for better stanza navigation, (b) all statements/lines ending with semicolon.

(Something similar was used in (now-EOL) ISC DCHPd, and they've moved to "extended JSON" for their new DHCP server, KEA.)

jmpeax•1h ago
Middle Aged Man Language - too many braces.
rdtsc•1h ago
There is also .ini, it's simpler than toml, though has more inconsistent implementations and formats. But the '[[table]]' is just '[table]' and I like the '[table.subtable]' syntax better.

But since we're criticizing formats ;-) maml https://maml.dev is fairly good good.

* I like multiline blocks and comment style

* I do not like optional commas, either require them or not. I'd lean toward requiring them.

* Not sure about ordered object keys. How should languages represent that, a map/dict kind of a data structure won't work it would have to be an ordered dict/list of kvs etc. Two objects {"a":"x", "b":"y"} and {"b":"y", "a":"x"} will be different then. I get the idea, but I am leaning toward not liking it by the time I finished typing all that.

* I like booleans and null. Good for not having ons and offs those are just annoying.

repsilat•1h ago
I wonder if "the right solution" is a programming language that is fast, concise, trivially easy to run, and outputs some efficient binary format like protobuf.

Programming languages have comments and control flow, multiple popular implementations, and can have nice literals. Lack of Turing completeness is actually not a terribly useful feature if you trust the input (and you should probably just use protobufs or similar for untrusted inputs in that case.)

derriz•9m ago
> Programming languages have . . . control flow

I do not want control flow of any kind in my configuration file. Nor do I want expressions or any kind of evaluation.

Greppability is a must-have feature for me. As is simplicity - I don’t want to have to deal with internalizing interpreter mechanics, rules for precedence, variable scope, etc just to figure out what config values my program is going to be provided with.

Any time I’ve been forced to work with a system which used a general or restricted programming language to express configuration, it’s been a nightmare.

simonkagedal•1h ago
The author seems to be using "markup language" as a concept basically synonymous with a configuration language, or something that is not a programming language. A markup language is a language used to "mark up" text with formatting and structure. This may sound like a terminology nitpick, but I would argue the reason why for example XML is not a great configuration language is that it was designed to be something else – a markup language.
bunderbunder•40m ago
I think the author is probably aligning with "is" rather than "ought". So a language made this list if it IS being used as a configuration format, regardless of whether it OUGHT to be used as one.

Which is a way of deciding that makes sense given that I think the purpose of this article is "use my language instead". Getting lost in the weeds about each language's original design intent would bloat the article without meaningfully contributing to their thesis.

shiandow•49m ago
If you want to use JSON as a configuration language, why keep the top level braces and indentation?
scubbo•40m ago
I didn't see any indication in the article, or a glance at the spec, that indentation is significant.
0dayz•32m ago
Personally I have embraced using sqlite as my configuration infrastructure, as the more I've used configuration formats, the more I've felt they are glorified databases.
pphysch•32m ago
The perfect configuration system would be able to support any number of parameters, enforce arbitrary validation rules, be searchable, provide metadata, examples, descriptions for each parameter, provide an audit log of who/why something was changed, support rollbacks, and so on.

The problem is that folks want a flat human readable file format to solve all these problems. That's a pipe dream.

JSON and CSV are pretty close to "syntactically optimal" in terms of losslessly storing nested and tabular data, respectively, in a human readable format. We ought to just stick with those and think about how to design effective configuration systems on top of them.

praptak•27m ago
Jsonnet solves a different problem though.

Need to configure 5 services with hundreds of replicas in 7 data centers? Some values depend on the service, some on the data center and some on the combination thereof? Maybe also overrides for a bunch of problemstic machines?

And you also want a manageable config language which doesn't turn into a full blown Turing tar pit?

Then jsonnet is for you.

So it's not entirely fair to compare it in the "pleasant syntax" contest. It's like putting a Unimog into a ranking of city cars.

jeberle•26m ago
I've often wondered if PostScript or PDF contained the roots of a very good config language. Perhaps it simply is (PDF docs at least) but nobody regards it as such.

My guess is the RPN nature would be a no-go for many people. Nevertheless: comments, dicts, arrays, good string syntax, numerics, binary data, etc. Maybe that makes it too complicated.

hendry•25m ago
What about bash? https://wiki.archlinux.org/title/PKGBUILD
Mikhail_Edoshin•24m ago
A configuration language for what? What kind of configurations?

Compiling Ruby to Machine Language

https://patshaughnessy.net/2025/11/17/compiling-ruby-to-machine-language
50•todsacerdoti•1h ago•1 comments

Show HN: I built a synth for my daughter

https://bitsnpieces.dev/posts/a-synth-for-my-daughter/
787•random_moonwalk•5d ago•149 comments

Show HN: PrinceJS – 19,200 req/s Bun framework in 2.8 kB (built by a 13yo)

https://princejs.vercel.app
52•lilprince1218•1h ago•20 comments

"One Student One Chip" Course Homepage

https://ysyx.oscc.cc/docs/en/
41•camel-cdr•5d ago•9 comments

Project Gemini

https://geminiprotocol.net/
149•andsoitis•5h ago•87 comments

My stages of learning to be a socially normal person

https://sashachapin.substack.com/p/my-six-stages-of-learning-to-be-a
166•eatitraw•2d ago•66 comments

FreeMDU: Open-source Miele appliance diagnostic tools

https://github.com/medusalix/FreeMDU
202•Medusalix•7h ago•49 comments

Show HN: ESPectre – Motion detection based on Wi-Fi spectre analysis

https://github.com/francescopace/espectre
52•francescopace•6h ago•7 comments

An official atlas of North Korea

https://www.cartographerstale.com/p/an-official-atlas-of-north-korea
124•speckx•3h ago•68 comments

WeatherNext 2: Our most advanced weather forecasting model

https://blog.google/technology/google-deepmind/weathernext-2/
128•meetpateltech•6h ago•50 comments

Israeli-founded app preloaded on Samsung phones is attracting controversy

https://www.sammobile.com/news/israeli-app-app-cloud-samsung-phones-controversy/
236•croes•4h ago•151 comments

Show HN: Continuous Claude – run Claude Code in a loop

https://github.com/AnandChowdhary/continuous-claude
29•anandchowdhary•2d ago•12 comments

Our dogs' diversity can be traced back to the Stone Age

https://www.bbc.com/news/articles/ce9d7j89ykro
19•1659447091•3d ago•6 comments

Insects on the Space Menu

https://www.esa.int/Science_Exploration/Human_and_Robotic_Exploration/Insects_on_the_space_menu
5•ohjeez•5d ago•0 comments

Aldous Huxley predicts Adderall and champions alternative therapies

https://angadh.com/inkhaven-7
22•surprisetalk•6h ago•7 comments

Astrophotographer snaps skydiver falling in front of the sun

https://www.iflscience.com/the-fall-of-icarus-you-have-never-seen-an-astrophotography-picture-lik...
123•doener•1d ago•27 comments

How to escape the Linux networking stack

https://blog.cloudflare.com/so-long-and-thanks-for-all-the-fish-how-to-escape-the-linux-networkin...
56•meysamazad•5h ago•5 comments

How when AWS was down, we were not

https://authress.io/knowledge-base/articles/2025/11/01/how-we-prevent-aws-downtime-impacts
46•mooreds•4h ago•23 comments

Giving C a superpower: custom header file (safe_c.h)

https://hwisnu.bearblog.dev/giving-c-a-superpower-custom-header-file-safe_ch/
215•mithcs•10h ago•172 comments

EEG-based neurofeedback in athletes and non-athletes

https://www.mdpi.com/2306-5354/12/11/1202
17•PaulHoule•3h ago•2 comments

A graph explorer of the Epstein emails

https://epstein-doc-explorer-1.onrender.com/
130•cratermoon•2d ago•16 comments

The time has finally come for geothermal energy

https://www.newyorker.com/magazine/2025/11/24/why-the-time-has-finally-come-for-geothermal-energy
61•riordan•7h ago•118 comments

Show HN: Building WebSocket in Apache Iggy with Io_uring and Completion Based IO

https://iggy.apache.org/blogs/2025/11/17/websocket-io-uring/
13•spetz•3h ago•2 comments

Where do the children play?

https://unpublishablepapers.substack.com/p/where-do-the-children-play
254•casca•1d ago•200 comments

DESI's Dizzying Results

https://www.universetoday.com/articles/desis-dizzying-results
14•belter•3h ago•2 comments

Google is killing the open web, part 2

https://wok.oblomov.eu/tecnologia/google-killing-open-web-2/
284•akagusu•5h ago•234 comments

Are you stuck in movie logic?

https://usefulfictions.substack.com/p/are-you-stuck-in-movie-logic
131•eatitraw•9h ago•117 comments

Replicate is joining Cloudflare

https://replicate.com/blog/replicate-cloudflare
239•bfirsh•7h ago•54 comments

People are using iPad OS features on their iPhones

https://idevicecentral.com/ios-customization/how-to-enable-ipad-features-like-multitasking-stage-...
96•K0IN•18h ago•110 comments

An overly aggressive mock can work fine, but break much later

https://nedbatchelder.com/blog/202511/why_your_mock_breaks_later.html
50•ingve•22h ago•51 comments