YINI Cheat Sheet
Based on the official YINI Specification (v1.0 Release Candidate 6)
A quick reference for writing clean, readable YINI configuration files.
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
| Element | YINI 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) |
| Number | 42, 3.14, -10, 1e4 |
| Boolean | true, false, on, off, yes, no (case-insensitive) |
| Null | null, 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 type | Example | Meaning |
|---|---|---|
| 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-string | C"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 string | C"""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"..."orc'...'only when you need escape sequences like\nor\t. -
key = valueassigns a single value. -
Lists are assigned with
=and square brackets, for exampleitems = ["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_000Meaning: same as
10000000, but easier to read.^^^_^^^_^^^ DeepSettingsMeaning: 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:
| Format | Example |
|---|---|
| Integer | 42, -42β 01 (leading zero not allowed)β 1β 0 |
| Float | 3.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, 0z2EX9Digits: 0β9, A or X = 10, B or E = 11 (case-insensitive)π‘ 0z10 equals decimal 12. |
| Digit separators | 1_000, 0x_FF_AA_00, 0b_1010_1100, hex:FF_AA_00Underscores 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.
UseC"..."orc'...'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 Code Examples
Explore real-world configurations. - β‘οΈ Get YINI Tools
CLI, parser libraries, and editor tools.
