• Let me start with a confession. I was supposed to be writing a book.

    I was working on something large — the kind of manuscript that spans many files — and the editor I was using kept getting in the way. The outline never generated properly, so I could never see the shape of what I was writing. The files didn’t feel connected; jumping between a chapter and the parts it pulled in was clumsy, and nothing tied them together the way the document actually fit together. And I couldn’t customize the compile step to run the way I needed it to. “If I just fix this one thing,” I thought, “writing will get so much easier.”

    That was how it started.

    “Just this one feature, then back to the manuscript.”

    I’ve lost count of how many times I said that. I polished the syntax highlighting, added folding, wired up SyncTeX to jump between the PDF and the source, bolted on an AI assistant, and started timing tab switches down to the millisecond. The manuscript stayed open the whole time — in the background, cursor blinking, waiting.

    When I finally looked up, the book hadn’t gained a single chapter. What I had instead was texspark, a LaTeX editor for macOS. The tool I built to serve the goal had quietly become the goal itself.

    What do you even call this? Productive procrastination? A tool-building addiction? Or maybe I just found coding more fun than writing.

    Probably all three.

    Still, there’s one consolation: this editor is slowly becoming a little less annoying for people like me — the ones who sit down to write a book and end up fixing their tools first. Someday I’ll finish that book in it. Probably.

    For now, though, I’ve got an editor to work on.


  • I shipped texspark 0.4.1 this week. The editor works. SyncTeX jumps land where they should. The website has a yellow button, the button counts downloads, and every download pings my phone through a little Telegram bot I wired up. The machine is built and humming.

    There’s just one problem left, and it’s the one nobody warned me about: almost nobody knows this thing exists.

    The chart that keeps me honest

    I set up analytics recently. Here is what I’ve learned from my traffic data so far: my most loyal visitors are (1) me, checking whether the site looks right, and (2) Googlebot, dutifully crawling the sitemap I submitted. Somewhere in there are a handful of real humans — and I’m grateful for every one of you, whoever you are.

    When download #6 came in from an IP that wasn’t mine, my phone buzzed and I genuinely stared at it for a moment. Someone I’ve never met dragged my app into their Applications folder. That feeling doesn’t show up in any chart, but it’s the whole reason to keep going.

    Turns out this is a different job

    I spent months on the fun problems. Making a native NSTextView behave with LaTeX. Getting inverse search to follow \input chains. Parsing TeX’s 79-column log wrapping so error messages stop losing their line numbers. These problems have a shape: you push, they resist, eventually they yield.

    “Getting people to visit a website” has no such shape. There’s no compiler error telling me what’s wrong. The honest answer to “why is nobody coming?” is simply that the internet is very large, texspark.io is very new, and no amount of ⌘B fixes that.

    So I’m doing what engineers do with unfamiliar problems: reading the documentation and making a list.

    The list

    Here’s my plan, in public, so you can watch it succeed or fail:

    • Directories. I signed up for AlternativeTo, where new accounts must wait a week before submitting anything. So right now my marketing strategy is, quite literally, a waiting room. (MacUpdate is next.)
    • Writing. Posts like this one, plus actually useful ones — what I’ve learned about multi-file LaTeX projects, editor internals, why native macOS text handling matters for CJK writers.
    • Telling people. Colleagues, grad students, the LaTeX forums I’ve quietly read for years. This is the part that feels most unnatural to a person who chose a career of typing alone in a quiet room. Doing it anyway.
    • Not yet: the big launch posts. Checkout isn’t open (paperwork — the boring kind, being finished). A launch that sends people to a product they can’t buy is a launch wasted, so Show HN stays in the drawer a little longer.

    If you’re one of the humans

    The trial is the whole app — every feature, 14 days, no signup, no email. If you write LaTeX on a Mac, try it and tell me what’s broken or missing: support@texspark.io. Bug reports are gold. Blunt opinions are platinum.

    And if you know someone whose thesis lives in seventeen .tex files held together by hope — send them here. Word of mouth is the one channel that no waiting room can delay.

    — the LaTeX nerd behind texspark


  • 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.