Command-line tool for working with YINI configuration files. Validate, inspect, and convert to JSON with pretty output.
YINI aims to be a human-friendly config format: like INI, but with type-safe values, nested sections, comments, minimal syntax noise, and optional strict mode.
- YINI is an alternative to other great config formats like INI, JSON, YAML, XML, and TOML — designed for clarity, simplicity, and straightforward section nesting.
 - Started as a personal project and a research challenge: Provides structure similar to INI, with features inspired by JSON and YAML.
 - Built for clarity:
- Uses concise syntax designed for clarity, especially in nested sections.
 - Supports commonly used configuration structures.
 
 - *Developed to meet practical needs, driven by curiosity and a desire for configuration clarity, simplicity, minimalism, and flexibility.
 
⭐ Enjoying yini-cli? If you like this project, star it on GitHub — it helps a lot, thank you!
YINI CLI requires Node.js v20 or later.
(It has also been tested with Node.js v13+, but v20+ is recommended for best compatibility.)
- INI-inspired — with added support for typing, comments, and nested sections.
 - Uses minimal syntax — yet aims to keep maximum clarity.
 - Section nesting without requiring indentation or dot-delimited keys.
 - Supports strict and lenient modes, and all major data types.
 - Designed for compatibility with both manual editing and automation.
 - 👉 See how YINI differs from JSON, YAML, INI, and TOML.
 - Want the full syntax reference? See the YINI Specification.
 
YINI code looks like this:
    // This is a comment in YINI
    // YINI is a simple, human-readable configuration file format.
    // Note: In YINI, spaces and tabs don't change meaning - indentation is just
    // for readability.
    /*  This is a block comment
        In YINI, section headers use repeated characters "^" at the start to
        show their level: (Section header names are case-sensitive.)
        ^ SectionLevel1
        ^^ SectionLevel2
        ^^^ SectionLevel3
    */
    ^ App                      // Definition of section (group) "App" 
      name     = 'My Title'    // Keys and values are written as key = value
      items    = 25
      darkMode = true          // "ON" and "YES" works too
        // Sub-section of the "App" section
        ^^ Special
           primaryColor = #336699   // Hex number format
           isCaching    = false     // "OFF" and "NO" works too
The above YINI converted to a JS object:
{
    App: {
        name: 'My Title',
        items: 25,
        darkMode: true,
        Special: { 
            primaryColor: 3368601,
            isCaching: false
        }
    }
}In JSON:
{
   "App":{
      "name":"My Title",
      "items":25,
      "darkMode":true,
      "Special":{
         "primaryColor":3368601,
         "isCaching":false
      }
   }
}That's it!
YINI is a simple and readable configuration format. Sections are defined with ^ SectionName, and values are assigned using key = value. The format supports common data types (same as those found in JSON), including strings, numbers, booleans, nulls, and lists.
To learn more, see the Getting Started: Intro to YINI Config Format tutorial.
- 
Install it globally from npm — (requires Node.js)
Open your terminal and run:npm install -g yini-cli - 
Verify installation
Run this in your terminal:yini --version
Should print the version (e.g., 1.0.0).
Then you may try:
yini --help
Should show you the CLI help for YINI.
 - 
Test functionality
Create a simple test file, for example:config.yini:^ App name = "My App Title" version = "1.2.3" pageSize = 25 darkTheme = offThen run:
yini parse config.yini
Expected result, your CLI should output a parsed version of the config and output something similar to:
{ App: { name: 'My App Title', version: '1.2.3', pageSize: 25, darkTheme: false } }
 
Usage: yini [options] [command]
CLI for parsing and validating YINI config files.
Options:
  -v, --version              Output the version number.
  -i, --info                 Show extended information (details, links, etc.).
  -s, --strict               Enable strict parsing mode.
  -f, --force                Continue parsing even if errors occur.
  -q, --quiet                Reduce output (show only errors).
  --silent                   Suppress all output (even errors, exit code only).
  -h, --help                 Display help for command.
Commands:
  parse [options] <file>     Parse a YINI file (*.yini) and print the result.
  validate [options] <file>  Checks if the file can be parsed as valid YINI.
  info                       Deprecated: Use `yini --info` or `yini -i` instead.
  help [command]             Display help for command.
Examples:
  $ yini parse config.yini
  $ yini validate --strict config.yini
  $ yini parse config.yini --pretty --output out.json
For help with a specific command, use -h or --help. For example:
  $ yini validate --helpThe parse command supports multiple output styles:
| Command Example | Output Style | Description | 
|---|---|---|
yini parse config.yini | 
JS-style object | Uses Node’s util.inspect — human-readable, shows types, nesting, etc. | 
yini parse config.yini --pretty | 
Pretty JSON | Formatted and indented with JSON.stringify(obj, null, 4). | 
yini parse config.yini --json | 
Compact JSON | Compact and machine-friendly JSON.stringify(obj). | 
yini parse config.yini --output out.txt | 
File (JS-style) | Default style, written to specified file. | 
yini parse config.yini --pretty --output out.json | 
File (Pretty JSON) | Formatted JSON written to file. | 
💡 Tip: You can combine --output with any style flag to control both formatting and destination.
Areas of planned and possible future expansion:
- Improve existing commands — Continued functionality improvements, better diagnostics, and expanded QA for 
parseandvalidateand their options. - Command 
format: Pretty-print or normalize a.yinifile. - Command 
lint: Stricter stylistic checks (likevalidate, but opinionated). - Command 
diff: Compare two YINI files and show structural/config differences. - Command 
convert: Convert aJSONorXMLfile into YINI format. 
- 
➡️ Getting Started: Intro to YINI Config Format
Beginner-friendly walkthrough and basic usage examples. - 
➡️ YINI Parser on npm
Install and view package details. - 
➡️ Read the YINI Specification
Full formal spec for the YINI format, including syntax and features. - 
➡️ YINI Parser on GitHub
TypeScript source code, issue tracker, and contributing guide. - 
➡️ YINI vs Other Formats
How does YINI differ: comparison with INI, YAML, and JSON. - 
➡️ Why YINI? (Project Rationale)
Learn about the motivations and design decisions behind YINI. - 
➡️ YINI Project
YINI home. 
This project is licensed under the Apache-2.0 license - see the LICENSE file for details.
In this project on GitHub, the libs directory contains third party software and each is licensed under its own license which is described in its own license file under the respective directory under libs.
~ YINI ≡ • https://yini-lang.org