A beautiful and feature-rich Terminal User Interface (TUI) todo application built with Go and Bubble Tea. Now featuring an elegant multi-window interface with responsive layout, beautiful borders, and enhanced visual feedback!
- 📱 Responsive Layout: Elegant split-pane interface with sidebar and main content areas
- 🖼️ Beautiful Borders: Multiple Unicode border styles (elegant, double, thick, subtle)
- 🎯 Focus Management: Seamless navigation between windows with visual focus indicators
- 🌈 Rich Visual Feedback: Color-coded status messages and priority indicators
- 📋 Overlay Forms: Centered form dialogs with proper z-ordering
- 💡 Smart Sizing: Responsive window sizing that adapts to terminal dimensions
- 📝 Multiple Todo Lists: Create and manage separate todo lists for different projects or contexts
- ✅ Rich Task Management: Add, edit, delete, and toggle completion status of tasks
- ⏰ Deadline Support: Set deadlines for tasks with reminder notifications
- 🎨 Priority Levels: Assign priority levels (Low, Medium, High, Critical) to tasks
- 🔔 Smart Reminders: Get notified before task deadlines (configurable reminder window)
- 💾 SQLite Database Storage: ACID-compliant database storage with automatic backups
- 🔄 Automatic Migration: Seamlessly migrates from old JSON format to database
- 🎯 Intuitive Navigation: Vim-like keybindings plus window focus controls
- 📊 Progress Tracking: Visual progress indicators for each todo list
- 🔍 Visual Status Indicators: Clear visual cues for task status, priority, and deadlines
- 🖥️ Command Line Interface: Rich CLI for storage info and management
🎉 Latest Release: v0.1.0
Choose your platform for a one-command installation:
curl -sSL https://raw.githubusercontent.com/DhirajZope/lazytodo/master/scripts/install-linux.sh | bashOr install specific version:
curl -sSL https://raw.githubusercontent.com/DhirajZope/lazytodo/master/scripts/install-linux.sh | bash -s v0.1.0Manual download:
# Download directly from release
curl -L -o lazytodo-linux-amd64.tar.gz https://github.com/DhirajZope/lazytodo/releases/download/v0.1.0/lazytodo_v0.1.0_linux-amd64.tar.gz
tar -xzf lazytodo-linux-amd64.tar.gz
sudo mv lazytodo /usr/local/bin/Features:
- 🏠 Installs to
~/.local/binby default - 🔧 Automatically configures PATH
- 🖥️ Optional desktop entry creation
- 🏗️ Supports AMD64 and ARM64 architectures
curl -sSL https://raw.githubusercontent.com/DhirajZope/lazytodo/master/scripts/install-mac.sh | bashOr install specific version:
curl -sSL https://raw.githubusercontent.com/DhirajZope/lazytodo/master/scripts/install-mac.sh | bash -s v0.1.0Manual download:
# Download directly from release (Intel)
curl -L -o lazytodo-darwin-amd64.tar.gz https://github.com/DhirajZope/lazytodo/releases/download/v0.1.0/lazytodo_v0.1.0_darwin-amd64.tar.gz
# Download directly from release (Apple Silicon)
curl -L -o lazytodo-darwin-arm64.tar.gz https://github.com/DhirajZope/lazytodo/releases/download/v0.1.0/lazytodo_v0.1.0_darwin-arm64.tar.gz
# Extract and install
tar -xzf lazytodo-darwin-*.tar.gz
sudo mv lazytodo /usr/local/bin/Features:
- 🏠 Installs to
/usr/local/binby default (user directory option available) - 🍺 Homebrew integration detection
- 📱 Optional macOS app bundle creation
- 🖥️ Universal binary (Intel + Apple Silicon)
- 🐚 Shell profile auto-configuration (bash, zsh, fish)
PowerShell (Recommended - Download first):
# Download the script first to avoid encoding issues
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/DhirajZope/lazytodo/master/scripts/install-windows.ps1" -OutFile "install-windows.ps1"
.\install-windows.ps1Or install specific version:
.\install-windows.ps1 -Version "v0.1.0"Manual Installation:
- Download the Windows binary: lazytodo_v0.1.0_windows-amd64.zip
- Extract the ZIP file to
%LOCALAPPDATA%\LazyTodo - Add the directory to your PATH environment variable:
$path = [Environment]::GetEnvironmentVariable("Path", "User") [Environment]::SetEnvironmentVariable("Path", "$path;$env:LOCALAPPDATA\LazyTodo", "User")
- Restart your terminal and run
lazytodo.exe
Alternative - Direct execution:
iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/DhirajZope/lazytodo/master/scripts/install-windows.ps1'))Features:
- 🏠 Installs to
%LOCALAPPDATA%\LazyTodoby default - 🔧 Automatically adds to user PATH
- 🖥️ Optional desktop shortcut creation
- 🎯 PowerShell 5.0+ support
# Linux/macOS - Custom directory
INSTALL_DIR="/opt/lazytodo" ./install-linux.sh
# Windows - Custom directory
.\install-windows.ps1 -InstallDir "C:\Tools\LazyTodo"# Install specific version
./install-linux.sh v1.0.0
./install-mac.sh v1.0.0
# Windows
.\install-windows.ps1 -Version "v1.0.0"- Go 1.23 or higher installed on your system
- Windows, macOS, or Linux
- CGO enabled (for SQLite support)
- Clone the repository:
git clone https://github.com/DhirajZope/lazytodo.git
cd lazytodo- Install dependencies:
go mod tidy- Build the application:
# Windows
go build -o lazytodo.exe cmd/main.go
# macOS/Linux
go build -o lazytodo cmd/main.go- Run the application:
# Windows
.\lazytodo.exe
# macOS/Linux
./lazytodoOr run directly with Go:
go run cmd/main.goAfter installation, you may need to:
- Restart your terminal to use the
lazytodocommand - Or run directly using the full path shown by the installer
- Verify installation by running:
lazytodo --version
❌ Database Migration Error:
Failed to initialize application: failed to create storage: failed to create database storage: failed to run migrations: failed to record initial migration: UNIQUE constraint failed: schema_migrations.version
Solution:
# Delete the corrupted database file
rm -f ~/.lazytodo/lazytodo.db # Linux/macOS
Remove-Item "$env:USERPROFILE\.lazytodo\lazytodo.db" -Force # Windows
# Verify the fix
lazytodo --info❌ Command not found: lazytodo
Solutions:
- Restart your terminal (most common solution)
- Refresh PATH in current session:
# Linux/macOS source ~/.bashrc # or ~/.zshrc, ~/.profile # Windows PowerShell $env:PATH = [Environment]::GetEnvironmentVariable('Path', 'User')
- Run directly: Use the full path shown by the installer
❌ Permission denied (macOS/Linux)
# Make binary executable
chmod +x /usr/local/bin/lazytodo
# Or install to user directory instead
INSTALL_DIR="$HOME/.local/bin" ./install-linux.sh❌ Download fails
- Check internet connection and firewall settings
- Try manual download from GitHub Releases
- Use alternative installation method
# Linux/macOS - Add to ~/.bashrc, ~/.zshrc, etc.
export PATH="$PATH:$HOME/.local/bin"
# Windows - Add to user PATH environment variable
setx PATH "%PATH%;%LOCALAPPDATA%\LazyTodo"# Check if installed correctly
lazytodo --version
# Check database status
lazytodo --info
# Test basic functionality
lazytodo --help# Start the TUI application
.\lazytodo.exe
# Show storage information and statistics
.\lazytodo.exe --info
# Show help
.\lazytodo.exe --help
# Show version
.\lazytodo.exe --version
# Manually run migration (if needed)
.\lazytodo.exe --migrateThe application uses intuitive keybindings inspired by Vim:
qorCtrl+C- Quit application?- Toggle help menu
↑/↓ork/j- Navigate between listsEnter- Open selected listn- Create new todo liste- Edit selected listd- Delete selected lists- Open settings
↑/↓ork/j- Navigate between tasksSpace- Toggle task completiona- Add new taske- Edit selected taskd- Delete selected taskEsc- Back to lists view
Tab/Shift+Tab- Navigate between form fieldsEnter- Save changesEsc- Cancel and go back
○- Incomplete task✓- Complete task
⚡- Medium priority🔥- High priority🚨- Critical priority
⏰- Task due soon (within 24 hours)⚠️- Task overdue
LazyTodo features a sophisticated multi-window TUI with:
- Sidebar: Todo list navigation with progress indicators
- Main Window: Task details, settings, and content views
- Status Bar: Real-time information and keyboard shortcuts
- Overlay Windows: Forms and help with proper z-ordering
Ctrl+→/Ctrl+←: Navigate between windowsCtrl+M: Focus main windowCtrl+S: Focus sidebar?: Toggle help overlay- Visual focus indicators show active window
- Beautiful Unicode Borders: Multiple styles for different contexts
- Color-Coded Messages: Success (green), warning (orange), error (red), info (blue)
- Priority Indicators: Visual priority levels with icons
- Responsive Design: Adapts to any terminal size (minimum 80x24)
See MULTIWINDOW_UI.md for detailed documentation.
LazyTodo uses SQLite for data storage, providing:
- ACID compliance for data integrity
- Better performance with indexed queries
- Concurrent access safety
- Automatic schema migrations
Database location:
- Windows:
%USERPROFILE%\.lazytodo\lazytodo.db - macOS/Linux:
~/.lazytodo/lazytodo.db
If you're upgrading from v1.x, LazyTodo will automatically:
- Detect your existing JSON data file
- Migrate all data to the new SQLite database
- Create a backup of your JSON file
- Preserve all your todo lists, tasks, and settings
No data loss - your existing data is fully preserved!
The database includes the following tables:
todo_lists- Stores todo list informationtasks- Stores individual tasks with foreign key referencessettings- Stores application settingsschema_migrations- Tracks applied database migrations
Settings are now stored in the database. Default settings:
- Reminder Window: 60 minutes before deadline
- Show Completed Tasks: Enabled
- Auto Save: Enabled (immediate database updates)
When creating or editing tasks, you can set deadlines using the format:
YYYY-MM-DD HH:MM
Examples:
2024-12-25 09:00- Christmas morning at 9 AM2024-07-16 14:30- Today at 2:30 PM
The application checks for upcoming deadlines every minute and displays notifications for tasks that are:
- Due within your configured reminder window (default: 1 hour)
- Overdue
smart-todo/
├── cmd/
│ └── main.go # Application entry point with CLI
├── internal/
│ ├── models/
│ │ └── models.go # Data models and types
│ ├── storage/
│ │ ├── interface.go # Storage interface definition
│ │ ├── storage.go # Legacy JSON file storage
│ │ ├── database.go # SQLite database storage
│ │ └── migration.go # Data migration utilities
│ └── ui/
│ ├── model.go # Main TUI model and state management
│ └── views.go # UI rendering and interactions
├── migrations/
│ ├── 001_initial_schema.up.sql # Database schema
│ └── 001_initial_schema.down.sql # Rollback schema
├── go.mod # Go module definition
├── go.sum # Go dependencies
├── build.ps1 # PowerShell build script
└── README.md # This file
- Bubble Tea - TUI framework
- Lipgloss - Styling and layout
- Bubbles - Common TUI components
- go-sqlite3 - SQLite database driver
# Build for current platform
go build -o lazytodo.exe cmd/main.go
# Build for different platforms
# Windows
GOOS=windows GOARCH=amd64 go build -o lazytodo-windows.exe cmd/main.go
# macOS
GOOS=darwin GOARCH=amd64 go build -o lazytodo-macos cmd/main.go
# Linux
GOOS=linux GOARCH=amd64 go build -o lazytodo-linux cmd/main.go# Check storage information
.\lazytodo.exe --info
# Manually run migration
.\lazytodo.exe --migrate
# View database schema (requires sqlite3 CLI)
sqlite3 %USERPROFILE%\.lazytodo\lazytodo.db ".schema"- New: SQLite database storage
- New: Automatic migration from JSON format
- New: Command line interface for management
- Improved: Data integrity and performance
- Enhanced: ACID-compliant transactions
- JSON file-based storage
- Basic TUI functionality
- File-based persistence
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Charm team for the amazing TUI libraries
- mattn/go-sqlite3 for SQLite driver
- Go community for the excellent ecosystem
- All contributors and users of this project
If you encounter any issues or have feature requests, please open an issue on GitHub.
Migration Issues: If automatic migration fails, you can:
- Run
.\lazytodo.exe --migratemanually - Check that your JSON file is valid
- Ensure you have write permissions to the data directory
Database Corruption: SQLite is very reliable, but if issues occur:
- Check the
--infocommand for database status - Your JSON backup file is always preserved
- You can delete the database file to start fresh
Made with ❤️ and Go • Enhanced with SQLite