A free, open-source Google Tasks app for the Mac menu bar.
TaskMenu lets you quickly add tasks, manage subtasks, set due-date reminders, and view two lists side by side.
TaskMenu keeps your Google Tasks a click away while you work. Open a compact popover from the menu bar, add a task, check off a subtask, or compare two lists side by side. It stays out of the Dock and syncs changes directly with your Google account.
- Menu bar-first design with no Dock icon or main window in normal launches
- Google sign-in with OAuth 2.0 and PKCE
- Quick add, inline filtering, list switching, and refresh from the popover
- Create, edit, complete, and delete Google Tasks
- Due dates, subtasks, and local due-date reminders
- Secure token storage in the macOS Keychain
- Optional launch at login
- Native Settings window with update checks, support links, and account controls
- Two lists side by side, each with its own picker, filter, quick add, sort order, and editor
- Create task lists and move tasks with their subtasks between lists
- Drag-and-drop task reordering and nesting, plus sorting by due date
- Optional menu bar count of open tasks or tasks due today, including overdue tasks
- Keyboard shortcuts: ⌘N to add a task, ⌘F to filter, and ⌘, to open Settings
- Demo mode with sample lists, available before signing in
- Configurable desktop widget for viewing and completing tasks, with live refresh and offline cached content (unreleased; available in source builds)
Requires macOS 14.4 (Sonoma) or later.
Install with Homebrew by trusting the cask first:
brew trust --cask crazytan/tap/taskmenu
brew install --cask crazytan/tap/taskmenuOr download the signed and notarized DMG from the latest GitHub release.
After opening TaskMenu, sign in with Google or choose Explore the Demo to try it without an account.
TaskMenu connects directly to Google for OAuth 2.0 sign-in with PKCE and task sync. Sign-in tokens are stored in the macOS Keychain. There is no TaskMenu account or TaskMenu-operated server storing your tasks, and no third-party analytics SDK.
Due-date reminders are local macOS notifications. Apple's MetricKit diagnostics are saved locally and are not uploaded. Direct-download builds also contact GitHub for release update checks; App Store builds leave out that update path. Source builds with the desktop widget keep a minimized task snapshot locally in the shared App Group so the widget can display cached content.
Read the privacy policy.
Requires Xcode 26.4 or later, XcodeGen, and a Google Cloud project with the Google Tasks API enabled.
-
Clone the repository:
git clone https://github.com/crazytan/TaskMenu.git cd TaskMenu -
Create or configure a Google Cloud project:
- Enable the Google Tasks API
- Create an iOS OAuth client in Google Cloud Console for bundle ID
dev.crazytan.TaskMenu
-
Copy the example config and add your Google OAuth credentials:
cp Config.xcconfig.example Config.xcconfig
Fill in
GOOGLE_CLIENT_ID,GOOGLE_REDIRECT_SCHEME, and your signingDEVELOPMENT_TEAMinConfig.xcconfig. Keep this file private; it is excluded from Git. See the release guide for the App Group and Keychain Sharing capabilities needed by the app and widget. -
Generate the Xcode project:
xcodegen generate
-
Open
TaskMenu.xcodeprojin Xcode and build the app.
- Swift 6
- AppKit
- XcodeGen-generated Xcode project
- Apple frameworks only, with zero third-party dependencies
- Strict concurrency enabled
- Builds are stamped with the current git commit by
scripts/stamp_build_metadata.sh(a scheme build pre-action), and Settings shows it next to the version
Build from the command line with:
xcodebuild build -project TaskMenu.xcodeproj -scheme TaskMenu \
-configuration Debug \
-destination "platform=macOS"Run a focused test slice with:
xcodebuild test -project TaskMenu.xcodeproj -scheme TaskMenu \
-configuration Debug \
-destination "platform=macOS" \
-only-testing:TaskMenuTests/AppStateTestsTaskMenu uses the public Google Tasks API, which is smaller than the Google Tasks and Google Calendar web interfaces. The API can manage task lists and core task fields such as title, notes, completion status, ordering, subtasks, and due dates, but not every first-party UI feature is exposed as a public read/write field.
For reference, Google documents the public task resource in the Tasks API reference, while the web app can also create tasks with features like date/time, deadlines, repeating schedules, and notifications in Google Tasks Help.
The API's due field is date-only. Google accepts it as an RFC 3339 timestamp, but discards the time portion when the due date is set, and the API cannot read or write the time a task is due. TaskMenu therefore syncs calendar days, not task times.
No. Google Tasks and Google Calendar can send their own notifications for tasks, including tasks with a date and time. TaskMenu can only see the date-only value exposed by the API, so its due-date reminders are local macOS notifications scheduled by TaskMenu. They do not create or edit Google Tasks notification settings.
Not currently. Google Tasks and Google Calendar can create repeating tasks, but the public Tasks API task resource does not expose a recurrence rule field that TaskMenu can read and write. Google's API documentation also calls out special restrictions for recurrent tasks in task moves. TaskMenu treats repeating tasks conservatively and does not create or edit repeat schedules.
See Google's repeating tasks help and the Tasks API move method.
Stars are available in Google's Tasks UI, but starred status and the Starred smart list are not fields on the public Task or TaskList resources. Without an official API field, TaskMenu cannot reliably sync, set, or filter starred tasks.
See Google's starred tasks help.
Google's web apps can create tasks from other Workspace products. The Tasks API exposes some of that context as read-only links or assignment metadata, and assigned tasks from Docs or Chat are not returned by default unless an API client explicitly requests them. TaskMenu currently focuses on regular Google Tasks lists and does not request assigned tasks, so some source links, assignment details, and shared-task behaviors may be unavailable or read-only.
See the tasks.list reference and Tasks API usage limits.
CHANGELOG.md- version history and unreleased changesAGENTS.md- context for coding agents and repository conventionsTaskMenu/README.md- app architecture, lifecycle, and state flowTaskMenuWidget/README.md- widget architecture and shared-source boundariesTaskMenuTests/README.md- test map and focused test selectiondocs/RELEASING.md- signing, packaging, Homebrew, and App Store distribution
- Website: taskmenu.crazytan.dev
- Direct Mac download: latest GitHub release
- Help: TaskMenu Support
- Bugs and feature requests: GitHub Issues
Contributions are welcome. Open an issue for a bug or feature request, or submit a pull request with a focused improvement. Follow the build instructions above, start with AGENTS.md, and read the folder-local README.md closest to the code you are changing.
TaskMenu is GPLv3 licensed. See LICENSE for details.

