โฑ๏ธ time-rs
A fast, lightweight, and intuitive Terminal User Interface (TUI) timer application written in Rust. No GUI, no bloat, just a timer app!

โจ Features
- Fast, leightweight, no bloat - It is just a timer app!
- Beautiful TUI - Clean terminal interface using Ratatui
- Persistent Storage - SQLite database stores all your timers
- Start/Stop/Resume - Full timer control with real-time updates
- Timer Management - Create, edit, delete, and organize timers
- Date Grouping - Timers automatically grouped by creation date
- Keyboard Navigation - Efficient vim-like keybindings
- Cross-platform - Works on Windows, macOS, and Linux
๐ Quick Start
Prerequisites
- Rust 1.70 or higher
- A terminal that supports Unicode and colors
Installation
Using Cargo (Recommended)
From Source
# Clone the repository
# Build and install
# Or run directly
Pre-built Binaries
Download the latest release from the releases page.
๐ฎ Usage
Starting the Application
Main Interface
The main screen displays all your timers in a table format, grouped by date:
โโ Timers โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2025-01-28 โ
โ Work Session Deep focus work 01:23:45 โ
โ Break Timer Short break 00:05:00 โ
โ โ
โ 2025-01-27 โ
โ Meeting Prep Prepare presentation 00:45:30 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Keybindings
Main Screen
| Key | Action |
|---|---|
j / โ |
Move down |
k / โ |
Move up |
Space |
Start/Stop selected timer |
Alt+i |
Add new timer |
e |
Edit selected timer |
dd |
Delete selected timer (press d twice quickly) |
Esc / Ctrl+C |
Exit application |
Add/Edit Timer Dialog
| Key | Action |
|---|---|
Enter |
Confirm current field / Save timer |
Tab |
Switch between fields |
Backspace |
Delete character |
Esc |
Cancel and return to main screen |
Exit Confirmation
| Key | Action |
|---|---|
y / Enter (on Yes) |
Confirm exit |
n / q / Enter (on No) |
Cancel exit |
Tab |
Toggle between Yes/No |
Timer Operations
Creating a Timer
- Press
Alt+ito open the "Add Timer" dialog - Enter a name for your timer
- Press
Enterto move to the description field - Enter a description (optional)
- Press
Enterto create the timer
Starting/Stopping Timers
- Navigate to a timer using
j/k - Press
Spaceto start or stop the timer - Running timers show a spinning indicator and update in real-time
Editing Timers
- Select a timer with
j/k - Press
eto edit - Modify the name and/or description
- Press
Enterto save changes
Deleting Timers
- Select a timer with
j/k - Press
dtwice quickly (within 500ms) to delete - The timer will be permanently removed
๐๏ธ Data Storage
Timers are automatically saved to a SQLite database located at:
- Windows:
%APPDATA%\timers\timers.db - macOS:
~/Library/Application Support/timers/timers.db - Linux:
~/.local/share/timers/timers.db
The database stores:
- Timer name and description
- Creation date and time
- Total elapsed duration
- Current running state
๐๏ธ Architecture
The application follows a modular architecture:
src/
โโโ main.rs # Entry point and event loop
โโโ lib.rs # Module exports
โโโ lib/
โโโ app.rs # Application state and logic
โโโ db.rs # SQLite database operations
โโโ ui.rs # TUI rendering and layout
โโโ throbber.rs # Loading animation component
Key Dependencies
- ratatui - Terminal UI framework
- crossterm - Cross-platform terminal manipulation
- rusqlite - SQLite database bindings
- chrono - Date and time handling
- dirs - Platform-specific directories
๐งช Testing
Run the test suite:
# Run unit tests
# Run integration tests
# Run with coverage
๐ค Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Development Setup
- Fork the repository
- Clone your fork:
- Create a feature branch:
- Make your changes and add tests
- Run the test suite:
- Commit your changes:
- Push to your fork and submit a pull request
Code Style
- Follow Rust's official style guidelines
- Run
cargo fmtbefore committing - Ensure
cargo clippypasses without warnings - Add tests for new functionality
- Update documentation as needed
Reporting Issues
Please use the GitHub issue tracker to report bugs or request features.
When reporting bugs, please include:
- Your operating system and version
- Rust version (
rustc --version) - Steps to reproduce the issue
- Expected vs actual behavior
๐ Roadmap
- Export timers to CSV/JSON ?
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
- Ratatui team for the excellent TUI framework
- Crossterm for cross-platform terminal support
- The Rust community for their amazing ecosystem
๐ Support
If you find this project helpful, please consider:
- โญ Starring the repository
- ๐ Reporting bugs and issues
- ๐ก Suggesting new features
- ๐ค Contributing code or documentation
Happy timing!