YINI — Modern Configuration Without the Noise

YINI is a modern, human-friendly configuration format that bridges the simplicity of INI with the expressive features of YAML. It offers a clear, structured syntax with nested sections, rich data types, and both line and block comments — making config files easy to read, write, and maintain.

💡 Why YINI?

INI is simple and familiar, but it lacks structure for complex data.
YAML offers rich features, though it can be harder to read and lint consistently.
JSON is precise and universal, but less concise for human editing.
YINI aims to balance these aspects — keeping readability while providing clear nesting and predictable behavior.
  • Familiar — learn it in minutes if you know INI
  • Structured — sections, arrays, objects, clear nesting
  • Predictable — fewer gotchas; strict/lenient modes available

⚡ TL;DR — Quick Start

Try YINI in three quick steps:

  • 1) Create a file

    Save the two lines below as config.yini:
    ^ App
    name = 'Hello'

    ⚠️ Make sure you save the file with the .yini extension (not .txt).

  • 2) Run this in your terminal

    From the same folder where you saved the file:

    npx yini-cli parse config.yini
  • 3) See the result

    This prints the following JavaScript object:

    { App: { name: 'Hello' } }
  • Bonus: Pretty-printed JSON output

    Use the --pretty flag, and run this line:

    npx yini-cli parse config.yini --pretty

    Which gives the following (JSON):

    {
        "App": {
            "name": "Hello"
        }
    }
    

📝 Example

YINI code:

^ App
  name = "My App"
  version = "1.2.3"
  pageSize = 25
  darkTheme = off

Parsed output (JS):

{
    "App": {
        "name": "My App",
        "version": "1.2.3",
        "pageSize": 25,
        "darkTheme": false
    }
}

🧩 Key Features

  1. Readable & familiar

    Plain-text config files built from simple key–value pairs (e.g. key = value) line by line, taking a lot of inspiration from classic INI.

  2. Structured hierarchy

    Uses section markers like ^ for nesting sections to create a clear hierarchy, without indentation sensitivity. For example: ^ App, ^^ Server, and ^^^ Logging.

  3. Rich data types

    Supports more than just strings: integers, floating-point numbers, booleans, arrays, and objects — including nested inline structures — making it more robust and versatile for different kinds of data.

  4. Comments

    Allows both inline comments (using // or #) and block comments (using /* ... */), which improves readability and makes it easy to explain settings directly in the file.

  5. Reduced syntax noise

    Aims for a cleaner look compared to many other formats by reducing “noise” like excessive brackets and quotes, and by avoiding long dotted key chains (such as server.database.advanced.timeout).

  6. Formally specified

    A formal, versioned specification and ANTLR grammar help keep implementations aligned and predictable.

  7. Free & open source

    YINI is free, open-source software that you can use and study.

ℹ️ About

YINI is a new configuration format, formalized in 2025. It's a structured configuration format designed for clarity, easy nesting, and strict validation.

The format's syntax and behavior are defined in the YINI Specification, currently at Version 1.0 — Candidate Release.

YINI was created and is maintained by Marko K. Seppänen as an open-source project under the YINI-lang organization.

The specification, tooling, and ecosystem are actively evolving toward the first stable release.

🛠️ Contribute & Get Involved

YINI is open-source and evolving. You can help by trying it, reporting issues, contributing code, or just ⭐ the project on GitHub.

🔭 Next steps

  • Get Started

    Learn how to install and use YINI from CLI.

  • Quick Tutorial

    5-minute guided walkthrough of YINI — the basics of the YINI format and how to validate it.

  • Specification

    Official YINI format rules — Full technical details of the YINI format.

  • FAQ

    Common questions answered.


Build & Release Status

Parser (Node.js) library: yini-parser npm version All Test Suites status
CLI tool: yini-cli npm version All Test Suites status