Run Obsidian as a self-hosted web app. Not remote desktop, an actual web app.
Find a file
2026-03-24 21:54:53 +01:00
images fix os.version shim, improve docker image 2026-03-12 22:32:39 +01:00
plugin implement file upload via plugin 2026-03-18 02:38:36 +01:00
scripts add cache-busting 2026-03-22 18:50:23 +01:00
server multiple file watch fixes. 2026-03-24 02:42:31 +01:00
src make file select workaround more robust. 2026-03-24 21:52:30 +01:00
.gitignore update readme, cleanup unused files 2026-03-14 12:33:44 +01:00
ARCHITECTURE.md minor refactor, cleanup 2026-03-11 22:08:30 +01:00
build.js consolidate build scripts, reorganize source into src/ directory, fix favicon injection 2026-03-20 23:46:17 +01:00
CHANGELOG.md update changelog 2026-03-24 21:54:53 +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 shim more buffer methods, and fs methods 2026-03-23 22:58:01 +01:00
package.json multiple file watch fixes. 2026-03-24 02:42:31 +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.