Obsidian-HTML

Your notes are the website.

The first note-taking app where the file format is the rendering target. No Markdown source/preview split. No syntax to learn. No exporters. Same .html in the app, the browser, your inbox, and your published site.

⬇ Download for macOS ⭐ Star on GitHub Build from source
GitHub stars latest release MIT license CI
Obsidian-HTML editor with file tree, Welcome note, and right sidebar (backlinks + properties)

The big bet

Why HTML-first?

Every note app of the last 15 years stores Markdown and renders it to HTML at display time. That transformation is the silent tax: source-vs-preview duality, lock-in via custom Markdown extensions, an expressiveness ceiling set by whatever the renderer supports.

We inverted it. Store the rendered form. HTML files are documents — they open in browsers, render in emails, publish to the web, embed in any context, and support every visual primitive natively (video, charts, SVG, MathML, custom elements) with zero conversion.

“Markdown is a workaround for plain-text constraints that no longer exist. HTML doesn't have to be.”

The format

It's just HTML — but smarter

A note in your vault is a real .html file. You can open it in Chrome and it just works. But it also carries enough structured metadata for the app to give you wikilinks, backlinks, properties, graphs.

One file, two audiences

The browser sees normal HTML. The app reads the obh:* meta tags + is="wiki-link" custom elements to build the knowledge graph.

No sidecar JSON. No proprietary database. grep, git, and rsync just work.

<!-- Projects/My Idea.html -->
<!DOCTYPE html>
<html>
<head>
  <title>My Idea</title>
  <meta name="obh:tag"     content="project/active">
  <meta property="status" content="in-progress"
        data-type="select">
  <meta property="due"    content="2026-06-01"
        data-type="date">
</head>
<body>
  <h1>My Idea</h1>
  <p>See <a is="wiki-link"
            href="Context">Context</a>.</p>
  <video src="attachments/demo.mp4" controls></video>
</body>
</html>

What's inside

Features 90+ Obsidian-equivalents, plus what Markdown can't reach

✏️

Three-mode editor

WYSIWYG · Source · Render. Rich notes (with <style>/<script>) auto-open in sandboxed iframe — full CSS/JS fidelity.

🗓

Calendar (new in v1.0)

Apple-style Month/Week/Day views. Drag-to-move events, color categories, bilingual labels. .calendar JSON files.

🔗

Wikilinks & graph

Backlinks, unlinked mentions, WebGL graph (10k+ nodes), block refs, transclusion.

🎬

Rich blocks

Video, audio, PDF, charts, API widgets, MathML, KaTeX, Mermaid — all native HTML.

🧠

AI gateway

BYO key: OpenAI · Anthropic · OpenRouter · Ollama · LM Studio · DeepSeek.

🤖

AI agent-ready

Source mode = AI's lane. Notes are real HTML, so AI writes the final layout in one shot — no Markdown translation tax.

🔒

E2E sync

WebDAV / iCloud / Dropbox folders + AES-256-GCM. Your cloud sees ciphertext.

🔌

Plugin sandbox

Web Worker isolation. 13-method typed RPC. No DOM access, no token theft.

⌨️

CLI for AI agents

obh binary with 16 subcommands. --json output for Claude Code, Codex, shell.

🌐

Web Clipper

Chrome MV3 extension powered by Defuddle. Clean HTML straight into your vault.

📱

Every platform

Tauri 2 desktop (mac/win/linux) + iOS/Android mobile. Same vault format.

In motion

What you actually see

Real screenshots from the running app — Welcome.html, the knowledge graph, AI chat, the Bases table view, and the Canvas whiteboard.

The stack

Built on giants

Boring tech where it should be boring, sharp tech where it pays off. 6.5 MB .dmg, 21 MB CLI, ~12,500 TS / 2,800 Rust.

🦀 Rust ⚛️ React 18 📦 Tauri 2 📝 TipTap / ProseMirror 🔍 SQLite FTS5 📊 Sigma.js + graphology 🧹 DOMPurify 🧠 Vercel AI SDK 🪄 Defuddle ∑ KaTeX 🌊 Mermaid

How it compares

vs the alternatives

All claims based on stock installs. Plugins can fill gaps but introduce their own trust surface.

Obsidian-HTMLObsidianNotionLogseq
File format.html.md + pluginsproprietary DB.md / .org
Open in any browser
WYSIWYG, no preview mode⚠️ Live Preview
Local-first
Open source (MIT)❌ closed❌ closed✅ AGPL
E2E sync built-in💲 paid
AI gateway (multi-provider)✅ 6 backends💲 plugin✅ Notion AI
AI agent CLIobh❌ API only
Plugin sandbox✅ Web Worker⚠️ in-realm⚠️ in-realm
Bundle size6.5 MB~100 MBn/a (web)~150 MB

Get it

Install

🍎 macOS (Apple Silicon)

Download the signed-but-not-yet-notarized .dmg.

Download from the latest release:
Obsidian-HTML_0.1.0_aarch64.dmg
(6.5 MB)

First launch: System Settings → Privacy & Security → "Open Anyway".

🐧 Linux / Windows

Build from source — under 5 minutes on a fresh machine.

git clone https://github.com/guanxiaol/obsidian-html
cd obsidian-html
bash scripts/setup.sh
pnpm tauri:build
# bundle in src-tauri/target/release/bundle/

⌨️ CLI (no GUI needed)

Drive a vault from Claude Code, Codex, or plain shell.

cargo install --path src-tauri --bin obh

obh vault scan
obh search "tag:project -done"
obh import-md ~/old-notes/

Your notes are the website

Publish & self-host

The vault is already a static site — every .html opens in any browser as a real document. obh export-html bundles the vault (and a generated index) into a folder you upload anywhere.

🟧 Cloudflare Pages

npm i -g wrangler
obh export-html ~/Vault ./dist
wrangler pages deploy ./dist \
  --project-name my-notes
# → https://my-notes.pages.dev

Free tier, unlimited bandwidth, auto-HTTPS, custom domain in one click.

🖥 Your own server

obh export-html ~/Vault ./dist
rsync -avz --delete ./dist/ \
  user@srv:/var/www/notes/
# Caddy / nginx / Apache — all work

Caddyfile + nginx snippets in DEPLOYMENT.md.

🤖 Auto-publish (CI)

# .github/workflows/publish.yml
on: { push: { branches: [main] } }
- run: obh export-html . ./dist
- uses: cloudflare/pages-action@v1
  with:
    directory: dist

Push a note → 60s later it's live. Same flow on Vercel, Netlify, GitHub Pages.

The full playbook — nginx / Caddy configs, Cloudflare Workers + R2 for big vaults, auth gating, custom domains, code signing your fork, plugin SDK, CLI scripting — lives in docs/DEPLOYMENT.md.

Where it's going

Roadmap

v1.0.0 is out. Mobile, collab, and the plugin marketplace come next.

Phase 1–6 ✅

Editor · Graph · AI · Sync · CLI · 3-mode + Calendar

Shipped in v1.0.0 (May 2026): three-mode editor, inline-edit roundtrip, calendar, 4 polished case studies, bilingual showcase.

Phase 8

Real-time collab

Y.js + a relay. Optional, opt-in per vault.

Phase 9

Plugin marketplace

GitHub-indexed registry. Sandbox stays, install gets one-click.

Ready?

Try Obsidian-HTML in two minutes

Download, drag into Applications, open the starter vault. The screenshots above are reproducible from examples/vault-starter/ on day one.