SOML – A Config Format for Humans

(github.com)

26 points | by microflash 1 hour ago

10 comments

  • priomsrb 3 minutes ago
    Looks nice!

    It would be great if you had a simple website that allowed you to enter SOML and see the JSON side-by-side (similar to typescript playground https://www.typescriptlang.org/play/).

  • lightandlight 32 minutes ago
    Ironically the project seems LLM-generated.

    I don't want to read Claude's interpretation of why your project matters. I want you to tell me directly.

  • james_marks 23 minutes ago
    From the title, I thought this was a specification for configuring humans. I don't quite know what that means, and I'm disappointed still not to know.
  • CodesInChaos 50 minutes ago
    What I'm missing:

    1. The readme doesn't make it clear what its "float" type is. A double, a decimal, implementation defined. I'm generally not a fan of restricting numbers to what a double can represent, like toml does.

    2. It doesn't have a good way to model key-value pair like types such as tagged unions, polymorphic types, or function invocations. Simply allowing a key-value pair as a value (right associative) where the key is a string matching the keys of an object would fix this. Alternatively a function call syntax would fix this, which would also enable tuples as a concept distinct from arrays.

    • bjacobso 11 minutes ago
      The tagged-union / function-call point is where I keep ending up too. Once a config needs “one of these shapes” or “this thing with these arguments”, data formats grow conventions on top (type: keys, YAML !tags, $ref), and every consumer reimplements them.

      I’ve been building Forma (https://forma-lang.com), a small typed Lisp aimed at that zone. Everything is (head args...), so a tagged value and a call are the same syntax, and you declare the vocabulary yourself:

        (job nightly-export
          :schedule "0 3 * * *"
          :retry (backoff :max 5))
      
      job and backoff are forms you define with typed holes. The checker reports errors at the line you wrote, even after macro expansion. The output is plain JSON (or generated Effect TypeScript, but could target any language), so the app reading it doesn’t embed the language.
  • jll29 57 minutes ago
    Looks like Windows *.ini format except ":" instead of "="...
    • CodesInChaos 48 minutes ago
      Not really. INI has a fixed structure (section>key>value) and its values are untyped.
  • petre 6 minutes ago
    We already have TOML and it's great. I can seamlessly upgrade from ini to toml.
  • drvd 52 minutes ago
    So a stripped down variant of cue? Why not use cue directly?
    • brianm 41 minutes ago
      Cue only really exists in go, and has a dependency chain to make maven weep.

      I think cue is better thought of as a language you use to generate JSON (or yaml, or, let's be honest, k8s flavored yaml) configs rather than a config language you use in your app.

  • esafak 58 minutes ago
    Can you add README sections for the schema and supported types?
  • paulddraper 1 hour ago
    > Top-level arrays. A TOML file is always a table, so a list of records needs a wrapper key.

    I'm curious for example configs that are top-level lists?

  • arionmiles 55 minutes ago
    See also: HUML [1]

    1: https://huml.io/