Features
Content & organization
- Hierarchical folders — physical directories map to the navigation tree
- Markdown as the source of truth — Git-friendly and portable
- Wiki-links & backlinks —
<span class="wiki-link wiki-missing">Note</span>with a backlinks panel - Per-note visibility — Private or Public share link
Editing
- Rich editor — Vue 3 + Tiptap: headings, lists, quotes, code, images, tables
- Code highlighting, task lists, math (KaTeX), Mermaid diagrams, GFM footnotes — all stored as plain Markdown
- Images — paste / drag-and-drop with optional client-side compression
- File attachments — upload any file type and insert it as a download link; non-inline
types are served with
Content-Disposition: attachment(RFC 5987 filenames) - Slash commands — type
/for headings, lists, tasks, tables, math, diagrams, code - Outline (TOC) — scroll-linked table of contents
- Table bubble menu — row/column controls above the active table
- Focus mode (
F9) — hides the top bar and sidebar and offers a floating Exit focus button in the bottom-right corner (Esc andF9also leave it) — and a keyboard-shortcuts panel (?) - Create from the home empty state — the landing page offers New note / New folder, so a note can be started even when focus mode hides the sidebar
Search
- Full-text search — SQLite FTS5 with a custom CJK unigram + bigram tokenizer for
real substring matching (e.g.
发模matches并发模型) - Global search with
Ctrl/Cmd+K
AI-native
- AI assistant — chat, organize and complete notes
- AI agent (tool calling) — the assistant can execute in-app actions: read, search,
write, move, rename and delete notes and attachments via OpenAI-compatible function
calling. A bounded loop (8 steps by default) runs against a single capability source
(
internal/tools) shared with MCP. Dangerous actions pause for an explicit approve/reject with a human-readable preview; tools are trimmed by role and every call is audited with redacted arguments - MCP server — protocol
2026-07-28(stateless_meta,server/discover,resultType) with backward compatibility, exposing 22 tools that mirror the CLI/REST API
Access & integration
- Offline CLI —
overview <command>runs the same operations directly againstdata/with no server (notes, search, history, trash, assets, archives, static-site build) - Multi-user auth — bcrypt, sessions, roles, first-run setup; with authentication disabled (desktop/local single-user) the caller acts as the owner/admin, so every admin setting is reachable without a login
- Desktop app — Wails v3 native window with tray, single instance,
.md/overview://integration, drag-and-drop, launch at login, first-run vault onboarding, and vault management (change / open the data directory, restart) under Settings → Desktop - Email accounts — invite users, email verification and password reset (SMTP configurable at runtime under Settings → Mail server), optional self-registration, and a customizable login page (notice, ICP, link)
- WebDAV — mount the vault in Obsidian, Finder, or mobile apps
- REST API — versioned under
/api/v1, OpenAPI at/api/docs - PWA — installable app shell with a responsive mobile layout: a drawer sidebar
(hamburger + backdrop), a phone-friendly top bar, full-width editor, horizontally
scrolling toolbars, right-side panels as a bottom sheet (outline/backlinks/history/AI),
a mobile search overlay, and touch basics (tap feedback, 16px inputs, ≥40px targets,
100dvh+ safe-area insets) - Quick capture — paste a page URL in the top-bar dialog; the server fetches the title and body (SSRF-guarded) and saves it as a note in the folder you pick
Operations
- Single binary with the frontend embedded (Docker or
go run); multi-arch images on GHCR - Structured logging — JSON or text, to stdout and/or a size-rotated file
- Portable archive — export/import the whole vault (notes + attachments) as a ZIP
- Version history (with retention) and trash with restore
- Live sync — a file watcher reindexes external edits
- Pluggable assets — local filesystem or any S3-compatible store, switchable at runtime under Settings → Object storage (no restart; existing assets are not migrated)
- Static export with a client-side search and
sitemap.xml/robots.txt, rendered identically to the app's reading view (sharedcontent.css+ aligned DOM) with highlight.js/KaTeX/Mermaid vendored at the same versions and loaded on demand
Desktop sync
- Desktop ↔ server vault sync — keep a desktop vault and a self-hosted server in step
(Trilium-style client ↔ server). Identity is the frontmatter note
id; a strong-ETagGET /api/v1/sync/manifestdrives three-way reconciliation, then notes and attachments are pulled, pushed, deleted and moved - Real-time + incremental — changes stream over SSE (
GET /api/v1/sync/events) with a cursor-basedGET /api/v1/sync/changes(sincenote sequence +sinceTstombstone time); the client reconciles on change and persists its cursor, with interval polling (default 60s) and file-watcher triggers as fallbacks - Empty folders sync — folder creates/moves/deletes share the note change sequence
(migrations
0011/0012), so a folder with no notes still propagates - Faithful writes — sync stores the exact Markdown bytes (
raw) with abaseVersion, so a concurrent edit is reported, never silently overwritten - No destructive merge — both-edited notes produce a
<name> (conflict-<device>-<ts>).mdcopy that you resolve with keep local / keep remote in Settings → Sync - Direction —
both/pull/push; the token is kept in.sync-token(owner-only) and remote servers must be HTTPS - Attachments anywhere — synced by vault-relative path, including on S3 backends; an oversized attachment is skipped with a warning rather than failing the sync
- Console-less desktop build — Windows uses the GUI PE subsystem (
-H=windowsgui) and logs to<DataDir>/logs/desktop.log
Appearance & settings
- Gridea-style palette — warm amber accent (
#D4870E) with light and dark variants, shared with the exported static site - Custom accent color — pick a preset or any hex; the UI derives a light/dark ramp
- Standalone settings page (
/settings) — appearance, editor, AI, mail, site, object storage, data, user management and API tokens
Performance & UI
- Fast first load — routes are code-split and static assets are gzip-compressed with long-term caching (Lighthouse 99; initial JS ~154 KB)
- Resizable sidebar with stable hover states and tooltips for long names
- Compact sidebar (15px notes / 13px folders) and a soft warm theme with a clear hierarchy
See MCP and AI for integration details.