yaml.min
v1.0.0
Published
🔧 Faster and lightweight YAML v1.2 parser for JavaScript and TypeScript.
Maintainers
Readme
🔧 Faster and lightweight YAML v1.2 parser for JavaScript and TypeScript.
- Zero runtime dependencies
- Single-file hand-written recursive-descent parser
- Compatible with Node.js (18+), Bun, and Deno
Install
# Node.js
npm i yaml.min# Bun
bun add yaml.min# Deno
deno add npm:yaml.minUsage
Import
ES Modules
import { parse } from 'yaml.min';CommonJS
const { parse } = require('yaml.min');Quickstart
import { parse } from 'yaml.min';
const data = parse(`
server:
host: localhost
port: 8080
tags: [web, production]
database:
enabled: true
ports:
- 8001
- 8002
- 8003
`);
data.server.host; // "localhost"
data.server.port; // 8080
data.server.tags; // ["web", "production"]
data.database.enabled; // true
data.database.ports; // [8001, 8002, 8003]Supported Types
Strings
Plain, single-quoted, double-quoted, and all escape sequences:
plain: Hello, World!
single_quoted: 'no \escapes here'
double_quoted: "hello\nworld"Escape sequences: \0, \a, \b, \t, \n, \v, \f, \r, \e, \\, \", \/, \N, \_, \L, \P, \xHH, \uHHHH, \UHHHHHHHH.
Block Scalars
Literal (|) and folded (>) block scalars with chomp indicators:
literal: |
first line
second line
third line
folded: >
This long text
will be folded
into a single line.
strip: |-
no trailing newline
keep: |+
trailing newlines
are preserved
indent: |2
explicit indent
levelIntegers
decimal: 42
positive: +99
negative: -17
hex: 0xDEADBEEF
octal: 0o755Floats
pi: 3.14159
scientific: 6.626e-34
positive_inf: .inf
negative_inf: -.inf
not_a_number: .nanBooleans
enabled: true
disabled: falseAlso accepts True/False and TRUE/FALSE.
Null
tilde: ~
word: null
empty:Also accepts Null and NULL.
Collections
Block Mappings
server:
host: localhost
port: 8080
tls:
enabled: trueBlock Sequences
fruits:
- apple
- banana
- cherryFlow Collections
sequence: [1, 2, 3]
mapping: { name: Tom, age: 30 }
nested: { tags: [a, b, c] }Anchors and Aliases
defaults: &defaults
adapter: postgres
host: localhost
development:
database: dev_db
<<: *defaults
production:
database: prod_db
<<: *defaultsExplicit Keys
complex key: valueDocument Markers
---
first: document
...
---
second: documentTypeScript
The parse function accepts a generic type parameter:
import { parse } from 'yaml.min';
type Config = {
database: {
host: string;
port: number;
};
};
const config = parse<Config>(`
database:
host: localhost
port: 5432
`);
config.database.host; // string
config.database.port; // numberBenchmark
Measured with hyperfine parsing the same YAML payload:
| Parser | Times slower than yaml.min | Package Size | | -------------------------------------------- | ------------------------------ | ------------------------------------------------------ | | ✨ yaml.min | 1.00x (baseline) | | | js-yaml | 2.05x ↓ | | | yaml | 19.82x ↓ | |
- Each benchmark parses the same YAML snapshot 5,000 times per run, with 10 measured runs and 5 warmup runs via hyperfine. See the benchmark directory for details.
Security Policy
Please check the SECURITY.md.
Contributing
See the Contributing Guide and please follow our Code of Conduct.
Acknowledgements
- yaml.min is inspired by js-yaml, reimplemented as a hand-written recursive-descent parser for performance and zero dependencies.
License
yaml.min is under the MIT License. Copyright © 2026-present Weslley Araújo and yaml.min contributors.
