oriel
Turn any folder of Markdown into a beautiful website — instantly.
pip install oriel
oriel serve . # live site → http://127.0.0.1:18787
oriel build . # or freeze to ./dist to publish
Every Markdown file becomes a page, images become a gallery, and edits refresh the browser on their own. It looks like a publication, not a file listing — with no build step, no front matter, no config.
[!TIP] Especially good for what agents leave behind. Point oriel at a folder Claude Code or a research run just wrote and read it as a real site — dated notes, plots,
\(…\)math and all — instead of scrolling raw files. →examples/agent-run
Why not MkDocs / markserv / GitHub?
| oriel | MkDocs · Quarto | markserv | GitHub | |
|---|---|---|---|---|
| No build, no config | ✅ | ❌ | ✅ | ✅ |
| Live on every refresh | ✅ | ~ | ✅ | ❌ |
| Looks like a publication | ✅ | ✅ | ❌ | ~ |
| Figures wall + dashboards | ✅ | ~ | ❌ | ❌ |
Obsidian [[wikilinks]] |
✅ | ❌ | ❌ | ❌ |
One pip install, static export |
✅ | ✅ | ❌ | — |
oriel is the middle that was missing: a tiny read-only server you keep running next to a folder.
What you get
📂 Any folder → a site. Loose Markdown at the top level and subfolders both show up; a root README.md is the home page; images become a gallery. Obsidian vaults and agent dumps work as-is.
✍️ Real Markdown. Syntax-highlighted code with copy buttons, KaTeX math in $…$ or \(…\), tables, an auto table-of-contents, and GitHub-style > [!NOTE] callouts.
🔗 Obsidian & agent-native. [[wikilinks]] / ![[embeds]] resolve, dated notes (YYYY-MM-DD_*.md) become a browsable journal, generated plots collect into a figures wall.
⚡ Live & self-contained. Edits auto-refresh the browser — no manual reload; KaTeX is cached locally so math works offline; light/dark themes with a toggle and six presets.
📊 Dashboards via plugins. Drop in an oriel_plugins.py for custom pages — the bundled example adds run-manifest and LLM-spend dashboards.
🚀 Publish anytime. oriel build freezes everything to static HTML — figures and KaTeX bundled, search still works (client-side index) — ready for GitHub Pages.
Publish (static export)
oriel build . # → ./dist, ready to deploy
oriel build docs --base /oriel # subpath hosting (e.g. project GitHub Pages)
URLs stay identical, math renders offline (bundled KaTeX), and search keeps working via a client-side index. A .nojekyll ships for GitHub Pages.
Configure (optional)
Zero config works. To customize, drop an oriel.toml at the folder root:
title = "My Notes"
preset = "ocean" # terracotta · newsprint · forest · ocean · plum · rose
landing = "guide/intro.md"
…or pick a look from the CLI: oriel serve . --theme forest. Every key is in examples/oriel.toml and the docs.
Plugins
A plugin is a register(site) function that adds pages:
def register(site):
@site.page("/status", "status")
def status(): # return an HTML body; oriel adds the chrome
return site.markdown((site.root / "STATUS.md").read_text())
See examples/oriel_plugins.py for a real one.
[!WARNING] A plugin is ordinary Python that oriel executes — same trust level as running the repo. Don't point oriel at a folder you don't trust.
Security
oriel is a read-only viewer with a shared-secret key — for a personal machine, an SSH tunnel, or behind a reverse proxy, not a public unauthed service on plain HTTP. See SECURITY.md.
Develop
pip install -e ".[dev]"
make dev # serve ./docs locally (theme gallery, live reload)
make test # pytest
make lint # ruff
make help lists every target. The full docs in docs/ are themselves an oriel site.
An oriel is a bay window that projects out from a wall for a wider view — a window onto a folder.
MIT — see LICENSE.
Release files for oriel 0.1.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 | |
|---|---|---|---|
| oriel-0.1.0.tar.gz | 172.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| oriel-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 219.9 kB
Release files / oriel-0.1.0.tar.gz
| Download URL | oriel-0.1.0.tar.gz |
|---|---|
| Size | 172.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b89091bffc6329c4b8ac47344d9bd6bf0d186d23ce04454503f7126f7ec6d58a
|
|
BLAKE2b-256 checksum How to use checksums |
e7715dfb6b6329520be89e0c0cfcaad70466701c6553844c78973aa63f6530c8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.30 {"installer":{"name":"uv","version":"0.11.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / oriel-0.1.0-py3-none-any.whl
| Download URL | oriel-0.1.0-py3-none-any.whl |
|---|---|
| Size | 47.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3ba2cdfb49f4762502534ffe9cf895dee67d49b570a30a6a22acb8252a2fa793
|
|
BLAKE2b-256 checksum How to use checksums |
b0761ff2002512e6d25207b20353d506242830b49591a711c8d5e0ded55ffc9e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.30 {"installer":{"name":"uv","version":"0.11.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|