XML is better than YAML

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • SurveyJS - Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • config

    configuration library for JVM languages using HOCON files

  • This is one of the few HN discussions where I feel a little bit qualified to give an opinion :)

    Two years ago I started a small data quality checker software where users could define their alerts, frequencies,.. all in config files instead of modifying code.

    I started with JSON as config format, but then realised comments are necessary to guide users in defining alerts. I moved to YAML, but after some "indentation incodents" started using HOCON conf [0] and never looked back. I don't see any reason for choosing YAML over one of JSON or HOCON, except being forced to. Features such as inheritance and text block support which were essential for me are nicely supported in HOCON.

    [0] https://github.com/lightbend/config/blob/main/HOCON.md

  • json5

    JSON5 — JSON for Humans

  • I believe that's JSON5.

    https://github.com/json5/json5

    It's my preferred configuration file format, it fixes all the problems I have with JSON (trailing commas, comments) without turning it into a mess full of gotchas like YAML.

  • SurveyJS

    Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App. With SurveyJS form UI libraries, you can build and style forms in a fully-integrated drag & drop form builder, render them in your JS app, and store form submission data in any backend, inc. PHP, ASP.NET Core, and Node.js.

    SurveyJS logo
  • npm

  • The fact that JSON doesn't support comments is so annoying, and I always thought that Douglas Crockford's rationale for this basically made no sense ("They can be misused!" - like, so what, nearly anything can be misused. So without support for comments e.g. in package.json files I have to do even worse hacky workaround bullshit like "__some_field_comment": "this is my comment"). There is of course jsonc and JSON5 but the fact that it's not supported everywhere means 10 years later we still can't write comments in package.json (there is https://github.com/npm/npm/issues/4482 and about a million related issues).

  • LGV_MeetingServer

    An aggregation server for meeting list servers.

  • I find “self-documentation” often doesn’t actually work. It’s great in theory, but often falls down, in practice.

    I often need to preface my config stuff with fairly substantial comment blocks that discuss the reasoning behind the configuration.

    Here’s an example: https://github.com/LittleGreenViper/LGV_MeetingServer/blob/m...

  • uplaybook

    A python-centric IT automation system.

  • Agreed, I do a lot of Ansible, and it took me a while up front, but I've become pretty accustomed to YAML. Though I still struggle with completely groking some of the syntax. But, I recently took a more serious look at TOML and felt like it'd be a bear for Ansible.

    A few months ago I made a "mini ansible / cookie cutter" ( https://github.com/linsomniac/uplaybook ), and it uses YAML syntax. I made a few modifications to Ansible syntax, largely around conditionals and loops. For YAML, I guess I like the syntax, but I've been feeling like there's got to be a better way.

    I kind of want a shell syntax, but with the ansible command semantics (declarative, --check / --diff, notify) and the templating and encryption of arguments / files.

  • json-schema-spec

    The JSON Schema specification

  • ron

    Rusty Object Notation

  • Whenever this kind of arguments come up, I am sad that RON (https://github.com/ron-rs/ron) is not better known. To me it feels like a cleaner and better JSON.

    In any case, my little experience with it had made me hate YAML. Generally speaking, I have come to dislike any language with significant whitespace other than Haskell.

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • yaml-sucks

    YAML sucks.

  • strictyaml

    Type-safe YAML parser and validator.

  • NestedText already is the way I use YAML; everything is intepreted as a string. I have some trust in my YAML parser to not mangle most strings. I could use NestedText, but users would be unfamiliar with it, and IIRC the only parsers are in Python. But then I could use StrictYaml too https://github.com/crdoconnor/strictyaml

  • keep

    The open-source alert management and AIOps platform (by keephq)

  • hey! would be cool to chat about what you've build. we are currently building Keep (https://github.com/keephq/keep) where you can define alerts as YAML's. would be cool to learn from you.

  • github-workflows-kt

    Authoring GitHub Actions workflows in Kotlin. You won't go back to YAML!

  • We use Kotlin to generate the yaml for our github actions: https://github.com/typesafegithub/github-workflows-kt

    Nothing like a good old type safe compiled language to cut down on the verbosity, copy paste usage, silly syntax errors, weird undocumented you just have to know the magical incantations, etc. Kotlin or similar languages are the way to go. Much safer, more compact, easier to cut down on the copy paste reuse (which is just miserable drudgery), easy to introduce some sane abstractions where that makes sense. You get auto completion. And if it compiles, it's likely to just work.

    People keep on moving around the deck chairs on the proverbial Titanic when it comes to configuration languages. Substituting yaml for json or toml just moves the problems. And substituting those with XML just introduces other issues and only marginally improves things. Well formed xml is nice. But so is well formed json. Schemas help, if the urls don't 404 and you have tools that can actually do something with them. Which, as it turns out is mostly not a thing in practice. And without that, it's just repetitive bloat. XML with schemas becomes very hard to read quickly.

    There's a reason, people started ignoring XML once json became popular: json does most of the essential stuff well enough that XML just isn't worth the effort. And if you have something where you'd actually need the complexity of XML, it's likely to be some really ugly bloated kind of thing where the last thing you'd want to do is edit it manually.

    I've dealt with cloudformation in XML form at some point in my life. It sucks. Not just a little bit. It's an absolute piss poor format for a thing like that. Since such a thing was lacking at the time, we ended up actually building our own little tools to generate that xml. Hand editing it was just too painful. One mistake could corrupt your entire stack. And it takes ages to find out if you actually got it right. In Json form it's hardly any better. It's just one of those convoluted over-engineered things. Anyway, Json support for cloudformation was not there at the time and the difference is like asking whether you'd preferred to be shot or stabbed. It's going to suck either way.

  • Visual Studio Code

    Visual Studio Code

  • Actually no, it’s something called jsonc.

    It’s proprietary (?)

    https://github.com/microsoft/vscode/issues/100688

  • clojure-style-guide

    A community coding style guide for the Clojure programming language

  • Fixed link to that style guide entry: https://guide.clojure.style/#opt-commas-in-map-literals

    Per that style guide, the above map would be formatted like this (on HN, just indent by two spaces):

      {:a 1

  • gron

    Make JSON greppable!

  • nix-configs

    My Nix{OS} configuration files (by thiagokokada)

  • Sorry, didn't see this comment. It is here: https://github.com/thiagokokada/nix-configs

    In the `actions` directory is all the Nix files. There is some glue code in `lib/flakes` to generate the YAML files from Nix.

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts