Skip to content

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.sdk pins ^3.12.1, environment.flutter floors at >=3.47.0; CI builds on 3.47.4)
  • For codegen/tests: flutter pub get, then tool/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 with APPIMAGE_EXTRACT_AND_RUN=1 so FUSE isn't needed)
  • .flatpak → flatpak, flatpak-builder, plus org.freedesktop.Platform//24.08 + org.freedesktop.Sdk//24.08
  • .snap → snapcraft
  • fastforge (dart pub global activate fastforge) for the distribute_options.yaml formats; tool/build.sh installs 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
  • adb for --deploy
  • keytool (JDK) for tool/generate_android_keystore.sh

Documentation / misc

  • dart format is enforced — tool/install_git_hooks.sh wires the pre-commit hook.
  • Icon regeneration (dart tool/generate.dart) needs only Dart packages (image, args, path) — no system image tools.