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.2.tar.gz (32.2 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.2-py3-none-any.whl (29.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: silmaril-0.2.2.tar.gz
  • Upload date:
  • Size: 32.2 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.2.tar.gz
Algorithm Hash digest
SHA256 b03d363f9caf2d04232fae86e559eadf227b1b07882292cf83b1bd17079f528f
MD5 e91bfbeccc5558251e1e1e7d0010d2fe
BLAKE2b-256 9874ed86e5dee115e65871e30cdd66ac07244d7245e9024b1a54105231eae84f

See more details on using hashes here.

Provenance

The following attestation bundles were made for silmaril-0.2.2.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.2-py3-none-any.whl.

File metadata

  • Download URL: silmaril-0.2.2-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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e39a1c7a3b8d9361d5ce8aa4317a206b77eba5fca2b6c848a83fe85a252740cb
MD5 431a50bb8ecb49505ed11e83ba2f9bb1
BLAKE2b-256 c0dda0029291a48896b93cea42838789d303b667d463b48bf93d7a939afb6f44

See more details on using hashes here.

Provenance

The following attestation bundles were made for silmaril-0.2.2-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