Notrios (formerly "Notes Companion") is a local-first note-taking, search, import, and publishing system for very large Markdown and document collections.
It combines a Go REST/MCP service (notriosd), a built-in GUI, SQLite/FTS5-backed canonical storage, content-addressed resources, optional Recoll-derived search/extraction, and support for third-party native clients (C++/Qt, Go/Wails, Rust/Tauri) over the same API.
The v0.1 MVP and the v0.2 Notrios redesign are complete — see PLAN.md and ROADMAP.md. The repository is structured so a coding agent can resume safely after usage limits or model changes.
- Service: Go, standard library first, SQLite/FTS5 canonical storage. Binaries:
notriosd(service) andnotriosctl(CLI); Go modulegithub.com/renesugar/notrios. - MCP: read-only JSON-RPC MCP MVP adapter is mounted at
/mcp; replace with the official Go SDK once dependency policy/tooling is settled. The MCP/REST surface is being expanded so a full note-taking client can be built on it alone. - Built-in GUI: Go + Wails (
cmd/notrios, built withmake gui) with-no-gui(headless service) and-gui-only(pure REST client, optionally against a remote service via-remote) modes; the React + Vite frontend (md-editor-rt, notebooks/tags sidebar, incremental "All notes") runs inside the webview and in the browser. SeeUI_DESIGN.md. - Search: SQLite FTS5 for managed notes; Recoll as an optional derived sidecar for field/front-matter search, OCR-style extraction, and arbitrary files (see
RECOLL_INTEGRATION.mdandSEARCH_QUERY_LANGUAGE.md). - Data model: nested notebooks with emoji icons, tags, and query-backed "search notebooks" ("All notes", "Trash", "Help") — see
NOTEBOOKS_AND_SEARCH_NOTEBOOKS.md. - Import sources: Joplin RAW, Obsidian vaults, Twitter/X archives (thread-preserving), ChatGPT exports, Claude exports.
- Resource store: content-addressed assets with exact hashes and later perceptual hashes.
- Publishing/docs: Quartz-compatible curated subset publishing planned; project documentation ships as a GitHub Pages site with PageFind search (
DOCS_SITE.md).
User documentation lives under docs/ and is published as a GitHub Pages site with PageFind search (bash scripts/build_docs_site.sh builds it locally). notriosctl seed-help mirrors the same content into the app's built-in read-only Help notebook for offline use.
Requirements (Ubuntu-tested): Go 1.25+, build-essential pkg-config libsqlite3-dev, and Node 22 for the web UI. Full details, GUI prerequisites, and local installation: docs/installation.md.
git clone https://github.com/renesugar/notrios.git
cd notrios
make build web # bin/notriosd, bin/notriosctl, web/dist/
./bin/notriosd -config config/config.example.yaml
# open http://127.0.0.1:8080 (REST: /api/v1, MCP: /mcp)Desktop GUI (needs libgtk-3-dev libwebkit2gtk-4.1-dev):
make gui && ./bin/notriosEverything also runs from source: go run ./cmd/notriosd -config config/config.example.yaml and go run ./cmd/notriosctl <command>. make help lists all build, test, docs, and cleanup targets. There are no official prebuilt binaries yet; Notrios is built from source on Ubuntu Linux (the only tested platform).
notriosd now loads runtime configuration from -config <path>. When no path is supplied, it loads config/config.example.yaml from a source checkout if that file exists; otherwise it uses compiled local-development defaults. The -addr and -db flags remain available as explicit overrides.
On startup, the service creates the configured data directory, SQLite database parent directory, asset store, projection directory, and search-sidecar index directory (search_sidecar.index_dir). /api/v1/status reports the active storage roots, database state, schema version, capability flags, and search limits. The current schema version is reported by /api/v1/status (database_info.schema_version).
- v0.1 MVP: complete (see
plans/mvp/MVP_RELEASE_REPORT.md). - v0.2 Notrios redesign: complete (all 16 tasks; see
PLAN.mdandplans/v0.2/) — notebooks/tags/search notebooks, source provenance with conversation threads, the query language, the optional Recoll sidecar, five importers, query-scoped export/import, the Wails GUI with themes, and the documentation site. - Active milestone: v0.3 import/resource/media hardening — see
PLAN.md(tasks H1–H10) andROADMAP.md. - Agent progress/attempt tracking:
agent/PLAN_STATUS.md,agent/ATTEMPT_LOG.jsonl, andagent/MODEL_LOG.jsonl.
Development happens on develop; main takes reviewed merges. ENVIRONMENT_SETUP.md covers the contributor environment, everyday make targets, validation, and the cleanup/pre-checkin workflow (make clean, make precheck).
Notrios is licensed under the Apache License 2.0. All code and dependencies must remain Apache-2.0 compatible; GPL tools (Recoll, Xapian) are only ever invoked as external user-installed processes.
NOTEBOOKS_AND_SEARCH_NOTEBOOKS.md— notebooks, tags, search notebooks, Trash/Help semantics.SEARCH_QUERY_LANGUAGE.md— user query language and backend translation rules.RECOLL_INTEGRATION.md— Recoll sidecar design (replaces sist2) and licensing boundary.DOCS_SITE.md— GitHub Pages documentation site with PageFind and the Help notebook.CODING_CLIENT_HANDOFF.md— agent handoff (formerlyCODEX_HANDOFF.md).
The scaffold-era and v0.1-MVP reports (plans/scaffold/SCAFFOLD_*.md, plans/mvp/MVP_TASK*_REPORT.md, plans/mvp/MVP_RELEASE_REPORT.md) are retained as historical records of how the project was built; they intentionally keep the old "Notes Companion" naming and superseded design decisions. Living design documents: FEATURE_MATRIX.md, UI_DESIGN.md, PUBLISHING_POLICY.md, VERSIONING_AND_SYNC_POLICY.md, WORKSPACE_MAINTENANCE.md, plus the redesign documents listed above.
notriosctl imports Joplin RAW exports, Obsidian vaults, Twitter/X archives, ChatGPT exports, and Claude exports, and round-trips a native archive format — each with a --dry-run mode and an idempotent re-run story. See docs/import-export.md and docs/cli.md.
make validate # tests + repository checks
make smoke # end-to-end REST/MCP smoke test
bash scripts/run_performance_smoke.sh
bash scripts/package_release.sh # validated source ZIP into dist/See PACKAGING.md, SECURITY_REVIEW.md, and RELEASE_CHECKLIST.md before tagging a release.