Time, executed well.
Kairo is a keyboard-first, offline-first terminal task manager designed for focused execution. Built with Bubble Tea, Lip Gloss, and SQLite.
- Task Engine: Title, description (Markdown), tags, priority, deadline, status.
- Views: Inbox, Today, Upcoming, Tag, Priority.
- Command Palette: Ranked fuzzy search for tasks, commands, and tags.
- Offline Storage: SQLite with WAL + migrations for reliability and speed.
- Git Sync: Repo-backed, per-task JSON files, auto-commit, pull/push.
- Plugins: Lua-based commands and views with hot-reload.
- Import/Export: Support for JSON and Markdown.
- Theming: Built-in and user-definable theme overrides with runtime switching.
Kairo is built with a modular architecture designed for performance, extensibility, and data sovereignty.
- UI Layer (Bubble Tea): An Elm-inspired functional TUI framework. Kairo uses a state-machine approach to manage different modes (List, Detail, Editor, Palette) and sub-component communication.
- Storage Layer (SQLite): A robust local database using
modernc.org/sqlite(pure Go). It features WAL (Write-Ahead Logging) for concurrent access and a migration system for schema evolution. - Sync Engine (Git): A unique "no-backend" synchronization strategy. It serializes tasks into individual JSON files within a local Git repository, leveraging Git's branching and merging capabilities for conflict resolution and versioning.
- Search Engine: An in-memory index utilizing a ranked fuzzy matching algorithm. It provides sub-millisecond search results by weighting matches based on contiguity and word boundaries.
- Plugin System (Gopher-Lua): A lightweight Lua VM integration. It allows users to extend the TUI with custom commands and views without recompiling the binary.
- Interaction: User input is captured by the Bubble Tea loop and dispatched to the active component.
- Persistence: Changes are immediately persisted to the SQLite database.
- Synchronization: If enabled, the Sync Engine periodically (or on-demand) exports database state to the Git-backed task files and performs
git pull/pushoperations. - Extensibility: Lua plugins can hook into the task creation/deletion lifecycle and inject new items into the command palette.
kairo/
βββ CHANGELOG.md
βββ cmd
β βββ kairo
β βββ main.go
βββ CODE_OF_CONDUCT.md
βββ configs
β βββ kairo.example.toml
βββ CONTRIBUTING.md
βββ go.mod
βββ go.sum
βββ image.png
βββ internal
β βββ app
β β βββ model.go
β β βββ msg.go
β βββ config
β β βββ config.go
β βββ core
β β βββ codec
β β β βββ json.go
β β β βββ markdown.go
β β βββ ids.go
β β βββ nlp
β β β βββ deadline.go
β β βββ task.go
β β βββ view.go
β βββ plugins
β β βββ host.go
β βββ search
β β βββ fuzzy.go
β β βββ fuzzy_test.go
β β βββ index.go
β βββ storage
β β βββ migrations.go
β β βββ repo.go
β β βββ repo_test.go
β βββ sync
β β βββ engine.go
β βββ ui
β β βββ detail
β β β βββ model.go
β β βββ editor
β β β βββ model.go
β β βββ help
β β β βββ model.go
β β βββ keymap
β β β βββ keymap.go
β β βββ palette
β β β βββ model.go
β β βββ styles
β β β βββ styles.go
β β βββ tasklist
β β β βββ model.go
β β βββ theme
β β β βββ theme.go
β β βββ theme_menu
β β βββ model.go
β βββ util
β βββ paths.go
βββ LICENSE
βββ Makefile
βββ plugins
β βββ sample.lua
βββ README.md
βββ SECURITY.md
βββ VERSION.txt- Go 1.26+
git clone https://github.com/programmersd21/kairo.git
cd kairo
make buildFor a static binary (pure Go SQLite driver, no CGO):
CGO_ENABLED=0 make buildRun the binary:
./kairoctrl+p: Open command paletten: Create new taske: Edit selected taskd: Delete selected taskenter: View task details1..5: Switch views (Inbox, Today, Upcoming, Tag, Priority)t: Cycle themeq/esc: Back/Close
Copy the example configuration to your configuration directory:
- Windows:
%APPDATA%\kairo\config.toml - macOS:
~/Library/Application Support/kairo/config.toml - Linux:
~/.config/kairo/config.toml
Example:
cp configs/kairo.example.toml ~/.config/kairo/config.tomlEnable sync in your config.toml and set sync.repo_path to a local git repository.
Kairo uses a distributed approach:
- Each task is stored as an individual JSON file.
- Changes are committed locally automatically.
- Manual sync:
kairo sync
Kairo supports Lua plugins for custom commands and filters. Place .lua files in your plugins/ directory.
Example: plugins/sample.lua
Contributions are welcome! Please see CONTRIBUTING.md for guidelines and CODE_OF_CONDUCT.md for our code of conduct.
Kairo is released under the MIT License.
- Incremental DB-to-UI streaming for large datasets.
- Conflict-free sync via an append-only event log.
- Sandboxed Plugin SDK.
- Smart suggestions and spaced repetition.
- Multi-workspace support with encryption at rest.