DartDosh
Build and ship your Flutter app with one command. Bumps the version, names the file properly, and uploads it to Firebase, Telegram, or the store — so you stop doing it by hand.
Pure Dart. No Ruby, no fastlane, no Gemfile.
$ dartdosh build aab -p
✅ Build number updated: 41 → 42, Boss!
⚙️ Process: Build steps in progress, Boss...
[██████████████████████████████] 100% - [appbundle - production] - Ready!
🎉 App ready: appbundle (production), Boss!
✅ Build saved: ~/Desktop/dartdosh-builds/my_app/aab/prod_1.2.3_42.aab, Boss!
🚀 Uploading AAB to Google Play (production → production track), Boss...
✅ AAB successfully uploaded to Play Store (production track), Boss!
🎯 Process completed in 94.3 seconds. Saved your time, Boss! ⚡
That is one command doing five things: incrementing the build number, running the right flavored build, renaming the artifact to prod_1.2.3_42.aab, filing it under your output folder, and pushing it to the store.
Why not a shell script or fastlane?
| DartDosh | fastlane | |
|---|---|---|
| Runtime | Dart — already on your machine | Ruby + Gemfile + bundler |
| Setup | dartdosh init writes the config for you |
Fastfile per platform, by hand |
| Flutter flavors | First-class (-p, -s, -d) |
You wire it up |
| Version + file naming | Automatic, consistent | You script it |
| UI language | English, Uzbek, Russian, Turkish | English |
Flutter is dropping Ruby and CocoaPods from new projects. A release toolchain that needs neither is one less thing to maintain.
Install
dart pub global activate dartdosh
If the command isn't found:
export PATH="$PATH:$HOME/.pub-cache/bin"
Quick start
cd your_flutter_project
dartdosh init # writes dartdosh_config/, updates .gitignore
dartdosh build apk -p # build production APK
init reads your pubspec.yaml and generates two files:
build_config.json— build commands and upload targets. Commit it, share it with your team.settings.json— your machine's preferences and credentials. Gitignored automatically.
That's the whole setup. If a later release adds a config key, dartdosh init fills it in without touching what you already have.
What it does
Building
- One command per target:
apk,aab(orappbundle),ipa - Flavor flags:
-pproduction,-sstaging,-ddevelopment - Any extra Flutter flag passes straight through —
--split-per-abi,--obfuscate,--dart-define - Live progress bar parsed from the real build output
Versioning and naming
- Auto-increments the build number in
pubspec.yamlbefore the build - Renames artifacts to
prod_1.2.3_42.aab— flavor, version, build number - Sorts them into
output_path/<project>/<target>/, so releases don't pile up inbuild/
Distributing
- 🔥 Firebase App Distribution — APK to your tester groups
- ✈️ Telegram — APK straight to a channel over MTProto, so the 50 MB Bot API limit doesn't apply (up to 2 GB)
- 🍎 App Store Connect — IPA upload
- 🏪 Google Play — AAB to
internal,beta, orproduction - Release notes prompt once, then travel with every upload
Housekeeping
dartdosh cleanremoves old build output and reports the space freeddartdosh upgrade/downgrademanage the CLI itself- Logs in English, Uzbek, Russian, or Turkish — set
languageinsettings.json
Commands
dartdosh init # set up or repair config
dartdosh build <target> [-p|-s|-d] # build, rename, move, upload
dartdosh clean [target] [-p|-s|-d] # delete old output files
dartdosh telegram setup # store your Telegram credentials
dartdosh telegram status # check which credentials are in effect
dartdosh --version # show version
dartdosh upgrade # update to the latest release
Documentation
| 🚀 Getting started | 01-getting-started.md |
| ⚙️ Configuration | 02-configuration.md |
| 🔨 Build commands and flags | 03-build-commands.md |
| 🔢 Version management and file naming | 04-version-management.md |
| 🍎 iOS build and App Store upload | 05-ios-appstore.md |
| 🔥 Firebase App Distribution | 06-firebase.md |
| ✈️ Telegram channel upload | 07-telegram.md |
| 🏪 Google Play Store upload | 11-play-store.md |
🔧 --dart-define-from-file |
08-dart-define.md |
| 🌍 Language support | 09-language.md |
| 🧹 Cleaning build output | 10-clean.md |
Read in your language: 🇺🇿 O'zbekcha · 🇷🇺 Русский · 🇹🇷 Türkçe
Video walkthrough
Support
Found a bug or want a feature? Open an issue.
If DartDosh saves you time, buying me a coffee helps keep it maintained. ☕
