15
Week 10 · Beyond the RF foundation

Build your first Flipper app

Build a small on-screen lab companion, inspect its source, and learn the difference between an app and firmware.

2–3 sessionsComputer, USB cable; basic C helps

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

  1. Read the included source and manifest. Identify the drawing callback, input callback, queue, and cleanup path. Explain what pressing Back should do.
  2. 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.
  3. 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.
  4. 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.
  5. Change the title to your lab’s name. Rebuild and verify that the changed text fits the screen.
  6. 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.