js-yaml

A fast, complete YAML 1.2 and 1.1 parser and serializer for JavaScript.

Library
npm
v5.5.0
6,636 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
81 /100 Excellent
Development Activity 92
Maintenance 52
Community 80
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
83 /100 Excellent
Architecture 82
Code Quality 85
Innovation 84
Learning Curve 82

js-yaml is a JavaScript implementation of a YAML parser and dumper that supports both the YAML 1.2 and legacy YAML 1.1 specifications, and passes the entire official YAML Test Suite. It exposes a small, focused API centered on load/loadAll for parsing and dump for serializing, with pluggable schemas (FAILSAFE, JSON, CORE, YAML11) that control which tags and types are recognized.

The library is widely used as the YAML engine inside build tools, linters, CI configuration loaders, and Node.js frameworks, and ships a minimal CLI for quick file inspection. Its only runtime dependency is argparse (used by the CLI), keeping the core parser dependency-free and easy to audit for supply-chain risk.

What You Get

  • load() and loadAll() functions for parsing single or multi-document YAML strings into JavaScript values
  • dump() for serializing JavaScript objects back into YAML with fine-grained formatting options (indentation, line width, quote style, key sorting)
  • Four built-in schemas (FAILSAFE, JSON, CORE, YAML11) plus a defineScalarTag/defineSequenceTag/defineMappingTag API for registering custom tags
  • A lower-level AST/event API (parseEvents, constructFromEvents, eventsToAst, present, visit) for tooling that needs to inspect or transform YAML structurally rather than just round-trip it
  • A minimal js-yaml CLI binary for converting/validating YAML files from the command line
  • Explicit safety controls (maxDepth, maxAliases, maxTotalMergeKeys) to guard against malicious or pathological YAML input

Common Use Cases

  • Loading configuration files (CI pipelines, linters, build tools) written in YAML
  • Serializing application data structures to human-editable YAML for config or fixture files
  • Building developer tooling (formatters, migration scripts, codegen) that needs to read or rewrite YAML while preserving structure via the AST/visit API
  • Safely parsing untrusted or user-submitted YAML with depth/alias limits to avoid billion-laughs-style denial-of-service inputs

Under The Hood

Architecture: js-yaml is organized as a clean pipeline of independent stages rather than a monolithic parser. src/parser/parser.ts (1,469 lines) tokenizes and parses raw YAML text into a flat stream of Event objects (document/sequence/mapping/scalar/alias/pop), which src/parser/constructor.ts then folds into native JavaScript values via constructFromEvents. A parallel path (src/ast/from_events.ts, src/ast/nodes.ts, src/ast/visit.ts) turns the same event stream into a mutable AST that tooling can traverse and rewrite, and src/ast/presenter.ts (1,011 lines) re-serializes that AST back to YAML text for dump(). This event-stream-as-common-currency design is what lets load, loadAll, dump, and the lower-level AST utilities in src/index.ts all share one core engine instead of duplicating parsing logic.

Tech Stack: The library is authored entirely in TypeScript (58% of bytes per GitHub’s language breakdown) and builds to dual CJS/ESM output (dist/js-yaml.cjs.js, dist/js-yaml.mjs) plus a browser UMD/ESM bundle, configured via package.json’s exports map. The only runtime dependency is argparse (used solely by the bin/js-yaml.mjs CLI); the core parser/serializer has zero runtime dependencies. The build pipeline uses Rollup with rollup-plugin-dts for type bundling, and tsc --noEmit for standalone type-checking.

Code Quality: Test coverage is substantial and multi-layered: 30 *.test.mjs files under test/core/ (split into units/, tags/, ast/, common/ subdirectories) cover individual tag types and API units, test/core/dump-fuzzy.test.mjs fuzz-tests the serializer, and test/core/pathological.test.mjs targets adversarial/edge-case input. test/spec/ runs the library against the full external YAML Test Suite (fetched via support/get-yaml-test-suite.mjs), giving spec-conformance coverage beyond hand-written unit tests. Linting is enforced via neostandard (an ESLint config), and the npm test script chains lint, build, type-check, and both test suites — a CI-strict pipeline that would fail on any regression.

API Design: The public surface is deliberately narrow — load/loadAll for parsing, dump for serialization — with sensible defaults (CORE_SCHEMA, no complex-key support by default) that cover the common case with minimal ceremony, while advanced needs (custom tags, complex map keys via realMapTag, structural rewriting via visit) are opt-in through documented escape hatches. Options objects are typed and merged against explicit DEFAULT_LOAD_OPTIONS/DEFAULT_PARSER_OPTIONS constants, and safety-relevant options (maxDepth, maxAliases) are surfaced prominently in the README rather than buried in advanced docs, reflecting a design that treats untrusted-input handling as a first-class concern.

Used by 102 apps in this directory

TypeScript
98%
Other

GrowthBook

Ab Testing Experimentation · Analytics · Developer Tools

8,527

Open source feature flags, A/B testing, and warehouse-native experimentation that queries your existing data infrastructure—no data movement required.

View details
92
Repo Health
85
Technical
63
Dependency
Built with
TypeScript 98%
Updated 6 days ago
Go
62%
Apache 2.0

Harness Open Source

Code Editors · Developer Tools · Devops

38,684

A unified open source DevOps platform combining Git hosting, CI/CD pipelines, cloud development environments, and artifact registries in a single self-hosted system.

View details
90
Repo Health
79
Technical
64
Dependency
Built with
Go 62%
TypeScript 33%
Updated 1 weeks ago
Go
87%
MIT

Hatchet

AI Development · Automation · Developer Tools

8,174

A Postgres-backed orchestration engine for background tasks, AI agents, and durable workflows that replaces Redis queues and multi-datastore durable execution platforms with a single self-hostable service.

View details
88
Repo Health
83
Technical
67
Dependency
Built with
Go 87%
Updated 1 weeks ago
TypeScript
71%
Other

highlight.io

Analytics · Developer Tools · Monitoring

9,384

Open-source full-stack monitoring that unifies session replay, error tracking, logging, and distributed tracing so you can stop context-switching between tools.

View details
76
Repo Health
78
Technical
65
Dependency
Built with
TypeScript 71%
Go 16%
Updated 1 weeks ago
TypeScript
99%
MIT

GraphQL Hive

Developer Tools · Devops · Monitoring

483

Open-source GraphQL schema registry and observability platform with breaking change detection, federation support, and CI/CD integration for teams of any size.

View details
90
Repo Health
81
Technical
68
Dependency
Built with
TypeScript 99%
Updated 1 weeks ago
JavaScript
99%
GPL 3.0

homepage

Monitoring · Productivity

33,326

A fast, fully static, and secure self-hosted startpage with Docker service discovery and integrations for over 160 services.

View details
91
Repo Health
86
Technical
71
Dependency
Built with
JavaScript 99%
Updated 6 days ago
TypeScript
68%
MIT

Hoppscotch

Developer Tools

80,676

A lightweight, offline-capable API development ecosystem for testing HTTP, GraphQL, WebSocket, MQTT, and SSE endpoints across web, desktop, and CLI.

View details
91
Repo Health
83
Technical
62
Dependency
Built with
TypeScript 68%
Vue 24%
Updated 1 weeks ago
TypeScript
62%
EPL-2.0

Huly Platform

Collaboration · Project Management · Team Chat

27,978

Open-source all-in-one workspace that replaces Linear, Jira, Slack, and Notion for product and engineering teams.

View details
90
Repo Health
86
Technical
62
Dependency
Built with
TypeScript 62%
Svelte 34%
Updated 1 weeks ago
TypeScript
66%
MIT

Jitsu

Data Engineering

5,110

Open-source, fully-scriptable data ingestion engine that streams events from web, apps, and APIs to any data warehouse in real time.

View details
89
Repo Health
79
Technical
66
Dependency
Built with
TypeScript 66%
Go 32%
Updated 1 weeks ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers