6 stable releases
Uses new Rust 2024
| 1.0.5 | Aug 27, 2025 |
|---|---|
| 1.0.3 | Jul 30, 2025 |
| 1.0.1 | Jul 29, 2025 |
| 1.0.0 | Jul 28, 2025 |
#1464 in Command line utilities
299 downloads per month
44KB
863 lines
⏱️ 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)
cargo install time-rs
From Source
# Clone the repository
git clone https://github.com/d9r-dev/time-rs.git
cd time-rs
# Build and install
cargo install --path .
# Or run directly
cargo run
Pre-built Binaries
Download the latest release from the releases page.
🎮 Usage
Starting the Application
time-rs
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
cargo test
# Run integration tests
cargo test --test integration
# Run with coverage
cargo test --all-features
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Development Setup
- Fork the repository
- Clone your fork:
git clone https://github.com/d9r-dev/time-rs.git cd time-rs - Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes and add tests
- Run the test suite:
cargo test cargo clippy cargo fmt - Commit your changes:
git commit -m "Add amazing feature" - 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!
Dependencies
~29–42MB
~655K SLoC