Repository navigation
Architecture 02 Constraints
github-actions[bot] edited this page Oct 19, 2026
·
40 revisions
| Constraint | Background |
|---|---|
| PyMammotion is the only mower protocol implementation | The Mammotion protocol is unofficial; a firmware update can break features at any time. Pin the version and update firmware only after community feedback. |
| Bluetooth is the default link | WLAN control is announced but not available. Bluetooth runs through an ESP32 bridge that connects outbound to the Device-Gateway. |
| Python 3.13 | One language for services, PyMammotion (requires 3.13 or newer) and Home Assistant. See ADR 0010. |
| PostgreSQL only | No SQLite (see ADR 0006). |
| Only portable open components | PostgreSQL, S3-compatible storage, OIDC, NATS. No provider-specific cloud services. |
| Images for amd64 and arm64 | Mini PC, Raspberry Pi 5 and cloud. |
| Constraint | Background |
|---|---|
| Licensing | AGPL-3.0 for services and apps, Apache-2.0 for libraries (ADR 0005). |
| Language | All code, comments, commits and documentation are English; UI is German by default plus English. |
| Process | One task at a time, each with tests and README; definition of done includes docs and ADRs. |
| Terms of use | Uncritical for personal use; review before redistribution or commercial use. |
- Twelve-factor style: configuration and secrets only via environment variables or secret files, never in images.
- Stateless services, structured logs on stdout, health/readiness/liveness endpoints, graceful shutdown.
- Database migrations (Alembic) run as a separate step before start and stay backward compatible.
- Contracts only evolve backward compatibly; events are never reinterpreted, new versions are added instead.
Mirrored from docs/architecture/02-constraints.md at commit 8f3f7119bf4d91d9f8099b4597d37bec6990bf2f. Edit the file in the repository, not this wiki page.
Mirrored from the docs/ directory at commit 8f3f7119bf4d91d9f8099b4597d37bec6990bf2f. 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
- Development
- Operations
- Spikes
- Guides
- Original plan (German)