Deployment
Single binary
Download the binary for your OS/arch from Releases and run it:
OVERVIEW_DATA_DIR=/var/lib/overview ./overview
Prebuilt image (GHCR)
Multi-arch images (linux/amd64, linux/arm64) are published to the GitHub
Container Registry on every v* tag:
docker run -d -p 5230:5230 \
-v ov-data:/data \
-e OVERVIEW_ADDR=":5230" \
-e OVERVIEW_DATA_DIR=/data \
-e OVERVIEW_AUTH=multi \
ghcr.io/overview-note/overview:latest
Tags: latest, X.Y.Z, and X.Y.
Docker Compose
services:
overview:
image: overview:latest
build: .
ports:
- "5230:5230"
volumes:
- ./data:/data
environment:
OVERVIEW_ADDR: ":5230"
OVERVIEW_DATA_DIR: /data
OVERVIEW_AUTH: multi
restart: unless-stopped
Configuration
Variable |
Default |
Description |
|---|---|---|
|
|
Listen address |
|
|
Data root |
|
|
SQLite index path |
|
|
Upload size limit |
|
|
Revisions kept per note ( |
|
|
|
|
|
Site title (UI and render mode) |
|
|
Static-site theme: |
|
|
Read-only documentation-site mode |
|
— |
External origin used in email links (else derived per request) |
|
|
|
|
|
|
|
— |
Log file path (stdout only when unset) |
|
|
Max log file size before rotation |
|
|
Rotated files to keep ( |
|
— |
Static bearer token for MCP (protocol |
|
— |
OpenAI-compatible base URL (enables AI) |
|
— |
AI provider key |
|
|
AI model |
|
— |
SMTP host (with |
|
|
SMTP port |
|
— |
SMTP username (empty → no auth) |
|
— |
SMTP password |
|
— |
From address |
|
|
Use STARTTLS |
|
— |
S3-compatible asset storage bucket (initial value; overridable in Settings) |
|
— |
S3 endpoint (e.g. |
|
|
S3 region |
|
— |
S3 credentials |
|
|
Use HTTPS for S3 |
|
— |
Optional CDN / public URL prefix |
overview build (alias overview export) also reads OVERVIEW_EXPORT_DIR (default _site)
and OVERVIEW_EXPORT_BASE (URL prefix, default /). Pass --all to include non-public notes.
Static site from the CLI
Render the vault to a deployable static site without running the server:
overview -C ./data build ./public --base /docs/ # public notes
overview -C ./data build ./public --all # include private notes
overview -C ./data build ./public --theme dark # force light|dark|auto
The exported site renders like the app's reading view: it links the shared content.css
and uses the same DOM contract, with highlight.js/KaTeX/Mermaid vendored at the app's
versions and loaded on demand (offline-capable; no extra weight for pages without math,
diagrams or code). Under an S3 asset backend it copies no local assets/ and points at
OVERVIEW_S3_PUBLIC_URL instead.
The exported site follows the visitor's system preference by default (--theme auto);
pass --theme light or --theme dark (or set OVERVIEW_SITE_THEME) to pin it. The
palette matches the app (warm amber accent).
Email & accounts
Email-based user management (invitations, verification, password reset) needs an SMTP
transport. Configure it with the OVERVIEW_MAIL_* variables above or at runtime in
Settings → Mail server (admin only) — the runtime value wins and the password is never
returned by the API. Set OVERVIEW_BASE_URL so links in outbound email point at the right
public origin when running behind a proxy.
Self-registration and the login-page notice/ICP/link are managed in Settings → Site.
Object storage (S3)
Attachments are stored on the local filesystem by default. To use any S3-compatible object
store, either set the OVERVIEW_S3_* variables above or configure it at runtime in
Settings → Object storage (admin only) — no restart required.
- The
OVERVIEW_S3_*variables seed the initial value; once a configuration is saved in the settings page it takes precedence across restarts. - Leave the bucket empty to keep using local storage.
- The secret key is never returned by the API; leave it blank when saving to keep the stored value.
- Test connection probes the values currently in the form without changing the active backend.
- Switching backends is immediate for new uploads and reads, but existing assets are not migrated between local storage and the bucket — move them yourself if needed.
Logging
Logs are structured (slog). stdout always receives logs; set OVERVIEW_LOG_FILE to
also write to a file, which rotates by size (OVERVIEW_LOG_MAX_MB, OVERVIEW_LOG_BACKUPS).
Pick OVERVIEW_LOG_FORMAT=json (default) or text, and OVERVIEW_LOG_LEVEL.
OVERVIEW_LOG_FILE=/var/log/overview/overview.log \
OVERVIEW_LOG_FORMAT=text \
OVERVIEW_LOG_LEVEL=info \
./overview
Documentation-site mode
Run Overview as a public, read-only documentation site — no login, only public notes:
docker run -d -p 8080:5230 \
-e OVERVIEW_RENDER=true \
-e OVERVIEW_SITE_TITLE="Overview Docs" \
-v "$(pwd)/site/notes:/data/notes" \
ghcr.io/overview-note/overview:latest
In this mode only a read-only API surface is exposed (public notes, the tree, health and API docs); private endpoints return 404 and writes are rejected. This is exactly how this documentation site is built.
Backups
Your content is just files. Back up the whole data/ directory:
data/
├── notes/ # Markdown (source of truth)
├── assets/ # uploaded attachments
├── .history/ # revision snapshots
├── .trash/ # soft-deleted notes
└── overview.db # rebuildable index