Skip to main content

Self-hosted, mobile-first web UI for browsing and editing Obsidian vaults

Project description

Silmaril

💎 A self-hosted, mobile-first web UI for browsing and editing Obsidian vaults from any device. Single Python file, zero config. Inspired by notion4ever.

graph LR
    V[("📂 Your Vault")] --- S{{"⚡ silmaril"}}
    S <-->|browse| P["📱 Phone"]
    S <-->|search| D["🖥️ Desktop"]
    S <-->|edit| L["💻 Laptop"]

Your vault stays in one place. You access it from anywhere.

Why?

If your vault lives on a VPS or a desktop machine and you want to access it from your phone or any browser — this is for you. All my attempts to sync vaults across devices (Remotely Save, third-party sync plugins) kept failing with conflicts and silent data loss. Obsidian Sync works, but costs money and requires the app on every device.

Silmaril takes a different approach: your vault stays in one place, you access it from anywhere. Point it at a directory, open a URL — browse, search, edit. It just works.

It renders most of what Obsidian renders: wiki-links, embeds, callouts, KaTeX math, frontmatter properties, cover images, Bases, Iconic plugin icons. It won't replace Obsidian for heavy workflows with lots of plugins or complex Dataview queries, but for reading, quick edits, and staying on top of your notes from a phone — it's a lifesaver.

Features

  • Markdown rendering with full Obsidian flavor: [[wiki-links]], ![[embeds]], callouts, highlights, checkboxes
  • KaTeX math rendering ($inline$ and $$display$$)
  • Obsidian Bases (.base files) with cards, list, and table views
  • Iconic plugin support with native icon editing (Lucide + emoji picker)
  • Cover images from frontmatter (banner, cover, image)
  • Frontmatter badges (status, tags) with color coding
  • Full-text search with instant sidebar filtering and content snippets
  • Cards / List / Table views for any directory
  • Clean URLs/notes/ideas.md not /view/notes/ideas.md
  • Mobile-first responsive design
  • Edit and delete notes in the browser (?edit, ?raw)
  • Code blocks with copy button
  • File tree sidebar with collapsible folders

Installation

pip install silmaril

Then run:

silmaril --vault /path/to/your/vault

Open http://localhost:8000 in your browser.

From source

git clone https://github.com/MerkulovDaniil/silmaril.git
cd silmaril
pip install .
silmaril --vault /path/to/your/vault

Or run directly without installing:

pip install fastapi uvicorn python-frontmatter markdown pyyaml
python app.py --vault /path/to/vault

Configuration

CLI arguments

Argument Env variable Default Description
--vault VAULT_ROOT ./vault Path to your Obsidian vault
--host VAULT_HOST 0.0.0.0 Bind address
--port VAULT_PORT 8000 Bind port
--title VAULT_NAME folder name App title shown in the sidebar

Config file

Place a silmaril.yml (or silmaril.yaml) in the working directory:

vault: /path/to/vault
host: 0.0.0.0
port: 8000
title: My Vault

theme: Things          # any Obsidian community theme by name
favicon: https://example.com/icon.png
custom_css: "body { font-size: 18px; }"
pinch_zoom: true
readonly: false
hide:
  - "_private/**"
  - "*.tmp"

Priority: CLI args > config file > environment variables > defaults.

Themes

Silmaril supports all 416 Obsidian community themes out of the box. Just set the theme name in your config:

theme: Things

The CSS is fetched from GitHub on first launch and cached locally in ~/.cache/silmaril/themes/.

Some popular themes to try:

Theme Style
Things Clean, minimal, Apple-inspired
Obsidian Nord Nord color palette
Obsidian gruvbox Retro groove colors
Dracula for Obsidian Dark purple Dracula
Atom Atom editor look
Solarized Ethan Schoonover's palette
80s Neon Synthwave vibes
Notation Bear app inspired

Without a theme setting, Silmaril uses Obsidian's default theme colors.

Authentication

No built-in auth. Recommended options:

  1. Cloudflare Access / Tunnel — zero-trust, recommended for public hosting
  2. Reverse proxy with basic auth — nginx, caddy
  3. Run locallysilmaril --host 127.0.0.1

Deployment

systemd

[Unit]
Description=Silmaril
After=network.target

[Service]
ExecStart=silmaril --vault /path/to/vault --port 8000
Restart=always

[Install]
WantedBy=multi-user.target

Docker

FROM python:3.12-slim
WORKDIR /app
COPY pyproject.toml app.py ./
COPY silmaril/ silmaril/
RUN pip install --no-cache-dir .
EXPOSE 8000
CMD ["silmaril", "--vault", "/vault"]
docker run -v /path/to/vault:/vault -p 8000:8000 silmaril

License

MIT

Credits

Inspired by notion4ever. Built with FastAPI, python-frontmatter, and KaTeX.

Author: Daniil Merkulov

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

silmaril-0.2.3.tar.gz (32.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

silmaril-0.2.3-py3-none-any.whl (29.9 kB view details)

Uploaded Python 3

File details

Details for the file silmaril-0.2.3.tar.gz.

File metadata

  • Download URL: silmaril-0.2.3.tar.gz
  • Upload date:
  • Size: 32.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for silmaril-0.2.3.tar.gz
Algorithm Hash digest
SHA256 64600cbd8112cb452c9d0a588ecd0913e8b3739d5273933f9018d6f80055a195
MD5 a2b3c12ac6cf19193d286ec7a8955b77
BLAKE2b-256 00cc3a304cb6e885f8133e5a4ffcfd61ee70253dde7a95a01e0def89518d4bc6

See more details on using hashes here.

Provenance

The following attestation bundles were made for silmaril-0.2.3.tar.gz:

Publisher: publish.yml on MerkulovDaniil/silmaril

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file silmaril-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: silmaril-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 29.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for silmaril-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 73f6e684abfdfb3ac40735e4c1f298d99b6cddbe003b92393512ab87ac7539c6
MD5 91eb744b7a6157603f878c1cb5cc6805
BLAKE2b-256 f4ac172e9fcd997868b2eb0de433ddc72e355ce7ea33d5738326b83c1530776c

See more details on using hashes here.

Provenance

The following attestation bundles were made for silmaril-0.2.3-py3-none-any.whl:

Publisher: publish.yml on MerkulovDaniil/silmaril

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page