Skip to content
This repository was archived by the owner on May 3, 2026. It is now read-only.

Latest commit

 

History

162 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Help devs not go crazy.

Build Tauri apps for all 5 platforms — macOS, iOS, Android, Windows, Linux — without thinking about where code runs.

You just say what you want. utm-dev figures out the rest.

mise run mac:dev          # runs natively on your Mac
mise run ios:sim          # runs natively on your Mac
mise run android:sim      # runs natively on your Mac
mise run windows:build    # runs in a Windows VM (auto-created)
mise run linux:build      # runs in a Linux VM (auto-created)
mise run linux:dev        # opens a Linux desktop VM for dev/testing

You never manage VMs, install cross-compilers, or SSH into anything. If the target platform needs a VM, it starts one. If it doesn't, it runs locally. Same commands whether you're on macOS or inside the Linux VM.

Quick start

# 1. Install mise (if you don't have it)
curl https://mise.run | sh
mise activate zsh >> ~/.zshrc   # restart terminal after

# 2. Add utm-dev to your Tauri project
# Add to your mise.toml:
#   [task_config]
#   includes = ["git::https://github.com/joeblew999/utm-dev.git//.mise/tasks?ref=main"]

# 3. Set up everything
mise run init      # add tools + env to your mise.toml
mise install       # install tools (Rust, Bun, cargo-tauri, etc.)
mise run setup     # install platform deps (macOS: Xcode/Android, Linux: system libs)
mise run doctor    # check what's installed

That's it. You're ready to build.

Build for every platform

# macOS (runs natively)
mise run mac:dev              # desktop dev mode (hot reload)
mise run mac:build            # .app + .dmg

# iOS (runs natively)
mise run ios:sim              # simulator (no signing required)
mise run ios:xcode            # open in Xcode
mise run ios:build            # release IPA (requires signing)

# Android (runs natively)
mise run android:sim          # emulator
mise run android:studio       # open in Android Studio
mise run android:build        # .apk + .aab

# Windows (auto-starts VM on first run)
mise run windows:build        # .msi + .exe

# Linux (auto-starts VM on first run)
mise run linux:dev            # open Linux desktop VM (Debian 12 + GNOME)
mise run linux:build          # .deb + .AppImage

# Everything at once
mise run all:build

Build artifacts land in .build/windows/ and .build/linux/.

Works from Linux too. Inside the Linux VM (or on any native Linux box), mise run setup installs system deps, and cargo tauri dev / cargo tauri build just work. Same mise.toml, same tasks.

Utilities

mise run icon                     # generate all platform icons from app-icon.png
mise run screenshot               # take screenshots via WebDriver
mise run doctor                   # check what's installed/missing
mise run clean:project            # wipe this project's build artifacts
mise run clean:disk               # free system-wide disk space
mise run clean:disk -- --dry-run  # preview what would be cleaned
mise run clean:disk -- --deep     # also: Homebrew, Xcode archives, Docker
mise run mcp                      # set up MCP servers for AI-assisted dev

Prerequisites

macOS (full platform support):

  • Apple Silicon Mac
  • mise — curl https://mise.run | sh
  • Homebrew, Xcode (from App Store)
  • 8 GB+ RAM recommended (VMs need headroom)
  • ~6 GB disk for the box cache (~/.cache/utm-dev/)

Linux (native desktop/server builds):

  • mise — curl https://mise.run | sh
  • mise run setup installs everything else (apt system libs)

Add these to your .gitignore:

.build/
.mise/state/
.mise/logs/
.mcp.json

Everything is idempotent. Safe to re-run any command after errors, interruptions, or just to make sure things are current.

Example

See examples/tauri-basic/ for a working Tauri app with all platform tasks configured. Copy it as a starting point.


How it works

Stack

  • mise — task runner, tool management, orchestration
  • Bun — all task scripts are TypeScript
  • Tauri — the apps you're building

What installs what

mise handles everything it can — Rust, Bun, cargo-tauri, Java, xcodegen, ruby. mise run setup only installs what mise can't: OS-level packages and SDKs.

Tool Installed by macOS Linux
Bun, cargo-tauri, xcodegen, ruby, Java mise [tools] yes yes (skips macOS-only)
Rust mise or rustup yes yes
WebKitGTK, GTK, system libs apt — mise run setup
Android SDK, NDK, emulator sdkmanager mise run setup —
CocoaPods gem mise run setup —
Xcode App Store manual —
UTM Homebrew cask auto on first VM —

Five VMs

VM Box Purpose Ports
windows-build windows-11 VS Build Tools, Rust, mise — compiling SSH:2222 RDP:3389 WinRM:5985
windows-test windows-11 Clean Windows + SSH — testing installers SSH:2322 RDP:3489 WinRM:6985
linux-dev debian-12 (GNOME) Full desktop — dev experience validation SSH:2622
linux-build ubuntu-24.04 Headless — compiling SSH:2422
linux-test ubuntu-24.04 Clean Ubuntu + SSH — testing packages SSH:2522

VMs are created on-demand — windows:build, linux:build, and linux:dev handle everything automatically.

Credentials: vagrant / vagrant for all VMs.

RDP into Windows: Connect to 127.0.0.1:3389 (windows-build) or 127.0.0.1:3489 (windows-test).

VM commands (hidden)

Most devs never need these — the platform:target tasks call them automatically. Use mise tasks --hidden to see them.

Command What it does
mise run vm:up [profile] Start a VM (imports + bootstraps on first run)
mise run vm:down [profile] Stop a VM
mise run vm:build [profile] Sync + build in VM, pull artifacts back
mise run vm:exec [profile] '<cmd>' Run a command inside a VM
mise run vm:package [profile] Export a VM as a Vagrant box
mise run vm:delete <profile> Delete a VM, utm (all + app), or all

Profiles: windows-build, windows-test, linux-dev, linux-build, linux-test

Deleting VMs

mise run vm:delete windows-build  # removes VM + state, keeps box cache
mise run vm:delete utm            # all 5 VMs + uninstall UTM
mise run vm:delete all            # everything (box cache always preserved)

MCP (AI-assisted development)

mise run mcp   # writes .mcp.json + auto-allows permissions

Configures two MCP servers:

Server What it does
context7 Up-to-date docs and code examples for any library
mise Query tools, tasks, env vars, config — and run tasks directly

Troubleshooting

Problem Fix
Something missing mise run doctor — shows exactly what's installed and what's not
VM state corrupted Delete .mise/state/vm-{name}.env and re-run mise run vm:up
Bootstrap is slow Normal — Windows VS Build Tools takes 5-10 min on first run
Need detailed logs Check .mise/logs/

Manual SSH:

sshpass -p vagrant ssh -p 2222 vagrant@127.0.0.1   # windows-build
sshpass -p vagrant ssh -p 2322 vagrant@127.0.0.1   # windows-test
sshpass -p vagrant ssh -p 2622 vagrant@127.0.0.1   # linux-dev
sshpass -p vagrant ssh -p 2422 vagrant@127.0.0.1   # linux-build
sshpass -p vagrant ssh -p 2522 vagrant@127.0.0.1   # linux-test

CI

Use jdx/mise-action@v2 in GitHub Actions.

License

MIT

About

Build Gio + Tauri apps for macOS, iOS, Android & Windows — UTM VM automation for Apple Silicon

Topics

Resources

Stars

10 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages