Repository navigation
Guide Ios Widgets
MowDeck can show your mower on the iPhone home screen and lock screen and, while a job runs, on the Lock Screen and in the Dynamic Island. This needs the MowDeck app from TestFlight (a build with widgets), iOS 17 for the widgets and iOS 16.2 for the Live Activity. Your server's operator sets up the build once (Widgets and the Live Activity).
- Open the MowDeck app and sign in.
- Go to Einstellungen, panel This app (the app panel), and choose Turn on widgets.
The app creates an access key for this iPhone that can only see and control mowers. It is valid for 90 days and the app renews it by itself. You find it in Einstellungen -> API-Tokens as "iOS widgets: ..." and can revoke it there at any time. Turn off widgets, or logging out, removes it from the phone and revokes it. You need the right to see all mowers of the account (every default role has it).
Long-press the home screen, tap +, search for MowDeck, and pick one:
| Widget | Size | Shows |
|---|---|---|
| Mower status | small | Icon and state (Mäht, Station, Fehler, Regenpause, ...), battery ring, progress while mowing |
| Mower status | medium | The same plus area, next run, and the buttons Start (all areas with the mower's saved mowing defaults), Pause and Station |
| Mower on the lock screen | circular, rectangular, inline | Battery ring with the state glyph; "Mäht · 42 % · Großer Garten"; "Nächster Lauf 14:00" or "Regenpause bis 16:00" |
| Map | large | The map with the mower, the mowed path and the dock, plus state, progress and battery |
| Schedule and weather | medium | The next three runs, whether the rain pause lets them start (will run, rain pause, uncertain) and the rain status |
Long-press a widget and choose Edit Widget to pick the mower. Tapping a widget opens the mower in the app.
The map is drawn by your server (about every 5 minutes while mowing):

These two pictures are real output of the server's map renderer for an example garden. The widgets themselves are SwiftUI and could not be rendered without an iPhone or a Mac: their look on the device is not shown here.
While the mower mows, is paused or drives home, a Live Activity shows the mower's name and state, the progress, the area, the remaining time (it counts down by itself) and the battery. It starts when you start a job in the app, and also when a schedule or Home Assistant starts one (your phone gets a push, the app does not have to be open). It ends when the job is over: finished jobs stay on the Lock Screen for five minutes, errors for thirty. Swipe it away and MowDeck does not bring it back during that job. Turn Live Activities off for MowDeck under Settings -> MowDeck on the iPhone.
If the activity was started by a schedule while the app was closed, its progress starts updating once you have opened the app during the job (the phone needs to tell the server where to send updates).
- Widgets show the last known data when the server cannot be reached ("Last known state"). The system decides how often widgets reload; the server also sends a silent hint when the mower's state changes, which iOS honours a few times an hour.
- Start from a widget is the same as Start in the app with the saved defaults. It does not ask for confirmation: use it when you would also tap Start.
- Widgets need iOS 17; on iOS 16 only the Live Activity is available.
Mirrored from docs/guides/ios-widgets.md at commit d31bb5cc2fa17ace35f89531465b76d8f888ece6. Edit the file in the repository, not this wiki page.
Mirrored from the docs/ directory at commit d31bb5cc2fa17ace35f89531465b76d8f888ece6. Edit the files in the repository, not this wiki.
MowDeck documentation
- Home
- Phases
- Architecture
-
Decisions (ADR)
- Architecture decisions
- ADR 0001: OpenFGA instead of self-built authorization
- ADR 0002: Self-built Identity service in FastAPI instead of Keycloak or Zitadel
- ADR 0003: SvelteKit for the web app
- ADR 0004: Monorepo with a uv workspace
- ADR 0005: AGPL-3.0 for services and apps, Apache-2.0 for libraries
- ADR 0006: PostgreSQL for all persistence, no SQLite
- ADR 0007: NATS JetStream as event bus
- ADR 0008: Traefik as gateway
- ADR 0009: Command and event envelopes, subject naming and de-duplication
- ADR 0010: Python 3.13 for all services and libraries
- ADR 0011: Separate GPL-3.0 package for the PyMammotion adapter
- ADR 0012: Mower control interface and safety rules
- ADR 0013: Device-Gateway registry, sharding and per-mower concurrency
- ADR 0014: Authorization model, tuple ownership and the mowdeck-authz client
- ADR 0015: Tokens, sessions and key rotation
- ADR 0016: Fleet commands and authorization per command kind
- ADR 0017: Telemetry storage and retention
- ADR 0018: Realtime WebSocket protocol
- ADR 0019: Mammotion adapter transports, manual drive and secrets
- ADR 0020: Web app architecture
- ADR 0021: Browser authentication flow
- ADR 0022: Notifications: rules, recipients and delivery
- ADR 0023: Map rendering and projection
- ADR 0024: Scheduler: recurrence, rain pause and command issuing
- ADR 0025: Home Assistant integration as a pure API client
- ADR 0026: Manual drive channel over the Realtime WebSocket
- ADR 0027: Health history and theft alarm
- ADR 0028: Entitlements: plans as data and enforcement
- ADR 0029: Helm chart and release pipeline
- ADR 0030: Mowing patterns as plug-ins and the Planner
- ADR 0031: Billing with a Stripe adapter
- ADR 0032: Live camera over Agora, joined directly by the browser
- ADR 0033: Vision-assisted recovery with human approval
- ADR 0034: Linked cloud accounts and device discovery
- ADR 0035: Server-side camera frames and automatic AI analysis on errors
- ADR 0036: Native app shells with Capacitor, loading the web app from the server
- ADR 0037: Camera panorama calibration in the browser, with the AI supplying points only
- ADR 0038: Dual link per mower and firmware updates
- ADR 0039: Spot mowing by MowDeck-driven paths
- ADR 0040: Link heartbeat for online status
- ADR 0041: Spot runs from the dock: undock, transit and return
- ADR 0042: Drive calibration
- ADR 0043: Turn styles
- ADR 0044: Drive view with camera
- ADR 0045: Camera relay
- ADR 0046: Device settings as capabilities
- ADR 0047: The RTK base station as a Fleet device
- ADR 0048: Maintenance commands
- ADR 0049: Manual driving over the Mammotion cloud
- ADR 0050: Passkeys and the app login hand-off
- ADR 0051: Sign in with GitHub
- ADR 0052: Sign in with Apple
- ADR 0053: Retention and downsampling of the position track
- ADR 0054: Aerial photo under the mower map
- ADR 0055: Deploy maintenance window
- ADR 0056: Camera photo in push notifications for errors and theft alarms
- ADR 0057: Step-up re-authentication for critical actions
- ADR 0058: Theft tracking mode
- ADR 0059: iOS widgets and the mowing Live Activity
- ADR 0060: Apple Watch app
- ADR 0061: Mowing angle rotation
- ADR 0062: Setup tour for new users
- ADR 0063: Matter server (mowers in Apple Home and Google Home)
- ADR 0064: Personal access tokens and the public API documentation
- Development
-
Operations
- Operating the Compose stack
- Operating MowDeck on Kubernetes (Helm)
- Building the Bluetooth bridge (ESPHome on a XIAO ESP32-S3)
- Releases
- Billing operations
- Telemetry: retention and position downsampling
- iPhone and Android apps
- Passkeys
- Sign in with GitHub
- Aerial photo under the map
- Sign in with Apple
- Theft tracking mode
- Matter server
- Source code offer (AGPL-3.0 section 13)
- Spikes
- Guides
- API reference
- Original plan (German)