System dependencies
What a development machine needs beyond the Flutter SDK, per task. CI
captures the same list in ci/Dockerfile — keep the two in sync.
Core (all targets)
- Flutter 3.47+ / Dart 3.12.x (
environment.sdkpins^3.12.1,environment.flutterfloors at>=3.47.0; CI builds on 3.47.4) - For codegen/tests:
flutter pub get, thentool/verify.sh
Linux builds
From the Flutter Linux requirements plus our packaging:
- Toolchain:
clang,cmake,ninja-build,pkg-config - Libraries (dev packages):
libgtk-3-dev,libblkid-dev,liblzma-dev,libsecret-1-dev,libjson-glib-dev,libayatana-appindicator3-dev - Packaging tools per format:
.deb→dpkg.rpm→rpm(rpmbuild).pacman→fakeroot.AppImage→appimagetool(the CI image wraps it withAPPIMAGE_EXTRACT_AND_RUN=1so FUSE isn't needed).flatpak→flatpak,flatpak-builder, plusorg.freedesktop.Platform//24.08+org.freedesktop.Sdk//24.08.snap→snapcraftfastforge(dart pub global activate fastforge) for thedistribute_options.yamlformats;tool/build.shinstalls it on demand.
Gamepad input needs no build-time packages — the gamepads plugin's
Linux side reads /dev/input/event* through GTK/GLib (both already
required for any Flutter Linux app). Runtime access is a packaging
concern: unsandboxed installs (deb/rpm/AppImage/zip) see /dev/input
directly; Flatpak carries --device=input (Flatpak ≥ 1.15.6) and the
Snap carries the joystick plug — see
ci-and-packaging.md.
Tumbleweed libffi gotcha
On some openSUSE Tumbleweed installs, /usr/lib64/pkgconfig/libffi.pc
points at a stale include dir (/usr/lib64/libffi-3.2.1/include) and the
Linux build fails with missing ffi.h. Fix for the user account only:
mkdir -p ~/.local/lib/pkgconfig
sed 's|/usr/lib64/libffi-3.2.1/include|/usr/include|' \
/usr/lib64/pkgconfig/libffi.pc > ~/.local/lib/pkgconfig/libffi.pc
export PKG_CONFIG_PATH="$HOME/.local/lib/pkgconfig:$PKG_CONFIG_PATH"
Android builds
- Android SDK (platform + build-tools),
openjdk-17 adbfor--deploykeytool(JDK) fortool/generate_android_keystore.sh
Documentation / misc
dart formatis enforced —tool/install_git_hooks.shwires the pre-commit hook.- Icon regeneration (
dart tool/generate.dart) needs only Dart packages (image,args,path) — no system image tools.