Dartvel, home
Docs
Features
Studio
Cloud
Compared

Search the site

GitHub
pub.dev

GETTING STARTED

Getting started
Existing Flutter apps
Existing Native apps
Run on your phone

APP

UI and styling
Routing
State
Accessibility
Keyboard shortcuts
Localization
Devices and desktop
Native device access
Media, 3D and XR

DATA

Data models
Forms
Search
Sync and offline
Import and export
Change capture
Database
Cache
File storage
Images
Privacy and erasure

BACKEND

Backend functions
Auth and sessions
Authorization
Queues and jobs
Workers and memory
Notifications and mail
Outbound HTTP
AI
Webhooks
GraphQL and OpenAPI
API keys and OAuth
Multi-tenancy
Billing and commerce
Modules

OPERATIONS

Edge security
Secrets and environments
Monitoring
Releases

SHIPPING

Build targets
Static web hosting
Servers and deploying

REFERENCE

Testing
CLI reference
Coding agents

SHIPPING

Build targets

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

Build with one command

dartvel build web
dartvel build android
dartvel build    # every target this machine can build
dartvel build linux --profile development

Copy 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.

Check tools before you build

dartvel doctor
dartvel doctor --target tizen
dartvel build webos --auto-install

Copy 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

Every target and its status

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.

Read build-targets.md

Android release builds

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 these

Copy code to clipboard

keytool -genkeypair -v -keystore upload.jks -keyalg RSA -keysize 4096 -validity 10000 -alias upload
dartvel build android

Copy 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.

TVs and embedded devices use vendor embedders

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:

flutter-tizen

by Samsung

flutter-elinux

by Sony

flutter-webos

by LG

flutter-tvos

by the FlutterTV authors

Paid targets

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 build

Copy 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.

Upstream embedders and credits

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.

flutter-tizen

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.

Dartvel's fork
flutter-elinux

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.

Dartvel's fork
flutter-webos

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.

Dartvel's fork
flutter-embedder

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.

Dartvel's fork
flutter_vscode

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.

Dartvel's fork
flutter-tvos

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.

Dartvel's fork
flt

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.

Dartvel's fork
mix

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.

Dartvel's fork

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.

Also built on

Every target is

Flutter

by the Flutter authors (BSD-3-Clause).

The generated router is built on

go_router

by the Flutter authors (BSD-3-Clause).

DV.Updates runs on the

updater

by Shorebird (MIT or Apache-2.0).

The Rust server is built on

Axum

by the Tokio project (MIT).

It runs on

Tokio

by the Tokio project (MIT).

PREVIOUS Releases Flags, branch previews, rollouts and old clients
NEXT Static web hosting dartvel build web on Apache or LiteSpeed
GitHub
pub.dev
npm
Acknowledgements
Privacy
Terms

FSL-1.1-MIT licensed. Built with Dartvel.

Dartvel is made by

SigmaDev Digital

To the bottom