Search the site
SHIPPING
Build one app for phones, desktops, the web, TVs, browser extensions and the terminal.
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
TVs and embedded devices use vendor embedders
Headsets: Meta Quest and Apple Vision Pro
Build for the terminal
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
horizon
Needs: The Android SDK
Status: Builds a Meta Quest panel app, checked with aapt2. Not yet run on a headset
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
visionos
Needs: macOS with Xcode
Status: Planned: wired as the iPad app Vision Pro runs, not yet built on a Mac
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
fuchsia
Needs: Linux
Status: Blocked: the embedder's Flutter is too old to resolve dependencies
vscode
Needs: npm
Status: Builds a VS Code extension
chrome-extension
Needs: Any host
Status: Builds and runs
firefox-extension
Needs: Any host
Status: Builds and runs
linux-cli
Needs: Linux
Status: Runs in a terminal in the verification workflow
windows-cli, macos-cli, fuchsia-cli
Needs: That OS
Status: Not verified, and not expected to build: the terminal embedder builds for Linux only
web-server
Needs: Any host
Status: See Servers and deploying
The evidence for every row, with CI run links, is in build-targets.md.
tizen, sony-elinux, webos, fuchsia 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, to x64 for fuchsia, 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 Fuchsia authors
by the FlutterTV authors
dartvel build horizon # Meta Quest, Horizon OS
dartvel build visionos # Apple Vision Pro, on a Mac
dartvel doctor --target horizonCopy code to clipboard
Both open your app as a 2D panel. Your pages need no changes.
horizon is the Android build with what the Horizon Store asks of a panel app. Dartvel reads the finished APK back and stops the build if the store would refuse it.
Set the panel size and the headsets under dartvel.xr in pubspec.yaml: panel width and height in dp, and horizon devices.
visionos is the iPad app, which Vision Pro runs as Designed for iPad. Flutter has no visionOS engine, so there are no native windows, volumes or immersive spaces yet.
DV.Platform.isHeadset is true in both builds. Use it to decide what to offer, such as a back button for hands.
Not yet run on a headset
The Quest build has been checked with Android's own tools, not on a Quest. The Vision Pro build has not yet been built on a Mac.
dartvel build linux-cli # terminal only, no GUI code
dartvel build linux-tui # the same targetCopy code to clipboard
A -cli build links the terminal renderer and no GUI.
Set dartvel.terminal: true to link both into a normal desktop build.
build-targets.md records that terminal builds and native assets do not yet compose.
Terminal rendering is built on
by Jia Hao (jiahaog) (BSD-3-Clause).
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