No algorithm, no ads, no platform standing between you and your readers. One process. Two SQLite files. No cloud account anywhere in the path.
The demo is the real thing, running the latest build. No sign-up, nothing to fill in, and one button in it hands you a blog of your own to write in.
2.2.10 beta is out for testing. The Markdown is the blog's own now. Four libraries used to answer the same question here, one for the reader's page, one for the editor, one for saving it back and a run of regular expressions for the excerpt, and four answers to one question drift: a stroke of the pen came out as the literal word "green" in the excerpt of every post that used a colour. One engine does all of it from a single parse now, measured against the specifications rather than against itself: CommonMark 0.31.2 at 648 of 652 examples and GFM at 24 of 24, on every run. The old renderer and the new one were compared on 92 real posts three different ways before the switch, which is how a javascript: destination that published as a working link turned up. Saving a long piece went from 144ms to 7ms, and the engine carries no dependencies at all. The writing surface also learned find and replace on its own chord. Docker tag 2.2.10-beta.4; latest stays 2.2.9. What changed, and what it does not do yet.
A front page, posts, categories, a search box, comments, and a newsletter that emails your subscribers when you publish. What it does not have: an algorithm deciding who sees your writing, ads cutting across it, or a company that can change the rules one day.
Colour, type, size, the shape of the front page, the menu. All of it lives in the admin, behind your own sign-in, and works from a phone. Not one size or colour is written into the reader's stylesheet, and the build fails if someone puts one there.
No “powered by” line, no badge, no wordmark you cannot switch off. The footer is your own line or nothing; the admin’s wordmark and its version line each have a switch. The only place the software still names itself is a meta tag a reader never sees.
The blog lives as long as the server you rent, and a button downloads the entire thing: posts, images, subscribers, settings. Moving to another machine is copying a directory. There is nothing to export from, because you were never locked in.
Opening a post costs about 100 KB. A photo from your phone is a few dozen times heavier. These are measured off the network on a first visit, on a real blog rather than on the demo above. The demo carries a navigation bar of its own, and that bar is not part of the product. They stay this way because every bundle has a size limit the build enforces: a feature cannot quietly start costing every reader a little more forever.
Four looks for the published page. Six palettes, each drawn separately for light and dark. Four reading fonts cut per script, or bring your own font file. Footnotes, callouts, mathematics as real MathML, and a pen that highlights, underlines and rings the lines worth keeping, every stroke drawn a little differently the way a hand draws. And search that folds diacritics, so lap trinh finds Lập trình.
Four looks, and the last question setup asks is which one. A look decides shape, type and marks; it carries no colour of its own, so all four come out in the palette you chose and in whatever your reader picks over it.


//, figures are bracketed, the shelf is numbered







Select a sentence on any post and a small bar offers five inks, a pencil underline, a ballpoint ring, a note and the quote. The mark is drawn with the site's own hand and anchored to the words, not to a position, so it survives the author fixing a typo three paragraphs up. It lives in the reader's browser and is sent nowhere. Keep on every device carries it across by a twenty-character code, or by the Google sign-in commenters already have; the server keeps a hash, never an address, and the owner sees none of it. Send to my notebook hands the passage to the reader's own Quire Ink, or to any site that speaks Micropub. New in the 2.2.10 beta, on from the first install, and one switch turns it off.

Everything above is the engine. The reading page by itself is also a WordPress theme, generated from the same stylesheet: the six palettes, the contents rail, book mode, six self-hosted typefaces, and no third-party request on the page. Install it on the site you already run and the words you already have are set the way this one sets them, this afternoon, with no migration in front of you.
It is in the WordPress theme directory. Appearance, then Themes, then Add New, then search for Quire Ink. Nothing to download and no file to upload, and updates arrive with everything else on the site. wordpress.org/themes/quire-ink
Nothing of yours moves. The theme adds no custom post type, no taxonomy, no database table and no shortcode. Switch away and every post is still a post. It is free under GPL v2 or later, the licence WordPress asks of a theme.
What the theme is, what it costs a reader, and what does not carry over →
Quire Ink ships a working MCP server. Connect Claude, or another assistant, and say:
"Write a 600-word post about today's trip, tag it travel, publish it."
you, to your assistant, from anywhere
It drafts and publishes through exactly the rules you use: the same slug checks, the same revisions, the same soft delete. Its access is a token you created in the admin, and you can take it away at any moment. Every post is also served as raw Markdown to any agent that asks, because that is the source it was written in.
Point a domain at one command and you have a blog:
bun src/index.tsthis is the whole deploy
One Bun process, two SQLite files, a directory of uploads. A backup is a copy. The whole design is written up honestly, including the bugs that shipped and the measurements behind each decision.
An install is 264 MB on disk and almost none of it was written here. Debian and the Bun runtime account for 184 of that, the same 184 any Bun program carries. Libraries take another 70, and they earn it: resizing your photographs, colouring the code in your posts, drawing the picture that shows up when somebody shares one of your posts.
What is left is Quire Ink. Every number here is measured inside the published image, not estimated.
A blog with 45 posts in it already outweighs the program that serves it. That is the right way round.
A domain and a rented server; the cheapest tier is enough. With Docker the setup is about fifteen minutes, and the install guide walks it step by step, including a NAS and your own laptop. After that, the daily work is all in the admin, from any device.
No. Two SQLite files, opened by the process itself. No database server, no cache tier, nothing else to keep alive at three in the morning.
A personal blog costs nothing. Running unmodified releases commercially is allowed too, including selling hosting. Only a modified version used commercially needs to ask first.
One button downloads everything: posts, images, subscribers, settings. Posts are Markdown, the format that survives platforms. A blog is a directory, so leaving is a copy.
Import the WordPress export file and your posts, pages and images come across, with old inbound links redirected so nothing breaks. And if you are not ready to move, the WordPress theme puts this reading page on the site you already run.
No. The footer is yours, the admin’s wordmark and version line each have a switch, and the licence asks only that the software’s name stay in a meta tag no reader sees. Your blog looks like your blog.
A newsroom with roles, approvals and an editorial queue. Quire Ink has one owner on purpose, and everything is simpler because of it.
A personal blog costs nothing. Running it inside a business, or selling hosting where every customer gets their own blog, is allowed too, as long as what you run is the version published here. Only a modified version used commercially needs to ask first.
In return, you keep your own house. Nobody backs it up for you: there is a button that downloads the entire blog, and pressing it is your job. The blog lives as long as the server you rent, which is the whole point.