Build your first Flipper app
Build a small on-screen lab companion, inspect its source, and learn the difference between an app and firmware.
Understand it
A .fap is an external Flipper application. Its manifest
describes the entry point and metadata; its C code implements
behaviour using the SDK. uFBT downloads a toolchain and SDK,
compiles the application, and can launch it over USB. The SDK must
be compatible with the firmware you actually run.
The included lab companion source draws a title and exits with Back. It accesses no radio, credentials, or external network. Inspect both the source and manifest before building.
Build in an isolated Python environment
python3 -m venv .venv
source .venv/bin/activate
python -m pip install ufbt
cd examples/lab-companion
ufbt
# With your compatible Flipper connected and qFlipper closed:
ufbt launch
On Windows, create the environment with
py -m venv .venv, activate it using
.venv\Scripts\Activate.ps1 in PowerShell, and then use
the remaining commands. Clone or download this course repository
first; run the commands from its root.
Record python -m pip show ufbt, the SDK release
reported during the build, and your device firmware. The official
uFBT defaults to the release SDK. A Momentum app may need that
project’s documented SDK configuration. Do not flash firmware just
to make an incompatible app launch.
Lab: build the evidence
-
Read the included source and manifest. Identify the drawing callback, input callback, queue, and cleanup path. Explain what pressing Back should do.
-
Create the virtual environment, install uFBT, and build the app with
ufbt. On the first build, the tool downloads SDK components; later builds reuse them. -
Inspect the output in
dist/. Save the build result and SDK/firmware versions in your notebook. A successful compile does not yet prove on-device behaviour. -
With a compatible device connected, close qFlipper and run
ufbt launch. Verify the title appears and Back returns to the launcher. If no device is available, mark this part untested. -
Change the title to your lab’s name. Rebuild and verify that the changed text fits the screen.
-
Extension: add a button-controlled counter. Define its expected behaviour before changing code, handle input through the queue, and verify repeated open/close cycles without leaving resources allocated.
Have the official Wi-Fi Devboard? Module 18 adds UART logs and SWD debugging, then explains how a Flipper app can communicate with custom board firmware.
Show that you can do it
- A successful build with recorded toolchain and firmware versions.
- A small intentional change you can explain line by line.
- An on-device test record, or an explicit hardware-test limitation.
Record the result in your learning notebook. Repeat the explanation tomorrow without looking at this page.
Check yourself
Sources
Read the primary sources: Flipper: uFBT build tool · Flipper: development documentation. Course review: 10 September 2026.