Tom's Text Editor
Introducing – Tom’s Text Editor!
For many years, I’ve wanted a text editor that kept my worldbuilding and lore immediately accessible without interrupting my writing. This kind of need was especially evident when working on TTRPG campaigns.
What did I name that shopkeeper? What was the the cult called that gave this quest? What was the color of that magic chicken’s eyes?
And so on.
There are many, many writing tools available, but none that I have found did exactly what I wanted. If I’m writing, I want to be able to reference my notes – all of my notes – right in the same editor without losing my spot.
So I made my own! Here, keeping your notes quickly accessible without interrupting your flow is the key feature. The editor itself is intentionally simple and lightweight. The entire program is a single executable with no external dependencies. There’s no internet connection, no GPU usage, no subscriptions. It’s just an editor for your text.
I’m a huge fan of tools like Syncthing and other solutions that let you control where your data lives. With that in mind, and taking a nod from other tools like Obsidian, your writing – whether it’s a novel, short stories, or plans for that next D&D campaign – are all simply plain text files sitting on your machine. Everything is organized in a simple folder structure to seperate the content and the worldbuilding notes, and it’s all easily discoverable. So you can sync that folder however you like and keep your text however you like – even edit it with other tools when you want to. You can come back to TTE and use the search whenever you need it.
To keep the search the way I wanted, I opted to not index entire documents. Instead, notes and documents are searchable based on their titles, and a small ‘frontmatter’ header at the top of the file. This header allows you to put in custom tags and other notes that will be searchable beyond just the title.
Because the footprint of what will be indexed is small, I don’t built an index up front and carry it around or update it. Instead, the index is rebuilt live everytime you go to search for something. Even with hundreds of files, this should remain on the order of milliseconds, and the gain is that what you’re searching is always live and fresh. It also means you don’t need to pass an index around or rebuild something costly on every new machine.
Of course, the downside is that you can’t search within every chapter to find every mention of a character or item. This might be a toggle in the future, but for today that was a tradeoff I was willing to make.
This was also the first project I worked on with access to an LLM assistant. For those that go looking at the code, you’ll see most commits have a Co-authored by Claude note with a signature verbose commit message. I wanted to see how far I could get with Opus 5 and what it could do. The goal of this project was not to be a technical showcase of my Rust skills, but instead to be a project that is completed and actually does something.
This is an open source project. It’s meant to be used and tested and beat up and evolve. It will be getting additional release targets, including a web version that I’m planning to host on this site in the future.