YINI β Readable like INI. Structured like JSON. No indentation surprises.
If you find YINI interesting, consider β starring it on GitHub β
YINI is a human-friendly, INI-inspired text-based configuration format for software projects: readable like INI, structured like JSON, without YAML's surprises. It offers clear nesting, comments, and predictable parsing, so your configuration stays easy to read and reason about as it grows. Suitable for configuration files, application settings, and general data storage.
Example of YINI code:
Source file: config.yini
How YINI is used in practice
Use YINI wherever you need structured configuration β without the usual complexity.
-
π Validate and convert YINI files from the command line with
the YINI CLI tool.
It can export parsed data as JSON, YAML, XML, or JavaScript.
- π¦ Load YINI directly in TypeScript/JavaScript applications with the YINI Parser for TypeScript.
- π Load YINI directly in Python scripts, tools, and applications with the YINI Parser for Python.
- π§© Use YINI for configuration files, data files, tooling, and CI workflows.
π The YINI Ecosystem
A high-level overview of the main YINI specification, tooling, implementation, and adoption pieces.
| π§ Core | π Implementation | π Adoption |
|---|---|---|
| β Language Specification (RC) | | |
| β Parsing Rules (Lenient & Strict) (RC) | β TypeScript Parser (Primary) | |
| β Formal Grammar (ANTLR) (RC) | β CLI Tool (Parse & Convert YINI) | β Homepage & Docs |
| | β Editor Syntax Highlighting Grammar (VS Code / TextMate) | β Cheat Sheet (Quick Syntax Guide) |
| | β YINI Test Suite / Parser Compatibility Tests | β Example Projects |
| | β Python Parser (Alpha) | |
Who is YINI for?
YINI configuration files are a good fit for:
- Human-edited configuration files and internal tooling where you control the stack.
- Developers who want readable, structured configuration without relying on indentation-sensitive syntax.
- Teams that want comments, useful data types, and nested sections without JSON workarounds or flat INI-style sections.
- Projects that benefit from predictable parsing in tools, CI, and application configuration.
YINI is early-stage: tooling is growing, community is small β However the specification is in release-candidate state, and the official parsers, CLI, and test suite are suitable to try in projects where you control the stack.
Real YINI configuration used by this site
This site uses site-config.yini as a real YINI configuration
file in the yini-homepage repository.
During the build workflow, yini-cli converts it to JSON:
npx yini-cli parse site-config.yini --output src/config/site-config.json
This generates src/config/site-config.json, which is
read by
config.ts and used by this Astro site.
Repository: github.com/YINI-lang/yini-homepage
π Example
YINI code:
Source file: settings.yini
Parsed output (JSON):
{
"Settings": {
"serviceId": "NebulaService",
"release": "3.2.1",
"debugMode": false,
"tagline": ""Nebula" is a cloud of gas and dust in outer space.",
"Network": {
"bindAddress": "127.0.0.1",
"bindPort": 8080,
"allowedOrigins": [
"https://myapp.com",
"http://localhost:3000"
]
},
"Capabilities": {
"enableSearch": true,
"experimental": [
"new-ui",
"streaming-api"
],
"pools": {
"min_units": 2,
"max_units": 5,
"size_mb": 128,
"timeout_sec": 90
}
},
"DB Config": {
"host": "db.internal",
"ssl": true,
"Security": {
"username": "service_user",
"password": "****"
}
}
}
} New to YINI? Read a short learn the YINI format.
βοΈ How YINI compares to other config formats
This is a high-level comparison focused on configuration-file use cases.
YINI supports both lenient and strict parsing modes, depending on how much enforcement you need. Lenient mode is the default.
| Feature | YINI (lenient) | YINI (strict) | INI | JSON | YAML | TOML |
|---|---|---|---|---|---|---|
| Human readability by default | β | β | β | β | β | β |
| Readability at scale | β | β | β | β | β | β |
| Predictable parsing | β | β | β | β | β | β |
| Formal specification / grammar | β | β | β | β | β | β |
| Nested sections / structured data | β | β | β | β | β | β |
| Nested structure without dotted keys or indentation rules (*) | β | β | β | β | β | β |
| Comments | β | β | β | β | β | β |
| Syntax overhead | β | β | β | β | β | β |
| Configuration-oriented design | β | β | β | β | β | β |
| Diagnostic clarity | β | β | β | β | β | β |
| Tolerance for incomplete or hand-edited input | β | β | β | β | β | β |
| Strength of structural validation | β | β | β | β | β | β |
| Suitability for larger configurations | β | β | β | β | β | β |
| Industry familiarity | Low | Low | Very strong | Very strong | Very strong | Moderate |
| Native tooling availability | Limited / growing | Limited / growing | Moderate | Very strong | Very strong | Strong |
| Ecosystem maturity | Limited / growing | Limited / growing | Mature but fragmented | Very strong | Very strong | Strong |
Lenient = flexibility & convenience Β· Strict = safety & predictability
β Strong support Β· β Partial / debated Β· β Poor or not supported
*) YINI keeps hierarchy visible through nested sections while remaining indentation-insensitive and predictable.
About
The format is defined by a formal, versioned specification and maintained as an open-source project under the YINI-lang organization on GitHub.
Contribute & Get Involved
YINI is open-source and actively maintained. You can get involved by trying it, reporting issues, contributing code, or starring the project on GitHub.
π Next steps
- Get Started
Learn how to install and parse your first config in minutes.
- Quick Tutorial
5-minute guided walkthrough of the YINI format and validation basics.
- Code Examples
Real-world YINI examples showing common configuration patterns.
- FAQ
Common questions about using YINI in real projects.
- Specification
Official YINI format rules with full technical details of the YINI format.
