I shipped the feature obsidian charges $10/month for. It's free in binderus.
Published any folder of notes to a static html site, with the "notes that link here" panel obsidian publish charges a subscription for. zero cdn on plain pages, dark mode, mermaid + math, ready to upload anywhere.
![]() |
![]() |
|---|---|
| Notes in Binderus | → Published notes, ready to upload to your website |
"obsidian publish is $10 a month. i just want a free static blog with backlinks." — actual question someone asked me last week.
So this week i shipped the local html publisher in binderus. it took 16 commits across one branch. it's in v0.9.9 today, free, no account, no cloud round-trip. point it at any folder of markdown and you get a static html site you can upload anywhere — netlify, github pages, your own vps, a usb stick.
The linkedin post about it is sitting at 500 views in 12 hours, which is more than every other post on this account combined. so i figured the longer version belonged on the blog instead of being chopped down for a feed. here it is.
The part that actually matters: backlinks#
The line that made the linkedin post pop was naming the differentiator out loud. obsidian publish charges $10 a month for backlinks on your published notes. hugo, jekyll, eleventy — none of them ship that natively. it's not because the maintainers are lazy. it's because their architectures are loop-per-page generators. each page is rendered in isolation. backlinks need whole-collection awareness — to render the panel on note A, you have to know which other notes link to A.
Binderus already has that awareness because the editor walks the wikilink graph as you type. so during publish i just walk it once more, build a reverse index, and drop a "notes that link here" panel at the bottom of every published page.
It's not magic. it's a graph traversal i was doing anyway, exposed at publish time. but it's the kind of thing that doesn't get built unless you already had a reason to build it. obsidian had a reason. binderus had a reason. static site generators didn't, so they don't.
What every published page also gets, no config#
I didn't want to ship "html publisher" and have you immediately need three plugins to make it look like a real site. so the defaults try to cover the actual baseline:
- reading-time badge near the top
- auto table of contents from your headings
- heading anchor links (hover a heading, copy a link)
- copy-code button on every code fence
- lazy-loaded images with width/height pre-computed (no layout shift)
- sitemap.xml
- robots.txt
- rss feed
- 404 page
- tag index pages
- prev / next post navigation
- obsidian-style callout blocks (`> [!note]`, `> [!warning]`, `> [!tip]`, `> [!warning]`, `> [!danger]`)
- mermaid diagrams render to svg at publish time, no runtime js needed
- latex math via katex, also rendered at publish, no runtime js
- gzip-tiny output. on a plain page (no diagram, no math) the browser doesn't make a single external request
Dark mode is the default. Light is a toggle.#
I write at night and so do most of the people who use binderus. dark is the default theme on the published site. there's a `light / dark / auto` toggle in the corner that respects the visitor's system preference and remembers the override per-browser. the css variables are exposed so a designer can override anything in 30 lines of custom css.
What it looks like in the app#
settings → publisher → pick a folder → pick a destination. that's it. the next time you hit publish it diffs, only re-renders changed pages, and overwrites the destination atomically.
if you want to upload it: drag the destination folder into netlify drop, or `git push` it to a github pages repo, or rsync it to your vps. binderus doesn't host anything. it generates. you publish.
What's not in v0.9.9 yet#
honest version-state, because i hate when changelogs imply features that aren't shipped:
- no built-in deploy step. you generate, then you upload. (this is on the v0.10 list, with optional one-click deploy to netlify and github pages.)
- no draft / scheduled posts in the publish modal yet — if a note has `draft: true` in its front matter it's skipped, which is the workaround
- no per-folder publish presets — it's currently one preset per vault. multi-preset is in the v0.10 branch
- the tag index page styling is intentionally plain. i'd rather ship a plain page that works than a fancy one that breaks in three months
Why this is on the blog and not just on linkedin#
Binderus has been getting users for a year without me writing about it much. the linkedin post hitting 500 views told me there's actually a small audience that wants to hear how this thing is built. so this is the start of the binderus blog. the first post is a separate kickoff piece (`/blog/hello`) — this one is post #2 and it's the one i actually want you to read.
if you've been using one of the cloud-only notes apps and the subscription line item is starting to feel silly, give binderus a try. ~9 mb download, free, your notes stay on your disk as plain `.md` files, and now they can become a website without paying anyone a monthly fee.
binderus 0.9.9 — [download](https://binderus.com/download) — [github](https://github.com/binderus/binderus) — [discord](https://discord.com/invite/hqx7DSq8J6)
post #2 of a blog about what i'm shipping and what's breaking.
- Van

