Read
Portable AWK recognizes mappings, sequences, flow nodes, scalars, tags, anchors, and documents.
Version 1.1 · now the nodes can flow
Query YAML with one portable shell script. No package manager. No language runtime. No mystery binary. Just /bin/sh, AWK, and a surprising amount of ambition.
1services:
2 - name: api
3 enabled: true
4 - name: worker
5 enabled: false
6 - name: web
7 enabled: true
A real parser this time
Version 1 replaces the old flattened intermediate format with a proper YAML node graph. Structure survives intact, so queries stop fighting the parser.
Portable AWK recognizes mappings, sequences, flow nodes, scalars, tags, anchors, and documents.
Aliases and merge sources connect through node identity, with precedence and recursion validation.
Paths, iteration, pipes, filters, comparisons, and defaults stream real node references without flattening them.
Tiny commands. Serious YAML.
Stream, filter, then ask for exactly what you need.
$ ysh '.services[] | select(.enabled) | .name' config.yml
api
web
Collections become clean, typed JSON.
$ ysh -o=json '.services[0]' config.yml
{"name":"api","enabled":true,"port":8080}
Aliases and merge precedence resolve before querying.
$ ysh '.production.retries' config.yml
3
Open the hood whenever the YAML gets weird.
$ ysh --type '.release.date' config.yml
timestamp
$ ysh --ast config.yml
node 1 mapping line=1
01 / PORTABLE
Bootstrap containers, CI runners, old Macs, tiny servers, and recovery shells. If the system has /bin/sh and AWK, YAML.sh is ready.
02 / PRECISE
Use .["key.with.dots"] when punctuation belongs to the YAML—not the query.
03 / HONEST
No hand-waving about full YAML compliance. Every supported boundary is documented and exercised.
Read the support contract04 / HACKABLE
The shipped executable contains the complete shell launcher and AWK engine. Read it, copy it, bend it.
05 / OBSERVABLE
--ast and --events turn parser internals into first-class debugging tools.
Install v1
The installer downloads a pinned release and places ysh in /usr/local/bin. Set YSH_INSTALL_DIR to choose another location.
curl -fsSL https://yaml.azohra.com/install | sh
Prefer to inspect first? Read the installer source.