f6-appkit

June 5, 2026 ยท View on GitHub

Fetch, build and deploy Flipper app-catalog apps for the f6 backport firmware. The official Apps hub won't serve faps for our custom az0v/api-87.1 fork, so this builds them from source against our own SDK and side-loads them over USB.

Why

A fap only runs if it was built against the exact firmware SDK it'll load on. Our f6 build is a custom fork, so any new catalog app has to be compiled against this SDK: the firmware tree's ./fbt, gcc 12.3, with the f6-to-f7 app-target patch baked in. Then pushed to the device by hand.

The flake handles the toolchain part. It grabs fbt's exact gcc-arm-none-eabi 12.3 build (the one that also bundles python, scons and openocd, version pinned as toolchainVersion in flake.nix) from update.flipperzero.one, drops it in the nix store and points FBT_TOOLCHAIN_PATH at it. So ./fbt finds its toolchain locally and never reaches for the network. When the firmware fork bumps scripts/toolchain/fbtenv.sh, bump toolchainVersion and refresh the four hashes.

Use

nix develop               # just, python(+pyserial), git, dfu-util, rsync, and the pinned toolchain
just                      # list recipes
just catalog              # clone the app catalog (once)
just list Games           # browse a category
just install snake_game   # fetch, build and deploy one app

Each step on its own: just fetch <id>, just build <id>, just deploy <id>, just clean <id>.

Override config inline, say a different device port or firmware path:

just port=/dev/cu.usbmodemflipX install acr122_emulator
just fw=/path/to/flipperzero-firmware build pomodoro

How it works

fetch reads the app's manifest.yml, clones its pinned commit and copies the app (from its subdir) into <fw>/applications_user/<id>/.

build runs ./fbt TARGET_HW=6 FIRMWARE_ORIGIN=az0v fap_<id> in the firmware tree.

deploy sends the .fap to /ext/apps/<Category>/ on the device with storage.py.

Defaults (override on the CLI)

vardefault
fw../flipperzero-firmware
catalog../flipper-application-catalog
port/dev/cu.usbmodemflip_Wlipurk1
target6
originaz0v

Apps gated to targets=["f7"] build fine, since the f6 target satisfies f7 (see the firmware fork's appmanifest.py patch). BLE and secure-enclave crypto work too now that the fork has those sorted, so apps leaning on them run fine on this unit.