A fully-local, privacy-first desktop notebook that unifies Notes · Reminders · Tasks · Meeting Intelligence into one encrypted store, one search index, one link graph, and one evidence-citing AI workspace — entirely on your device.
Website · Documentation · Roadmap · Security · Contributing
Casual Note is a serious tool for people who take a lot of notes and attend a lot of meetings — and who refuse to hand their thinking to someone else's cloud. It is casually a notebook — notes, tasks, and reminders you reach for all day — that is also a best-in-class local meeting recorder and understander.
Four pillars share one encrypted local store, one search index, one link graph, and one AI workspace. A task links to the note that spawned it; a meeting becomes a note; a reminder can target any of them; and everything is findable from a single command palette. There is no account, no cloud, and no telemetry. The network is touched only by two named, user-consented services — model download and application updates — and every core workflow is verified to run with the network switched off.
- Local-first, genuinely. Your notes, tasks, audio, transcripts, and search index never leave the device. Offline is a tested, first-class mode — not a fallback.
- Private by architecture, not by toggle. Encrypted at rest (SQLCipher, key in the OS keychain), a hardened capability surface, and a CI gate that proves the shipped binary contains no telemetry.
- Unified, not bundled. One data model behind four pillars means your knowledge actually connects, instead of scattering across four disconnected apps.
- Evidence or nothing. The AI cites the transcript or note behind every fact it asserts — and returns "I don't know" rather than inventing an owner, a date, or a decision.
- Built to last. A small, fast Rust core behind a modern web UI. No Electron bloat, no background daemons, no surprises.
A block and Markdown editor with a daily-note journal, [[wikilinks]], #tags, backlinks, checklists, code blocks,
tables, and attachments. Blocks are the spine everything else attaches to.
Natural-language entry ("remind me every Monday at 9"), full recurrence, and a dual-layer scheduler that delivers alerts whether the app is open or closed, catches up on anything missed after a restart, and is honest about per-platform limits.
A focused planner in the spirit of the best task managers — Today · Upcoming · Anytime · Someday — with projects, areas, scheduled/deadline dates, and drag-to-reorder. Meeting action items flow straight into tasks.
Capture audio from a selected application and your microphone, transcribe on-device with Whisper, and generate summaries, decisions, and action items with a local LLM — each fact linked to the transcript segment that supports it.
Hybrid full-text (BM25) and semantic search across every pillar, a command palette to Go anywhere and Do anything, and an AI workspace that answers questions about your knowledge base with citations — or honestly refuses.
Casual Note is a Tauri 2 + Rust desktop application with a React/TypeScript UI. A Cargo workspace of focused crates owns all domain logic, storage, and orchestration; the WebView never sees SQL or the raw filesystem.
┌──────────────────────── Desktop WebView UI (React/TS, Tiptap) ─────────────────────────┐
│ editor · notebooks · daily · tasks · reminders · meetings · palette · search · ai │
└───────────────────────────────────── Tauri command API ────────────────────────────────┘
│
┌──────────────────────────────── Rust core (Tokio) ─────────────────────────────────────┐
│ app-service (orchestration, events) │
│ notes · tasks · reminders · scheduler · links · app-nlp · search · ai-workspace │
│ capture · media-pipeline · speech (whisper.cpp) · llm (llama.cpp) · embeddings │
│ storage (SQLite + SQLCipher, op-log, journals) · model-manager · export │
└──────────────────────────────────────────────────────────────────────────────────────┘
Network permitted only for: model download · signed updates
| Layer | Technology |
|---|---|
| Shell | Tauri 2, native WebView |
| Frontend | React, TypeScript (strict), Tiptap |
| Core | Rust (2021), Tokio |
| Store | SQLite + SQLCipher via rusqlite, NDJSON journals, append-only op-log |
| Search | FTS5/BM25 + sqlite-vec KNN fused with Reciprocal Rank Fusion |
| Speech | whisper.cpp (two-pass live + final) |
| Language | llama.cpp / GGUF (Qwen3 tiers), GBNF-constrained structured output |
| Embeddings | EmbeddingGemma-300M / bge (Matryoshka-256, int8) |
A design invariant worth calling out: every entity mutation appends to an op-log from which all derived tables (blocks, links, search, vectors) can be rebuilt bit-for-bit. This is the master correctness oracle and the seam that keeps optional future multi-device sync a re-encode rather than a re-model.
| Platform | Packaging | Notes |
|---|---|---|
| macOS | .app / DMG (universal), notarized |
ScreenCaptureKit application-audio capture |
| Windows | MSI / EXE, Authenticode-signed | WASAPI process-loopback capture |
| Linux | AppImage + Flatpak | PipeWire capture; reminder scheduler runs while the app is open |
Prerequisites: Rust 1.97.1 (pinned via rust-toolchain.toml), Node ≥ 20, and pnpm. On Linux the core crates need
libdbus-1-dev + pkg-config (the OS keystore backend); building the desktop shell additionally requires
libwebkit2gtk-4.1-dev, libsoup-3.0-dev, and libayatana-appindicator3-dev.
git clone git@github.com:CasualOffice/notes.git
cd notes
# Verify the offline core (no GUI system dependencies)
cargo check --workspace --exclude tauri-app
cargo test --workspace --exclude tauri-app
# Frontend
cd ui && pnpm install && pnpm build && cd ..
# Run the full desktop app (requires platform GUI deps + downloaded models)
cargo tauri devBefore pushing (and before tagging a release), run the full CI pipeline locally — it mirrors GitHub CI exactly, including the pinned supply-chain audit:
./scripts/ci-local.shReleases (signed installers for macOS, Windows, and Linux) are built by CI only when a version tag is pushed — never on a merge to main:
git tag v0.1.0 && git push origin v0.1.0The canonical design set lives in docs/ (start with the index). All documents are
subordinate to the Design Foundation; for schema the Data Model is authoritative, for the interface surface the
HLD, and for scope the PRD.
| Document | Owns |
|---|---|
| Product Requirements | Vision, personas, requirements, metrics, non-goals |
| System Architecture | Decomposition, threading, security, packaging |
| High-Level Design | Command/event surface, adapter traits, sequences |
| Data Model | The authoritative SQLite/SQLCipher schema |
| Feature Specifications | Per-feature behavior & acceptance criteria |
| Roadmap | Sequencing, milestones, test strategy, risks |
Build progress is tracked in TRACKER.md; conventions and invariants for contributors are in
CLAUDE.md.
Casual Note is engineered notebook-first, so every pillar plugs into a real spine:
| Phase | Milestone | Focus |
|---|---|---|
| 1 | v0.1 | Core notebook, tasks, reminders, local store, full-text search |
| 2 | v0.5 | Meeting capture, transcription, and AI summaries |
| 3 | v1.0 | Semantic search, AI workspace, and knowledge graph |
| 4 | v2.x | Optional end-to-end-encrypted multi-device sync and integrations |
See the full roadmap for workstreams, acceptance gates, and the test strategy. Casual Note is under active development toward the v0.1 Core Notebook milestone.
Contributions are welcome. Please read CONTRIBUTING.md and CLAUDE.md first, and SECURITY.md before touching anything that reads user data. Participation is governed by our Code of Conduct.
Security and privacy are the product. To report a vulnerability, follow the process in SECURITY.md — please do so privately and never include real user data.
Licensed under the Apache License 2.0. Bundled inference engines and downloaded model weights carry their own licenses; see NOTICE.