A simple, minimalistic, distraction-free macOS app that helps reduce digital eye strain by following the scientifically-backed 20-20-20 rule.
Features β’ Installation β’ Quick Start β’ Contributing β’ License
Digital eye strain affects millions of people who spend hours in front of screens. The 20-20-20 rule is a simple, scientifically-backed method to reduce eye fatigue:
Every 20 minutes of screen time
Look at something 20 feet away (about 6 meters)
For 20 seconds
This gives your eye muscles a chance to relax and reduces the risk of eye strain, headaches, dry eyes, and neck pain.
- π― Menu Bar Integration - Lightweight app that lives in your menu bar, never intrusive
- β° Smart Timer System - Customizable work/break intervals with intelligent pausing
- π«οΈ Screen Blur During Breaks - Gentle enforcement to help you actually take breaks
- π Pre-Break Notifications - 30-second warning before breaks start
- π΄ Automatic Idle Detection - Pauses when you're away from your Mac
- π¨ Beautiful UI - Clean, modern SwiftUI interface
- π Pomodoro Mode - Built-in 25/5 work/break cycles
- π΅ Sound Effects - Optional audio cues for breaks
- π Multiple Break Styles - Blur screen, notification only, or guided eye exercises
- βοΈ Flexible Settings - Adjust intervals from 10-60 minutes
- π¨ Theme Customization (v2.0) - Personalize colors with Default, Random, or Custom themes
- π― Custom Icons (v2.0) - Choose from 16 professional SF Symbols for reminders
- β° Smart Schedule (v2.1) - Set work hours and active days for intelligent reminder management
- π Auto-Start Timer (v2.1) - Automatically begin timer when app launches
- π§ Water Reminders (v2.1) - Smart hydration reminders with blur screen or ambient pop-up styles
- π Launch at Login (v2.1) - Automatic startup when you log into your Mac
- π Screen Lock Pause (v2.2) - All timers automatically pause when Mac screen locks
- β±οΈ Unified Dashboard (v2.2) - See all timer countdowns in real-time at a glance
- π Daily Statistics - Track your break history with beautiful charts
- π Streak Tracking - See how many consecutive days you've maintained healthy habits
- π‘ Smart Insights - Get personalized recommendations based on your usage
- π Privacy-First - Zero data collection, everything stays on your Mac
- βΏοΈ Accessibility Support - Full VoiceOver, Dynamic Type, and Reduced Motion support
- π No Internet Required - Works completely offline
- Live Countdown - See remaining time directly in the menu bar
- Dynamic State Icons - Eye icons change based on timer state (active, paused, break)
- Monospaced Digits - Clean, stable display that doesn't shift
- Smart Tooltips - Hover for detailed status information
- Improved Header - Gradient icon badge with shadow effects
- Better Close Button - Enhanced visibility with visible border
- Polished Skip Button - Stronger border and shadow for clarity
- Visual Separation - Increased divider visibility
- Gradient Styling - Linear and angular gradients across all views
- Spring Animations - Smooth, natural-feeling transitions
- Hover Effects - Unified hover behavior on interactive elements
- Rounded Design - Friendly, modern typography
- Hidden Scrollbar - Cleaner About section appearance
- Compact Layout - Optimized spacing throughout
- Consistent Headers - New SectionHeaderView component
- Enhanced Stat Boxes - Gradient backgrounds for visual interest
π Previous Release: v2.1.0
- Work Hours Management - Set custom work hours (e.g., 9 AM - 5 PM)
- Active Days Selection - Choose which days to receive reminders (Mon-Fri, weekends, custom)
- 5 Quick Presets - Standard Work, Flexible, Early Bird, Night Owl, 24/7
- Manual Override - "Show Anyway" option for breaks outside work hours
- Real-Time Status - See if schedule is "Active" or "Paused"
- Work-Life Balance - All reminders (breaks, ambient, water) respect your schedule
- Automatic Start - Timer begins automatically when app launches
- One-Click Toggle - Enable/disable in General Settings
- Smart Integration - Works perfectly with Launch at Login
- No Setup Required - Just enable and forget!
- One-Click Setup - Toggle in Settings to start automatically on login
- SMAppService - Modern macOS 13+ technology for reliable startup
- Easy Control - Enable or disable anytime from General Settings
- Blur Screen - Full-screen immersive hydration reminders with beautiful animations
- Ambient Pop-up - Gentle floating reminders at top of screen
- Smart Timing - Choose from 30min to 2 hour intervals
- 8 Preset Messages - Encouraging hydration prompts
- 16 Water Icons - Beautiful SF Symbol icons (drops, bottles, nature)
- Custom Messages - Personalize your hydration reminders
- Full Theme Support - Customize colors, opacity, and effects
- Keyboard Shortcut - ββ§W to trigger reminder manually
- ββ§S - Start timer
- ββ§X - Stop timer
- ββ§B - Take break now (with Smart Schedule override)
- ββ§R - Show ambient reminder (with Smart Schedule override)
- ββ§W - Show water reminder (with Smart Schedule override)
See Full v2.3.0 Release Notes | v2.2.0 Release Notes | Water Reminder Guide
- Default Theme - Classic vibrant style
- Random Color - 20 curated palettes, fresh colors each session
- Custom Theme - Full control over all colors and effects
- Professional Icons - SF Symbol picker replaces emoji input
- macOS: 14.0 (Sonoma) or later
- Xcode: 15.0 or later (for building from source)
- Swift: 5.9+
- Download EyeBreak-v2.3.0.dmg
- Remove quarantine (required for unsigned apps):
cd ~/Downloads xattr -cr EyeBreak-v2.3.0.dmg
- Open the DMG file
- Drag
EyeBreak.appto yourApplicationsfolder - Launch:
open /Applications/EyeBreak.app
- Look for the eye icon ποΈ in your menu bar!
β οΈ Why the terminal command? The app isn't signed with an Apple Developer certificate ($99/year).
macOS blocks unsigned downloads, so you must remove the quarantine flag first.
curl -L https://github.com/cheat2001/eyebreak/releases/download/v2.3.0/EyeBreak-v2.3.0.dmg -o ~/Downloads/EyeBreak.dmg && xattr -cr ~/Downloads/EyeBreak.dmg && open ~/Downloads/EyeBreak.dmgThen just drag to Applications!
git clone https://github.com/cheat2001/eyebreak.git
cd eyebreak
open EyeBreak.xcodeproj
# Press βR to build and runSee docs/DEVELOPMENT.md for detailed build instructions.
- Launch EyeBreak - you'll see an eye icon ποΈ in your menu bar
- Complete the onboarding to learn about the 20-20-20 rule
- Grant required permissions when prompted
- Click "Start Timer" to begin your first session
Click the eye icon to access:
- Start/Stop - Begin or pause your break timer
- Take Break Now - Trigger an immediate break
- Settings - Customize your experience
- View Stats - See your break history and progress
- Your screen will blur and show a break overlay
- Follow the on-screen instructions to rest your eyes
- Press ESC or click anywhere to end early (not recommended!)
- The break automatically ends after the configured duration
Access Settings to customize:
| Setting | Range | Default | Description |
|---|---|---|---|
| Work Interval | 10-60 min | 20 min | Time between breaks |
| Break Duration | 10-60 sec | 20 sec | Length of each break |
| Pre-Break Warning | 0-60 sec | 30 sec | Warning before break starts |
| Break Style | 3 options | Blur | Blur, notification, or exercise |
| Session Type | 3 presets | 20-20-20 | Choose 20-20-20, Pomodoro, or Custom |
| Smart Schedule | ON/OFF | OFF | Enable work hours management |
| Work Hours | Custom | 9AM-5PM | Set your working schedule |
| Auto-Start Timer | ON/OFF | ON | Start timer on app launch |
| Launch at Login | ON/OFF | OFF | Start app when you log in |
| Water Reminders | 30min-2hr | 1 hour | Hydration reminder interval |
EyeBreak requires the following permissions:
- Go to System Settings > Privacy & Security > Screen Recording
- Enable the checkbox next to EyeBreak
- Restart the app
If denied, the app automatically switches to "Notification Only" mode.
- Allow notifications to receive break reminders
- The app will request permission on first launch
Track your progress with comprehensive statistics:
- Daily Breaks: See how many breaks you've completed today
- Break History: 7-day and 30-day charts showing your consistency
- Completion Rate: Percentage of breaks taken vs. skipped
- Streak Counter: Consecutive days of healthy break habits
- Smart Insights: Personalized tips based on your usage patterns
All data is stored locally on your Mac. No cloud sync, no analytics, no tracking.
EyeBreak/
βββ EyeBreakApp.swift # Main app entry point
βββ Models/
β βββ TimerState.swift # State management
β βββ Settings.swift # User preferences
βββ Managers/
β βββ BreakTimerManager.swift # Core timer logic
β βββ IdleDetector.swift # Activity monitoring
β βββ NotificationManager.swift # Notification handling
β βββ ScreenBlurManager.swift # Screen blur overlay
βββ Views/
β βββ MenuBarView.swift # Main menu bar UI
β βββ SettingsView.swift # Preferences panel
β βββ BreakOverlayView.swift # Break screen overlay
β βββ OnboardingView.swift # Welcome flow
β βββ StatsView.swift # Statistics dashboard
βββ Resources/
βββ Assets.xcassets # App icons and colors
Architecture: Built using MVVM pattern with SwiftUI and Combine. See docs/ARCHITECTURE.md for details.
Run tests before submitting contributions:
# Manual testing checklist
- [ ] Timer starts and counts down
- [ ] Break overlay appears
- [ ] Notifications work
- [ ] Idle detection pauses timer
- [ ] Settings persist across launches
- [ ] Stats update correctlySee docs/TESTING.md for comprehensive testing guide.
Contributions are welcome! We love pull requests from everyone.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Please read CONTRIBUTING.md for detailed guidelines.
- π Report bugs
- π‘ Suggest new features
- π Improve documentation
- π¨ Design UI/UX improvements
- π Add translations (future)
- βοΈ Star the project
- Development Guide - Build and run from source
- Architecture - Technical design and structure
- Installation Guide - Detailed installation instructions
- Distribution Guide - Release and distribution process
- Publishing Guide - How to publish releases on GitHub
- Testing Guide - How to test the app
- FAQ - Frequently asked questions
Screen blur not working?
- Grant Screen Recording permission in System Settings
- Restart the app after granting permission
Notifications not appearing?
- Check System Settings > Notifications > EyeBreak
- Enable "Allow Notifications"
Timer not pausing when idle?
- Enable idle detection in Settings
- Adjust the idle threshold if needed
See docs/FAQ.md for more troubleshooting help.
- Smart Schedule with work hours management (v2.1.0)
- Auto-start timer (v2.1.0)
- Launch at login (v2.1.0)
- Water reminder system (v2.1.0)
- Keyboard shortcuts (v2.1.0)
- Custom break messages (v2.0.0)
- Theme customization (v2.0.0)
- Multiple language support
- Break exercise animations with guided movements
- Weekly/monthly detailed reports
- Export statistics to CSV
- Focus mode integration with Do Not Disturb
- Customizable ambient reminder messages
- Team sync (optional, privacy-first)
- Break reminders for calendar meetings
- Integration with calendar apps
- Stretching exercise videos
- Dark mode theme variants
See issues for planned features and vote on what you'd like to see!
This project is licensed under the MIT License - see the LICENSE file for details.
TL;DR: You can use, modify, and distribute this software freely, even commercially. Just include the license notice.
- Inspired by LookAway.app
- Icons by SF Symbols
- Built with β€οΈ for healthier screen time habits
- Thanks to all contributors
- π Read the docs
- π¬ Open an issue
- βοΈ Star the project
- π Report a bug
- π‘ Request a feature
If EyeBreak helps you maintain healthier screen habits, please consider:
- βοΈ Starring this repository
- π¦ Sharing it on social media
- π Writing a blog post about it
- π€ Contributing code or documentation
Remember: Every 20 minutes, look 20 feet away for 20 seconds.
Your eyes will thank you! ποΈβ¨
Made with π for your eye health