fastforge formerly Flutter Distributor
The ultimate all-in-one Flutter application packaging and distribution tool, providing a seamless solution for all your distribution needs.
Warning
Rust Migration In Progress: The core of Fastforge is being rewritten in Rust to deliver better performance, a smaller install footprint, and zero runtime dependencies on the Dart SDK. The new implementation lives in the crates/ directory and is being developed in parallel with the existing Dart packages.
What this means for you:
- The current Dart-based CLI (
dart pub global activate fastforge) continues to work and receives bug fixes. - The Rust CLI will be released as a native binary — no Dart or Flutter SDK required to run it.
- APIs and configuration formats are designed to remain compatible; any breaking changes will be clearly announced.
- Contributions, feedback, and bug reports on the Rust implementation are very welcome — see the Contributing section.
English | 简体中文
Documentation
Complete documentation is available at fastforge.dev.
Key Features
- 🚀 One-Click Build: Support for Android APK/AAB, iOS IPA, OpenHarmony HAP/APP and more
- 📦 Multi-Platform Release: Support for App Store, Google Play, Firebase, Pgyer, fir.im, etc.
- 🔄 CI/CD Integration: Perfect integration with GitHub Actions, GitLab CI, and more
- 🛠 Flexible Configuration: Support for multiple environments, flavors, and custom build arguments
Supported Package Formats
- Android: AAB, APK
- iOS: IPA
- OpenHarmony: HAP, APP
- Linux: AppImage, DEB, RPM, Pacman
- macOS: DMG, PKG
- Windows: EXE, MSIX
- Universal: ZIP
- More formats coming soon...
Supported Distribution Platforms
- App Store
- Firebase
- Firebase Hosting
- FIR
- GitHub Releases
- PGYER
- Play Store
- Qiniu
- Vercel
- More platforms coming soon...
Installation
dart pub global activate fastforge
Quick Start
- Add
distribute_options.yamlto your project root:
variables: PGYER_API_KEY: "your api key" # Replace with your own API keys output: dist/ releases: - name: dev jobs: # Build and publish APK to PGYER - name: release-dev-android package: platform: android target: apk build_args: target-platform: android-arm,android-arm64 dart-define: APP_ENV: dev publish_to: pgyer # Build and publish IPA to PGYER - name: release-dev-ios package: platform: ios target: ipa build_args: export-options-plist: ios/dev_ExportOptions.plist dart-define: APP_ENV: dev publish_to: pgyer
Note:
build_argsare parameters supported by theflutter buildcommand. Modify them according to your project requirements.
- Release your app:
fastforge release --name dev
CLI Commands
Package Your App
fastforge package --platform=android --targets=aab,apk
Publish a Package
fastforge publish --path dist/your-app-1.0.0+1-android.apk --targets pgyer
Release (Package + Publish)
fastforge release --name dev
Examples
Fastforge includes several example projects to help you get started:
- hello_world - Basic example demonstrating the core functionality.
- multiple_flavors - Example showing how to configure multiple application flavors.
- custom_binary_name - Example of how to customize binary output names.
Advanced Usage
Environment Variables
Fastforge supports using environment variables in your configuration files. This is useful for sensitive information like API keys:
variables: API_KEY: ${PGYER_API_KEY} # Uses the PGYER_API_KEY environment variable
CI/CD Integration
Fastforge works well in CI/CD environments. For example, with GitHub Actions:
jobs: build-and-release: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: subosito/flutter-action@v2 - name: Install Fastforge run: dart pub global activate fastforge - name: Build and release run: fastforge release --name production env: API_KEY: ${{ secrets.API_KEY }}
Check the documentation for more detailed CI/CD integration examples.
Who's Using It?
- Biyi - A convenient translation and dictionary app.
- Qianji - A purely bookkeeping app.
- Airclap - Send any file to any device. cross platform, ultra fast and easy to use.
Contributing
Contributions are welcome! If you'd like to help improve Fastforge:
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Please make sure to update tests as appropriate and follow the existing code style.