A file lands on my disk called PLAN.md. An agent wrote it a minute ago, another one will read it next, and in between I’m supposed to read it myself and decide whether it’s right.

So I double-click it, and then I pick my poison.

cat it in the terminal and I get the raw thing — the structure I wanted Markdown for in the first place, flattened back into hashes and asterisks. Open it in VS Code and I’ve launched a full code editor to read a two-page document, where it arrives as source with a preview pane bolted to one side. Open it in TextEdit and I get raw text in a window instead of raw text in a terminal. Drag it into Bear and Bear does exactly what Bear is built to do: it imports the file into a library that it owns, and now there are two copies of my document and only one of them is the real one.

Not one of those is show me this file as the document it is.

Two camps, and the gap between them

Markdown apps sort themselves into two camps, and I genuinely like a lot of them.

Code editors treat a .md file as source code, because to them it is. That’s the right call for a README in a repo you’re working in — you want the diff, the git gutter, the find-and-replace. It’s absurd for reading a research summary somebody’s agent left behind twenty seconds ago.

Note apps treat Markdown as an interchange format. The file is something that comes in and goes out; the library is the real artifact. That’s also the right call — if your notes live in the app. Mine don’t. Mine live in folders, in repos, beside the project they belong to, and more and more of them are written or read by something that isn’t me.

The gap is in the middle: a file that already exists, in the place it already lives, which I want to read as a document and probably change one line of. No project to open. No library to import into. Nothing to leave behind.

That gap is where I spend a real part of my day, and nothing was sitting in it.

What I actually wanted

Double-click. See an editable preview. That’s it.

Nothing else. Nothing, never — and I want to be precise about the never, because it is the entire design, and holding it was harder than writing any of the code:

  • No library. Quill doesn’t move, copy, index or claim your files. It opens the one you asked for, where it already is.
  • No sync. Your files are already wherever you keep them, and whatever already syncs that folder keeps doing its job.
  • No import, no export. The file is the document. There is no inside to get into.
  • No graph, no backlinks, no plugins, no themes, no accounts. Every one of those is a good idea in a different app.

The landing page puts it better than I can: it’s a lens on your files, not a library that holds them.

That refusal list isn’t modesty about what I could build — it’s the feature. Nearly every addition I can imagine for Quill makes it worse at the one thing it exists to do, which is to get out of the way between a double-click and a legible document. The most useful work I did on it was telling myself no.

What it does do

Open a .md file and you get formatted, editable text. You type straight into it: the marks — the #, the * — appear only on the line your cursor is on, so the document stays a document while you work in it, and a toggle shows you the raw Markdown in the same place when you want it.

Open a folder and the sidebar lists its notes, with tabs for the ones you’re actually working on. That’s the closest thing Quill has to a project, and it’s deliberately nothing more than a view of a directory. When I’m writing a book, the folder is the book.

Then there’s the unglamorous half, which is the half that earns trust. An app you let near files it doesn’t own has to be extremely boring about writing them back. So: saving writes only what you changed, line endings are preserved exactly as they were, and a file that looks unusual opens read-only rather than getting helpfully rewritten. On the Mac it behaves like a Mac app otherwise — native menus, several windows, Open with from Finder, light or dark following the system — and an installed copy checks for an update once a day and installs it in a click.

Nine and a half megabytes

That number is the point, so here’s where it comes from.

Quill is built on Tauri 2, with CodeMirror as the editing surface for now. Tauri means the shell is Rust and the rendering uses the WebView already installed on your machine, rather than a browser shipped inside the app — which is exactly where an Electron app’s hundred-and-fifty megabytes go. The whole thing is a 9.5 MB download on macOS and 3.6 MB on Windows, and it opens a file faster than an IDE opens its splash screen.

I’ll be straight about the trade: yes, the editor is a webview. I’m not going to pretend that’s a purist’s native build. What I wanted was for it to weigh nothing, start instantly and never get between me and the file, and that I got. The “for now” on CodeMirror is honest too — the active-line-marks behaviour is the fiddly part of this app, and I’m not married to the engine underneath it.

It’s the same instinct that got me to leave VS Code behind on my dev servers: one small thing that does one job, instead of a large thing that does mine among forty others.

The name, and the crowded market

Both are crowded. I know.

The category is full — there are excellent Markdown apps, and I’ve paid for several of them. The name is just as full: friends who saw Quill assumed I’d built it on quilljs. That’s how crowded a word it is.

I kept it anyway, for a plain reason. A quill is the simplest writing instrument there is. You dip it and you write. For an app whose whole argument is less, it’s the right name, and I liked it more than the clever available ones.

As for the crowded market: that objection quietly assumes I’m competing, and I’m not. I’m not shipping a product, defending a namespace, or looking for users. I needed the lightest, simplest possible way to see and edit a Markdown file, I wasn’t satisfied by anything I tried, so I built the thing I wanted — and then, because it costs me nothing, I put it on a page with a download link and an MIT licence.

Giving something away freely isn’t the same as distributing it. There’s no price, no account, no funnel and no roadmap I owe anybody. If Quill is the eleventh Markdown app you’ve seen this year, that’s completely fine. It isn’t trying to beat the other ten. It was never built to win a category; it was built to open a file.

Where the source is

MIT licensed, and the repository isn’t public yet.

The honest reason: the macOS build was originally wired to come out of that repo, so before I open it I want to read my own code properly and look hard at the security of that build path. Opening a repository is a one-way door, and a build pipeline I haven’t audited is not a thing I want to hand out. It will open once I’ve done that work. I’d rather be late than careless.

Updated 1 October. When this went out two days ago, this paragraph said macOS only — Apple silicon and Intel — and that Tauri didn’t forbid the other platforms but I hadn’t done the work and wasn’t promising it. Quill 0.3.0 now ships a Windows build as well: 3.6 MB, Windows 10 and 11. Not promised, then done two days later, which is roughly how everything on this blog goes.

What I use it for

Documentation, books, adventures, project notes — the ordinary pile of a person who writes in plain text and intends to still be able to read it in twenty years.

And then the other pile, the one that made this urgent rather than merely nice. Markdown has quietly become the format my agents and I pass work back and forth in: plans, summaries, research notes, the skills I write to teach them things — all of it plain .md files on disk, written by one process, reviewed by me, handed to the next. That traffic only goes up. A format that both a machine and a human can read is worth keeping, and it deserved a window that treats it as a document without wanting to own it.

Quill 0.3.0 · macOS and Windows · MIT — totophe.github.io/quill

Double-click a file. See the document. Nothing else.

About the author
Jean-Christophe Cuvelier
Jean-Christophe CuvelierFractional CTO & technical lead · Brussels

He runs Wellmade, a product engineering studio, and still writes the code. Twenty years of building products for companies that wanted the thinking and the building done by the same person.

@totophe

This article was co-written with AI — in the loop from the first draft to the last edit. The argument, the checking and the final word are mine.