I didn’t set out to build an editor. I set out to finish a book.
I’ve been teaching machine learning for a few semesters. Each term the lecture notes grew — a derivation cleaned up here, a worked example added there, a figure redrawn because last year’s version confused everyone. At some point the pile of notes stopped looking like handouts and started looking like a book. So I decided to write one. In LaTeX, of course.
And that’s when the trouble started — not with the math, but with the tools.
A book is not one file
A serious LaTeX document isn’t a single .tex file that happens to be long. It’s a main.tex that pulls in a dozen chapters with \input and \include, each chapter carrying its own figures, its own labels, its own cross-references into three other chapters. The preamble lives in one place, the bibliography in another, the custom macros in a third.
Every editor I tried treated that project as one long document instead of the branching structure it actually was. And each one broke down in its own way once the thing got big.
Overleaf was wonderful right up until it wasn’t. Collaboration is great, nothing to install — but as the project grew the web editor started to lag, and I couldn’t touch it on a plane or a train with bad Wi-Fi, which is exactly where I get my best writing done. VS Code with LaTeX Workshop was powerful, but it felt like I had to assemble a workshop before I could write a single sentence — extensions, settings, recipes, output panels. TeXShop was fast and properly native, but it knew nothing about the structure I was actually working in: which file includes which, which label is defined where, which file ⌘B should really compile.
The real itch
Here’s the moment that pushed me over the edge. I’d be deep inside chapters/07-optimization.tex, mid-thought on a gradient-descent proof, and I’d hit build — and compile the wrong file, because the editor thought “build” meant “build whatever’s in front of me.” Or I’d click a section in the outline to jump to it and land in a file that didn’t have my unsaved edits, so the outline was quietly lying to me. Or I’d need the label for that one equation from chapter 3 and end up grepping the whole project to find it.
None of these are catastrophes. They’re papercuts. But you get a few hundred of them over a few hundred pages, and the tool stops feeling like a place to think and starts feeling like something you’re fighting. The tools worked on files. I was working on a project.
So I built the editor I wanted
texspark is built around one idea: the editor should understand that you’re working on a project, not a file. Concretely, that means:
- Set
main.tex as the build target once. After that, ⌘B always compiles the project root — no matter which sub-file you wandered into. No more building the wrong thing.
- The outline follows
\input / \include across every file in the project, built from your live buffer — no save needed. Click an entry and land exactly there, in the right file, with your latest edits intact.
- SyncTeX works both ways, across file boundaries. Click anywhere in the PDF and the editor jumps to the matching source file — even if it’s a chapter you didn’t have open. Jump from the editor and the PDF scrolls to your cursor with a highlight so your eye finds it instantly.
- Every file’s labels in one list, feeding
\ref / \eqref / \cref autocomplete. Stop grepping for that equation tag; start typing and pick it.
Native, and quiet about it
texspark is a real macOS app, not a web view in a trench coat. Every keystroke goes through Apple’s text engine — the same one Notes and Xcode use — so the Korean and CJK input, the Services menu, dictation, and the system Find bar all just work, the way you already expect them to. Folding, bracket matching, and autocomplete are there when you want them and silent when you don’t. It launches instantly and it doesn’t warm up your lap.
There’s also an AI agent in the sidebar, for the moments you want a second pair of eyes on a stubborn proof or a table that won’t line up. It reads the document you’re working on (only when you toggle it on), talks back in rendered markdown with copy-ready LaTeX, and uses your API key — nothing is routed through a server of mine, and the key lives in your Keychain.
Still writing that book
The book still isn’t done. But somewhere along the way the tool stopped being the obstacle, and the writing became the hard part again — which is exactly how it should be. Every feature in texspark exists because I hit the wall it removes, usually at 1 a.m. the night before a lecture.
It’s still early — v0.4.0, built by one person who mostly wanted to use it himself. If you write long things in LaTeX and the file-shaped tools have been quietly annoying you too, I’d genuinely love for you to try it. There’s a 14-day trial, no signup and no email required.