roman10/trayzero
roman10/trayzero has 35 GitHub stars and 2 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-08 23:33 UTC. Last push 2026-11-06.
Free, private, local-first GTD task manager for iOS & Android. No account, on-device, GPLv3.
What you can do
- Clarify — a card-stack Process Inbox flow that walks each item through the full GTD decision tree (actionable? two-minute rule? delegate? project?).
- Organize — the canonical lists (Inbox, Next Actions, Projects, Waiting For, Someday/Maybe, Calendar, Reference), real Projects with status + next-action warnings, extensible @-contexts, and Areas of Responsibility.
- Reflect — an interactive, resumable Weekly Review with live lists, Inbox processing, Item editing/completion, and stalled-Project repair.
- Engage — filter next actions by context, energy, and time available.
Measured star growth
- in 24h
- 0
- in 7 days
- Update delayed
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalTrayzero
A free, private, local-first task manager that follows David Allen's Getting Things Done (GTD) method end to end — Capture → Clarify → Organize → Reflect → Engage. Your tasks, notes, and attachments are stored on your device. Trayzero has no ads and requires no Trayzero account.
Install
Video tutorials on YouTube · Website · Privacy policy
Features
- Capture — floating capture button on every screen, share-sheet intake from any app, voice-to-text, and a home-screen widget for one-tap "add to inbox". Add & continue saves one Item, clears its title and notes, and returns focus to the next capture. Add to inbox saves and closes the sheet. A saved-item count confirms additions; closing the sheet keeps saved Items.
- Clarify — a card-stack Process Inbox flow that walks each item through the full GTD decision tree (actionable? two-minute rule? delegate? project?).
- Organize — the canonical lists (Inbox, Next Actions, Projects, Waiting For,
Someday/Maybe, Calendar, Reference), real Projects with status + next-action
warnings, extensible
@-contexts, and Areas of Responsibility. - Reflect — an interactive, resumable Weekly Review with live lists, Inbox processing, Item editing/completion, and stalled-Project repair.
- Engage — filter next actions by context, energy, and time available.
- Reminders — local notifications with action buttons (Done / Snooze / Move to Next Actions) that survive reboots; opt-in two-way system-calendar sync.
- Attachments — photos and voice memos on any item.
- Privacy — tasks, notes, and attachments are stored locally. Standard builds use RevenueCat for anonymous purchase checks and purchase analytics. See the privacy policy for crash reporting and optional integrations. Portable JSON backups include attachments and Review history. Older JSON backups remain supported. Restore validates before writing, merges by id, and refreshes reminders. Appearance preferences and native calendar associations stay on the device.
- Import from other apps — Settings → Data → Import from another app. Todoist CSV/ZIP, TickTick CSV, Nirvana CSV/JSON, OmniFocus TaskPaper, Google Tasks Takeout JSON, Things 3 exports, and plain text are supported. On iOS, Apple Reminders imports selected lists directly from the device with preview and Undo. This copies open reminders; the source stays unchanged. Apple tags, flags, attachments and subtask structure are not copied. See the mapping and limits.
- Automatic backups — opt in to save portable JSON snapshots to a selected folder after changes, keeping the latest ten backups from this device. Shows the last successful save and supports Back up now. A separate folder-sync tool can replicate the files; importing on another device remains manual. Mobile termination can interrupt a save, so startup/resume retries missed changes.
Import from Microsoft To Do
Settings → Data → Import from another app → Microsoft To Do offers a one-time, read-only import with preview and Undo. Lists, open tasks, checklist steps, notes, categories and dates are mapped into the existing GTD lists. Completed work is skipped; recurrence is retained in notes. Repeating an import can create duplicate tasks. Microsoft credentials/tokens are not stored.
The Trayzero Microsoft Entra public client ID is included in normal builds.
Override it with --dart-define=MICROSOFT_TODO_CLIENT_ID=<public-client-id>;
an explicitly empty value disables this importer. See
setup and mapping.
Tech stack
- Flutter 3.44.0 (bundles Dart 3.12.0)
- Riverpod for state management + DI
- Drift over SQLite for local persistence
- go_router for navigation
- flutter_local_notifications, device_calendar, speech_to_text, home_widget, purchases_flutter (RevenueCat) for platform features
Build from source
Install Flutter 3.44.0 and run these
commands from the directory containing pubspec.yaml.
flutter pub get --enforce-lockfile
# Generate Drift and Riverpod code before the first run and after changing its inputs.
dart run build_runner build --delete-conflicting-outputs
# Run on a connected device or simulator.
flutter run
In-app purchases (voluntary tips + a "supporter" subscription) are wired through
RevenueCat with public SDK keys baked in as defaults, so a plain
flutter run/flutter build works with billing enabled. If the keys are
overridden with empty values, the app falls back to a disabled billing gateway
and runs identically with the Support section showing "unavailable" — nothing
touches the stores.
Platform builds
- Android debug APK —
flutter build apk --debug. - iOS simulator build —
flutter build ios --simulator --debug. Device builds require your own signing team and an App Group for the extensions. See iOS extensions. - FOSS Android APK —
bash tool/build_foss_apk.sh. This build omits the RevenueCat and Google Play in-app review SDKs.
If Xcode 27.2 reports a Flutter framework architecture error on Apple silicon, build for arm64 after generating the simulator configuration and installing pods:
flutter build ios --simulator --debug --config-only
(cd ios && pod install)
xcodebuild -workspace ios/Runner.xcworkspace -scheme Runner -configuration Debug \
-sdk iphonesimulator -destination 'generic/platform=iOS Simulator' \
ARCHS=arm64 CODE_SIGNING_ALLOWED=NO
Testing
The import fixtures document the sample data.
flutter test --concurrency=1 # unit + widget tests
flutter analyze # static analysis + custom lints
Tests mirror the layer they cover (test/domain, test/data,
test/application, test/widget, test/integration).
Device-level checks live in integration_test/. For example, run
flutter test integration_test/folder_backup_native_test.dart -d <device-id>
on Android or iOS. To test Android reminders with R8 enabled, run
bash tool/ci_android_native.sh emulator-5554 with only a disposable Android
emulator connected. On macOS, bash tool/ci_ios_native.sh creates an isolated
simulator for the iOS native checks.
Project structure
Strict layered architecture — dependencies point inward only
(features/app → application → data → domain; platform code sits behind
core ports implemented in infrastructure). The domain layer is pure Dart with
no Flutter imports.
See CONTEXT.md for the domain language, layer rules, and
conventions — read it before contributing.
Contributing
UI labels live in the ARB files for all ten supported languages. Recurrence
summaries, item-card metadata, and dates use the shared presentation formatters
in features/common/; domain recurrence rules retain their pure Dart date math.
Use complete ICU phrases for plural counts and word order, and format dates in
the app's selected language. After editing translations, run flutter gen-l10n
and commit its generated files. The localization tests exercise recurrence
controls and populated item cards on a compact phone at 3x text.
Issues and pull requests are welcome. Before opening a PR:
- Read
CONTEXT.mdand keep the layer rules intact. - Run
flutter analyzeandflutter test— both must pass. - Match the surrounding code style; keep changes focused.
License
Copyright © 2026 Liu Feipeng.
Trayzero is free software licensed under the GNU General Public License v3.0
(GPLv3) — see the LICENSE file. In short: you may use, study, share,
and modify the code, but any distributed derivative must also be released under
the GPLv3.
Outside contributions are accepted under the Developer Certificate of Origin
(sign commits with git commit -s).
Trademark / attribution
Trayzero is an independent app inspired by the Getting Things Done methodology. It is not affiliated with, endorsed by, or sponsored by the David Allen Company. "Getting Things Done" and "GTD" are trademarks of the David Allen Company.
Explore related projects
n8n-io/n8n
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
209,927 starslanggenius/dify
Build Agentic workflows, RAG pipelines, with rich AI model and tool support on one collaborative workspace. Deploy on cloud, VPC, or self-hosted, so teams move from prototype to production without rebuilding the stack.
160,773 starsmicrosoft/PowerToys
Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows
140,755 starsstablyai/orca
Orca is the place for working with a fleet of agents (e.g. Grok Bot, Claude Code). Run any coding agent with your own subscription. Available on desktop, mobile and remote runtime.
120,314 stars