YINI Cheat Sheet

Based on the official YINI Specification (v1.0 Release Candidate 6)

A quick reference for writing clean, readable YINI configuration files.

Want to test a snippet while reading? Open the YINI Playground.

YINI makes data files (such as configuration files and application settings) easy for humans to read and predictable for machines to process — like INI, but with real structure, lists (arrays), objects, and comments.

More structured than INI, less noisy than JSON, and less fragile than YAML.


🧱 Basic Syntax

ElementYINI Syntax
Section heading: level 1^ App
Section heading: level 2^^ Database
Section heading: level 3^^^ Pool
Section marker separator^^^_^^^_^^^ DeepSection
_ may visually separate repeated section markers and does not count toward section depth.
String"text", 'text', "C:\Users\Robin"
👉 Strings are raw by default — \ and \n are treated as normal text
👉 Use C"..." or c'...' for escape sequences like \n, \t, \\ (escapes are transformed during parse time)
Number42, 3.14, -10, 1e4
Booleantrue, false, on, off, yes, no (case-insensitive)
Nullnull, Null, (or blank in lenient mode)
List / Array[1, 2, 3]
Inline object (map/dict){ a: 1, b: 2 }
Comment// Default comment
Alt. comment# Comment
#Comment
# starts a comment outside string literals.
Multi-line (block) comment/* comment */

/*
Multi-line
comment
*/
Full-line comment; This is a full-line comment (only full lines)
Disable line--debug = true

📝 Naming Rules

  • Simple section names and keys should use normal identifier-like names.
  • Use backticks for spaces, punctuation, special characters, or reserved-looking names:
^ `My App`
`api-key` = "abc123"
`user.name` = "Alex"

💡 Style Convention (Optional)

  • Section names typically start with a capital letter, like: Title.
  • Keys typically start with a lowercase letter, like: key.

This is a readability convention — not a requirement.



🔤 String Types

YINI strings are quoted and are raw by default.

String typeExampleMeaning
Raw string"C:\Users\Robin"Default string type. Backslashes are treated as normal characters.
Single-quoted raw string'hello'Same raw behavior, using single quotes.
Classic string / C-stringC"hello\nworld"Escape sequences such as \n, \t, and \\ are interpreted.
Triple-quoted raw string"""multi-line text"""Multi-line raw string. Escapes are not interpreted.
C-triple-quoted stringC"""line 1\nline 2"""Multi-line string with escape sequences interpreted.

Use normal raw strings for most values. Use C"..." or C"""...""" only when you need escape sequences.


🧩 Inline Objects & Nested Data

Objects are also called maps or dictionaries in many languages.

Simple object

db = { host: "localhost", port: 5432 }

Nested objects

service = {
    http: { port: 8080, secure: true },
    limits: { rpm: 1000 }
}

🧭 Important Rules

  • Indentation is cosmetic — structure is defined by section markers (^, ^^, ^^^, etc.).

  • Repeated section markers are supported up to level 9. For deeper nesting, use numeric shorthand such as ^10 DeepSection.

  • Strings must be quoted using '...' or "...".

  • Strings are raw by default. Use C"..." or c'...' only when you need escape sequences like \n or \t.

  • key = value assigns a single value.

  • Lists are assigned with = and square brackets, for example items = ["one", "two"].

  • Trailing commas are allowed in lists and objects (lenient mode).

  • Duplicate keys are disallowed by default.

  • # starts a comment outside string literals.

  • _ may be used as a visual separator in number literals and repeated section markers. It improves readability and does not change the value or section depth.

    maxUploadSize = 10_000_000

    Meaning: same as 10000000, but easier to read.

    ^^^_^^^_^^^ DeepSettings

    Meaning: same section depth (9 in this case) as ^^^^^^^^^ DeepSettings; the _ separators are only visual and do not count as section markers.


🔢 Number Formats

YINI supports multiple numeric formats:

FormatExample
Integer42, -42

01 (leading zero not allowed)
1
0
Float3.14, -3.14

3,14
0.14
Scientific (base-10)1e6, 5.2E-3
Hexadecimal (base-16)0xFFAA00, 0X3fa, hex:FFAA00

#FFAA00# starts a comment, not a hex number.
0xffaa00
hex:ffaa00
Binary (base-2)0b101010
Octal (base-8)0o755
Duodecimal (base-12)0z2BA9, 0z2EX9

Digits: 0–9, A or X = 10, B or E = 11 (case-insensitive)
💡 0z10 equals decimal 12.
Digit separators1_000, 0x_FF_AA_00, 0b_1010_1100, hex:FF_AA_00

Underscores are for readability and do not change the numeric value.

All numeric forms are parsed as real numbers — no quotes required.


🧪 Example 1 — Minimal Real-World

^ App
name = "Nebula"
version = "2.3.1"

^^ Network
ports = [80, 443]
ssl = true   // boolean (case-insensitive)

^^ `Rate Limits`
requests = { perMinute: 1200, burst: 60 }
timeout = null

🧪 Example 2 — Practical Config with Comments

# Optional YINI marker
@yini

^ Service
name = 'Aurora'                 # Single quotes
message = C"Server started\nReady."   # C-string with newline escape
path = 'E:\Program Files\App'   # Backslashes are raw (no escaping needed)
enabled = Off                   # Boolean (case-insensitive)
retries = 3

    ^^ Database
    host = 'localhost'
    port = 5432
    color = 0x336699            # Hex number literal

    ; This is a full-line comment (for humans)
    --password = 'secret'       # Disabled line (ignored by parser)

        ^^^ Limits
        maxUsers = 1000
        timeout =               # Blank value → null (lenient mode)

💡 Strings:
Regular strings are raw by default.
Use C"..." or c'...' only when escape sequences are needed.

💡 Note:
Lines prefixed with -- are disabled configuration lines.
They behave like comments (the parser ignores them), but are intended to temporarily disable real configuration — not to serve as documentation.

In editors, they are typically highlighted differently from normal comments to indicate “disabled code” rather than explanatory text.


Next steps

  • ➡️ YINI Examples

    Explore practical configurations using the syntax.

  • ➡️ Get YINI Tools

    Find the CLI, parsers, and editor tooling.