Search the site
SHIPPING
Build one app for phones, desktops, the web and TVs.
Each target below shows what has been verified by running the build.
ON THIS PAGE
Build with one command
Check tools before you build
Every target and its status
Android release builds
TVs and embedded devices use vendor embedders
Paid targets
Upstream embedders and credits
dartvel build web
dartvel build android
dartvel build # every target this machine can build
dartvel build linux --profile developmentCopy code to clipboard
Code generation runs first, so there is no separate step.
--profile takes development, profile or release. release is the default.
A target this host cannot build is skipped with the reason.
dartvel doctor
dartvel doctor --target tizen
dartvel build webos --auto-installCopy code to clipboard
The build checks the host, then the tools, before it generates anything.
Tools Dartvel can fetch unattended install under ~/.dartvel/toolchains. It asks first, and installs without asking in CI.
Xcode, Visual Studio, the Android SDK and Tizen Studio are never installed for you.
Inside a project, doctor also checks the directories you configured as pagesDir, backendDir and modelsDir. A project that does not use one gets a [-] line, which is information and needs no fix. [!] is kept for something you have to fix.
[+] lib/pages exists
[-] lib/backend/functions not present (no backend functions)
[-] lib/models not present (no models)Copy code to clipboard
web
Needs: Any host
Status: Builds, and runs in headless Chrome
android
Needs: The Android SDK
Status: Builds an APK
fireos
Needs: The Android SDK
Status: Builds the Android APK
ios
Needs: macOS with Xcode
Status: Builds, verified on a macOS runner
macos
Needs: macOS
Status: Builds a universal binary
windows
Needs: Windows
Status: Builds, verified on a Windows runner
linux
Needs: Linux
Status: Builds and runs
tvos
Needs: macOS with Xcode
Status: Builds and runs on the simulator. Signed device builds are not verified
tizen (alias tpk)
Needs: Tizen Studio
Status: Builds a signed TPK. CI can only skip it
sony-elinux
Needs: Linux
Status: Builds and runs in release on a virtual device
webos
Needs: The webOS toolchain
Status: dartvel build webos skips: LG's CLI cannot resolve a Dartvel project. A package assembled in CI runs in a Wayland window under ARM emulation. Not run on a TV
web-server
Needs: Any host
Status: See Servers and deploying
The evidence for every row, with CI run links, is in build-targets.md.
A release build of android or fireos is signed with your own key. Without one the build stops before it starts and says how to set one up. It is never signed with the debug key.
# pubspec.yaml
dartvel:
android:
signing:
keyProperties: ../secrets/key.properties # kept out of the repository
internet: true # the default
allowBackup: false # the default
cleartextHosts: [printer.local] # plain HTTP only to theseCopy code to clipboard
keytool -genkeypair -v -keystore upload.jks -keyalg RSA -keysize 4096 -validity 10000 -alias upload
dartvel build androidCopy code to clipboard
The properties file holds storeFile, storePassword, keyAlias and keyPassword. storeFile is relative to the file.
In CI, set DARTVEL_ANDROID_KEYSTORE, DARTVEL_ANDROID_KEYSTORE_PASSWORD and DARTVEL_ANDROID_KEY_ALIAS instead.
The app may use the network. Set internet: false if it never does.
Backup is off, including copying to a new phone. With allowBackup: true, the app's databases, its sign-in and its offline data still stay on the device.
Plain HTTP is refused except to the hosts you list. Debug builds can also reach your computer from the emulator.
Release builds keep the Java Dartvel calls by name, so shrinking the app does not break the camera or payments.
tizen, sony-elinux, webos and tvos build through the platform's own Flutter embedder.
Dartvel keeps a pinned fork of each, which it can install for you.
--arch picks arm, arm64 or x64 for embedded builds. It defaults to arm64, and to this machine's own for sony-elinux.
sony-elinux-iso and sony-elinux-img
These names are accepted. Today they build the same bundle as sony-elinux, with no disk image.
Thanks to the embedders these targets are built on:
by Samsung
by Sony
by LG
by the FlutterTV authors
Some targets are not officially supported by Flutter. They come with every Dartvel Cloud plan instead of the free install: Apple Vision Pro, Meta Quest, Chrome and Firefox extensions, VS Code extensions, Telegram Mini Apps, apps that run in a terminal, Fuchsia, and microcontrollers with no Linux such as the ESP32-S3, which need the app built entirely from Dartvel primitives. The runtimes behind them (the Telegram host, the XR runtime behind DV.Window, the terminal surface and the browser-extension runtime) come with the same plans, as the dartvel_runtimes_pro package that plugs into extension points in the free framework. Every free target runs without it.
visionos
What it builds: The iPad app Apple Vision Pro runs
horizon
What it builds: A Meta Quest panel app
chrome-extension, firefox-extension
What it builds: A browser extension
vscode
What it builds: A VS Code extension
telegram
What it builds: A Telegram Mini App
linux-cli, macos-cli, windows-cli, fuchsia-cli
What it builds: The app in a terminal, with no window
fuchsia
What it builds: A Fuchsia package
dartvel build visionos --cloud # build it on Dartvel Cloud
dartvel targets add pro # or add the package and build here
dartvel targets # what this install can buildCopy code to clipboard
Without a plan, dartvel build visionos says which plan includes it and stops. Nothing is built or sent.
The package adds build steps only. Nothing from it, and no licence key, ends up in your app.
Dartvel 0.11.5 and earlier built these targets in the open, and those releases stay MIT licensed.
Your own targets
The way a paid target plugs in is public. Any package can add a build target the same way: see the CLI README.
Every TV, embedded, extension and terminal target runs on an embedder somebody else wrote. Dartvel keeps a fork of each so it can pin, patch and track it against the Flutter version Dartvel ships. Each fork keeps upstream's licence and docs untouched below a banner that says what changed.
Target: dartvel build tizen (alias tpk)
By: Samsung
Licence: BSD-3-Clause
What the fork adds: Tracks upstream's pin of Flutter 3.44.4. One patch: it stages the Flutter engine and assets into a native TPK, which Tizen SDK CLI 10.x left out.
Target: dartvel build sony-elinux
By: Sony
Licence: BSD-3-Clause
What the fork adds: Records the pin at Flutter 3.29.3, the newest engine Sony publishes. dartvel build sony-elinux assembles its bundle from Sony's embedder artifacts.
Target: dartvel build webos
By: LG
Licence: BSD-3-Clause
What the fork adds: Records the pin at Flutter 3.38.10. Its Dart 3.10.9 is below Dartvel's floor, so dartvel build webos skips; CI assembles a package from LG's engine instead.
Target: dartvel build fuchsia
By: the Fuchsia authors
Licence: BSD-2-Clause
What the fork adds: Adds a Bazel rule and a script that package any Flutter app, and a build-only bootstrap. Blocked today: the Flutter it bundles is too old to resolve a Dartvel project.
Target: dartvel build vscode
By: SlowGen
Licence: none declared; the upstream LICENSE file is a placeholder
What the fork adds: Points the generated extension at the file tsc writes. dartvel build vscode runs upstream's own scaffold and build steps.
Target: dartvel build tvos
By: the FlutterTV authors
Licence: BSD-3-Clause
What the fork adds: No source changes. Upstream pins Flutter 3.44.8.
Target: dartvel build linux-cli (alias linux-tui)
By: Jia Hao (jiahaog)
Licence: BSD-3-Clause
What the fork adds: Re-pins to Flutter 3.44.5 and adds dartvel-cli-flt, which bundles an app so it can leave the machine. Upstream is a research project that runs apps in development.
Target: A package, for projects that already use mix
By: Leo Farias and Bitwild
Licence: BSD-3-Clause
What the fork adds: Targets Dart 3.12 and Flutter 3.44 and keeps the package name, so a project swaps the dependency and its imports resolve unchanged. Upstream's 2,918 tests run unchanged in CI. DVBox and DVText do not use mix.
Thank you to the maintainers of these projects at Samsung, Sony, LG, the Fuchsia team, FlutterTV, Bitwild, and to SlowGen and Jia Hao. Dartvel's TV, embedded and terminal targets exist because they did the hard part first.
Every target is
by the Flutter authors (BSD-3-Clause).
The generated router is built on
by the Flutter authors (BSD-3-Clause).
DV.Updates runs on the
by Shorebird (MIT or Apache-2.0).
The Rust server is built on
by the Tokio project (MIT).
It runs on
by the Tokio project (MIT).
FSL-1.1-MIT licensed. Built with Dartvel.
Dartvel is made by
To the bottom