A macOS menu bar app that monitors GitHub notifications in real-time using system notifications
Stay stealthily updated on GitHub activities during work, class, or other critical moments
- ✅ Fully Local - No server required, all data processing happens locally
- 🔐 Secure & Reliable - Access tokens encrypted and stored in Keychain
- 🎯 Smart Notifications - Intelligent deduplication, only notifies what matters
- ⚡ Performance Optimized - Uses Last-Modified headers to reduce API calls, respects rate limits
- 🎨 Native Experience - Pure Swift with AppKit + SwiftUI, seamlessly integrated with macOS
- 🌙 Dark Mode - Automatically adapts to system theme
- 🔕 Flexible Configuration - Adjustable polling intervals (1-30 minutes), pause/resume notifications
- 🚀 Launch at Login - Supports macOS 13+ login items (optional)
- 📊 Status Monitoring - Menu bar displays login status, sync time, API quota
- 🔗 Quick Access - Click notifications to jump directly to GitHub pages
- macOS 13.0 or later
- Xcode 15.0+ (for building from source)
- Active internet connection
Visit the Releases page to download the latest version.
# Clone the repository
git clone https://github.com/SakuraKy/CommitPop.git
cd CommitPop
# Open with Xcode
open CommitPop.xcodeproj
# Press Cmd + R in Xcode to build and run- Launch the App - On first launch, grant notification permissions when prompted
- Create OAuth App - Visit GitHub Developer Settings to create an OAuth App
- Configure Client ID - Paste your Client ID in the app preferences
- Device Flow Login - Follow the instructions to authorize in your browser
- Start Using - The app will automatically start monitoring and sending notifications
For detailed configuration steps, see User Guide.
Create GitHub OAuth App
CommitPop uses OAuth 2.0 Device Flow for authorization, which requires creating an OAuth App first.
- Log in to GitHub and visit Developer Settings
- Click OAuth Apps → New OAuth App
- Fill in the application details:
- Application name:
CommitPop - Homepage URL:
https://github.com/SakuraKy/CommitPop - Authorization callback URL:
http://localhost
- Application name:
- After creation, copy the Client ID
Initial Configuration
- Launch CommitPop and grant notification permissions
- Open Preferences (click menu bar icon → Open Preferences, or press
Cmd + ,) - Paste your Client ID in the "Login" tab
- Click "Start Device Flow Login"
- Copy the displayed User Code and authorize in your browser
- The app will automatically complete login and start syncing
Daily Usage
Menu Bar Actions:
- Sync Now - Manually trigger a sync
- Pause/Resume Notifications - Temporarily disable notifications
- Recent Events - Quick access to recent notifications
- Quit - Exit the application
Preferences:
- Login: View account, sign out
- Notifications: Adjust intervals, configure scope, test notifications
- Startup: Launch at login settings
- Advanced: Cache management, debug info
| Category | Technology |
|---|---|
| Language | Swift 5.9+ |
| UI Framework | SwiftUI + AppKit |
| Notifications | UserNotifications |
| Networking | URLSession |
| Storage | Keychain + UserDefaults |
| Authorization | GitHub OAuth 2.0 Device Flow |
View Complete Directory Structure
CommitPop/
├── Auth/ # Authorization module (OAuth + Keychain)
├── GitHub/ # GitHub API module
├── Notifications/ # System notification module
├── Scheduler/ # Polling scheduler
├── Persistence/ # Data persistence
├── MenuBar/ # Menu bar controller
├── PreferencesUI/ # Settings UI (SwiftUI)
└── Utils/ # Utilities
- OAuth Device Flow - No browser callback needed, pure device code authorization
- Last-Modified Optimization - Uses HTTP conditional requests to reduce bandwidth
- Smart Deduplication - Based on thread.id + updatedAt timestamps
- Rate Limit Handling - Parses response headers, respects 5,000 req/hour limit
- Secure Storage - Tokens stored in Keychain with encryption
For detailed Xcode configuration instructions, see XCODE_SETUP.md.
- View Logs - Xcode Console (with emoji prefixes for easy identification)
- Test Notifications - Preferences → Notifications → Send Test Notification
- Print Debug Info - Preferences → Advanced → Print Debug Info
Why doesn't the app appear in the Dock?
CommitPop is configured as a menu bar-only app (LSUIElement = YES), so it won't show in the Dock.
How to configure Info.plist?
In Xcode Project Settings → Info, add:
Application is agent (UIElement)= YESNSUserNotificationsUsageDescription
What permissions are required?
- Notification permissions (UserNotifications)
- Network permissions (App Sandbox - Outgoing Connections)
Contributions of all kinds are welcome!
- 🐛 Report Bugs
- 💡 Feature Requests
- 📝 Submit Pull Requests
- ⭐ Star this project
- Fork this repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Support filtering specific repositories
- Support multiple account switching
- Add statistics dashboard
- GraphQL API support
- Internationalization (multi-language support)
- Custom notification rules
- Export notification history
This project is licensed under the Apache License 2.0.
If you find this project helpful, feel free to give it a Star ⭐
Made with ❤️ for the GitHub community