Dartvel, home
Docs
Features
Studio
Cloud
Compared

Search the site

GitHub
pub.dev

EXPO FOR FLUTTER

Expo for Flutter, and a backend framework beside it.

Expo is the reason React Native is pleasant to work in: one command to start, builds on somebody else's machines, store submission, updates that reach users without a review, and, through Expo Router, API routes and server functions that deploy to EAS Hosting. Flutter gives you flutter run and each platform's own release tooling, and stops there. Dartvel is that missing layer for Flutter, with a backend framework in the same language: data models, auth, queues, mail and an admin.

Install a development build of your app once. After that, dartvel dev prints a QR code; scan it and the app pairs and hot reloads over your network.

dartvel build android, ios, macos, windows, linux, tvos, tizen, sony-elinux, vscode and more. --cloud sends the build to Dartvel Cloud, which is not open yet.

dartvel deploy --store play, appstore, testflight or firebase-app-distribution hands the upload to that store's own tool.

dartvel updates patch sends a Dart fix over the air through Shorebird, or to Android apps from your own web-server binary. A patch has been applied on Android and not yet on an iPhone.

dartvel build android --profile development
dartvel dev            # QR code, pair, hot reload
dartvel deploy --store play
dartvel updates patch --platform android

Copy code to clipboard

SIDE BY SIDE

What each one gives you.

Language

Expo: TypeScript or JavaScript, with React

Dartvel: Dart, front and back

Run on a device

Expo: npx expo start, with Expo Go or a development build

Dartvel: A development build, or Dartvel Preview, paired by dartvel dev over a QR code

Cloud builds

Expo: EAS Build, with a free tier and paid plans

Dartvel: dartvel build --cloud. Cloud is not open yet

Local builds

Expo: npx expo run, or eas build --local

Dartvel: dartvel build android, ios, linux and the rest

Store submission

Expo: EAS Submit

Dartvel: dartvel deploy --store, through each store's own tool

Over the air

Expo: EAS Update, on Android and iOS

Dartvel: dartvel updates, through Shorebird or your own binary. Proven on Android; your own binary serves Android only

Server code

Expo: Expo Router API routes (+api.ts), server middleware, and React Server Functions in beta

Dartvel: @DVBackendFunction, with a typed client generated from it

Hosting the server

Expo: EAS Hosting, or most other hosts

Dartvel: One binary from dartvel build web-server, on a machine you run

Database

Expo: expo-sqlite on the device. For a server database the docs point to Convex, Supabase or Firebase

Dartvel: Data models on SQLite, Postgres or MySQL, with migrations

Auth

Expo: Guides for OAuth providers and auth SDKs, and redirects in Expo Router

Dartvel: Sessions, passkeys, OAuth sign-in, SAML, LDAP and second factors, built in

Admin

Expo: None built in

Dartvel: Studio, served by your own binary

TVs

Expo: Android TV and Apple TV, through react-native-tvos

Dartvel: Android TV, Apple TV, Samsung Tizen

Desktop and embedded

Expo: Not covered by the Expo docs

Dartvel: macOS, Windows, Linux, Sony embedded Linux

Thanks to the projects these targets are built on:

flutter-tizen

by Samsung

flutter-tvos

by the FlutterTV authors

flutter-elinux

by Sony

flutter_vscode

by SlowGen

Credits and licences

THE BACKEND

Both reach a server. They stop in different places.

An Expo Router API route is a file such as app/hello+api.ts that exports GET or POST handlers, and a React Server Function is called from a component like a typed function. Both deploy to EAS Hosting or another host, and a native build finds them through the origin set in the Expo Router config plugin, which Expo marks as alpha. What Expo leaves to you is what sits behind the handler: its database guide sends you to Convex, Supabase or Firebase, and sign-in comes from an auth SDK. Dartvel's backend is a framework of its own. A backend function is Dart, the client that calls it is generated from it, so renaming an argument breaks the build, and auth, policies and queues come with it. It cannot use the generated data models yet, because they import Flutter and the server is pure Dart.

@DVBackendFunction()
Future<String> _issue(String orderId) async => 'INV-$orderId';

// in the app, typed, generated, no fetch and no string URL
final String number = await issue(orderId: order.id);

Copy code to clipboard

A data model generates its table, its migration, a typed client, a form and an admin screen.

Model change streams and an offline store are built. Carrying a change from the server to a phone is not built yet, so a list on one device does not update when another device writes.

One binary from dartvel build web-server runs the site, the API and Studio, with SQLite created beside it.

HONESTLY

Where Expo is ahead today.

EAS is running today, with a free tier and paid plans: Build, Submit, Update, Hosting and Workflows. Dartvel Cloud is built and not open, so --cloud needs a token nobody can buy yet. Local builds, store uploads and Android patches from your own binary are free and work now.

EAS Update reaches iOS and Android. Dartvel's over-the-air patches are proven on Android only, and its own patch source serves Android only.

Expo Go is in the App Store and on Google Play and runs a project with no build of your own. Dartvel Preview does the same on Android and desktops, built from source and in no store yet, and a physical iPhone pairs only when the app is started from Xcode or flutter run.

eas deploy puts API routes on a hosted server in one command. Dartvel's web-server binary runs on a machine you provide.

Expo's ecosystem of config plugins and prebuilt modules is years old and very large, and React Native has more people to hire and more answers already written down.

Is this a fair comparison?

Expo is very good at what it does, and Dartvel copies the shape of it on purpose. Both reach the server now: Expo through API routes and server functions, Dartvel through a backend framework in the language the app is written in. If you want React and a hosted pipeline that works today, choose Expo. If you want Flutter, targets past the phone, and data models, auth and an admin in the same repository, that is what Dartvel is for.

Start an app
What ships today
Build without a Mac
Claims about Expo checked against its docs on 2026-09-25

ALSO

Dartvel next to the tools people ask about.

Laravel for Flutter
Hasura for Flutter
Ruby on Rails for Flutter
Dartvel vs Bubble
Dartvel vs PocketBase
Dartvel vs Qt
Dartvel vs Power Apps
GitHub
pub.dev
npm
Acknowledgements
Privacy
Terms

FSL-1.1-MIT licensed. Built with Dartvel.

Dartvel is made by

SigmaDev Digital

To the bottom