Building
Build the Flutter App with the repository’s fl_build tool. The Monitor
is a separate Rust service and has its own build steps.
Prerequisites
Section titled “Prerequisites”- Flutter SDK on the stable channel
- Platform SDKs: Xcode for iOS, Android Studio and Android SDK for Android, or Visual Studio for Windows
- Rust toolchain: the App builds
crates/sbm_ffiusing a Dart build hook,flutter_rust_bridge_hooks, and native assets
Initialize the Git submodules before fetching Dart packages:
git submodule update --init --recursiveRun a development build
Section titled “Run a development build”# Run on the default deviceflutter run
# Select a device explicitlyflutter run -d <device-id>Release build
Section titled “Release build”Pass the target platform to fl_build:
dart run fl_build -p <platform>Supported platform names are ios, android, macos, linux, and
windows.
Platform requirements
Section titled “Platform requirements”dart run fl_build -p iosBuilds require macOS and Xcode. Signing also requires an Apple Developer account.
Android
Section titled “Android”make build-androidRequires the Android SDK, a JDK, and the 1Password CLI: release builds are
signed with the key that scripts/release/android-signing.sh reads from
1Password. For local
verification only, pass -PallowDebugReleaseSigning=true explicitly to use
debug signing. Reproducible and F-Droid builds use
-PallowUnsignedRelease=true, which omits signing configuration;
scripts/release/android-build-env.sh exports this option.
dart run fl_build -p macosdart run fl_build -p linuxWindows
Section titled “Windows”dart run fl_build -p windowsRequires Visual Studio with the Desktop development with C++ workload and ATL support.
Build the Monitor
Section titled “Build the Monitor”The Monitor is a standalone server binary. Build it separately from the Flutter App:
# From the repository rootcargo build --release
# Build the web panelcd monitor/frontendnpm installnpm run buildAfter building the panel, Monitor serves it when frontend/dist exists.
For development, run make monitor-dev from the repository root. It starts
the API on :3770 and the Vite dev server on :3000.
The monitor-release.yml workflow builds release artifacts and currently
runs only through workflow_dispatch. Monitor monitor-v* tags are separate
from App releases. For a Docker build, see monitor/Dockerfile.
Build hooks
Section titled “Build hooks”On every build, fl_build regenerates lib/data/res/build_data.dart, derives
the build number from Git history, and writes the version to the Xcode
configuration. Set the App name in the fl_build: section of pubspec.yaml.
Troubleshooting
Section titled “Troubleshooting”Clean build
Section titled “Clean build”flutter cleanflutter pub getdart run build_runner buildThe iOS Linux engine’s libraries live in packages/fl_tty/build/ish, outside
what flutter clean removes, and fl_tty’s build hook fetches them again when
they are missing.
Dependency version conflict
Section titled “Dependency version conflict”Check package compatibility before upgrading dependencies:
flutter pub upgradeAfter changing an annotated model, run code generation as well; see Code Generation.
Release checklist
Section titled “Release checklist”- Update the version in
pubspec.yaml. - Run code generation and localization generation.
- Run Dart, Flutter, and Rust tests.
- Build every target platform.
- Verify key features on real devices.
- Create the GitHub release.