# Terminalist - Todoist Terminal Client
[](https://www.rust-lang.org)
[](https://github.com/romaintb/terminalist/actions)
[](https://crates.io/crates/terminalist)
[](LICENSE)
[](https://github.com/romaintb/terminalist)
[](https://developer.todoist.com)
**💬 Contact:** [#terminalist:matrix.doxin.net](https://app.element.io/#/room/%23terminalist%3Amatrix.doxin.net)
A terminal application for interacting with Todoist, built in Rust with a modern TUI interface.
<img src="docs/images/screenshot1.png" width="48%" alt="Terminalist Main Interface"> <img src="docs/images/screenshot2.png" width="48%" alt="Terminalist Project View">
## Features
- ✅ **Interactive TUI Interface** - Beautiful terminal user interface with ratatui
- ✅ **Local Data Caching** - Fast, responsive UI with in-memory SQLite storage
- ✅ **Smart Sync** - Automatic sync on startup and manual refresh with 'r'
- ✅ **Project Management** - Browse projects with hierarchical display
- ✅ **Task Management** - View, navigate, complete, and create tasks
- ✅ **Task Search** - Fast database-powered search across all tasks with '/' shortcut
- ✅ **Keyboard & Mouse Navigation** - Efficient keyboard operation with mouse support
- ✅ **Real-time Updates** - Create, complete, and delete tasks/projects
- ✅ **Label Support** - View task labels with colored badges
- ✅ **Responsive Layout** - Adapts to terminal size with smart scaling
- ✅ **Help System** - Built-in help panel with keyboard shortcuts
- ✅ **Configuration File** - Customizable settings via TOML configuration
## Installation
### Option 1: Install from AUR (Arch Linux)
```bash
# Using yay
yay -S terminalist
# Using paru
paru -S terminalist
# Or any other AUR helper
```
### Option 2: Install from Crates.io
```bash
cargo install terminalist
```
### Option 3: Build from Source
```bash
# Clone the repository
git clone https://github.com/romaintb/terminalist.git
cd terminalist
# Build the project
cargo build --release
# Run the application
cargo run --release
```
The binary will be available at `target/release/terminalist` after building.
### Help Wanted: Package Maintainers
We're looking for help packaging Terminalist for other Linux distributions (Debian/Ubuntu, Fedora, NixOS, etc.). If you're interested in maintaining a package, please open an issue or submit a PR!
## Setup
### 1. Get your Todoist API Token
1. Go to [Todoist Integrations Settings](https://todoist.com/prefs/integrations)
2. Find the "API token" section
3. Copy your API token
### 2. Set Environment Variable
```bash
export TODOIST_API_TOKEN=your_token_here
```
### 3. (Optional) Generate Configuration File
```bash
# Generate a default config file with all available options
terminalist --generate-config
```
This creates a config file at `~/.config/terminalist/config.toml` with customizable settings.
### 4. Run the Application
```bash
terminalist
```
## Configuration
Terminalist supports customization via TOML configuration files.
```bash
# Generate a default config file with all available options
terminalist --generate-config
```
This creates a config file at `~/.config/terminalist/config.toml`.
📖 **See [Configuration Guide](docs/CONFIGURATION.md) for detailed configuration options.**
## Quick Start Controls
Essential keyboard shortcuts to get started:
| `j/k` | Navigate tasks up/down |
| `J/K` | Navigate projects up/down |
| `Space` | Complete task |
| `a` | Create new task |
| `/` | Search tasks |
| `r` | Sync with Todoist |
| `?` | Show help panel |
| `q` | Quit |
📖 **See [Complete Keyboard Shortcuts](docs/KEYBOARD_SHORTCUTS.md) for all available controls and interface details.**
## How It Works
Terminalist uses a smart sync mechanism:
- **Fast Startup**: In-memory SQLite database for instant loading
- **Auto Sync**: Syncs with Todoist on startup and every 5 minutes
- **Manual Sync**: Press `r` to force refresh from Todoist
- **Real-time Updates**: Create, modify, and delete tasks/projects immediately
📖 **See [Architecture Guide](docs/ARCHITECTURE.md) for technical details.**
## Contributing
Contributions are welcome! See [Development Guide](docs/DEVELOPMENT.md) for setup instructions and coding standards.
## License
This project is open source. Feel free to modify and use as needed.