A local-first knowledge base — Obsidian-compatible, built with Tauri 2 + Svelte 5 + Rust.
Lontar is a desktop note-taking app that reads/writes plain Markdown files in an Obsidian-compatible vault structure — wikilinks ([[links]]), YAML frontmatter, tags, and folder hierarchy. Everything stays on your machine. No cloud, no accounts, no tracking.
Target: ARM64 (Raspberry Pi 5) primary, cross-platform (Linux, macOS, Windows).
| Layer | Technology |
|---|---|
| Shell | Tauri 2 — native webview, no Electron |
| Frontend | Svelte 5 (runes) + TypeScript |
| Editor | CodeMirror 6 with wikilink extension |
| Backend | Rust (edition 2024) |
| Search | Tantivy — full-text search engine |
| Indexing | Rayon parallel indexer — frontmatter, links, tags, graph |
| FS Watch | notify with debouncing |
| Theme | Catppuccin Mocha (dark-first) |
┌─────────────────────────────────────────────────────┐
│ Svelte 5 Frontend (webview) │
│ ┌──────────┐ ┌──────────┐ ┌────────────────────┐ │
│ │ Sidebar │ │ TabBar │ │ EditorPane (CM6) │ │
│ │ FileTree │ │ │ │ SidePanel │ │
│ │ SearchBar │ │ │ │ ├ Backlinks │ │
│ └──────────┘ └──────────┘ │ ├ Outline │ │
│ │ └ Tags │ │
│ └────────────────────┘ │
│ StatusBar │
├────────────────── Tauri IPC ────────────────────────┤
│ Rust Backend │
│ ┌──────────┐ ┌──────────┐ ┌────────┐ ┌────────┐ │
│ │ Vault │ │ Indexer │ │ Search │ │Watcher │ │
│ │ Manager │ │ (rayon) │ │(tantivy)│ │(notify)│ │
│ └──────────┘ └──────────┘ └────────┘ └────────┘ │
│ 21 IPC commands via tauri::command │
└─────────────────────────────────────────────────────┘
lontar/
├── src/ # Svelte 5 frontend
│ ├── App.svelte # Root layout
│ ├── app.css # Catppuccin Mocha theme
│ ├── lib/
│ │ ├── components/ # UI components (9 files)
│ │ ├── stores/ # Svelte 5 reactive stores
│ │ ├── cm6/ # CodeMirror 6 setup + extensions
│ │ └── ts/ # Types, IPC bridge, constants
│ └── main.ts # Entry point
├── src-tauri/ # Rust backend
│ ├── src/
│ │ ├── main.rs # Entry point
│ │ ├── lib.rs # Tauri builder, plugin setup
│ │ ├── commands.rs # 21 IPC commands (901 LOC)
│ │ ├── atomic_write.rs # Safe file writes
│ │ ├── vault/ # Vault manager + lock file
│ │ ├── indexer/ # Rayon parallel indexer
│ │ ├── search.rs # Tantivy search engine
│ │ └── watcher.rs # FS watcher with debouncing
│ ├── Cargo.toml
│ └── tauri.conf.json
├── .github/workflows/ci.yml # CI pipeline
├── package.json
└── README.md
libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libglib2.0-devxcode-select --install)git clone https://github.com/ajianaz/lontar.git
cd lontar
npm install
npm run tauri dev
npm run tauri build
# Rust
cd src-tauri
cargo fmt --all --check # Formatting
cargo clippy --all-targets -- -D warnings # Lint
cargo test --all # Tests
# Frontend
npx tsc --noEmit # Type check
npm run build # Build
main ──────── stable releases
└── develop ─── active development (default branch)
├── feat/xxx
├── fix/xxx
└── docs/xxx
All feature work happens on branches from develop, merged back via PR. CI runs on every push to develop and on all PRs targeting develop.
| Component | Lines of Code |
|---|---|
| Rust backend | ~4,565 |
| Svelte frontend | ~933 |
| TypeScript/TS stores | ~639 |
| Total | ~6,137 |
MIT