An app from Excelano
Tommy Flyleaf
Edit the tree. Keep the file.
A TOML editor that shows the file as a tree and edits every value by its kind, then writes back a file with your comments, your key order, your whitespace and your quoting untouched everywhere you did not edit. For Linux, Windows, macOS and the browser.
Free and open source, with the code on GitHub. The browser version opens your file in the tab and sends nothing anywhere.
Edit by value, not by syntax
Editing TOML by hand means writing the syntax by hand: the brackets around a table, the quotes a string needs, the exact shape of a date, a comma between array elements and none after the last. Tommy Flyleaf lets you work with the values instead. It shows the file as a tree, gives every value a field that matches its kind, and treats adding, renaming and removing a key as operations rather than as text you retype correctly. What a save would write is on screen the whole time, beside the tree.
It edits the document, not a map of it, so everything you did not touch is left exactly as it was: your comments, your key order, your blank lines, the quoting style you chose. A plain text editor leaves those alone too — that is the floor, not the feature. The difference is that here you are editing the values, with the file's shape laid out in front of you, rather than keeping the syntax right in your head.
See it in action
What you can do
Read the file as a tree
Tables, arrays of tables, inline tables and dotted keys become sections you open and close. A file with more than a couple of hundred entries opens with its sections closed, so a large one is a list of headings until you reach into it.
Edit every value by its kind
Strings, integers, floats, booleans, and the four shapes of date and time each get a field that knows what it holds. A value's kind menu offers the conversions it allows: a string that reads as a number can become one, a table can become an inline table and back, and nothing is offered that would not parse.
Add, rename, remove
Keys are added to any table, renamed in place with their comments kept beside them, and removed. Arrays are editable sections: push an element, change one, take one out.
Comments are fields
A comment above a key, beside a value, or at the end of a table is shown where it belongs and edited there. Add one where there is none, empty one to remove it. The blank lines around a comment stay as they were.
Undo and redo
Ctrl+Z and Ctrl+Shift+Z, through everything: values, keys, kinds, comments. Edits to one row run together, so a word typed into a field is one step back rather than a letter at a time.
See what a save will write
The source pane shows the file as saving would write it, and follows the tree: the row you are on is highlighted in the text, so a change is visible in both places before you keep it.
Save without disturbance
A save keeps your comments, key order, whitespace and quoting everywhere you did not edit, and a byte order mark, Windows line endings, or a missing final newline are written back the way they were found. The file is written beside the original and swapped over it in one step, with its permissions kept; a read-only file is refused rather than quietly replaced.
Measured against the TOML test suite
Every valid TOML 1.1 document in the official toml-test suite round-trips through Tommy Flyleaf byte for byte, except seven the underlying parser itself reformats. Those seven are named in the test and reported upstream, not hidden.
Or open it in your browser
The same application, compiled to WebAssembly and served as three static files, runs at excelano.com/flyleaf/try. It is the editor in full, not a demonstration of it: open a file through the browser's picker, edit it, and save, which downloads the result. The file does not leave the tab. There is no server behind the page, nothing is uploaded, and closing the tab is the end of it.
It opens with a sample file, a bindery's job ticket, that has a comment in every place TOML allows one and a key of every kind, so there is something to edit before you bring your own.
Something to open it on
Tommy Flyleaf edits a file you already have, so it starts with nothing until you give it one. If you would rather not go looking, there are four TOML files to download at excelano.com/flyleaf/samples: a bindery's job ticket, a specimen sheet carrying every kind of value TOML has, a Cargo manifest and a pyproject.toml. Open one, change a value, save it, and compare: that is the whole product in one edit.
No network. No account. Nothing to send.
Tommy Flyleaf makes no network connection of any kind. There is no server behind it, no account to create, no analytics, no telemetry, no crash reporting, and no third-party SDK. It reads the file you open and writes where you tell it to, and it remembers nothing between one session and the next: not a folder, not a filename, not a setting. The browser version is the same code in a page, and the page sends nothing anywhere.
The full statement is at excelano.com/legal/#flyleaf, and because Tommy Flyleaf is open source, every line of it is verifiable in the source at github.com/excelano/flyleaf.
How to get it
Debian and Ubuntu
Tommy Flyleaf is packaged for the Excelano apt repository. Add the repository once, then install; updates arrive with apt upgrade like any other package:
curl -fsSL https://excelano.com/apt/setup.sh | sudo sh sudo apt install flyleaf
Once installed, Tommy Flyleaf is offered for .toml files in your file manager, and becomes the default for them only where nothing else already is.
macOS and Windows
The Windows build is on the Microsoft Store. Install it the way you install any other app; updates arrive through the store.
The macOS build is on the Mac App Store. Install it the way you install any other app; updates arrive through the store.
From source
Tommy Flyleaf is written in Rust and builds with a Rust toolchain alone; nothing in its dependency tree compiles C. With Rust installed, one command builds and installs it from crates.io:
cargo install flyleaf
The README covers building from a checkout, the browser build, and the Linux desktop integration.
Behind the tool
Tommy Flyleaf began as the metadata editor inside Slipcase Desktop, where the description traveling with a document is a TOML file and the rule is that editing it must not disturb what somebody else wrote in it. That editor turned out to be the general-purpose TOML editor nobody had built: the existing tools are editor plugins, command-line path setters, and configuration screens tied to one application. So it was lifted out into a crate of its own, and Slipcase Desktop now uses the same crate. One editor across the Excelano applications, not two that drift.
The name is a person's, a bookbinder's apprentice, and a flyleaf is the blank page inside a book's cover: the one place in a bound book meant for someone to write on later. That is the job. The book is somebody else's; write on the page provided, and leave the rest as it was bound.
I built it because the configuration files I meet in migration and integration work are read by people as much as by programs, and the tooling that edits them by machine keeps throwing away the half that was for the people. If that is a snag your team keeps hitting, it is the kind of work I am glad to take on.
For technical users
Tommy Flyleaf is free and MIT-licensed, written in Rust on egui and toml_edit. It is two crates on crates.io: flyleaf-core is the document model and the edit operations with no user interface, and flyleaf is the editor as an egui widget, with the application behind a default feature. An application that embeds the widget hands it a policy naming the keys it protects, which is how Slipcase Desktop keeps a container's required keys from being renamed or removed. The source, the plan the project is built against, and its record of what the underlying parser changes in a document are at github.com/excelano/flyleaf.
Support
For questions, bug reports, or feedback, email support@excelano.com. Replies typically arrive within one business day.
Issues and feature requests can also be filed directly in the GitHub repository: github.com/excelano/flyleaf/issues.