
Experiment: I got Obsidian running in a regular browser — no Electron, no fork, original code unmodified
I built with Claude Code a proof-of-concept that runs Obsidian's original renderer (app.js) in a standard browser, without changing a single byte of its code.
How it works: Instead of forking Obsidian, the approach is the opposite — every Node.js and Electron API that Obsidian expects (fs, ipcRenderer, path, crypto, etc.) is replaced with lightweight shims that translate everything into regular HTTP requests. Obsidian doesn't know it's not running in Electron.
What works:
- Full Markdown editing and preview (same CodeMirror + Obsidian's renderer)
- File tree, tabs, split panes, graph view
- Bidirectional links and backlinks
- Search and command palette
- Core plugins (file explorer, tags, bookmarks, etc.)
- Real-time sync across tabs via WebSocket
- Full RTL / Unicode support
Fun fact: The browser version actually loads faster than the desktop app! Instead of Obsidian reading dozens of config files one by one from disk, we serve everything in a single HTTP request (/api/bootstrap) — all files, directories, and metadata arrive at once, before Obsidian even starts running. When it calls statSync or readFileSync, the answer is already waiting in memory.
Two deployment modes:
- Node.js server — for personal use, vault on a real filesystem
- Cloudflare Workers — demo, serverless, zero maintenance
⚠️ Disclaimer: This is a technical experiment / proof-of-concept. The project is not affiliated with or endorsed by Obsidian or Dynalist Inc. The repo does not contain Obsidian's code — users download it themselves. If the Obsidian team has any concerns, I'm happy to cooperate.
Try it yourself: Live demo (shared vault, resets every few hours)
Source code: https://github.com/MusiCode1/obsidian-web
#ObsidianWeb