All components of Flipper Zero firmware — services, user applications, system settings — are developed independently. Each component has a build system manifest file, named application.fam, defining basic properties of a components and its relations to other parts of the system.
When building firmware, fbt collects all application manifests, processes their dependencies and builds only those components that are utilized in current build configuration. See fbt docs for details on build configurations.
Properties of a firmware component are declared in a form of a Python code snippet, forming a call to App() function with various parameters.
Only 2 parameters are mandatoty: appid and apptype, others are optional and may be meaningful only for certain application types.
appid: string, application id within the build system. Used for specifying which applications to include in build configuration and to resolve dependencies and conflicts.
apptype: member of FlipperAppType.* enumeration. Valid values are:
| Enum member | Firmware component type |
|---|---|
| SERVICE | System service, created at early startup |
| SYSTEM | Application not being shown in any menus. Can be started by other apps or from CLI |
| APP | Regular application for main menu |
| PLUGIN | Application to be built as .fap plugin |
| DEBUG | Application only visible in Debug menu with debug mode enabled |
| ARCHIVE | One and only Archive app |
| SETTINGS | Application to be placed in System settings menu |
| STARTUP | Callback function to run at system startup. Does not define a separate app |
| EXTERNAL | Application to be built as .fap plugin |
| METAPACKAGE | Does not define any code to be run, used for declaring dependencies and application bundles |
fbt will abort firmware build process.ps and free CLI commands to profile you app's memory usage.The following parameters are used only for FAPs:
.fam file contains one or more Application definitions. For example, here's a part of applications/service/bt/application.fam:
App(
appid="bt_start",
apptype=FlipperAppType.STARTUP,
entry_point="bt_on_system_start",
order=70,
)
App(
appid="bt_settings",
name="Bluetooth",
apptype=FlipperAppType.SETTINGS,
entry_point="bt_settings_app",
stack_size=1 * 1024,
requires=[
"bt",
"gui",
],
order=10,
)
For more examples, see application.fam files for basic firmware components.