A clean, fast and privacy-friendly Nextcloud Deck client with native Cupertino UI. Built with Flutter, optimized for iPhone and iPad - also runs on macOS, Android, Windows, Linux and on the web.
Prerequisite: A running Nextcloud instance with activated "Deck" app.
- Drag & Drop: Move cards within a list and to other lists
- Reorder & Position: Place cards in front of/behind other cards, move up/down
- Labels & colors: Immediate orientation through color codes (incl. board color from Nextcloud)
- Due dates: Overdue red, ≤24h orange - directly visible on the card
- Responsibilities: Assign team members and make responsibilities visible
- Markdown description: Editor with live display in the card detail
- Comments: Display, reply, delete; counter on the cards
- Attachments: Display, open/share, upload, delete (incl. WebDAV fallback)
- Search: In the active board or globally across all boards
- Pending: Due cards grouped (Overdue, Today, Tomorrow, Next 7 days, Later)
- Overview: Active board, other boards, hidden and archived boards
- Local mode: Local board that can be used completely offline (To Do / In progress / Done)
- Dark mode & smart colors: Pleasant contrasts, good readability
- Multilingual: German, English, Spanish (manually selectable or system language)
- Required: Flutter SDK (Dart ≥ 3.3), Xcode/Android Studio depending on target platform
- Clone project and load dependencies:
flutter pub get
- Start (example):
# iOS Simulator / macOS flutter run -d ios flutter run -d macos # Android Emulator flutter run -d android # Web (Chrome) flutter run -d chrome # Windows / Linux (wenn Flutter Desktop eingerichtet ist) flutter run -d windows flutter run -d linux
- First steps in the app:
- Enter the server address (without scheme; the app enforces HTTPS), user name and password (recommended: app password) in the settings under "Account"
- Execute "Test login"; the app checks login, deck availability and then loads boards
Next Deck offers two complementary mechanisms for activity notifications (card assignments, @-mentions in comments, shares):
- Foreground polling while the app is open — the active board syncs on the configured interval, and the central Nextcloud notifications API is polled in parallel (latency: under one minute).
- Background fetch when the app is in the background or terminated — iOS wakes the app every 15-60 minutes (Apple decides; can take longer if the device is idle or the battery is low) and the same poll runs.
Both mechanisms produce local notifications rendered by iOS — they look identical to system push, but technically they are not push.
Real push (sub-second delivery, app does not need to run at all) goes
through Apple's APNs. The official Nextcloud iOS app uses the central
push.nextcloud.com proxy, which is configured only for the official app
bundle ID com.nextcloud.iOS. Third-party apps like Next Deck cannot
attach to that proxy out of the box. A real push setup for Next Deck would
require:
- An Apple Developer APNs Auth Key (
.p8), key ID, team ID - The "Push Notifications" capability enabled on your app ID in App Store Connect
- Either:
- Your own self-hosted push proxy (e.g.
nextcloud/push-proxy) running next to your Nextcloud server, configured with the.p8key and the Next Deck bundle ID — or - A direct APNs sender service that subscribes to your Nextcloud
notificationsevents
- Your own self-hosted push proxy (e.g.
- The App-side Push subscription flow against
/ocs/v2.php/apps/notifications/api/v2/pushwith an RSA key pair
That is roughly a day of development plus server-admin work, and ongoing operational responsibility for the push proxy. Most users will not need this. The polling-based approach is "good enough" for the vast majority of workflows and requires no server changes.
If you absolutely need sub-second push and don't want to host a proxy yourself:
- Install the official Nextcloud iOS app alongside Next Deck.
- The Nextcloud app handles real push via
push.nextcloud.com. Card assignments, mentions and shares will pop up there. - Disable activity notifications inside Next Deck (Settings -> Notifications) to avoid duplicates.
- Use Next Deck for the actual board work — the Nextcloud app for the notification handoff.
This is a pragmatic, zero-configuration approach that gives you the combined strengths of both apps. If at some point you decide to set up a custom push proxy for Next Deck, the in-app polling can be re-enabled and the Nextcloud-app notifications can be turned off there.
- HTTPS enforced: Entries are automatically normalized to
https:// - Local storage: Access data is stored securely on the device using
flutter_secure_storage. - Local cache: boards/lists/maps are cached in compressed form in
Hive(faster views, "pending") - No tracking, no external servers: Your data stays with you on your Nextcloud server
- Load boards, select and memorize active board
- Display, sort, move and delete lists (stacks) and cards
- Mark card as "done" (automatically move to Done) and set to "undone" again
- Edit title, description (Markdown) and due date
- Labels, assignees, comment counter and attachment counter
- Retrieve, create (incl. replies), delete comments
- Upload file attachments (multipart), download/open/share; robust against server deviations
- Global search with area (current board/all boards) and progress indicator
- "Pending" across all boards with due buckets
- Board overview with hide/show and archive section
- Languages (de/en/es) can be switched manually; system fallback
- Can be activated in the settings ("Local board")
- No network connection, no access data - ideal for quick local lists
- Predefined lists: To Do, In progress, Done
- Switch back to online mode at any time (reset access data)
- Tech stack: Flutter (Cupertino), Provider (State), Hive (Cache), flutter_secure_storage, http, flutter_markdown, file_picker, share_plus, url_launcher
- Folder structure:
lib/pages: Screens (board, overview, pending, settings, details, search)lib/state:AppStateincl. caching, warmup, sync logiclib/services: Nextcloud Deck API client and logginglib/models: board/stack/card/label/user/commentlib/theme: Theme & color logiclib/l10n: Localizations
- Linting:
analysis_options.yaml(flutter_lints) - Execute tests:
flutter test- Make archived maps visible (filter)
- Further translations
- Push notifications for overdue cards
- Create new lists and boards (planned for v2.0)
For details about store content see STORE.md.
- "The login fails": It is best to use an app password. Make sure that the Deck app is active in your Nextcloud.
- "Why only HTTPS?": For security reasons, all connections are forced to HTTPS.
- "Where is my data stored?": All content remains on your Nextcloud server; only encrypted access data and a slim cache are stored locally.
This project is not affiliated with Nextcloud GmbH. "Nextcloud" and "Deck" are trademarks of their respective owners.