Overview
Welcome to the documentation for Gremlin Mobile, the mobile client platform for the Gremlin ecosystem. The mobile application platform is designed as a multi-app monorepo from day one using Flutter, communicating with the Go/Postgres/NATS backend. The mobile app acts strictly as a clientβthe Go backend remains the single source of truth and write authority.π± The Applications
The workspace hosts two primary applications, each targeting both iOS and Android:-
FieldForce
An offline-first, background-location-tracking application designed for field workers operating in locations with poor or no network connectivity. -
Digital Worker
A role-agent and chat-observation application allowing team members to communicate, observation-log, and manage tasks. It is lighter than FieldForce and does not track location.
π Why Flutter?
We chose Flutter (targeting iOS and Android from a single codebase) over other options (such as React Native or Web Shells/Capacitor) for several reasons:- Consistent Ecosystem: Standardized first-party packages reduce the risk of version incompatibilities, making code generation much cleaner and less bug-prone.
- Pixel-Perfect Rendering: Flutterβs Impeller rendering engine guarantees identical UI rendering across different OS versions and devices, avoiding platform-specific UI bugs.
- Sound Null Safety: Code-level null safety eliminates a major class of runtime exceptions before the app is ever deployed.
- Unified Tooling: Single test, build, and development loop (
flutter test,flutter build, Dart DevTools).
π Workspace Structure
The monorepo uses Melos to manage package dependencies and workspace actions. It is structured into two main directories:- Apps (
apps/*) are fully independent projects with their own bundle IDs, release cycles, and configurations. - Packages (
packages/*) house shared logic. No package should depend on an app, enforcing clear boundaries and strict modularity.
π Related Resources
mobile/flutter/CLAUDE.mdβ The authoritative mobile workspace architecture specification.- ADR-0037: Flutter Mobile Platform Choice β Rationales for adopting Flutter.
- ADR-0038: Melos Monorepo with Multi-App β Design details of the monorepo workspace.
- ADR-0048: Mobile Version Skew & Forced Upgrade β Version check policies.
- ADR-0049: Device Data Lifecycle β Per-user DB files, SQLCipher encryption, lock/wipe policies.