Desktop application
YAML Editor
A desktop editor for YAML and JSON that shows the mistakes configuration files hide — tabs, duplicate keys, values two parsers read differently.
Configuration files break in ways that are hard to see. A tab where two spaces
belong. A missing space after a colon, which quietly turns key:value into one
string. A duplicated key where the second one silently wins. A no that one
parser reads as a boolean and the next as text. None of it looks wrong on screen,
and all of it surfaces later as a deployment that behaves differently than the
file suggests.
This editor makes those visible while you type, keeps the file exactly as written, and otherwise stays out of the way.
What it does differently
It reads the file, not the extension. The format is detected from the content
as well as the name, and the status bar says which one won and why. A .yaml file
holding JSON is treated as JSON.
Errors point at the mistake, not at the parser. A syntax error carries the line and column where scanning stopped, translated into what to change — rather than a dump of which token the scanner expected.
It knows common file shapes. Docker Compose, GitHub Actions workflows, Kubernetes manifests and Bukkit plugin descriptors are recognised and checked against what they actually need. A misspelled key gets a suggestion.
Reformatting keeps the comments. Comments stay attached to the keys they belong to, which is the reason most formatters get left switched off.
Architecture
A Gradle project in two modules, and the split is the point:
- core — parsing, diagnostics and conversion. No UI types anywhere in it, which is what makes it testable without starting a window.
- app — the Compose Desktop application on top.
The JSON parser is written by hand rather than pulled from a library. An editor needs the exact line and column of every value to underline it and to jump to it; libraries built for deserialising into objects throw that position away, because their callers do not need it.
Properties and TOML are readable but not editable. They exist as conversion sources into YAML, and being honest about that was less work than pretending to support two more formats fully.
The window
The title bar, toolbar and window buttons are one row in the editor’s own colours, and the file browser is part of the application rather than a system dialog from another decade. Dragging a maximised window restores it under the pointer, the way the rest of the desktop behaves. Details like that are invisible when they work and grating when they do not.
Status
Feature-complete and public. Runs on Windows, macOS and Linux; needs a JDK 21.