A beautiful Flutter Desktop app to manage build processes without the CLI complexity.
Developed by Mustafa Türkmen & Haydar Demir
BuildPaw is a Flutter Desktop GUI application (macOS first-class citizen) that replaces the mental overhead of remembering and typing complex flutter build CLI commands. Select your project, toggle platforms, configure options, and hit BUILD — all from a clean, modern interface.
- Multi-platform builds — Android (APK/AAB), iOS (Runner/IPA), Web — all in one place
- Real-time log streaming — Terminal-style output with color-coded messages
- FVM aware — Auto-detects
.fvmand prefixes commands accordingly - Config profiles — Save, load, and switch between build configurations instantly
- Export/Import presets — Share build configs as versioned JSON files (Postman-style)
- Drag & Drop import — Drop a JSON config file onto the app to load it
- Artifact management — Collects build outputs to a timestamped folder on Desktop
- 8 languages — EN, TR, AR, DE, FR, ZH (Simplified), RU, HI with full RTL support
Material 3 dark/light theme with an amber/orange "paw" color palette. 8 languages supported.
BuildPaw follows Clean Architecture with a clear separation of concerns:
lib/
├── core/ # Theme, colors, constants, i18n
├── domain/ # Enums, models (pure Dart, no dependencies)
├── application/ # Cubits, Blocs, services (business logic)
├── infrastructure/ # Process execution, Git, Flutter CLI, file system
└── presentation/ # Pages, widgets (UI layer)
| Layer | Responsibility |
|---|---|
| Domain | BuildPreset, ProjectInfo, AndroidBuildConfig, enums |
| Application | ProjectCubit, BuildConfigCubit, BuildExecutionBloc, ProfileCubit |
| Infrastructure | ProcessService, GitService, FlutterService, FileSystemService |
| Presentation | HomePage, config panels, log panel, profile/theme/language selectors |
State Management: Bloc / Cubit (flutter_bloc)
- Flutter SDK
>=3.35.6 - Dart SDK
>=3.9.2 - macOS (primary target)
# Clone the repository
git clone https://github.com/your-username/BuildPaw.git
cd BuildPaw
# Install dependencies
flutter pub get
# Generate i18n translations
dart run slang
# Run the app
flutter run -d macosThe app requires the following entitlements (already configured):
- App Sandbox disabled — needed for
Process.start()and file system access - File read/write permission
- Network client permission (for
google_fonts)
Select any Flutter project directory. BuildPaw automatically detects:
| Info | Source |
|---|---|
| Project name | pubspec.yaml → name |
| Version | pubspec.yaml → version |
| Branch | git branch --show-current |
| Latest tag | git describe --tags --abbrev=0 |
| Flutter version | flutter --version --machine |
| Dart version | dart --version |
| FVM status | .fvm/ directory check |
| Dependencies | pubspec.lock (resolved) or pubspec.yaml (constraints) |
| Android | iOS | Web |
|---|---|---|
| APK / AAB / Both | Runner.app / IPA | PWA strategy |
| Code obfuscation | Code obfuscation | No tree shake icons |
| Split debug info | Split debug info | — |
| Flavor | Flavor | Flavor |
| Build mode | Build mode | Build mode |
| Target file | Target file | Target file |
Save your build configurations as named profiles stored persistently via SharedPreferences. Switch between profiles with a single click from the header menu.
Export configurations as versioned JSON presets (Postman-collection style):
{
"info": {
"name": "release-prod",
"version": "1.0.0",
"exportedAt": "2026-02-26T14:30:00Z",
"buildPawVersion": "1.0.0"
},
"platforms": { "android": true, "ios": false, "web": true },
"android": { ... },
"web": { ... }
}Import via file picker or drag & drop a JSON file directly onto the app.
| Language | Code | Direction |
|---|---|---|
| English | en |
LTR |
| Turkce | tr |
LTR |
| العربية | ar |
RTL |
| Deutsch | de |
LTR |
| Francais | fr |
LTR |
| 简体中文 | zh |
LTR |
| Русский | ru |
LTR |
| हिन्दी | hi |
LTR |
Technical content (terminal output, file paths, package names, CLI flags) remains LTR regardless of the selected language.
| Technology | Usage |
|---|---|
| Flutter | UI framework (Material 3) |
| flutter_bloc | State management |
| equatable | Value equality |
| file_picker | Directory/file selection |
| google_fonts | JetBrains Mono for terminal |
| shared_preferences | Persistent profile storage |
| slang | Type-safe i18n |
| desktop_drop | Drag & drop file import |
| very_good_analysis | Lint rules |
BuildPaw/
├── lib/
│ ├── main.dart # Entry point
│ ├── app.dart # MultiBlocProvider + MaterialApp
│ ├── core/
│ │ ├── theme/ # AppTheme (dark/light), AppColors
│ │ ├── constants/ # AppConstants
│ │ └── i18n/ # 8 locale JSON files + generated code
│ ├── domain/
│ │ ├── enums/ # BuildMode, BuildPlatform, OutputTypes
│ │ └── models/ # ProjectInfo, BuildConfigs, BuildPreset
│ ├── application/
│ │ ├── project/ # ProjectCubit (select + load info)
│ │ ├── build_config/ # BuildConfigCubit (platform toggles + config)
│ │ ├── build_execution/ # BuildExecutionBloc (run + stream logs)
│ │ ├── profile/ # ProfileCubit (save/load/apply profiles)
│ │ ├── theme/ # ThemeCubit (dark/light toggle)
│ │ ├── locale/ # LocaleCubit (language persistence)
│ │ └── services/ # BuildCommandGenerator, ArtifactManager
│ ├── infrastructure/
│ │ └── services/ # Process, Git, Flutter, FileSystem, ProfileStorage
│ └── presentation/
│ ├── pages/ # HomePage
│ └── widgets/ # All UI components
├── macos/ # macOS runner + entitlements
├── slang.yaml # i18n configuration
├── analysis_options.yaml # very_good_analysis
└── pubspec.yaml
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes following the convention:
feat(#1234): add amazing feature - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
<type>(#taskId): <description>
Types: feat, fix, docs, style, refactor, perf, test, build, revert, hotfix
This project is licensed under the GNU GPL v3 (Copyleft). See LICENSE for details.
Built with Flutter & lots of paw prints
Created by Mustafa Türkmen & Haydar Demir






