An open-source, local-first macOS todo app and lightweight task manager.
Capture and organize tasks one click away—without an account or cloud service.
English · 简体中文
Floatick is an offline-friendly desktop todo app that rests above your workspace as a small, draggable icon. Click it and the icon expands into a focused todo panel; collapse it and the icon returns to the same anchor. The panel chooses its expansion direction from the available screen space, so it stays useful near any display edge.
- Always within reach — drag the floating icon anywhere, then click to open.
- Fast task flow — create, edit, complete, search, archive, restore, and organize tasks in automatic daily sections.
- Local by default — no account, cloud service, or telemetry. Your todo data
remains in
~/.floatick. - Made for macOS — transparent AppKit window behavior, keyboard shortcuts, context-menu Quit, and support for Reduce Motion.
- Comfortable in any workspace — system, light, and dark themes with English and Simplified Chinese.
- Built-in updates — automatic and manual update checks powered by Sparkle.
Download the latest DMG from
GitHub Releases, open it,
and drag Floatick into Applications. Release packages are universal binaries
for both Apple silicon and Intel Macs.
Floatick is still an early preview and current downloads are not yet signed and notarized with an Apple Developer ID. macOS may ask for one extra confirmation the first time you open it:
- Try to open Floatick once.
- Open System Settings → Privacy & Security.
- Find Floatick in the Security section and choose Open Anyway.
- Confirm Open.
This confirmation is normally needed only once. For more detail, see Apple's guide to opening an app from an unidentified developer. Only download Floatick from this repository's Releases page.
| Action | How |
|---|---|
| Reposition Floatick | Drag the floating icon |
| Open the todo list | Click the floating icon |
| Collapse the panel | Click the collapse button or press Esc |
| Create a todo | Press ⌘N, or use the input at the top |
| Search | Press ⌘F |
| Edit a todo | Hover over the item and choose Edit |
| Complete a todo | Select its checkbox |
| Archive or restore | Use the action at the end of the item |
| Quit Floatick | Right-click the floating icon and choose Quit |
Floatick creates its working directory on first launch:
| Path | Purpose |
|---|---|
~/.floatick/todos.json |
Todos, completion state, and archive state |
~/.floatick/settings.json |
Theme and language preferences |
Sparkle stores the automatic-update preference in standard macOS application preferences. Floatick does not require an account and does not upload your todo data. Network access is used only to check for and download application updates.
- macOS 10.15 or later
- Flutter
3.44.7 - A complete Xcode installation
flutter pub get
flutter run -d macosIf Flutter cannot find Xcode, finish Xcode's first-launch setup:
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -runFirstLaunchdart format --output=none --set-exit-if-changed lib test integration_test
flutter analyze
flutter test
tool/test/run_ui_tests.sh
flutter build macos --releaseThe release app is written to
build/macos/Build/Products/Release/Floatick.app.
See the testing guide for the automated user journeys and
the macOS system boundaries that remain in Draft acceptance.
lib/
app/ App composition and themes
core/ Shared platform, storage, and UI primitives
features/ Todo, settings, and update features
l10n/ English and Simplified Chinese resources
macos/Runner/ AppKit window shell and Sparkle integration
test/ Repository, ViewModel, and widget tests
integration_test/ Real-engine macOS user journeys
tool/ Icon and release tooling
Flutter owns product UI and state. A small AppKit shell owns macOS-specific window behavior and Sparkle. Todo data never crosses the platform channel. See Architecture for the dependency boundaries.
flowchart LR
A["feature/* or fix/*"] --> B["Pull request"]
B --> C["main"]
C --> D["release/x.y.z"]
D --> E["Private Draft candidate"]
E --> F["Manual acceptance"]
F --> G["vX.Y.Z + production approval"]
G --> H["Public Release + Sparkle appcast"]
Daily work reaches main through pull requests. A release/x.y.z branch builds
a private Draft candidate for manual testing. A stable vX.Y.Z tag promotes
the exact accepted DMG after production approval; the release workflow does not
rebuild it.
Read the development and release workflow before preparing a release.
Issues and focused pull requests are welcome. Please keep changes scoped, add tests for meaningful behavior, and preserve the local JSON data contract.
Floatick is available under the MIT License.
© 2026 lucaslushuo