Skip to content
crazytanPublic

About

Native macOS menu bar app for Google Tasks

Resources

Stars

30 stars

Watchers

0 watching

Forks

Repository files navigation

TaskMenu app icon

TaskMenu

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.

Download TaskMenu directly for Mac Install TaskMenu with Homebrew Requires macOS 14.4 or later Swift LoC License: GPLv3

Why TaskMenu?

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.

TaskMenu task list popover with quick add and filtering TaskMenu edit task view with due date and subtasks

Features

  • 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)

Installation

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/taskmenu

Or 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.

Privacy

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.

Build From Source

Requires Xcode 26.4 or later, XcodeGen, and a Google Cloud project with the Google Tasks API enabled.

  1. Clone the repository:

    git clone https://github.com/crazytan/TaskMenu.git
    cd TaskMenu
  2. 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
  3. 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 signing DEVELOPMENT_TEAM in Config.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.

  4. Generate the Xcode project:

    xcodegen generate
  5. Open TaskMenu.xcodeproj in Xcode and build the app.

Development

  • 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/AppStateTests

FAQ: Google Tasks API Limitations

Why does TaskMenu not match every feature in the Google Tasks web app?

TaskMenu 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.

Why can I set a date, but not an exact task time?

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.

Are TaskMenu reminders the same as Google Tasks notifications?

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.

Can TaskMenu create or edit repeating tasks?

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.

Why does TaskMenu not show starred tasks or a Starred list?

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.

What about tasks from Gmail, Docs, Chat, or Keep?

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.

Docs

Support

Contributing

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.

License

TaskMenu is GPLv3 licensed. See LICENSE for details.

Star History

Star History Chart

About

Native macOS menu bar app for Google Tasks

Resources

Stars

30 stars

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages