Run Obsidian as a self-hosted web app. Not remote desktop, an actual web app.
Find a file
2026-03-29 17:44:41 +02:00
images Ignis settings tabs 2026-03-28 14:52:41 +01:00
plugin refactor bridge plugin, minor improvement to plugin tracking. 2026-03-29 17:44:41 +02:00
scripts add cache-busting 2026-03-22 18:50:23 +01:00
server headless-sync vault setup 2026-03-29 13:22:46 +02:00
src headless-sync vault setup 2026-03-29 13:22:46 +02:00
.gitignore headless-sync vault setup 2026-03-29 13:22:46 +02:00
.prettierrc refactor bridge plugin loading 2026-03-26 22:27:50 +01:00
ARCHITECTURE.md minor refactor, cleanup 2026-03-11 22:08:30 +01:00
build.js implement headless sync plugin 2026-03-29 00:26:41 +01:00
CHANGELOG.md add file and folder download 2026-03-25 21:25:27 +01:00
docker-compose.yml fix os.version shim, improve docker image 2026-03-12 22:32:39 +01:00
Dockerfile improve docker setup 2026-03-21 00:57:04 +01:00
LICENSE Initial commit 2026-03-08 15:03:03 +01:00
package-lock.json add file and folder download 2026-03-25 21:25:27 +01:00
package.json add file and folder download 2026-03-25 21:25:27 +01:00
README.md update readme, cleanup unused files 2026-03-14 12:33:44 +01:00

Ignis

An Electron shim and server bridge for running Obsidian in a browser. No VNC required.

Why

Obsidian is built on Electron but lacks browser access. Existing solutions rely on VNC/remote desktop, which provides a poor user experience. Since Electron is essentially a browser with Node.js integration, it should be possible to create a shim that routes Electron/Node APIs to a server, allowing Obsidian to run as a true web application.

Ignis is a proof of concept testing this approach.

How it works

Ignis replaces the electron backend of Obsidian with a browser-compatible 'shim' that intercepts calls to Node.js and Electron APIs and routes them to a server.

An in-memory metadata cache is built on page load so that sync filesystem calls (existsSync, statSync, etc.) work without round-tripping to the server every time. Async reads and writes go over HTTP. IPC channels like ipcRenderer.sendSync("vault") are faked with a dispatcher that returns what Obsidian expects. Native stuff like clipboard, menus, and dialogs have minimal stubs.

Status

Ignis is in an experimental state. Basic functionality works but no guarantee of stability or feature completeness. See ARCHITECTURE.md for details.