Skip to content

Repository files navigation

BusyMax

BusyMax is a Linux and Windows desktop calendar and task manager built with Flutter.

It brings calendar events and tasks into a native-feeling desktop interface: Yaru with the existing GTK integrations on Linux, and Fluent UI with the native title bar on Windows 11. BusyMax connects directly to Google, Microsoft, Apple iCloud Calendar, and Nextcloud. Apple Reminders is not supported.

busymax

Get it from the Snap Store

BusyMax month view

Month view with calendars, tasks, and event details.

Highlights

  • First-class Linux Yaru and Windows 11 Fluent desktop applications.
  • Calendar views for day, week, month, year, and agenda planning.
  • Task creation with lists, start/due dates, reminders, repeat options, subtasks, status, progress, priority, categories, location, and URL.
  • Nextcloud task-list creation/rename/delete, recursive task duplicate/delete, raw iCalendar export, clear-completed, and cross-list subtree moves.
  • Event editing with calendar selection, time controls, repeat rules, and reminders.
  • Ordinary event and supported-task location fields, with a saved destination opened on demand in an external maps application or browser.
  • Tray shortcut for opening the main Agenda view.
  • Direct integrations with Google Calendar, Google Tasks, Microsoft Calendar, Microsoft To Do, Apple iCloud Calendar, Nextcloud Calendar, and Nextcloud Tasks.
  • Offline-first local cache, conditional DAV writes, recurrence exceptions, alarms, and explicit conflict handling for CalDAV accounts.

Screenshots

BusyMax week view
Week view with color-coded calendars and scheduled tasks.
BusyMax day view
Day view for focused daily planning.
BusyMax agenda view
Agenda view with upcoming events, tasks, and details.
BusyMax new task editor
Task creation with lists, due dates, reminders, and repeat options.
More screenshots

BusyMax account provider selection

BusyMax year view

BusyMax event editor

Prerequisites

  • Flutter SDK
  • Flutter is pinned to 3.47.2 for both platforms (bundled Dart 3.13.2).
  • GTK 3 and libhandy development packages (libgtk-3-dev and libhandy-1-dev on Ubuntu/Debian)
  • GOOGLE_OAUTH_CLIENT_ID and GOOGLE_OAUTH_CLIENT_SECRET; see Google setup
  • MICROSOFT_OAUTH_CLIENT_ID, see Microsoft Setup

Apple and Nextcloud do not require compile-time client credentials:

Windows targets Windows 11 24H2 or newer on x64 only. See Windows development for Visual Studio and SDK requirements, exact development commands, and the source-side validation workflow.

Run locally on Linux

Register the development launcher once so GNOME can associate BusyMax's native Wayland windows with its desktop icon. The helper is idempotent and defaults to the Flutter debug bundle:

tool/install_linux_dev_desktop.sh

Then run BusyMax normally:

flutter run -d linux -t lib/main_linux.dart \
  --dart-define=GOOGLE_OAUTH_CLIENT_ID=<google-client-id> \
  --dart-define=GOOGLE_OAUTH_CLIENT_SECRET=<google-secret-if-needed> \
  --dart-define=MICROSOFT_OAUTH_CLIENT_ID=<microsoft-client-id>

Locations are stored as ordinary calendar/task data. Show on map hands a saved address or point to the registered maps handler on Linux, with a Google Maps browser-search fallback, and to the default browser on Windows. A complete HTTP(S) location is opened directly as Open link. BusyMax has no embedded map, address autocomplete, mapping account, or mapping API-key requirement. Provider-native coordinates remain in Microsoft structured locations and iCalendar GEO. When importing or copying a point into Google Calendar, which has only free-form location text in this workflow, BusyMax retains a local supplemental point for the exact saved event or provider series. A later recurring occurrence can reuse the series point only while its saved location still matches; an occurrence-specific point takes precedence. Supplemental series data follows a Google This and following split only when the new series keeps that location; the earlier series retains its own association. points are not uploaded through Google Calendar and therefore are not automatically available on another BusyMax installation.

Use tool/install_linux_dev_desktop.sh --uninstall to remove the development launcher. Remove it before testing an installed Snap so the user-level launcher does not take precedence; packaged Snaps register their own launcher.

Feedback submissions

The native Send feedback form in the About dialog sends JSON to POST https://busystack.org/api/feedback. Every submission contains a new submission UUID, the application identifier busymax, the application version and build number, the runtime platform identifier, category, subject, message, and optional reply email. A successful response has this form:

{ "id": "server-reference-id" }

The optional technical-details checkbox is off by default. When the user explicitly enables it, BusyMax adds only the operating-system version and application locale. BusyMax does not attach logs, account or calendar data, file names, screenshots, environment variables, tokens, or other diagnostics.

For local website development, override the endpoint through the existing compile-time configuration mechanism:

flutter run -d linux \
  --dart-define=BUSYSTACK_FEEDBACK_ENDPOINT=http://127.0.0.1:8090/api/feedback

The local Snap helper accepts the same value with --dart-define BUSYSTACK_FEEDBACK_ENDPOINT=http://127.0.0.1:8090/api/feedback. No API, CAPTCHA, or other private server credential is used by the desktop application.

Provider support

The provider capability matrix lists the features and limitations of each integration. Maintainers can use the live-provider test guide for opt-in Nextcloud and iCloud integration tests.

Build and publish the Snap

See Snap Build and Beta Release for OAuth build configuration, canonical Snapcraft packaging, local installation, artifact verification, Store review, and beta release instructions.

Windows architecture and packaging

Windows uses the separate lib/main_windows.dart entrypoint and a Fluent UI composition. Linux continues to use lib/main_linux.dart, Yaru, GTK, the XDG tray, and the existing Snap package. The Windows Store MSIX workflow is local and CI-only; it never deploys an artifact.

Contributors

Languages