<p align="center">
<img src="screenshots/01-tasks.png" alt="Tickit Tasks" width="700">
</p>
<h1 align="center">
β
Tickit
</h1>
<p align="center">
<strong>A stunning terminal-based task manager</strong>
</p>
<p align="center">
<i>Organize your tasks, lists, and tags β all from your terminal.</i>
</p>
<p align="center">
<a href="https://github.com/ricardodantas/tickit/releases">
<img src="https://img.shields.io/github/v/release/ricardodantas/tickit?style=flat&labelColor=1e1e2e&color=cba6f7&logo=github&logoColor=white" alt="Release">
</a>
<a href="https://crates.io/crates/tickit">
<img src="https://img.shields.io/crates/v/tickit?style=flat&labelColor=1e1e2e&color=fab387&logo=rust&logoColor=white" alt="Crates.io">
</a>
<a href="https://github.com/ricardodantas/tickit/blob/main/LICENSE">
<img src="https://img.shields.io/badge/license-MIT-89b4fa?style=flat&labelColor=1e1e2e" alt="License">
</a>
<a href="https://rust-lang.org">
<img src="https://img.shields.io/badge/rust-1.93+-f9e2af?style=flat&labelColor=1e1e2e&logo=rust&logoColor=white" alt="Rust Version">
</a>
</p>
<br>
## π Table of Contents
- [β¨ Features](#-features)
- [π Quick Start](#-quick-start)
- [π» CLI Commands](#-cli-commands)
- [β¨οΈ Keybindings](#οΈ-keybindings)
- [π¨ Themes](#-themes)
- [π€ Export Formats](#-export-formats)
- [βοΈ Sync (Optional)](#οΈ-sync-optional)
- [ποΈ Architecture](#οΈ-architecture)
- [π§ Building from Source](#-building-from-source)
- [π€ Contributing](#-contributing)
- [π License](#-license)
<br>
## β¨ Features
<table>
<tr>
<td width="50%">
### π Task Management
Create, edit, and complete tasks with titles, descriptions, URLs, and priority levels.
### π Lists
Organize tasks into lists with custom icons. Default Inbox for quick capture.
### π·οΈ Tags
Add colorful tags for flexible categorization and filtering.
</td>
<td width="50%">
### π₯οΈ Beautiful TUI
A gorgeous terminal interface with vim-style navigation and real-time updates.
### β¨οΈ Full CLI
Script your task management with powerful command-line tools.
### π€ Export Anywhere
Export to JSON, todo.txt, Markdown, or CSV formats.
</td>
</tr>
</table>
<br>
### Feature Highlights
| β‘ **Priority Levels** | Low, Medium, High, Urgent |
| π **Task URLs** | Attach links and open them with `o` |
| π¨ **15 Built-in Themes** | From Dracula to Cyberpunk |
| βοΈ **Settings Dialog** | Configure sync, notifications, and themes in-app |
| πΎ **SQLite Storage** | Fast, reliable, self-contained |
| π **Filter & Search** | By list, tag, or completion status |
| β
**Toggle Completed** | Show/hide completed tasks |
| π
**Due Dates** | Set deadlines for your tasks |
| π **Desktop Notifications** | Alerts for due and overdue tasks |
| π **Auto-Update** | Check for updates from TUI or CLI |
| βοΈ **Optional Sync** | Self-hosted sync server for multiple devices |
<br>
## π Quick Start
### Installation
#### From Source
```bash
git clone https://github.com/ricardodantas/tickit
cd tickit
cargo install --path .
```
#### From crates.io (coming soon)
```bash
cargo install tickit
```
### First Run
Simply launch the TUI:
```bash
tickit
```
Your tasks are stored in SQLite at `~/.config/tickit/tickit.sqlite`.
<br>
## π» CLI Commands
Tickit provides a full CLI for scripting and quick actions.
### Adding Tasks
```bash
# Simple task
tickit add "Buy groceries"
# With priority and list
tickit add "Review PR" --priority high --list Work
# With URL and tags
tickit add "Read article" --url "https://example.com" --tags reading,tech
# With description
tickit add "Write report" --description "Q4 summary for the team"
```
### Listing Tasks
```bash
# Show incomplete tasks
tickit list
# Include completed tasks
tickit list --all
# Filter by list
tickit list --list Work
# Filter by tag
tickit list --tag urgent
# Output as JSON
tickit list --json
```
### Completing Tasks
```bash
# Mark as complete (partial match supported)
tickit done "Buy groceries"
# Mark as incomplete
tickit undo "Buy groceries"
```
### Deleting Tasks
```bash
# Delete with confirmation
tickit delete "Old task"
# Skip confirmation
tickit delete "Old task" --force
# Short alias
tickit rm "Old task" -f
```
### Managing Lists
```bash
# List all lists
tickit lists
# Add a new list
tickit lists add "Shopping" --icon "π"
# Delete a list
tickit lists delete "Old List"
```
### Managing Tags
```bash
# List all tags
tickit tags
# Add a new tag
tickit tags add "urgent" --color "#ff0000"
# Delete a tag
tickit tags delete "old-tag"
```
### Exporting Tasks
```bash
# Export to JSON (default)
tickit export --output tasks.json
# Export to todo.txt format
tickit export --format todotxt
# Export to Markdown
tickit export --format markdown --output tasks.md
# Export specific list to CSV
tickit export --format csv --list Work --output work.csv
```
### Updating Tickit
```bash
# Check for updates and install if available
tickit update
```
The update command automatically detects whether you installed via Cargo or Homebrew and uses the appropriate update method.
<br>
## β¨οΈ Keybindings
### Global
| `Tab` | Next view |
| `Shift+Tab` | Previous view |
| `1` `2` `3` | Jump to view (Tasks, Lists, Tags) |
| `s` | Open settings |
| `t` | Open theme picker |
| `A` | About Tickit |
| `?` / `F1` | Show help |
| `S` / `Ctrl+s` | Sync with server (if configured) |
| `q` | Quit |
| `Ctrl+c` / `Ctrl+q` | Force quit |
### Navigation
| `β` / `k` | Move up |
| `β` / `j` | Move down |
| `β` / `h` | Focus sidebar |
| `β` / `l` | Focus main |
| `g` / `Home` | Go to first item |
| `G` / `End` | Go to last item |
### Tasks View
| `Enter` / `Space` | Toggle task complete |
| `n` | Create new task |
| `e` | Edit selected task |
| `d` / `Delete` | Delete selected task |
| `p` | Cycle priority |
| `o` | Open task URL |
| `c` | Toggle show completed |
| `r` | Refresh |
### Lists/Tags View
| `n` | Create new item |
| `e` | Edit selected item |
| `d` / `Delete` | Delete selected item |
### Task Editor
| `Tab` | Next field |
| `Shift+Tab` | Previous field |
| `Enter` | Save task |
| `Esc` | Cancel |
| `Space` | Toggle tag (in Tags field) |
| `j` / `k` | Navigate options |
<br>
## π¨ Themes
Tickit includes **15 beautiful themes** based on popular terminal and editor color schemes.
Press `t` in the TUI to open the theme picker with live preview.
### Available Themes
| π¦ **Dracula** | Dark purple aesthetic (default) |
| π **One Dark Pro** | Atom's iconic dark theme |
| βοΈ **Nord** | Arctic, bluish color palette |
| π± **Catppuccin Mocha** | Warm pastel dark theme |
| β **Catppuccin Latte** | Warm pastel light theme |
| πΈ **Gruvbox Dark** | Retro groove colors |
| π **Gruvbox Light** | Retro groove, light variant |
| π **Tokyo Night** | Futuristic dark blue |
| π
**Solarized Dark** | Precision colors, dark |
| π **Solarized Light** | Precision colors, light |
| π¨ **Monokai Pro** | Classic syntax highlighting |
| πΉ **RosΓ© Pine** | All natural pine with soho vibes |
| π **Kanagawa** | Inspired by Katsushika Hokusai |
| π² **Everforest** | Comfortable green forest theme |
| π **Cyberpunk** | Neon-soaked futuristic theme |
<br>
## π€ Export Formats
### JSON
Full data export with all fields β perfect for backups or integrations.
```bash
tickit export --format json --output tasks.json
```
```json
{
"tasks": [
{
"id": "...",
"title": "Buy groceries",
"priority": "high",
"completed": false,
"list": "Shopping",
"tags": ["errands"]
}
]
}
```
### todo.txt
Compatible with the [todo.txt](http://todotxt.org/) format:
```
(A) 2024-01-01 Task title +Project @context due:2024-01-15
```
```bash
tickit export --format todotxt
```
### Markdown
Human-readable format with checkboxes:
```markdown
## π₯ Inbox
- [ ] π΄ Urgent task
- [x] Completed task
## π Work
- [ ] π‘ Review PR
```
```bash
tickit export --format markdown
```
### CSV
Spreadsheet-compatible format for Excel, Google Sheets, etc.
```bash
tickit export --format csv --output tasks.csv
```
<br>
## ποΈ Architecture
Tickit is a single binary with both CLI and TUI modes.
```
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β User β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββ΄ββββββββββββββββ
βΌ βΌ
βββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββ
β tickit (TUI) β β tickit <cmd> (CLI) β
β β’ Browse tasks β β β’ Add tasks β
β β’ Manage lists/tags β β β’ List/filter tasks β
β β’ Change themes β β β’ Complete/delete β
β β’ Visual editing β β β’ Export data β
βββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββ
β β
βββββββββββββββββ¬ββββββββββββββββ
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SQLite Database β
β ~/.config/tickit/tickit.sqlite β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
### Data Model
```
ββββββββββββββββββββ ββββββββββββββββββββ
β Lists β β Tags β
β β’ id β β β’ id β
β β’ name β β β’ name β
β β’ icon β β β’ color β
β β’ is_inbox β ββββββββββββββββββββ
ββββββββββββββββββββ β
β β
β 1:N β M:N
βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Tasks β
β β’ id, title, description, url β
β β’ priority (Low, Medium, High, Urgent) β
β β’ completed, completed_at β
β β’ list_id, tag_ids[] β
β β’ due_date, created_at, updated_at β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
### File Locations
| Database | `~/.config/tickit/tickit.sqlite` | Tasks, lists, tags |
| Config | `~/.config/tickit/config.toml` | Theme and settings |
| Device ID | `~/.config/tickit/.device_id` | Unique device identifier for sync |
<br>
## βοΈ Sync (Optional)
Tickit can sync your tasks across multiple devices using a self-hosted sync server.
**Sync is completely optional.** Tickit works fully offline by default.
### Setting Up Sync
1. **Deploy tickit-sync server** β see [github.com/ricardodantas/tickit-sync](https://github.com/ricardodantas/tickit-sync)
2. **Generate an API token:**
```bash
tickit-sync token --name "my-laptop"
```
3. **Configure Tickit client** (`~/.config/tickit/config.toml`):
```toml
[sync]
enabled = true
server = "https://your-server.com"
token = "your-generated-token"
interval_secs = 300 # auto-sync every 5 minutes
```
4. **Manual sync:** Press `S` (Shift+S) or `Ctrl+S` in the TUI
5. **Or configure in-app:** Press `s` to open Settings and toggle sync options
### Sync Features
- **Self-hosted**: Run on your own server, keep your data private
- **Multi-device**: Sync between desktop, laptop, and mobile (tickit-mobile)
- **Conflict resolution**: Last-write-wins with conflict detection
- **Offline-first**: Changes sync when connection is available
- **In-app settings**: Toggle sync, adjust interval from the Settings dialog
<br>
## π§ Building from Source
### Requirements
- **Rust 1.93+** (uses Edition 2024 features)
- **Linux**, **macOS**, or **Windows**
### Build
```bash
# Clone the repository
git clone https://github.com/ricardodantas/tickit
cd tickit
# Build release binary
cargo build --release
# The binary will be at:
# - target/release/tickit
# Or install directly
cargo install --path .
```
### Development
```bash
# Run TUI in development
cargo run
# Run CLI commands
cargo run -- add "Test task"
cargo run -- list
# Run tests
cargo test
# Run linter
cargo clippy
# Format code
cargo fmt
```
<br>
## π€ Contributing
Contributions are welcome!
### Quick Start for Contributors
1. Fork the repository
2. Create a feature branch: `git checkout -b feature/amazing-feature`
3. Make your changes
4. Run tests: `cargo test`
5. Run clippy: `cargo clippy`
6. Format: `cargo fmt`
7. Commit: `git commit -m "Add amazing feature"`
8. Push: `git push origin feature/amazing-feature`
9. Open a Pull Request
### Project Structure
```
tickit/
βββ src/
β βββ main.rs # CLI entry point
β βββ lib.rs # Library root
β βββ app/ # TUI application
β β βββ mod.rs # App initialization
β β βββ events.rs # Key event handling
β β βββ state.rs # Application state
β β βββ ui.rs # UI rendering
β βββ config.rs # Configuration loading
β βββ db.rs # SQLite operations
β βββ export.rs # Export formats
β βββ models.rs # Data models
β βββ theme.rs # Color themes
βββ screenshots/ # Screenshots for docs
βββ scripts/ # Helper scripts
βββ tests/ # Integration tests
```
<br>
## π License
This project is licensed under the **MIT License** β see the [LICENSE](LICENSE) file for details.
---
<p align="center">
<sub>Built with π¦ Rust and β€οΈ by <a href="https://github.com/ricardodantas">Ricardo Dantas</a></sub>
</p>