A modern, cross-platform break reminder application
Take regular breaks, protect your eyes, and maintain healthy work habits with customizable schedules, beautiful themes, and intelligent reminders.
Quick Start • Features • Installation • Building • Contributing • Documentation
Caution
Early Development Notice
Focust is currently in active early development and rapid iteration. This is my first Rust project, and I'm learning as I build. You may encounter bugs, incomplete features, or breaking changes. Your patience, feedback, and contributions are greatly appreciated! 🙏
Platform Support: While Focust is designed to be cross-platform (Windows, macOS, Linux), it has currently only been tested on Windows. If you're on macOS or Linux, please try it out and report any issues you encounter. Platform-specific contributions are especially welcome!
See the QUICKSTART.md for a step-by-step guide to getting started with Focust.
- Flexible Break Types: Configure mini breaks (short 20s pauses) and long breaks (5-minute rest periods)
- Customizable Intervals: Set your own break frequency — mini breaks every 20 minutes, long breaks after 4 mini breaks
- Time-Based Schedules: Create different schedules for work hours, restrict breaks to weekdays, or set custom time ranges
- Intelligent Detection: Automatically pauses breaks when you're away from your computer
- Postpone Support: Need 5 more minutes? Postpone breaks with a global hotkey or button click
Configure multiple break schedules with custom time ranges and active days
- Rich Backgrounds: Choose from solid colors, single images, or random images from a folder
- Full Customization: Adjust text color, blur effects, opacity, font size, and font family
- Visual Feedback: See your break window in full glory with customizable size (50%-100% or fullscreen)
- Multi-Monitor Support: Show break reminders on all monitors simultaneously
Immersive break window with customizable themes and suggestions
- Alarm-Style Reminders: Set specific times to remind yourself of important tasks
- Non-Intrusive: Unlike break reminders, these don't block your work — just gentle notifications and can be dismissed immediately
- Multiple Times: Add as many reminder times as you need throughout the day
- Perfect For: Drinking water, taking medication, standing up, or any time-sensitive task
Set up timed reminders for healthy habits
- Motivational Messages: Get helpful suggestions during breaks (stretch exercises, eye exercises, hydration reminders)
- Multi-Language Support: Built-in suggestions in English and Chinese, with easy customization
- TOML-Based Configuration: Add your own custom suggestion lists
- Random Selection: Fresh suggestions every break to keep things interesting
Customize break suggestions or use built-in curated lists
- Built-in Sounds: Choose from 4 carefully selected notification sounds
- Gentle Bell
- Soft Gong
- Bright Notification
- Simple Notification
- Custom Audio: Use your own MP3, WAV, OGG, or FLAC files
- Volume Control: Adjust audio volume to your preference
- Preview: Test sounds before saving
- System Tray Integration: Minimize to tray, quick pause/resume, status indicators
- Global Hotkeys: Postpone breaks without switching windows
- Strict Mode: Force breaks when you really need them (cannot be skipped)
- Break Notifications: Get notified before breaks start (configurable lead time)
- Automatic Pausing: Detects system idle time and pauses the scheduler
- DND Detection(TODO): Planned feature to detect Do Not Disturb mode
- Theme Modes: Light, dark, or system-based theme for settings UI
- Detailed Logging: Debug logs for troubleshooting
General settings with language, theme, and behavior options
- Currently supported: English (en-US), Simplified Chinese (zh-CN)
- Automatic language detection based on system locale
- Easy to add new languages (contributions welcome!)
Built with performance in mind, Focust offers exceptional resource efficiency:
- Ultra-Low Memory Footprint: Uses only ~5MB when running in the background, thanks to dynamic window creation and lazy-loaded Vue components
- Native Performance: Powered by Tauri's lightweight WebView instead of bundled Chromium
- Fast Startup: Cold start in under 2 seconds
- Minimal CPU Usage: <1% CPU when idle, <5% during break windows
- Small Binary Size: Significantly smaller than Electron-based alternatives
Perfect for users who want break reminders without sacrificing system resources.
Warning
Pre-built binaries are not yet available as the project is still in early development. Please build from source for now.
Once available, download the latest release for your platform:
- Windows:
.msiinstaller - macOS:
.dmginstaller - Linux:
.AppImage
See the Building from Source section below for detailed instructions.
Before you begin, ensure you have the following installed:
-
Node.js (v18 or later) or Bun (recommended)
-
Rust (latest stable) - Install via rustup
-
System Dependencies (platform-specific):
Windows:
- Microsoft Visual C++ Build Tools
- WebView2 (usually pre-installed on Windows 10/11)
macOS:
xcode-select --install
Linux (Debian/Ubuntu):
sudo apt update sudo apt install libwebkit2gtk-4.1-dev \ build-essential \ curl \ wget \ file \ libxdo-dev \ libssl-dev \ libayatana-appindicator3-dev \ librsvg2-dev
-
Just (optional but recommended) - Command runner
cargo install just
# Clone the repository
git clone https://github.com/pilgrimlyieu/Focust.git
cd Focust
# Install dependencies
bun install # or: npm install / yarn install
# Setup Rust dependencies
cd src-tauri
cargo build
cd ..Or use Just:
just setup# Start development server with hot-reload
bun run tauri dev # or: npm run tauri dev
# Using Just
just dev# Build optimized production bundle
bun run tauri build # or: npm run tauri build
# Using Just. Will build with updater signing (requires private key setup)
just buildThe built application will be available in src-tauri/target/release/bundle/.
Note: For updater signed releases, see Updater Signing Guide to set up signing keys.
If you have Just installed, you can use these convenient commands:
just setup # Setup project environment
just dev # Start development server
just build # Build production bundle
just build-debug # Build debug bundle
# Code Quality
just format # Format all code (Rust + TypeScript)
just lint # Run all linters
just check # Type checking and static analysis
just test-all # Run all tests
# Platform-Specific
just format-front # Format frontend code only
just format-back # Format backend code only
just lint-front # Lint frontend only
just lint-back # Lint backend only
# See all available commands
justContributions are warmly welcomed! Whether it's bug reports, feature requests, documentation improvements, or code contributions — all help is appreciated.
- Report Issues: Found a bug? Open an issue
- Suggest Features: Have an idea? Start a discussion
- Improve Documentation: Spot a typo or unclear instruction? Submit a PR
- Write Code: Check CONTRIBUTING.md for detailed development guidelines
- 🐧 Linux Testing & Support: Help test and fix Linux-specific issues
- 🍎 macOS Testing & Support: Verify functionality on macOS
- 🌍 Translations: Add new language support (Japanese, German, French, Spanish, etc.)
- 🎨 UI/UX Improvements: Design suggestions and implementations
- 🐛 Bug Hunting: Find and report issues
- 📝 Documentation: Improve guides and add tutorials
- CONTRIBUTING.md - Contribution guidelines and development setup
- docs/ARCHITECTURE.md - Project architecture and code structure
- docs/CONFIGURATION.md - Configuration file reference
- Architecture Guide - Detailed project architecture, frontend/backend design, and core logic
- Configuration Reference - Complete guide to all configuration options
- Contributing Guide - How to contribute, coding standards, and development workflow
- Vue 3.5 - Progressive JavaScript framework with Composition API
- TypeScript 5.9 - Type-safe JavaScript
- Pinia 3 - Intuitive state management
- Tailwind CSS 4 - Utility-first CSS framework
- DaisyUI 5 - Component library for Tailwind
- Vue I18n 11 - Internationalization
- Vite 7 - Lightning-fast build tool
- Vitest 4 - Unit testing framework
- Rust (2024 edition) - Systems programming language
- Tauri 2 - Cross-platform desktop framework
- Tokio - Asynchronous runtime
- Serde - Serialization framework
- ts-rs - TypeScript type generation from Rust
- Just - Command runner
- Biome - Code formatter and linter
- Cargo - Rust package manager
- Project icon
- Improved error handling and user feedback
- Comprehensive platform testing (macOS, Linux)
- Whitelist applications (v0.2.0 major goal)
This project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by Stretchly - The excellent break reminder app
- Built with Tauri - The fantastic framework for building desktop apps
- Icons from various open-source projects
- Audio files from royalty-free sources
If you find Focust helpful, please consider giving it a ⭐️ on GitHub!