Manifest templates
Starting points for a Flatpak manifest, one per common language or toolkit.
Each is available in YAML and JSON — pick whichever you prefer; Openpak
accepts both. Download one, rename it to your app ID
(com.example.App.yaml), and fill in the placeholders.
These are skeletons, not drop-in builds. Before submitting you must:
- replace
com.example.Appwith your real app ID, thecommand, and the module name; - point the source at your repository and pin an exact
commit(atagalone is rejected — tags can move); - generate offline dependency sources where noted (Rust/Node/.NET/Flutter/Ruby builds run without network access);
- trim
finish-argsto only the permissions your app actually needs.
All templates target the current runtimes (GNOME 50, KDE 6.10,
Freedesktop 25.08). See Runtimes.
By runtime
Pick the runtime your app's toolkit belongs to. GNOME bundles GTK4 + libadwaita, KDE bundles Qt6 + Kirigami, and Freedesktop is the minimal base for everything else. See Runtimes.
| Runtime | Toolkit | Build system | Download |
|---|---|---|---|
GNOME 50 | GTK4 + libadwaita | Meson | YAML · JSON |
KDE 6.10 | Qt6 + Kirigami | CMake | YAML · JSON |
Freedesktop 25.08 | none (SDL / custom / CLI) | Meson | YAML · JSON |
By language / toolkit
| Language / toolkit | Build system | Runtime | Download |
|---|---|---|---|
| C / GTK | Meson | GNOME | YAML · JSON |
| C++ / Qt | CMake | KDE | YAML · JSON |
| Python / GTK | Meson | GNOME | YAML · JSON |
| Python / Qt (PySide6) | pip | KDE | YAML · JSON |
| Rust | cargo | Freedesktop | YAML · JSON |
| Go | go build | Freedesktop | YAML · JSON |
| Electron / Node.js | npm + BaseApp | Freedesktop | YAML · JSON |
| Vala | Meson | GNOME | YAML · JSON |
| Java | OpenJDK extension | Freedesktop | YAML · JSON |
| C# / .NET | dotnet extension | Freedesktop | YAML · JSON |
| Flutter | flatpak-flutter | Freedesktop | YAML · JSON |
| Tauri | cargo + npm | GNOME | YAML · JSON |
| Ruby | bundler | Freedesktop | YAML · JSON |
Generating offline dependency sources
Flatpak builds have no network access, so package-manager dependencies must be fetched up front into a sources file the manifest references:
- Rust — flatpak-cargo-generator →
cargo-sources.json - Node.js / Electron / Tauri — flatpak-node-generator →
generated-sources.json/node-sources.json - Python — flatpak-pip-generator →
python3-modules.json - .NET — flatpak-dotnet-generator →
nuget-sources.json - Flutter — flatpak-flutter → Flutter SDK + pub sources
- Go — commit a
vendor/directory (go mod vendor) and build with-mod=vendor - Ruby — commit
vendor/cache(bundle package) andbundle install --local
See also Shared modules for common dependencies and the Linter for what the build checks before merge.