Getting Started
Install, build, and run Krillnotes on your machine.
What is Krillnotes?
Krillnotes is a local-first, hierarchical note-taking application. Notes live in a tree, each note has a schema-defined type, and every change is recorded in an operation log — laying the groundwork for offline-first sync.
Built with Rust, Tauri v2, React, and SQLite.
Features
- Hierarchical notes — Organize notes in an infinite tree. Each note can have children, with configurable sort order (alphabetical ascending/descending, or manual positioning).
- Typed note schemas — Note types are defined as Rhai scripts. The built-in
TextNotetype ships out of the box; custom types support fields of typetext,textarea,number,boolean,date,email,select, andrating. - User scripts — Each workspace stores its own Rhai scripts in the database. Create, edit, enable/disable, reorder, and delete scripts from a built-in script manager — no file system access required. Six example scripts ship in the
user_scripts/folder (Task, Book, Contact, Product, Recipe, Project). - On-save hooks — Rhai scripts can register
on_savehooks that compute derived fields (e.g. auto-generating a note title from first name + last name, calculating a read duration, or setting a status badge). - Search — A live search bar with debounced fuzzy matching across note titles and all text fields. Keyboard-navigable results; selecting a match expands collapsed ancestors and scrolls the note into view.
- Export / Import — Export an entire workspace as a
.ziparchive (notes + user scripts). Import a zip into a new workspace, with version-compatibility checks before importing. - Operations log viewer — Browse the full mutation history, filter by operation type or date range, and purge old entries to reclaim space.
- Operation log — Every mutation (create, update, move, delete, script changes) is appended to an immutable log before being applied, enabling future undo/redo and device sync.
- Tree keyboard navigation — Arrow keys to move between nodes, Right/Left to expand/collapse, Enter to edit the selected note.
- Resizable panels — Drag the divider between the tree and the detail panel to resize.
- Context menu — Right-click on any tree node for quick actions (Add Note, Edit, Delete).
- Multi-window — Open multiple workspaces simultaneously, each in its own window.
- Local-first — All data is stored in a single
.krillnotesfile on disk. No account, no cloud dependency, no internet connection required. - Cross-platform — Runs on macOS, Linux, and Windows via Tauri.
Requirements
| Tool | Version |
|---|---|
| Rust | 1.78+ |
| Node.js | 20+ |
| Tauri CLI | v2 |
Install the Tauri prerequisites for your platform by following the Tauri v2 setup guide.
Build & Run
# Clone the repository
git clone <repo-url>
cd Krillnotes
# Install Node dependencies
cd krillnotes-desktop
npm install
# Run in development mode (hot-reload frontend + Rust backend)
npm run tauri dev
# Build a release binary
npm run tauri build
The compiled application is placed in krillnotes-desktop/src-tauri/target/release/bundle/.
Running Tests
# Core library unit tests
cargo test -p krillnotes-core
File Format
Each workspace is a single SQLite database with the .krillnotes extension. The file contains four tables:
| Table | Purpose |
|---|---|
notes | The note tree (id, title, type, parent, position, fields) |
operations | Append-only mutation log (CRDT-style) |
workspace_meta | Per-device metadata (device ID, selection state) |
user_scripts | Per-workspace Rhai scripts (id, name, source code, load order, enabled flag) |
The file is a standard SQLite 3 database and can be opened with any SQLite browser for inspection or backup.
License
MIT — see LICENSE.