Install any skill in seconds. Free to start, no credit card required.
Get Started Free →CRITICAL: Use for Makepad packaging and deployment. Triggers on: deploy, package, APK, IPA, 打包, 部署, cargo-packager, cargo-makepad, WASM, Android, iOS, distribution, installer, .deb, .dmg, .nsis, GitHub Actions, CI, action, marketplace
.claude/skills/sickn33-makepad-deployment/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 88% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 61% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 72% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 196% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 295% | 0% |
This skill covers packaging Makepad applications for all supported platforms.
cargo-packager, cargo-makepad, or GitHub Actions packaging flows for Makepad.| Platform | Tool | Output | |----------|------|--------| | Desktop | cargo-packager | .deb, .nsis, .dmg | | Android | cargo-makepad | .apk | | iOS | cargo-makepad | .app, .ipa | | Web | cargo-makepad | Wasm + HTML/JS | | CI/CD | makepad-packaging-action | GitHub Release assets |
Use makepad-packaging-action to package Makepad apps in CI. It wraps cargo-packager (desktop) and cargo-makepad (mobile), and can upload artifacts to GitHub Releases.
yamljobs: package: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - uses: Project-Robius-China/makepad-packaging-action@v1 with: args: --target x86_64-unknown-linux-gnu --release
Notes:
Full inputs/env/outputs and release workflows live in references/makepad-packaging-action.md.
Desktop packaging uses cargo-packager with robius-packaging-commands for resource handling.
bash# Install cargo-packager cargo install cargo-packager --locked # Install robius-packaging-commands (v0.2.1) cargo install --version 0.2.1 --locked \ --git https://github.com/project-robius/robius-packaging-commands.git \ robius-packaging-commands
Add packaging configuration to your Cargo.toml:
toml[package.metadata.packager] product_name = "YourAppName" identifier = "com.yourcompany.yourapp" authors = ["Your Name or Team"] description = "A brief description of your Makepad application" # Note: long_description has 80 character max per line long_description = """ Your detailed description here. Keep each line under 80 characters. """ icons = ["./assets/icon.png"] out_dir = "./dist" # Pre-packaging command to collect resources before-packaging-command = """ robius-packaging-commands before-packaging \ --force-makepad \ --binary-name your-app \ --path-to-binary ./target/release/your-app """ # Resources to include in package resources = [ # Makepad built-in resources (required) { src = "./dist/resources/makepad_widgets", target = "makepad_widgets" }, { src = "./dist/resources/makepad_fonts_chinese_bold", target = "makepad_fonts_chinese_bold" }, { src = "./dist/resources/makepad_fonts_chinese_bold_2", target = "makepad_fonts_chinese_bold_2" }, { src = "./dist/resources/makepad_fonts_chinese_regular", target = "makepad_fonts_chinese_regular" }, { src = "./dist/resources/makepad_fonts_chinese_regular_2", target = "makepad_fonts_chinese_regular_2" }, { src = "./dist/resources/makepad_fonts_emoji", target = "makepad_fonts_emoji" }, # Your app resources { src = "./dist/resources/your_app_resource", target = "your_app_resource" }, ] before-each-package-command = """ robius-packaging-commands before-each-package \ --force-makepad \ --binary-name your-app \ --path-to-binary ./target/release/your-app """
bash# Install dependencies sudo apt-get update sudo apt-get install libssl-dev libsqlite3-dev pkg-config \ binfmt-support libxcursor-dev libx11-dev libasound2-dev libpulse-dev # Build package cargo packager --release
Output: .deb file in ./dist/
bash# Build NSIS installer cargo packager --release --formats nsis
Output: .exe installer in ./dist/
bash# Build package cargo packager --release
Output: .dmg file in ./dist/
toml# Linux (Debian) [package.metadata.packager.deb] depends = "./dist/depends_deb.txt" desktop_template = "./packaging/your-app.desktop" section = "utils" # macOS [package.metadata.packager.macos] minimum_system_version = "11.0" frameworks = [] info_plist_path = "./packaging/Info.plist" entitlements = "./packaging/Entitlements.plist" # Optional: signing identity for distribution signing_identity = "Developer ID Application: Your Name (XXXXXXXXXX)" # macOS DMG [package.metadata.packager.dmg] background = "./packaging/dmg_background.png" window_size = { width = 960, height = 540 } app_position = { x = 200, y = 250 } application_folder_position = { x = 760, y = 250 } # Windows NSIS [package.metadata.packager.nsis] appdata_paths = [ "$APPDATA/$PUBLISHER/$PRODUCTNAME", "$LOCALAPPDATA/$PRODUCTNAME", ]
Mobile platforms use cargo-makepad for building and packaging.
bashcargo install --force --git https://github.com/makepad/makepad.git \ --branch dev cargo-makepad
bash# Install Android toolchain cargo makepad android install-toolchain # Full NDK (recommended for complete support) cargo makepad android install-toolchain --full-ndk # Build APK cargo makepad android build -p your-app --release
Output: .apk in ./target/makepad-android-app/
Run on device/emulator:
bashcargo makepad android run -p your-app --release
bash# Install iOS toolchain cargo makepad apple ios install-toolchain
iOS Simulator:
bashcargo makepad apple ios \ --org=com.yourcompany \ --app=YourApp \ run-sim -p your-app --release
Output: .app in ./target/makepad-apple-app/aarch64-apple-ios-sim/release/
iOS Device (requires provisioning):
First, create an empty app in Xcode with matching org/app names to generate provisioning profile.
bashcargo makepad apple ios \ --org=com.yourcompany \ --app=YourApp \ --profile=$YOUR_PROFILE_PATH \ --cert=$YOUR_CERT_FINGERPRINT \ --device=iPhone \ run-device -p your-app --release
Output: .app in ./target/makepad-apple-app/aarch64-apple-ios/release/
Create IPA for distribution:
bashcd ./target/makepad-apple-app/aarch64-apple-ios/release mkdir Payload cp -r your-app.app Payload/ zip -r your-app-ios.ipa Payload
Build your Makepad app for web browsers.
bash# Install Wasm toolchain cargo makepad wasm install-toolchain # Build and run cargo makepad wasm run -p your-app --release
Output in ./target/makepad-wasm-app/release/your-app/:
index.html - Entry point*.wasm - WebAssembly module*.js - JavaScript bridgeresources/ - Static assetsServe locally:
bashcd ./target/makepad-wasm-app/release/your-app python3 -m http.server 8080 # Open http://localhost:8080
toml[package] name = "my-makepad-app" version = "1.0.0" edition = "2024" [dependencies] makepad-widgets = { git = "https://github.com/makepad/makepad", branch = "dev" } [profile.release] opt-level = 3 [profile.release-lto] inherits = "release" lto = "thin" [profile.distribution] inherits = "release" codegen-units = 1 lto = "fat" [package.metadata.packager] product_name = "My Makepad App" identifier = "com.example.mymakepadapp" authors = ["Your Name <you@example.com>"] description = "A cross-platform Makepad application" long_description = """ My Makepad App is a cross-platform application built with the Makepad UI framework in Rust. It runs on desktop, mobile, and web platforms. """ icons = ["./packaging/icon.png"] out_dir = "./dist" before-packaging-command = """ robius-packaging-commands before-packaging \ --force-makepad \ --binary-name my-makepad-app \ --path-to-binary ./target/release/my-makepad-app """ resources = [ { src = "./dist/resources/makepad_widgets", target = "makepad_widgets" }, { src = "./dist/resources/makepad_fonts_chinese_bold", target = "makepad_fonts_chinese_bold" }, { src = "./dist/resources/makepad_fonts_chinese_bold_2", target = "makepad_fonts_chinese_bold_2" }, { src = "./dist/resources/makepad_fonts_chinese_regular", target = "makepad_fonts_chinese_regular" }, { src = "./dist/resources/makepad_fonts_chinese_regular_2", target = "makepad_fonts_chinese_regular_2" }, { src = "./dist/resources/makepad_fonts_emoji", target = "makepad_fonts_emoji" }, { src = "./dist/resources/my-makepad-app", target = "my-makepad-app" }, ] before-each-package-command = """ robius-packaging-commands before-each-package \ --force-makepad \ --binary-name my-makepad-app \ --path-to-binary ./target/release/my-makepad-app """ [package.metadata.packager.deb] depends = "./dist/depends_deb.txt" section = "utils" [package.metadata.packager.macos] minimum_system_version = "11.0" [package.metadata.packager.nsis] appdata_paths = ["$LOCALAPPDATA/$PRODUCTNAME"]
| Task | Command | |------|---------| | Install desktop packager | cargo install cargo-packager --locked | | Install resource helper | cargo install --version 0.2.1 --locked --git https://github.com/project-robius/robius-packaging-commands.git robius-packaging-commands | | Install mobile packager | cargo install --force --git https://github.com/makepad/makepad.git --branch dev cargo-makepad | | GitHub Actions packaging | uses: Project-Robius-China/makepad-packaging-action@v1 | | Package for Linux | cargo packager --release | | Package for Windows | cargo packager --release --formats nsis | | Package for macOS | cargo packager --release | | Build Android APK | cargo makepad android build -p app --release | | Build iOS (Simulator) | cargo makepad apple ios --org=x --app=y run-sim -p app --release | | Build iOS (Device) | cargo makepad apple ios --org=x --app=y --profile=... --cert=... run-device -p app --release | | Build Wasm | cargo makepad wasm run -p app --release |
If app crashes with missing resources:
resources array in Cargo.toml includes all Makepad resourcesbefore-packaging-command runs successfully./dist/resources/ contains expected filesFor iOS device deployment:
--profile, --cert, --device flagsbash# Reinstall toolchain with full NDK cargo makepad android install-toolchain --full-ndk
references/platform-troubleshooting.md - Platform-specific deployment issuesreferences/makepad-packaging-action.md - GitHub Actions packaging referencecommunity/dora-studio-package-workflow.md - Dora Studio CI packaging example| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 15,141 | 7,480 | -51% | 1 | 1 | 0% | 2,734 | 5,127 | +88% | 0 | 0 | — |
case-02 | fail→pass | 17,150 | 8,749 | -49% | 1 | 1 | 0% | 3,239 | 5,218 | +61% | 0 | 0 | — |
case-03 | fail→pass | 17,109 | 9,198 | -46% | 1 | 1 | 0% | 3,164 | 5,440 | +72% | 0 | 0 | — |
case-04 | pass→pass | 9,782 | 6,579 | -33% | 1 | 1 | 0% | 1,955 | 4,752 | +143% | 0 | 0 | — |
case-05 | pass→pass | 14,862 | 14,586 | -2% | 1 | 1 | 0% | 3,140 | 5,988 | +91% | 0 | 0 | — |
case-06 | pass→pass | 17,028 | 13,028 | -23% | 1 | 1 | 0% | 3,260 | 6,293 | +93% | 0 | 0 | — |
case-07 | fail→pass | 7,684 | 3,376 | -56% | 1 | 1 | 0% | 1,404 | 4,158 | +196% | 0 | 0 | — |
case-08 | pass→pass | 5,520 | 2,954 | -46% | 1 | 1 | 0% | 920 | 3,977 | +332% | 0 | 0 | — |
case-09 | fail→pass | 5,863 | 3,433 | -41% | 1 | 1 | 0% | 1,023 | 4,044 | +295% | 0 | 0 | — |
case-10 | fail→pass | 8,711 | 3,964 | -54% | 1 | 1 | 0% | 1,421 | 4,178 | +194% | 0 | 0 | — |
case-11 | pass→pass | 9,941 | 3,347 | -66% | 1 | 1 | 0% | 1,886 | 4,048 | +115% | 0 | 0 | — |
case-12 | fail→pass | 9,280 | 3,874 | -58% | 1 | 1 | 0% | 1,702 | 4,323 | +154% | 0 | 0 | — |
case-13 | fail→pass | 16,234 | 4,093 | -75% | 1 | 1 | 0% | 2,886 | 4,213 | +46% | 0 | 0 | — |
case-14 | fail→pass | 8,650 | 2,449 | -72% | 1 | 1 | 0% | 1,521 | 3,950 | +160% | 0 | 0 | — |
case-15 | pass→pass | 10,391 | 2,641 | -75% | 1 | 1 | 0% | 1,963 | 4,036 | +106% | 0 | 0 | — |
case-16 | fail→pass | 11,277 | 4,562 | -60% | 1 | 1 | 0% | 1,874 | 4,346 | +132% | 0 | 0 | — |
case-17 | pass→pass | 9,627 | 1,644 | -83% | 1 | 1 | 0% | 1,675 | 3,709 | +121% | 0 | 0 | — |
case-18 | fail→pass | 9,638 | 5,432 | -44% | 1 | 1 | 0% | 1,502 | 4,548 | +203% | 0 | 0 | — |
case-19 | fail→pass | 7,467 | 1,920 | -74% | 1 | 1 | 0% | 1,179 | 3,798 | +222% | 0 | 0 | — |
case-20 | fail→pass | 14,535 | 2,829 | -81% | 1 | 1 | 0% | 2,679 | 3,986 | +49% | 0 | 0 | — |
case-21 | pass→pass | 10,769 | 2,369 | -78% | 1 | 1 | 0% | 2,015 | 3,922 | +95% | 0 | 0 | — |
case-22 | pass→pass | 6,729 | 1,905 | -72% | 1 | 1 | 0% | 1,109 | 3,732 | +237% | 0 | 0 | — |
case-23 | fail→pass | 4,203 | 1,743 | -59% | 1 | 1 | 0% | 714 | 3,763 | +427% | 0 | 0 | — |
case-24 | pass→pass | 11,834 | 2,625 | -78% | 1 | 1 | 0% | 2,029 | 3,959 | +95% | 0 | 0 | — |
case-25 | pass→pass | 6,235 | 3,667 | -41% | 1 | 1 | 0% | 997 | 4,059 | +307% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted. The headline lift of +56 percentage points is the difference between those two pass rates over the 25 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.