A cross-platform desktop GUI for the Unity CLI tool — manage editors, projects, builds, tests, licenses, and AI-powered automation from one beautiful app.
macOS · Windows · Linux · Web Server · uTools
| Page | Description |
|---|---|
| 📊 Dashboard | One-glance overview — installed editors, projects, running instances, cache size, recent activity |
| 🎮 Editors | Install/uninstall editors, manage modules, browse releases, monitor running instances |
| 📁 Projects | Expandable cards with inline version/target switching, Git info, project sizes, search, sort, 13+ context menu actions |
| 🔨 Build | Full build configuration with live log streaming, search filter, pause/resume, command preview |
| 🧪 Test | EditMode/PlayMode test runner with live results and log streaming |
| 🤖 MCP / AI | MCP client setup for 15+ AI tools, Pipeline status, custom command browser |
| 💬 AI Chat | Natural language → Unity CLI execution. Custom models, MCP services, skills — 4-tab settings |
| ⬇️ Downloads | Track editor downloads with progress, retry, and cancel support |
| 🖥️ Terminal | Built-in terminal (xterm.js) with maximize mode — no external terminal needed |
| 📋 Logs | Unity Hub activity log viewer with follow mode, search, and filtering |
| ⚙️ Settings | Licenses, themes, languages, proxy, cache, CLI updates, Hub management, diagnostics |
| ℹ️ About | Version info, update checker, environment diagnostics, bug reporting |
- AI-Powered Automation — Chat with your Unity environment in natural language. AI translates your intent into CLI commands and executes them inline
- Three Build Targets, One Codebase — Desktop (Tauri), Web Server (Node.js), uTools — all share the same frontend via Vite aliases
- 104 CLI Commands Wrapped — Every Unity CLI command is accessible through a type-safe API. The frontend (
tauri.ts) is the single source of truth, mapping 104 commands to 18 generic primitives - 10 Languages — English, 简体中文, 繁體中文, 日本語, 한국어, Deutsch, Español, Français, Português, Русский — with automatic system language detection
- Dark / Light / System Themes — Follow system preference or override manually
- Cross-Platform — Native builds for macOS (Apple Silicon + Intel), Windows, and Linux
- Headless Web Server Mode — Run on remote servers, access from any browser. One-click install script for Linux, macOS, and Windows
- Git Integration — Branch, repo URL, and dirty status visible on every project card
- Context Menu Power — 13+ right-click actions per project: Open, Open with Parameters, Reveal, Terminal, Code Editor, Copy Path, Settings, Disk Usage, Upgrade, Pin, Remove, Link/Unlink Cloud
Control Unity through natural language:
| Capability | Description |
|---|---|
| Natural Language → CLI | Ask "list all installed editors" → unity editors --installed executes automatically |
| Custom Models | Add unlimited models with per-model Base URL and provider |
| MCP Services | Configure third-party MCP via Form, JSON paste, or direct file editing |
| Custom Skills | Define reusable AI prompt templates |
| Auto-Execute | Commands in AI responses run automatically with inline results |
| Auto-Save | All settings persist automatically — no save button needed |
📊 Click to expand screenshots
graph TB
subgraph UI["🖥️ User Interface — React 18 + TypeScript"]
direction LR
P1["📊 Dashboard"]
P2["🎮 Editors"]
P3["📁 Projects"]
P4["🔨 Build"]
P5["🧪 Test"]
P6["💬 AI Chat"]
P7["⚙️ Settings"]
P8["...5 more"]
end
subgraph SOT["📐 tauri.ts — Single Source of Truth"]
direction TB
CMD["104 CLI Commands<br/>→ 18 Generic Primitives"]
end
subgraph Backends["🔌 Three Backends — Same Interface"]
direction LR
Tauri["🦀 Tauri (Rust)<br/>invoke() → IPC<br/>listen() → Events"]
UTools["🛠️ uTools (preload.js)<br/>invoke() → Bridge<br/>listen() → Callbacks"]
Web["🌐 Web Server (Node.js)<br/>fetch() → REST<br/>SSE → /api/events"]
end
subgraph CLI["⚡ Unity CLI Binary"]
UNITY["unity — 36 top-level commands"]
end
UI --> SOT
SOT --> Tauri
SOT --> UTools
SOT --> Web
Tauri -->|"spawn"| UNITY
UTools -->|"execSync"| UNITY
Web -->|"spawn"| UNITY
style UI fill:#1a1a2e,color:#e0e0e0,stroke:#0ea5e9,stroke-width:2px
style SOT fill:#16213e,color:#e0e0e0,stroke:#f59e0b,stroke-width:2px
style Backends fill:#0f3460,color:#e0e0e0,stroke:#10b981,stroke-width:2px
style CLI fill:#533483,color:#e0e0e0,stroke:#ec4899,stroke-width:2px
sequenceDiagram
participant U as 👤 User
participant UI as 💬 AI Chat UI
participant TS as tauri.ts
participant AI as 🤖 LLM Gateway
participant CLI as ⚡ Unity CLI
U->>UI: "List all installed editors"
UI->>TS: aiChat({ messages, model })
TS->>AI: POST /v1/messages
AI-->>TS: "```json { commands: ['unity editors --json'] } ```"
TS-->>UI: Response text + parsed commands
UI->>TS: runUnityCommand(['editors', '--json'])
TS->>CLI: unity --json --no-banner editors --installed
CLI-->>TS: { success, data: [...] }
TS-->>UI: Formatted result
UI-->>U: Inline command + result display
flowchart LR
subgraph Desktop["🖥️ Desktop Mode (Tauri)"]
direction TB
D1["React Component"] -->|"invoke('run_unity_json')"| D2["Rust IPC Handler"]
D2 -->|"Command::new('unity')"| D3["unity binary"]
D3 -->|"stdout JSON"| D2
D2 -->|"parse + return"| D1
end
subgraph WebMode["🌐 Web Server Mode"]
direction TB
W1["Browser (any device)"] -->|"fetch('/api/invoke')"| W2["Node.js Server"]
W2 -->|"child_process.spawn"| W3["unity binary"]
W3 -->|"stdout JSON"| W2
W2 -->|"SSE event stream"| W1
end
Desktop -.->|"Same tauri.ts<br/>Same UI<br/>Different transport"| WebMode
style Desktop fill:#1a1a2e,color:#e0e0e0,stroke:#0ea5e9
style WebMode fill:#0f3460,color:#e0e0e0,stroke:#10b981
flowchart TB
Dev["💻 Developer<br/>git push tag v*"] --> GH["🏗️ GitHub Actions"]
GH --> Mac["🍎 macOS build<br/>arm64 + x64"]
GH --> Win["🪟 Windows build<br/>x64 NSIS + MSI"]
GH --> Linux["🐧 Linux build<br/>deb + AppImage + rpm"]
Mac --> Release["📦 GitHub Release"]
Win --> Release
Linux --> Release
Release --> User1["⬇️ Desktop users"]
Release --> User2["⬇️ CI/CD pipelines"]
CI["🔄 CI (every push)"] -->|"tsc --noEmit"| Check1["✅ TypeScript check"]
CI -->|"vite build"| Check2["✅ Frontend build"]
CI -->|"cargo check"| Check3["✅ Rust compilation"]
style GH fill:#1a1a2e,color:#e0e0e0,stroke:#f59e0b
style Release fill:#16213e,color:#e0e0e0,stroke:#10b981
style CI fill:#0f3460,color:#e0e0e0,stroke:#0ea5e9
The frontend tauri.ts defines all 104 command → CLI-arg mappings. Each of the three backends implements only 18 generic primitives:
| Primitive | Tauri (Rust) | uTools (preload.js) | Web (Node.js) |
|---|---|---|---|
runUnityJson |
✅ Command::new("unity") |
✅ child_process.execSync |
✅ child_process.spawn |
runUnityPlain |
✅ | ✅ | ✅ |
startStreaming |
✅ Child::spawn + channels |
✅ spawn + callbacks |
✅ spawn + SSE |
aiChat |
✅ reqwest |
✅ fetch |
✅ fetch |
readFileContent |
✅ std::fs |
✅ fs.readFileSync |
✅ fs.readFileSync |
getGitInfo |
✅ Command::new("git") |
✅ child_process |
✅ child_process |
| ...12 more | ✅ | ✅ | ✅ |
Adding a new Unity CLI command? Add one function in
tauri.ts. Zero backend changes across all 3 targets.
git clone https://github.com/song-chaoyang/unity-cli-gui.git
cd unity-cli-gui
pnpm install
pnpm tauri devGo to Releases and download the latest build for your platform:
| Platform | File |
|---|---|
| macOS (Apple Silicon) | .dmg (arm64) |
| macOS (Intel) | .dmg (x64) |
| Windows | .msi / .exe (NSIS) |
| Linux | .deb / .AppImage / .rpm |
One-click install — perfect for CI machines and remote servers:
# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/song-chaoyang/unity-cli-gui/main/scripts/install-web.sh | sudo bash
# Windows (PowerShell as Admin)
irm https://raw.githubusercontent.com/song-chaoyang/unity-cli-gui/main/scripts/install-web.ps1 | iexThen access from any browser: http://<server-ip>:8080
- Node.js v18+ (v24 recommended)
- pnpm v9+
- Rust stable toolchain (desktop only)
- Unity CLI installed and on
PATH
| Platform | Requirements |
|---|---|
| macOS | Xcode Command Line Tools |
| Windows | Microsoft Visual C++ Build Tools, WebView2 |
| Linux | webkit2gtk-4.1, libgtk-3, libayatana-appindicator3 |
| Shortcut | macOS | Windows / Linux | Action |
|---|---|---|---|
| Settings | ⌘ , |
Ctrl , |
Open Settings page |
| Terminal | ⌘ T |
Ctrl T |
Open built-in terminal |
| Refresh | ⌘ R |
Ctrl R |
Refresh current page data |
| Maximize | ⌘ Shift M |
Ctrl Shift M |
Maximize terminal / log panel |
| Layer | Technology | Why |
|---|---|---|
| Desktop Framework | Tauri 2.0 | Smaller binaries, better security than Electron |
| Web Server | Node.js (http + SSE) |
Zero npm dependencies, runs anywhere |
| Frontend | React 18 + TypeScript | Type safety + ecosystem maturity |
| Backend | Rust (Tauri) / Node.js (Web) | Performance + safety |
| Styling | Tailwind CSS | Utility-first, consistent design |
| State | Zustand | Minimal boilerhead, no provider nesting |
| Terminal | xterm.js | Battle-tested terminal emulator |
| Build | Vite 5 | Fast HMR, optimized production builds |
10 languages with real-time switching — no restart needed:
| 🇺🇸 English | 🇨🇳 简体中文 | 🇹🇼 繁體中文 | 🇯🇵 日本語 | 🇰🇷 한국어 |
|---|---|---|---|---|
| 🇩🇪 Deutsch | 🇪🇸 Español | 🇫🇷 Français | 🇧🇷 Português | 🇷🇺 Русский |
System language is auto-detected on first launch.
GitHub Actions automatically builds and releases for all platforms on tag push (v*):
| Platform | Runner | Architecture |
|---|---|---|
| macOS | macos-latest |
arm64 + x64 |
| Windows | windows-latest |
x64 |
| Linux | ubuntu-22.04 |
x64 |
CI runs on every push: TypeScript check + Vite build + Rust cargo check.
- Core 12 pages with full CLI coverage
- AI Chat with natural language → CLI execution
- 10-language i18n with system detection
- Three build targets (Tauri / Web / uTools)
- Dark / Light / System themes
- Headless web server mode with one-click install
- Plugin system for custom extensions
- Batch project operations (multi-select)
- Build history with diff comparison
- Cloud sync for project configurations
- Built-in Unity package manager UI
Contributions are welcome! Whether it's a bug report, feature suggestion, or pull request — every contribution makes this project better.
- 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
pnpm install # Install dependencies
pnpm tauri dev # Start dev server with hot reload
pnpm tauri build # Build production binary
pnpm dev:web # Start web server dev mode
pnpm dev:utools # Start uTools dev mode- TypeScript strict mode — no
anyunless absolutely necessary - Rust clippy clean
- Tailwind utility classes — no custom CSS unless needed
- i18n: all user-facing strings must be in
translations.ts
MIT © 2026 Unity CLI GUI Contributors
History
If this project helped you, consider giving it a ⭐!
Made with ❤️ for the Unity community






