Post

YAMLQuill, A Structured Editor for YAML

YAMLQuill, A Structured Editor for YAML

Just a few days after building JSONQuill, I found myself thinking it would be nice to have the same structured editing experience for YAML files, since I hate YAML. Config files, GitHub Actions workflows, and lots of other things want YAML, so it made sense to take what I learned with JSON and do the same.

So I built YAMLQuill. It’s a terminal-based structural YAML editor with vim-style keybindings, written in Rust. It shares the same core architecture as JSONQuill: parsing into a tree, vim navigation, undo/redo, registers, visual mode, etc., but it understands YAML’s unique features.

Here’s a quick demo showing navigation, anchors/aliases, and editing:

Where it differs from JSONQuill

YAMLQuill isn’t just JSONQuill with a different parser. YAML has features that JSON doesn’t, and the editor supports them natively:

Comments. YAML supports comments, and YAMLQuill does too. It preserves existing comments when you save, and you can add new ones with the c key. Comments are displayed inline in the tree view, so you can actually see what that weird flag is supposed to do.

Anchors and Aliases. YAML’s &anchor and *alias syntax for referencing the same value multiple times is fully supported. The editor shows anchor badges (&name) and alias nodes (*name), and you can navigate from an alias to its anchor by pressing Enter. The underlying anchor/alias structure is preserved during edits whenever possible.

String types. YAML has multiple ways to write strings: plain, literal (| for preserving newlines), and folded (> for wrapping). YAMLQuill displays which type each string is using and preserves the original style on save.

Multi-document support. Like JSONQuill handles JSONL files, YAMLQuill handles multi-document YAML files (separated by ---). Each document starts collapsed; expand with l to edit within it.

What it shares

Everything else you’re familiar with from JSONQuill works the same way:

  • Full vim keybindings with count prefixes, marks, visual mode, named registers, and the jump list
  • Pipe from stdin (cat config.yaml | yamlquill)
  • Text search across keys and values, plus YAMLPath structural search
  • Data safety: atomic writes, validation before save, optional backups
  • Format preservation at the section level—unmodified parts of your file keep their exact original formatting
  • Gzip support for .yaml.gz files
  • 15 built-in color themes

Installation

On macOS via Homebrew:

1
2
brew tap joeygibson/tools
brew install yamlquill

Or grab a binary from the releases page, or build from source:

1
2
3
git clone https://github.com/joeygibson/yamlquill
cd yamlquill
cargo build --release

Try it out

If you spend your day editing YAML configs, give it a spin. The repo is at github.com/joeygibson/yamlquill—issues and feedback welcome.

This post is licensed under CC BY 4.0 by the author.