Skip to main content

Main SYNX site: https://synx.aperturesyndicate.com/

Built for AI and humans by APERTURESyndicate.

Frozen reference (3.6) + additions (3.7)

As of April 2026, SYNX 3.6 is frozen as the canonical interoperability baseline: the normative definition is docs/spec/SYNX-3.6-NORMATIVE.md, and the reference implementation is synx-core 3.6.x checked by tests/conformance/. PATCH releases may only restore that contract (bugs, spec alignment); new surface syntax stays additive and arrives in new normative version files. Full policy: docs/spec/CORE-FREEZE.md.

SYNX 3.7 (docs/spec/SYNX-3.7-NORMATIVE.md) is the first additive revision. It introduces a single new construct — |+, an indent-preserving multiline opener — and inherits every other rule from 3.6 verbatim. A 3.6 parser remains conformant for any document that does not use a 3.7-only construct.

3.7.0 (2026-07-30) — two additions.

  1. |+, an indent-preserving multiline opener. Required when embedding indent-sensitive content (code, SYNX examples, AI-prompt scaffolds) inside a SYNX value; plain | still trims each continuation line. Implemented in every parser shipped from this repo (Rust core, JS/TS, C++, Dart, .NET, Go, Java, Swift, plus all FFI bindings into the Rust core).
  2. SYNXL (.synxl), a new record-stream format for datasets — the SYNX-native counterpart of JSONL and CSV. Own version axis, own normative spec: docs/spec/SYNXL-1-NORMATIVE.md. See SYNXL — record streams below.

See CHANGELOG.md.

3.6.3 (2026-05-19) — cross-implementation parity hot-fix release plus a structural shift: C++, Dart, Go, Java, Swift, and a new Godot/GDScript engine now ship as native parsers under parsers/ (and integrations/godot/synx-gdscript/); the old bindings/{cpp,go,swift} FFI wrappers are retired in favour of these from-scratch implementations. The release also closes 17 cross-parser divergences uncovered by a code-review pass — three of them security-relevant (Go :include symlink jail bypass, .NET Secret leaking to JSON, .NET missing __proto__ filter). See CHANGELOG.md.


Documentation and repo map


SYNXL — record streams (.synxl)

New in 3.7.0. SYNXL ("SYNX Lines") is a separate format on its own version axis — the SYNX-native counterpart of JSONL and CSV. A document declares its fields once, then carries records; each record projects to a JSON object and the whole document to a JSON array. Normative definition: docs/spec/SYNXL-1-NORMATIVE.md (format version 1, embedding SYNX 3.7 for block fields).

A SYNXL document is not a SYNX document — its root is a sequence of records rather than an object — so Synx.parse will not read one. Use the SYNXL entry points below.

!synxl 1
!fields id[type:int, required] ; score[type:float] ; messages[block]

1 ; 0.91
  messages
    - role system
      content You are a helpful assistant.
    - role user
      content |+
          def f(x):
              return x + 1

2 ; 0.74
  messages
    - role user
      content Привет

[{"id":1,"messages":[{"content":"You are a helpful assistant.","role":"system"},{"content":"def f(x):\n return x + 1","role":"user"}],"score":0.91}, …]

  • Inline fields are ;-delimited and positional; an empty part is null, "" is the empty string — the ambiguity CSV never resolved.
  • A [block] field takes its value from the record's indented block, parsed by the ordinary SYNX 3.7 parser — so nesting, lists and |+ all work there, and long text stays readable instead of \n-escaped.
  • Directives are disabled inside a block, so an untrusted dataset row can never become an !include file-read primitive.
  • A new !fields line mid-file replaces the schema for records after it: datasets stay append-safe across schema evolution.
  • Malformed structure is reported as a diagnostic, never dropped silently — a dataset that quietly loses a column is worse than one that fails loudly.

Reading it from code

// Rust — synx-core
use std::fs::File;
use std::io::BufReader;
use synx_core::synxl::{self, SynxlStreamReader};

// Whole document in memory
let doc = synxl::parse_lines(&std::fs::read_to_string("chat.synxl")?)?;
println!("version {}, {} records", doc.version, doc.len());

let first = doc.records[0].as_object().unwrap();   // records are Value::Object
println!("{:?}", first.get("id"));                 // Some(Int(1))
println!("{}", doc.to_json());                     // canonical JSON array (§12.1)
println!("{}", doc.to_ndjson());                   // one object per line (§12.2)
for d in &doc.diagnostics { eprintln!("{d}"); }    // §11.2 — never dropped silently

// Streaming off disk — live memory is one record, whatever the file size
for record in SynxlStreamReader::new(BufReader::new(File::open("chat.synxl")?))? {
    let record = record?;                          // Err ends the document (§11.1)
    let obj = record.value.as_object().unwrap();   // + record.index / .line / .diagnostics
    println!("{:?}", obj.get("id"));
}

// Writing (§14) — quoting and block promotion are automatic
let text = synxl::write_lines(
    &[synxl::FieldDecl::new("id"), synxl::FieldDecl::new_block("messages")],
    &doc.records,
)?;

// Opt-in constraint checking (§8.4, off by default)
let checked = synxl::parse_lines_with(&src, &synxl::SynxlOptions { validate: true })?;
// TypeScript / JavaScript — @aperturesyndicate/synx-format
import { Synx } from '@aperturesyndicate/synx-format';

const doc = Synx.parseSynxl(text);
doc.version;                     // 1
doc.records[0].values.id;        // 1
doc.records[0].values.messages;  // [{ role: 'system', content: '…' }, …]
doc.diagnostics;                 // SynxlDiagnostic[] — §11.2

Synx.synxlToJSON(text);          // canonical JSON array (§12.1)
Synx.synxlToNDJSON(text);        // one object per line (§12.2)

// Streaming — sync over text, async over a file or a chunk stream
for (const record of Synx.streamSynxl(text)) console.log(record.values.id);
for await (const record of Synx.streamSynxlFile('chat.synxl')) console.log(record.values.id);

// From disk
const fromDisk = Synx.loadSynxlSync('chat.synxl');   // or: await Synx.loadSynxl('chat.synxl')

// Writing (§14) and opt-in validation (§8.4)
Synx.writeSynxl([{ id: 1, messages: [{ role: 'user', content: 'Hi' }] }]);
Synx.parseSynxl(text, { validate: true }).diagnostics;
# Python — synx_native
import synx_native as synx

doc = synx.synxl_parse(text)
doc.version                      # 1
len(doc)                         # 2
doc.records[0]["id"]             # 1 — records are plain dicts
doc.records[0]["messages"]       # [{'role': 'system', 'content': '…'}, …]
doc.diagnostics                  # list of dicts — §11.2
doc.to_json(); doc.to_ndjson()   # §12.1 / §12.2

doc = synx.synxl_load("chat.synxl")

# Streaming — one record in memory at a time
for record in synx.synxl_stream(text): ...
for record in synx.synxl_stream_file("chat.synxl"): ...

# The *_records variants yield SynxlRecord objects instead of bare dicts
for record in synx.synxl_stream_records(text):
    print(record.index, record.line, record["id"], record.diagnostics)

# Writing (§14) and opt-in validation (§8.4); hard errors raise synx.SynxlError
synx.synxl_write(records, fields=["id", {"name": "messages", "block": True}])
synx.synxl_parse(text, validate=True).diagnostics
# CLI — every input is streamed, so memory stays at one record
synx synxl parse chat.synxl                    # canonical JSON array (§12.1)
synx synxl parse chat.synxl --format ndjson    # one object per line (§12.2)
synx synxl validate chat.synxl --strict        # exit 0 ok · 1 spec violation · 2 I/O failure
synx synxl convert chat.synxl --to jsonl       # also: --to csv --block-json
synx synxl convert data.jsonl --to synxl       # jsonl→synxl and csv→synxl too
synx synxl split chat.synxl -n 10000 --output-dir shards/

Implementation status

Surface SYNX 3.7 (incl. |+) SYNXL 1
Rust core (synx-core), CLI (synx synxl)
TypeScript (@aperturesyndicate/synx-format)
Python (synx_native)
C++, Dart, .NET, Go, Java, Swift (parsers/), Godot/GDScript ❌ not yet
Node native, WASM, C FFI, Kotlin, Mojo (bindings/) ❌ not yet

SYNXL is currently implemented in Rust, TypeScript, Python, and the CLI. The native parsers under parsers/ read SYNX 3.7 — including |+ — but do not read .synxl.


See it in action

Writing data — clean and simple

Just key, space, value. No quotes, no commas, no braces:

!active Mode

Add !active on the first line and your config comes alive — with logic built right into the format:


Features

This extension provides complete SYNX v3.6 language support for Visual Studio Code:

Feature Description
Syntax Highlighting Keys, values, markers, constraints, comments, types, template placeholders, colors
IntelliSense Autocomplete for 28 markers, 7 constraints, type casts, template keys, alias keys
Hover Info Documentation on markers, constraints, !active, key types and values
Diagnostics Real-time validation: tabs, indentation, duplicate keys, unknown markers, broken refs
Go to Definition Ctrl+Click on :alias, :template {ref}, :calc variable names, :include file paths
Find References Find all usages of any key across :alias, :template, :calc
Document Outline Full symbol tree in the Outline panel and breadcrumbs
Formatting Normalize indentation (2 spaces), trim whitespace, fix tabs
Color Preview Inline color swatches for #hex values (3/4/6/8-digit)
Inlay Hints Computed :calc results shown inline as = 500
Live Preview Side panel with real-time parsed JSON output
Convert SYNX → JSON and JSON → SYNX conversion commands
Freeze Resolve all !active markers into a static .synx
Context Menus Right-click on .synx / .json files in Explorer or Editor

Commands

Command Shortcut Description
SYNX: Convert to JSON Ctrl+Shift+P → type Parse .synx → save .json alongside it
SYNX: Convert JSON → SYNX Ctrl+Shift+P → type Parse .json → save .synx alongside it
SYNX: Freeze Ctrl+Shift+P → type Resolve all markers → save .static.synx
SYNX: Preview Ctrl+Shift+P → type Open live side panel with parsed JSON

All commands also available via right-click context menu on .synx and .json files.


CLI (Rust)

A single native binary for all platforms, built on synx-core:

# Install from source
cargo install --path crates/synx-cli

# Parse → JSON
synx parse config.synx

# Validate (exit 1 on errors)
synx validate config.synx --strict

# Convert JSON → SYNX
synx convert data.json --format synx

# Parse !tool call
synx tool call.synx

# Compile / decompile binary .synxb
synx compile config.synx
synx decompile config.synxb

# Structural diff
synx diff old.synx new.synx

# Query by dot-path (supports array indices)
synx query server.host config.synx

# Canonical formatting
synx format config.synx --write

# SYNXL datasets (.synxl) — streamed, memory stays at one record
synx synxl parse chat.synxl --format ndjson
synx synxl validate chat.synxl --strict
synx synxl convert chat.synxl --to jsonl
synx synxl split chat.synxl -n 10000 --output-dir shards/

Language Server (LSP)

synx-lsp is a standalone Language Server that speaks LSP over stdio, built on tower-lsp-server + synx-core. One binary serves every editor:

Editor Setup
Neovim vim.lsp.start({ cmd = { "synx-lsp" }, filetypes = { "synx" } })
Helix Add to languages.toml: [language-server.synx-lsp] command = "synx-lsp"
Zed Settings → Language Servers → add synx-lsp binary path
Emacs (lsp-register-client (make-lsp-client :new-connection (lsp-stdio-connection '("synx-lsp"))))
JetBrains Settings → Languages & Frameworks → LSP → add synx-lsp

Capabilities: real-time diagnostics (15 checks), completion (markers, constraints, directives), document symbols (outline tree).

cargo install --path crates/synx-lsp

Full editor matrix: crates/synx-lsp/README.md.


Claude & MCP

Use docs/anthropic/claude.md to connect Claude Desktop (or any MCP client) to integrations/mcp/synx-mcp — validate / parse / format .synx from the agent without guessing syntax.


GitHub Action

Validate .synx files in CI:

- uses: ./.github/actions/synx
  with:
    files: 'config/**/*.synx'
    strict: true

See .github/actions/synx/action.yml for all inputs.


Tree-sitter

Syntax highlighting for Neovim, Helix, Zed, Emacs — and future GitHub code rendering:

cd tree-sitter-synx
npm install && npx tree-sitter generate

See tree-sitter-synx/README.md. Queries live in tree-sitter-synx/queries/ (highlights.scm, folds.scm).


Fuzzing

Three cargo-fuzz targets exercise the parser, binary codec, and formatter:

cd crates/synx-core
cargo +nightly fuzz run fuzz_parse -- -max_total_time=60

In practice we’ve run fuzz_parse at scale (≈ 50M executions across a large corpus); the parser/engine held up after fixing a single root-cause formatting panic.

See crates/synx-core/fuzz/README.md and the checked-in coverage report at crates/synx-core/fuzz/coverage/fuzz_parse/html/.


Architecture (VS Code extension)

Source: integrations/vscode/synx-vscode/. The extension is zero-dependency — no external runtime, no native modules. Everything runs as pure TypeScript inside VS Code:

integrations/vscode/synx-vscode/src/
├── extension.ts      # Entry point — registers all providers
├── parser.ts         # AST-like parser with position info (SynxNode, ParsedDoc)
├── diagnostics.ts    # 15 diagnostic checks with severity levels
├── completion.ts     # IntelliSense (12 markers, 7 constraints, types, hover)
├── navigation.ts     # Document symbols, Go to Definition, Find References
├── formatter.ts      # Formatting provider (2-space indent, trim)
├── commands.ts       # Convert, Freeze, Preview commands
├── colors.ts         # Color provider (#hex inline swatches)
└── inlay-hints.ts    # Inlay hints for :calc results

Diagnostics

The extension validates your .synx files in real time:

Check Severity Description
Tab characters Error SYNX uses spaces, not tabs
Odd indentation Warning Indentation should be a multiple of 2
Invalid key start Error Keys cannot start with -, #, /, !
Duplicate keys Warning Same key at the same indent level
Unknown type cast Error Only int, float, bool, string allowed
Unknown marker Warning Not one of the 28 known markers
Markers without !active Info Markers only work in active mode
:alias broken ref Error Referenced key doesn't exist
:calc unknown var Warning Variable in expression not defined
:include file missing Error Included file not found
:template missing key Warning {placeholder} key not found
Constraints without !active Info Constraints only work in active mode
Unknown constraint Warning Not one of the 7 known constraints
min/max non-numeric Error Min/max values must be numbers
enum invalid value Error Value not in allowed list

Performance

SYNX v3.6 uses a unified Rust core with native bindings. Real benchmark results on a 110-key config (2.5 KB):

Rust (criterion, direct)

Benchmark Time
Synx::parse (110 keys) ~39 µs
parse_to_json (110 keys) ~42 µs
Synx::parse (4 keys) ~1.2 µs

Node.js (50K iterations)

Parser µs/parse
JSON.parse (3.3 KB) 6.08 µs
synx-js pure TS 39.20 µs
js-yaml (2.5 KB) 82.85 µs
synx-native parseToJson 86.29 µs
synx-native parse 186.84 µs

Python (10K iterations)

Parser µs/parse
json.loads (3.3 KB) 13.04 µs
synx_native.parse (2.5 KB) 55.44 µs
yaml.safe_load (2.5 KB) 3,698 µs

SYNX parses 67× faster than YAML in Python. In Node.js, the pure TS parser matches Rust direct speed at ~39 µs.

LLM SYNX Format Compatibility

How well different LLM models understand and work with SYNX format:

Parsing & Generation Tests

We benchmark how well LLMs can:

  • Parse: Read SYNX format and convert to JSON
  • Generate: Create SYNX from English descriptions

Test corpus now has 250 total cases:

  • 125 parsing tests (SYNX -> JSON)
  • 125 generation tests (Description -> SYNX)

What is inside the test texts:

  • Parsing texts include simple key-value pairs, nested blocks (2-4 levels), arrays, mixed scalar types, null values, comments (//, /* */), strings with spaces, and configuration-like documents (service/database/deployment shapes).
  • Generation prompts include practical tasks: app/service configs, ports, replicas, regions, booleans, arrays of features, and nested objects with explicit required fields.
  • Many cases are near-duplicates with controlled value changes (names, numbers, ports, regions) to test consistency instead of single-shot luck.
  • Expected outputs are checked structurally: exact JSON equality for parsing tests and required token/key presence for generation tests.

Example compatibility snapshot (illustrative):

gemini-2.0-flash
→ Parsing      ████████████████████  100.0% (125/125)
→ Generation   ████████████████████  100.0% (125/125)

claude-opus
  Parsing      ███████████████████░   96.0% (120/125)
  Generation   ██████████████████░░   88.0% (110/125)

claude-sonnet
  Parsing      ██████████████████░░   90.4% (113/125)
  Generation   ████████████████████  100.0% (125/125)

gemini-1.5-pro
  Parsing      ███████████████████░   96.0% (120/125)
  Generation   ██████████████████░░   88.0% (110/125)

gpt-4o
  Parsing      ██████████████████░░   90.4% (113/125)
  Generation   ██████████████████░░   88.0% (110/125)

claude-haiku-4-5
  Parsing      ████████████████░░░░   80.0% (100/125)
  Generation   ███████████████░░░░░   76.0% (95/125)

Failed Test Analysis (Typical LLM Errors)

Analysis of failed cases (usually the remaining 4-12%) shows that errors are mostly caused by cross-format habits from YAML/JSON/TOML, not by SYNX complexity itself.

  1. Syntactic Interference Problem: the model hallucinates : after keys and adds unnecessary quotes in YAML/JSON style. Example: server host localhost becomes server: host: "localhost".

  2. Indentation Flattening Problem: nested SYNX blocks are flattened into one level, which breaks the structure. Example: database -> connection -> port is emitted as sibling top-level keys.

  3. Array Shape Drift Problem: arrays are rewritten using another format (- item, JSON-like lists with quotes/commas, or mixed syntax).

  4. Type Coercion Bias Problem: true, 42, 3.14, and ~ are sometimes interpreted as strings instead of bool/number/null depending on prompt wording.

  5. Marker/Template Normalization Problem: SYNX-specific constructs are "normalized" into familiar syntax and lose their intended semantics.

  6. Over-Helpful Rewriting Problem: the model adds wrappers, comments, and readability edits that fail strict structural validation.

Run Your Own Benchmarks

Test any LLM against SYNX format. See benchmarks/llm-tests/README.md for details:

cd benchmarks/llm-tests
pip install -r requirements.txt

# Set your API keys (one time setup)
export ANTHROPIC_API_KEY=your_key
export GOOGLE_API_KEY=your_key
export OPENAI_API_KEY=your_key

# Run full benchmark suite
python llm_benchmark.py

# Format and pretty-print results
python format_results.py llm_results.json

See benchmarks/llm-tests/GUIDE.md for advanced options and detailed results interpretation.

Install (v3.7)

One-line installs (published names):

npm install @aperturesyndicate/synx-format
pip install synx-format
cargo add synx-core    # or: cargo add synx-format
cargo install synx-cli --locked   # CLI binary: synx

# C# / .NET 8 — NuGet (package ID is not Synx.Core; that ID is taken on nuget.org)
dotnet add package APERTURESyndicate.Synx
# Browse: https://www.nuget.org/packages/APERTURESyndicate.Synx

Until APERTURESyndicate.Synx appears on nuget.org, consume the library from this repo: dotnet add reference parsers/dotnet/src/Synx.Core/Synx.Core.csproj, or dotnet pack parsers/dotnet/src/Synx.Core/Synx.Core.csproj -c Release -o artifacts/nuget and add artifacts/nuget as a local feed. Details: parsers/dotnet/README.md.

Maintainer: publish C# to NuGet

dotnet pack parsers/dotnet/src/Synx.Core/Synx.Core.csproj -c Release -o artifacts/nuget then dotnet nuget push "artifacts/nuget/APERTURESyndicate.Synx.*.nupkg" -k "$env:NUGET_API_KEY" -s https://api.nuget.org/v3/index.json --skip-duplicate. Clear stale *.nupkg in artifacts/nuget before pack; push only APERTURESyndicate.Synx.*.nupkg.

Ready to git push or ship?

API Parity (v3.7)

Unified API surface across runtimes. Since 3.6.3, C++, Dart, Go, Java, and Swift ship as native from-scratch parsers under parsers/ (no synx-c / libsynx runtime dependency); bindings/ is reserved for surfaces that still need to call into the Rust engine via FFI/WASM.

Native parsers — parsers/ and crates/

Implementation parse parse_active parse_tool stringify format compile decompile diff Notes
Rust core (synx-core) Canonical reference; full Options
CLI (synx) synx parse, synx diff, synx query, …
JavaScript / TypeScript (packages/synx-js) Pure TypeScript — npm @aperturesyndicate/synx-format
C++17 (parsers/cpp) CMake project; synx_tests.exe 42 / 42
Dart 3 (parsers/dart) Pure Dart; dart test 37 / 37
C# / .NET 8 (parsers/dotnet) ✅ (ToJson) NuGet APERTURESyndicate.Synx
Go (parsers/go) Pure Go (no cgo); go test ./... clean
Java 17 (parsers/java) Maven com.aperturesyndicate:synx
Swift 5 (parsers/swift) SwiftPM Synx, no FFI
GDScript / Godot 4 (integrations/godot/synx-gdscript) Pure GDScript editor plugin; ships as a Godot addon

FFI / bridge bindings — bindings/

Binding parse parse_active parse_tool stringify format compile decompile diff Notes
Python (synx_native, bindings/python) PyO3 over synx-core
Node native (bindings/node) N-API; pure TS lives in packages/synx-js
WebAssembly (bindings/wasm) Browser/edge target of the Rust engine
C FFI (bindings/c-header) Reference C ABI (synx.h)
Kotlin/JVM (bindings/kotlin) JNA over synx-c; JVM users on Java can use parsers/java directly
Mojo (bindings/mojo) Wraps CPython synx_native; experimental

Behavior notes:

  • The tables above cover the SYNX API. SYNXL (.synxl) is a separate surface, currently implemented only in synx-core, the CLI, packages/synx-js, and bindings/python — see Implementation status.
  • Browser WASM runs without host filesystem/env integration by default.
  • C FFI, Kotlin/JVM (JNA), and WASM stringify use JSON strings at the boundary for stable cross-language interop.
  • This table documents API compatibility only; it does not change parser performance characteristics.

Quick SYNX Syntax Reference

Basic (always works)

# Key-value pairs (first space separates key from value)
name John
age 25
phrase I love programming!

# Nesting (2-space indent)
server
  host 0.0.0.0
# Lists
inventory
  - Sword
  - Shield

# Type casting
zip_code(string) 90210
# Multiline text — `|` joins lines, trimming each one
description |
  This is a long text
  that spans multiple lines.

# Multiline text — `|+` keeps indentation relative to the first line (3.7)
prompt |+
  Outline:
    - step one
    - step two
  End.

# Comments
# hash comment
// slash comment

Markers (require !active)

!active

port:env PORT
port:env:default:8080 PORT
boss_hp:calc base_hp * 5
greeting:random
  - Hello!
  - Welcome!
loot:random 70 20 10
  - common
  - rare
  - legendary
support_email:alias admin_email
api_key:secret sk-1234567890
tags:unique
  - action
  - rpg
  - action
database:include ./db.synx
theme:default dark
greeting:template Hello, {first_name} {last_name}!
colors:split red, green, blue
csv:join
  - a
  - b
  - c
currency:geo
  - US USD
  - EU EUR
prompt_block:prompt:AppConfig
  app_name MyCoolApp
  version 2.1.0
ref_value:ref:calc:*2 base_rate
label:i18n
  en Hello
  ru Привет
volume:clamp:0:100 150
price:round:2 19.999
price:format:%.2f 19.9
result:map:status_labels
  - 200
  - 404
instance_id:once:uuid
app_ok:version:>=:1.0.0 1.2.3
flags:watch ./flags.synx
config:fallback:./defaults.synx ./overrides.synx
api:spam:5:60 https://api.example.com
banner:vision ./sunset.png
recording:audio ./welcome.mp3
db:import ./config/db.synx
production:inherit base
  host prod.example.com
shouted:replace:l:L Hello there
ranked:sort:desc
  - 5
  - 1
  - 3
total:sum
  - 19.99
  - 29.99
  - 5.50

Constraints (require !active)

!active

volume[min:1, max:100] 75
api_key[required]:env API_KEY
max_players[type:int] 16
country_code[pattern:^[A-Z]{2}$] US
version[readonly] 3.0.0
password[required, min:8, max:64, type:string] MyP@ssw0rd

LLM Tool Use (!tool) ⚡NEW

!tool
web_search
  query latest Rust release
  lang en
  max_results 5

{ "tool": "web_search", "params": { "query": "latest Rust release", "lang": "en", "max_results": 5 } }

Combine with !schema for tool definitions, or with !active for dynamic parameters. See GUIDE.md for full documentation.

📖 Documentation / Guides

Complete SYNX guides with all 28 markers, benchmarks, code examples, and architecture:

Language Guide
🇬🇧 English GUIDE.md

🔒 Security

SYNX is designed to be safe by default — no code execution, no eval, no network calls from the parser.

What SYNX does NOT do

Risk SYNX YAML
Code execution from config No — no !!python/object, no eval, no constructors Yes — !!python/object/apply can execute arbitrary code
Network/HTTP calls No — parser is offline-only Depends on loader
Shell command injection No:calc uses a safe recursive-descent parser with whitelist operators (+ - * / %) Depends on loader

Built-in protections (v3.5.0+)

Protection Description
Path jail :include, :import, :watch, :fallback paths cannot escape the project's base directory. Absolute paths, Linux-rooted /foo, Windows-rooted \foo and ../ traversal are all blocked (3.6.2 closed a Windows-only escape).
Include depth limit Nested includes are limited to 16 levels (configurable). Prevents infinite recursion.
File size limit Included files > 10 MB are rejected. Prevents memory exhaustion.
Calc expression limit Expressions longer than 4096 characters are rejected.
Env isolation When env option is provided, only that map is used — no fallthrough to process.env.
Secret redaction Values marked :secret are emitted as "[SECRET]" in JSON output of every binding (synx parse, Synx.toJSON, FFI, WASM). Real values are accessible only via the typed Value::Secret API. Fixed in 3.6.2 — earlier versions of the Rust CLI leaked the raw value.
Resource limits everywhere The pure-TS engine now enforces the same §3 caps as synx-core (16 MiB input, 128 nesting depth, 1 MiB multiline, 1 M list items, …). Browser/Node use is no longer DoS-able by oversized input.

Configuration

// JS/TS
Synx.parse(text, { maxIncludeDepth: 32 }); // default: 16
// Rust
Options { max_include_depth: Some(32), ..Default::default() }

Full Specification

How this repo is organized: docs/repository-layout.md.

Links

MIT — © APERTURESyndicate


Made by APERTURESyndicate Production

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

synx_format-3.7.1.tar.gz (156.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

synx_format-3.7.1-cp313-cp313-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.13Windows x86-64

synx_format-3.7.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

synx_format-3.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

synx_format-3.7.1-cp313-cp313-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

synx_format-3.7.1-cp313-cp313-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

synx_format-3.7.1-cp312-cp312-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.12Windows x86-64

synx_format-3.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

synx_format-3.7.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

synx_format-3.7.1-cp312-cp312-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

synx_format-3.7.1-cp312-cp312-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

synx_format-3.7.1-cp311-cp311-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.11Windows x86-64

synx_format-3.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

synx_format-3.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

synx_format-3.7.1-cp311-cp311-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

synx_format-3.7.1-cp311-cp311-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

synx_format-3.7.1-cp310-cp310-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.10Windows x86-64

synx_format-3.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

synx_format-3.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

synx_format-3.7.1-cp310-cp310-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

synx_format-3.7.1-cp310-cp310-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

synx_format-3.7.1-cp39-cp39-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.9Windows x86-64

synx_format-3.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

synx_format-3.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

synx_format-3.7.1-cp39-cp39-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

synx_format-3.7.1-cp39-cp39-macosx_10_12_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

File details

Details for the file synx_format-3.7.1.tar.gz.

File metadata

  • Download URL: synx_format-3.7.1.tar.gz
  • Upload date:
  • Size: 156.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for synx_format-3.7.1.tar.gz
Algorithm Hash digest
SHA256 9f70d0223b9b485f67801b06bb15b28556890ff5aab2567e549517b59fa686b4
MD5 dba49a3900db563664bc252ab7711c99
BLAKE2b-256 12682839264614633d006f8ff4e40029d9f1ce75da8749a1cae0ef954587611f

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ca285c27dcfc89d79e6320fe8fa9daaf8e16b837a43f5bee4eb1b6214200cebe
MD5 9798b89e22d4abddea6d73afe5662a55
BLAKE2b-256 8152e55329b5f5c4ac57b8f851e4533a489075ec3c2f1f37ae3be950c3be043f

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 747dce4f0c2bf06282ac080c91a60fdb019b3ac53cf5ba33c3dbbbace8ad3ce9
MD5 ac5f193b050d37ca4939c68dd048ee8c
BLAKE2b-256 fa617811be5513c7910153718fe2aad433d8201ea8eacabde3a545ced6b2aab9

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cb4e0340ea3239ecce7096902fb4568f8e843bc6236a0bf15e0a031e4d8ab375
MD5 5f746c45ad585dd063b4bff66500fa16
BLAKE2b-256 92ae3b2604dbb9a1a800f6b17af980b86d7f17f553285f86e879bce3f1ca5307

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ea12fcff272d21e3ba9d7fca0e72c91d8a4c7b93fd1f8723495d74cefb4d8411
MD5 95a752ab61fcddb861a7d54f68d0b82f
BLAKE2b-256 532ceabb879317cb94a79ef647745e080e8d44b4cd933625c70b5083410b18b3

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 49bc7ec02dbed0299fb2f644b77e5f603a36a5efd73293b9cf73dc7794ecc891
MD5 61b9e2f922dfd08f859a00a437fb8b6d
BLAKE2b-256 ae9eb7f53b7c56021a5c541d7488967b30e00e9677bccd4f7de8ec9c2710e474

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 74234ce67532c8a9e37c15f365757d00586cb5624238add019cad869aa7b7a2c
MD5 e12738e6b6061445618a12c70863f428
BLAKE2b-256 dac9de3f42c89a1e3f9d051a012fe03ab17ba2a06d0bacc8c3b97f880d17cb76

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 53c471040a213571f2db6a56d29fc11a61bbb0bcca430728f890afcc02cff333
MD5 e2b46e2715fb5870829248648d46760c
BLAKE2b-256 0cfb6633065dd09645138a09aa20d0761d45821b83927b69d7387d6ab788807e

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f8b754df749329e5fec5483ce1c0d8674fb4b3221a78ac612b841bb01b18e212
MD5 d2c1161e58cd527215380386b58b720e
BLAKE2b-256 7f76acdd47134f05523340e0bc42974ee4bf60c273b85af0663c9b50bc773c14

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 88f60d6bd316394d5b84ad1da02e097d51222707a722c7f771f0ca34b98ecf0c
MD5 7217e1c3babc37b244f95f2b406774e1
BLAKE2b-256 cfa29b7511abb3117f55e2ed0baa0d66dce31d7fc61d08e2c5f8cb49269fde32

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 36e9ffbd6cf55148b6493762820b38db1bb99f4bb59d5737d0158cc8e28507db
MD5 d93264dff055753b86aa093d20b283b2
BLAKE2b-256 b5e4e37f96d8d0eeeafdc536802d89a22bbf2e8bd8a11e514e8f73cecddd7813

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6df0a2d7d1407f1f308b0572a98816e86ce5131c6e7d789aee4a0fbc40908d43
MD5 c455c6c487dba6cf81bd8bce8b5a492e
BLAKE2b-256 f7f3fe4843d691887708c1a8ed2ed7b65b608e5721b7cb422cce07718dc25f9f

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d9eaeca34292978b75d75cb3d152670bcca61f9d756a95133034ed64ec00f221
MD5 0b8215436b0c8bd62cd4ec52db75636f
BLAKE2b-256 c66e01b5287fee1de7a57d1b094a54acf04b89d637ba049e670a10201190449b

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6561f600d2fd9ffd6ca05d4d7e876144460a3901b63decaab23d574f393d004e
MD5 387f3201a3d4c26156148590eee3e63c
BLAKE2b-256 a64d1394ec56cb233d0bb9e956c960dc75cbc5d73a440c26a86447eb2cab866b

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 962c084e8a9e8b9d89cb4f078804a3d32b4932c66cc01151790f11aa193a6e77
MD5 4c7d49771a5504215d6462b768b7140d
BLAKE2b-256 dbe6e8016f87ab1881ffdf39905748cc0e58c1d71f686ecdb601b62585604775

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3f79f0af95fb3b2787abb73cfefffb507466dbb7c1018cf9bb1d1b946e9bea9e
MD5 71392479188c0d615d547de48c223a1a
BLAKE2b-256 74ee0e1f7bb2276b37fc9bc4a4911a5e5d9a8713b2df7ecba7e98dd63927c1a1

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4134820e19490e3f0fe3ed07470168710da69a49e6292bd22aa9d30d4c4f9434
MD5 f42b427f035ba907190ad6cf5987fdf0
BLAKE2b-256 49d41a0deecf8252fc7f76f768032465d00260a8825d1c51bcbe81c8bb6f9651

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 794aa91410ba0261440943640d298db089cee7c46acb644ed68cd1cb4e6e0b93
MD5 44981c6a4738ba86334ef7c4e9309cf3
BLAKE2b-256 c71960877b3336bc562cd50ba2584b67d9f98127d480014ff9f87762fd7aad21

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8b624a43cb65253f3d6d16cd71648346127b2858b8f96d6de96265c0fe2b6a05
MD5 d55de283661347e790f570b4c7b8a696
BLAKE2b-256 7cca7a466a966f73842d3bc652c6d29070f830ddbfbfbc69ae7ab58dd24d5da1

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 53e1a0ad76808c8c24b8131f7144ec5fbbc5f35cef50065a2c1f7c22fe3ee9ec
MD5 1691db05494f460c925b07569abb4ce3
BLAKE2b-256 06e8456d12e7975d53f0175add3a5b92f3f521da5c19f5bb4803a25c53bd704d

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5054430f5cd6a960b4e4dc4560307440ba062f8f461115b9f457e3d5f240ce92
MD5 030245b3ecb6dcf8e191d5d270c165b2
BLAKE2b-256 cdca899a0f55febce2031c2f1b13c79d81f74514ced26fa1ce7a726af109bc54

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 53e3ca674433d7ee4451d82d2e08fa31bc141a282de96acf459e3d90f3d7af43
MD5 7ff0be0e6e963f18c96422bf53d813a8
BLAKE2b-256 c6977028abafb4b6391f595b8c31977d9543ad135a7e1ac4ab50d4e57095135c

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 53d3d4f7048f59bad8b22ae3713c57cabb706d2b0da75b4e4278626807bac340
MD5 b0a416875dbc9b74c65e8a78b5a3b321
BLAKE2b-256 826704b697b107e6b81d1666f43306cee0fcb4f824f01f67c7716e45a6ae42e7

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f859e13e47e6b10dde148fc62ad74d2c75e2b022c9f298fd7d3fd644d4a7c221
MD5 19ef55edaafca30f25df692b46016e96
BLAKE2b-256 22f3b51a974a720a60d8c381c9bc0f0932c815e0086954d6bee9459636d9699e

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6a2702c315bb1134504e335fde628782580e470e43be1b6c17b7b71389282d7b
MD5 ad269094673017a0e285a5ee5db7ab59
BLAKE2b-256 89d2fd3303387223338d95c4f1f989715d62301de2ae69493bd90a5b57d4d559

See more details on using hashes here.

File details

Details for the file synx_format-3.7.1-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for synx_format-3.7.1-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 014d022380437e3781c81ee52ffad9eea77c21fb4ff002b7fbb339d0d681a44a
MD5 731319a56cb7f93b1ba3794cbf6b1c9a
BLAKE2b-256 901d6ed1075bddf02288720943159750a9fa7f4299c5d7eca48d4cc4972cc331

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page