Skip to content

programmersd21/kairo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

53 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

πŸ“ Kairo β€” 🌿 Minimal, powerful task management.

Main App

Release CI Go Report Card License: MIT

βŒ› Time, executed well.


✨ A Premium Terminal Task Manager Designed for Focused Execution

πŸƒπŸ» Kairo is a lightning-fast, keyboard-first task management application
built for developers and power users.

It combines the simplicity of a command-line tool
with the sophistication of a modern, premium design system.

🎯 Instant Responsiveness β€” Sub-millisecond task searching and navigation
🎨 Premium UI Design β€” Modern color palette with accessibility at its core
⌨️ Keyboard-First β€” Complete control without ever touching a mouse
πŸ–₯️ Seamless Rendering β€” Pixel-perfect background fills the entire viewport, no terminal bleed-through
πŸ” Offline-First β€” Your data lives locally in SQLite, always under your control
πŸ”— Git-Backed Sync β€” Optional distributed sync leveraging Git's architecture
🧩 Extensible β€” Unified Lua plugin system and CLI automation API
πŸ“± Responsive Layout β€” Gracefully adapts to any terminal size
πŸ€– Automation-Friendly β€” Headless API for external scripts and CI/CD

Built with Bubble Tea (TUI framework), Lip Gloss (terminal styling), and SQLite (local storage).


✨ Core Features

Feature Description
Task Service Single source of truth for TUI, Lua, and CLI automation
Lua Plugins Native first-class scripting with event hooks (GopherLua)
Automation API Stable CLI interface for external control and JSON integration
Event Hooks React to task creation, updates, and app lifecycle events
Smart Filtering Multiple views: Inbox, Today, Upcoming, Completed, by Tag, by Priority
Fuzzy Search Lightning-fast command palette with ranked results
Strike Animation Visual feedback when completing tasks with 'z'
Offline Storage SQLite with WAL for reliability and concurrent access
Git Sync Optional repository-backed sync with per-task JSON files
Import/Export JSON and Markdown support for data portability

πŸ“¦ Installation

Linux / macOS

curl -fsSL https://raw.githubusercontent.com/programmersd21/kairo/main/scripts/install.sh | bash

Installs to $HOME/.local/bin/kairo (fallback: /usr/local/bin/kairo) and attempts to persist the PATH update in your shell profile when needed.

Windows (PowerShell)

iwr -useb https://raw.githubusercontent.com/programmersd21/kairo/main/scripts/install.ps1 | iex

Installs to %USERPROFILE%\\AppData\\Local\\Programs\\kairo\\kairo.exe and adds the install directory to your user PATH.

Updates

kairo update

Downloads the latest GitHub Release for your OS/arch, verifies it against checksums.txt, and safely replaces the installed binary. On Windows, the update is applied after kairo update exits; run kairo again once it completes.


πŸ€– Automation & CLI API

Kairo provides a stable CLI API for external automation. Every operation available in the TUI can be performed via the api subcommand.

Usage

# List tasks with a specific tag
kairo api list --tag work

# Create a new task
kairo api create --title "Finish report" --priority 1

# Update a task
kairo api update --id <task-id> --status done

# Advanced JSON interface
kairo api --json '{"action": "create", "payload": {"title": "API Task", "tags": ["bot"]}}'

Other CLI Commands

# Check installed version
kairo version

# Update to the latest version
kairo update

# Export tasks
kairo export --format json --out tasks.json
kairo export --format markdown --out tasks.md

# Import tasks
kairo import --format json --in tasks.json

# Sync with Git (if configured)
kairo sync

πŸ”Œ Plugins (Lua)

Extend Kairo with custom logic, event hooks, commands, and views using Lua.

Plugin Structure

-- plugins/my-plugin.lua
local plugin = {
    id = "my-plugin",
    name = "My Plugin",
    description = "Reacts to tasks",
    version = "1.0.0",
}

-- Hook into events
kairo.on("task_create", function(event)
    kairo.notify("New task: " .. event.task.title)
end)

-- Register custom commands
plugin.commands = {
    { id = "hello", title = "Say Hello", run = function() kairo.notify("Hello!") end }
}

return plugin

Supported Events

  • task_create
  • task_update
  • task_delete
  • app_start
  • app_stop

Lua API Reference

Method Description
kairo.create_task(table) Create a new task
kairo.update_task(id, table) Update an existing task
kairo.delete_task(id) Delete a task
kairo.list_tasks(filter) List tasks with optional filter
kairo.on(event, function) Register an event listener
kairo.notify(msg, is_error) Send a notification to the UI

🎨 Design System

Kairo features a minimalist design system optimized for clarity and focus.

Design Philosophy

  • Breathable Layout β€” Reduced padding and thin borders for a clean, modern look
  • Seamless Backdrop β€” Custom rendering engine ensures the theme background covers the entire terminal window
  • Instant Feedback β€” Smooth strikethrough animations when completing tasks
  • Keyboard-First β€” All interactions optimized for speed
  • High Compatibility β€” Uses standard Unicode symbols for consistent rendering across all terminals

⌨️ Keyboard Navigation

Essential Commands

Shortcut Action
ctrl+p πŸ” Open Command Palette
z ⚑ Strike (toggle completion with animation)
tab / shift+tab β†’ / ← Switch views
n βž• Create new task
e ✏️ Edit selected task
enter πŸ‘οΈ View task details
d πŸ—‘οΈ Delete task
t 🎨 Cycle themes
? ❓ Show help menu
q ❌ Quit

Plugin Menu Shortcuts

Shortcut Action
enter πŸ‘οΈ View plugin details
u πŸ—‘οΈ Uninstall plugin
o πŸ“‚ Open plugins folder
r πŸ”„ Reload plugins
p / esc ❌ Close menu

View Shortcuts

Shortcut View
1 - 9 Switch Views β€” Instant access to all tabs (Inbox, Today, Plugins, etc.)
f Tag Filter β€” Quickly jump to Tag View and filter by name
tab / shift+tab Cycle Views β€” Move through all available tabs

Pro Tips

  • Press f to open the tag filter input modal for direct tag entry
  • Type tag name and press enter to apply filter, or esc to cancel
  • Type #tag in the command palette to jump to a specific tag
  • Type pri:0 to filter tasks by priority level
  • Use ctrl+s to save while editing
  • Press esc to cancel and return to the list

βš™οΈ Configuration

Config Location

OS Path
Windows %APPDATA%\kairo\config.toml
macOS ~/Library/Application Support/kairo/config.toml
Linux ~/.config/kairo/config.toml

Quick Setup

cp configs/kairo.example.toml ~/.config/kairo/config.toml

Then edit to customize:

  • Theme selection β€” Choose from 12 built-in themes:
    • Dark: Catppuccin (Default), Midnight, Aurora, Cyberpunk, Dracula, Nord
    • Light: Vanilla, Solarized, Rose, Matcha, Cloud, Sepia
  • Keybindings β€” Rebind any keyboard shortcut
  • View ordering β€” Customize your task view tabs
  • Sync settings β€” Configure Git repository sync

πŸ”„ Git Sync

Enable optional distributed sync by setting sync.repo_path in your config.

Kairo uses a unique no-backend approach:

  • Each task is stored as an individual JSON file
  • Changes are committed locally with automatic messages
  • Perform sync manually or on-demand
  • Git's branching and merging handle conflicts transparently
# Manual sync
kairo sync

πŸ— Architecture

Kairo is built with a modular architecture designed for performance, extensibility, and data sovereignty.

Core Components

Component Role
Task Service Single source of truth for TUI, Lua, and CLI automation
UI Layer (Bubble Tea) Elm-inspired TUI framework with state-machine pattern for mode management
Storage (SQLite) Pure Go database with WAL for reliability and concurrent access
Sync Engine (Git) Distributed "no-backend" sync with per-task JSON files
Search (Fuzzy Index) In-memory ranked matching with sub-millisecond results
Plugins (Gopher-Lua) Lightweight Lua VM for user extensions

Data Flow

User Input/API/Lua β†’ Task Service β†’ Hooks System
    ↓
Immediate DB Persistence β†’ Optional Git Sync
    ↓
UI Re-render β†’ Instant User Feedback

🌴 Project Structure

kairo/
β”œβ”€β”€ CHANGELOG.md
β”œβ”€β”€ cmd
β”‚   └── kairo
β”‚       └── main.go
β”œβ”€β”€ CODE_OF_CONDUCT.md
β”œβ”€β”€ configs
β”‚   └── kairo.example.toml
β”œβ”€β”€ CONTRIBUTING.md
β”œβ”€β”€ go.mod
β”œβ”€β”€ go.sum
β”œβ”€β”€ internal
β”‚   β”œβ”€β”€ api
β”‚   β”‚   └── api.go
β”‚   β”œβ”€β”€ app
β”‚   β”‚   β”œβ”€β”€ model.go
β”‚   β”‚   └── msg.go
β”‚   β”œβ”€β”€ buildinfo
β”‚   β”‚   └── buildinfo.go
β”‚   β”œβ”€β”€ config
β”‚   β”‚   β”œβ”€β”€ config.go
β”‚   β”‚   └── config_test.go
β”‚   β”œβ”€β”€ core
β”‚   β”‚   β”œβ”€β”€ codec
β”‚   β”‚   β”‚   β”œβ”€β”€ json.go
β”‚   β”‚   β”‚   └── markdown.go
β”‚   β”‚   β”œβ”€β”€ core_test.go
β”‚   β”‚   β”œβ”€β”€ ids.go
β”‚   β”‚   β”œβ”€β”€ nlp
β”‚   β”‚   β”‚   └── deadline.go
β”‚   β”‚   β”œβ”€β”€ task.go
β”‚   β”‚   └── view.go
β”‚   β”œβ”€β”€ hooks
β”‚   β”‚   └── hooks.go
β”‚   β”œβ”€β”€ lua
β”‚   β”‚   └── engine.go
β”‚   β”œβ”€β”€ plugins
β”‚   β”‚   └── host.go
β”‚   β”œβ”€β”€ search
β”‚   β”‚   β”œβ”€β”€ fuzzy.go
β”‚   β”‚   β”œβ”€β”€ fuzzy_test.go
β”‚   β”‚   └── index.go
β”‚   β”œβ”€β”€ service
β”‚   β”‚   └── service.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
β”‚   β”‚   β”‚   β”œβ”€β”€ keymap_test.go
β”‚   β”‚   β”‚   β”œβ”€β”€ normalize.go
β”‚   β”‚   β”‚   └── normalize_test.go
β”‚   β”‚   β”œβ”€β”€ palette
β”‚   β”‚   β”‚   └── model.go
β”‚   β”‚   β”œβ”€β”€ plugin_menu
β”‚   β”‚   β”‚   └── model.go
β”‚   β”‚   β”œβ”€β”€ render
β”‚   β”‚   β”‚   └── render.go
β”‚   β”‚   β”œβ”€β”€ styles
β”‚   β”‚   β”‚   └── styles.go
β”‚   β”‚   β”œβ”€β”€ tasklist
β”‚   β”‚   β”‚   └── model.go
β”‚   β”‚   β”œβ”€β”€ theme
β”‚   β”‚   β”‚   └── theme.go
β”‚   β”‚   └── theme_menu
β”‚   β”‚       └── model.go
β”‚   β”œβ”€β”€ updater
β”‚   β”‚   β”œβ”€β”€ checksums.go
β”‚   β”‚   β”œβ”€β”€ download.go
β”‚   β”‚   β”œβ”€β”€ extract.go
β”‚   β”‚   β”œβ”€β”€ github.go
β”‚   β”‚   β”œβ”€β”€ updater.go
β”‚   β”‚   └── windows_helper.go
β”‚   └── util
β”‚       β”œβ”€β”€ paths.go
β”‚       └── util_test.go
β”œβ”€β”€ LICENSE
β”œβ”€β”€ Makefile
β”œβ”€β”€ plugins
β”‚   β”œβ”€β”€ auto-cleanup.lua
β”‚   β”œβ”€β”€ auto-tagger.lua
β”‚   β”œβ”€β”€ sample.lua
β”‚   └── task-logger.lua
β”œβ”€β”€ README.md
β”œβ”€β”€ screenshots
β”‚   └── thumbnail.png
β”œβ”€β”€ scripts
β”‚   β”œβ”€β”€ install.ps1
β”‚   └── install.sh
β”œβ”€β”€ SECURITY.md
└── VERSION.txt

🀝 Contributing

We welcome contributions! Please see CONTRIBUTING.md for guidelines and CODE_OF_CONDUCT.md for our code of conduct.

Areas for Contribution

  • ✨ New themes and design improvements
  • πŸ› Bug fixes and performance enhancements
  • πŸ“š Documentation and tutorials
  • 🧩 Plugins and extensions
  • 🌍 Translations and localization

πŸ’™ Community Legend(s)

  • @Tornado300 β€” Contributed significantly by reporting issues that led to multiple critical bug fixes.

πŸ“œ License

Kairo is released under the MIT License.


πŸ—Ί Roadmap

  • Multi-workspace support with encryption at rest
  • Incremental DB-to-UI streaming for large datasets
  • Conflict-free sync via append-only event log
  • Sandboxed Plugin SDK
  • Smart suggestions and spaced repetition
  • Enhanced mobile/SSH terminal support
  • Community plugin marketplace

πŸ’‘ Philosophy

Kairo is built on the belief that task management should be fast, simple, and under your control. We prioritize:

βœ… Your Privacy β€” Data stays on your machine
βœ… Your Freedom β€” Open source, MIT licensed
βœ… Your Time β€” Lightning-fast interactions
βœ… Your Experience β€” Premium, thoughtful design

Every feature is carefully considered to maintain focus and avoid complexity creep.


πŸ“ž Support


Made with ❀️ for focused execution. Start organizing your time today.