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 (
.basefiles) 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.mdnot/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:
- Cloudflare Access / Tunnel — zero-trust, recommended for public hosting
- Reverse proxy with basic auth — nginx, caddy
- Run locally —
silmaril --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
Credits
Inspired by notion4ever. Built with FastAPI, python-frontmatter, and KaTeX.
Author: Daniil Merkulov
Metadata
Release files for silmaril 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| silmaril-0.5.0.tar.gz | 36.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| silmaril-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 70.3 kB
Release files / silmaril-0.5.0.tar.gz
| Download URL | silmaril-0.5.0.tar.gz |
|---|---|
| Size | 36.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2de8a05350e83aea18c4c1f9bbec03d00fa7026f59679fe40df40e6a62a69f63
|
|
BLAKE2b-256 checksum How to use checksums |
29700e76cddb415aae46157af76f835a7650f3e1cf02b6cf0134540a32ebaa4c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 15, 2026.
Transparency logRelease files / silmaril-0.5.0-py3-none-any.whl
| Download URL | silmaril-0.5.0-py3-none-any.whl |
|---|---|
| Size | 34.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
18f970eff2053635c5d674de0a610167dc82b19190fd3cf7bdce55f52bcedd71
|
|
BLAKE2b-256 checksum How to use checksums |
b404a93f35c3c75ce8f9e5a20c16395edae4d3599e8252063996c6f7d97fcdda
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 15, 2026.
Transparency log