Self-hosted game project management system for indie developers
Dart
23
210 commits
updated Oct 5, 2026
A self-hosted game project management system for indie developers. Manage builds, deployments, AI-powered bug fixes, and automation — all from your phone.
Lifecharger on Google Play — Arcade Snake was built and deployed entirely through Auto Game Builder's automation pipeline. Check it out as a demo of what this tool can do.
In-Progress APKs (Google Drive) — Raw development builds of games and apps currently being made with Auto Game Builder. Fair warning:
qwen2.5-coder:7b)One-tap Studio Actions — each button creates an enriched task in your project's tasklist.json that the next autonomous AI run consumes. Distilled from the Claude Code Game Studios skill framework into a condensed, autonomous-first shape.
Studio Reviews (Issues screen → 🧪 popup):
assets/ against code references and GDD plans — broken refs, orphans, missing planned, placeholdersArt & Assets (Issues screen → 🎨 popup):
design/art-bible.md, the 9-section visual identity anchor (color palette, character direction, UI language, style prohibitions) that every future asset-generation task reads as a constraintTask creation:
gdd.md and CLAUDE.md files (App Detail screen)Built-in knowledge base at server/config/studio/*.md — 15 condensed specialist files covering brainstorming, GDD templates, gameplay/UX, code quality, visual audit, polish, consistency scanning, tech debt, asset audit, content audit, scope, performance, art bible, asset specs. Each is ~40-60 lines, autonomous-first, and loads into task prompts automatically based on the action.
python -m build workflowsExtend AI agent capabilities with Model Context Protocol servers:
Python scripts in tools/, organized by vendor/category subfolders:
tools/pixellab/ — pixel art generation, UI elements, backgrounds, image-to-pixel conversion, inpaintingtools/meshy/ — text-to-3D, image-to-3D, retexturing, remeshing, rigging, animationtools/tripo/ — Tripo3D text/image → 3D, rigging, animation (official SDK + Studio JWT path with refresh_studio_token.py)tools/grok/ — Grok (xAI) image/video generation + favorites downloadertools/chrome/ — Chrome DevTools Protocol launcher and network capturetools/blender/ — automatic mesh splitting and Mixamo bulk animation downloadtools/media/ — pad_image, video_to_frames, png_to_pixel_arraytools/extract/ — per-project asset extractorstools/pixel_guy/ — merged Pixel Guy character viewer app + Python pipelinetools/comic_translator/ — merged Gemini-powered comic translatortools/animation_generator/ — merged 2D Animation Generator UI (wraps the grok + media + tripo subfolders)All vendor API keys live in the gitignored server/config/mcp_servers.json under {vendor}._api_key. Client modules walk upward from their script directory to find it, so moving tools between depths just works. See tools/CLAUDE.md for the full per-tool reference.
Auto Game Builder takes security seriously. Your development PC is exposed to the internet via Cloudflare tunnels, so multiple layers of protection are in place:
Phone ──X-API-Key──> Worker ──verify HMAC──> Tunnel ──validate key──> PC Server
| Layer | Threat | Protection |
|---|---|---|
| API Key Authentication | Unauthorized access to your server | Every request requires a shared secret (X-API-Key header). Both the Cloudflare Worker and the PC server independently validate it. |
| HMAC-Signed Tunnel URLs | KV poisoning / man-in-the-middle | When the server writes its tunnel URL to Cloudflare KV, it also writes an HMAC-SHA256 signature. The Worker verifies this signature before proxying — a poisoned URL fails verification. |
| QR Code Pairing | Secure key exchange | The API key is transferred from PC to phone via QR code scan (physical/local channel). The key never travels through the internet during setup. |
| Worker Secrets | Key leakage | API key and HMAC secret are stored as Cloudflare Worker secrets (encrypted, never visible in dashboards or logs). |
settings.json/api/* endpoints require a valid API key (except /api/health)auto-game-builder/
server/ Python/FastAPI backend (runs on your dev PC)
api/server.py REST API (apps, issues, tasks, builds, studio, chat)
core/ Engine modules (build, deploy, autofix, AI tools)
config/ Settings, MCP servers, studio knowledge base
database/ SQLite with WAL mode (thread-safe, auto-migrating)
app/ Flutter mobile app (Android + Windows)
worker/ Cloudflare Worker proxy (JS)
tools/ Asset generation toolkit, organized by vendor:
grok/ pixellab/ meshy/ tripo/ chrome/ blender/ media/ extract/
pixel_guy/ comic_translator/ animation_generator/ dart/
| Engine | Detection | Build Targets | Scaffold |
|---|---|---|---|
| Flutter | pubspec.yaml | AAB, APK, EXE, IPA, Web | flutter create |
| Godot 4.x | project.godot | APK, AAB, Windows, Web, Linux | — |
| Unity 6 | ProjectSettings/ProjectVersion.txt | AAB, APK, Debug APK | — (see Unity Support) |
| Phaser | capacitor.config.ts | AAB, APK, Web | Custom template |
| React Native | package.json | AAB, APK | npx react-native init |
| Python | pyproject.toml | dist/ | — |
| Custom | Manual | User-defined | — |
git clone https://github.com/Lifecharger/auto-game-builder.git
cd auto-game-builder
pip install -r server/requirements.txt
python setup_wizard.py
python server/main.py
The setup wizard offers two modes:
Install from Google Play or build from source:
cd app
flutter pub get
flutter build windows --release # Windows desktop
flutter build apk --release # Android APK
flutter build appbundle --release # Android AAB (Google Play)
To access your server from your phone over the internet:
Install cloudflared:
winget install Cloudflare.cloudflaredbrew install cloudflaredInstall and authenticate wrangler (for Cloudflare KV — stores your tunnel URL):
npm install -g wrangler
wrangler login
This opens a browser to authenticate with your Cloudflare account. After login, the setup wizard can auto-configure tunnel settings.
Deploy the worker and set secrets (after first server start generates keys):
cd worker && npx wrangler deploy
# Read keys from server/config/settings.json, then:
echo "YOUR_API_KEY" | npx wrangler secret put API_KEY
echo "YOUR_HMAC_SECRET" | npx wrangler secret put HMAC_SECRET
Pair your phone — see Security > Pairing Your Phone above
pip install uv)| Group | Endpoints | Description |
|---|---|---|
| Apps | GET/POST/PATCH /api/apps | CRUD for game projects, auto-scan for projects |
| Issues | GET/POST/PATCH/DELETE /api/issues | Bug tracking with priority, category, status |
| Tasks | GET/POST/PATCH/DELETE /api/apps/{id}/tasks | Task management with archiving and statistics |
| Builds | GET /api/builds, POST /api/apps/{id}/deploy | Build orchestration, Google Play upload, retry |
| Automations | GET/POST/PATCH/DELETE /api/automations | Continuous automation loops, start/stop/run-once |
| Studio | POST /api/studio/brainstorm, POST /api/apps/{id}/studio/{action} | Game studio — brainstorm + 11 one-tap skill actions (design-review, code-review, balance-check, consistency-check, tech-debt, asset-audit, content-audit, scope-check, perf-profile, art-bible, asset-spec) |
| Chat | POST /api/chat | Context-aware AI conversation |
| MCP | POST/DELETE /api/mcp/servers | MCP server management, presets, per-app config |
| GDD | GET/PUT /api/apps/{id}/gdd | Game Design Document read/write |
| Enhance | POST /api/apps/{id}/enhance | AI-powered document improvement |
| Logs | GET /api/logs | Build and automation log viewer |
| Health | GET /api/health | Server status (no auth required) |
Unity 6 Android projects are first-class alongside Flutter, Godot and Phaser: detection, version bumping, head-less builds, and Google Play upload all work from the phone.
What is different from the other engines: Unity has no CLI export command. Every build runs a static C# method inside the project, so a Unity project must ship its own editor build script before Auto Game Builder can build it.
Unity 6 with Android Build Support, installed through Unity Hub. The path is
auto-detected from the Hub folder and stored as engines.unity_path in
server/config/settings.json — set it manually if you installed Unity elsewhere.
An editor build script at Assets/Editor/BuildPlayer.cs exposing three static
methods on a BuildPlayer class:
| Method | Build target | Output |
|---|---|---|
Aab() | aab | build/<slug>.aab |
Apk() | apk | build/<slug>.apk |
DebugApk() | debug | build/<slug>.apk |
The class may live in any namespace — it is read from the file, not assumed. If the script is missing, the build fails with that reason instead of producing nothing. Keystore passwords belong in environment variables read by that script, never in the project or in this repo.
Unity projects are created in Unity Hub, then imported — there is no scaffolding for
them yet (see the roadmap). Put the project under your projects_root and either:
POST /api/apps/scan — registers new folders and refreshes the engine of existing ones, orPOST /api/apps/{id}/detect-engine — re-reads one app's engine from disk.Engine re-detection also runs automatically at server start, so a project ported from another engine (for example Godot → Unity) starts reporting the new one on the next restart without any manual edit.
Unity keeps two separate values in ProjectSettings/ProjectSettings.asset:
bundleVersion — the display semver (1.0.23)AndroidBundleVersionCode — the integer Google Play orders uploads by (24)The deploy pipeline bumps both on every aab/apk build, and the version code is always
incremented rather than derived from the patch number, so a minor bump can never repeat a
code Play has already seen. When porting a project from another engine, copy the last
shipped version into these two fields first — otherwise the first Unity upload starts at
code 1 and Play rejects it.
Unity locks a project folder while the editor has it open, so a head-less build cannot
run while you have that project open in Unity. The deploy engine checks for
Temp/UnityLockfile and refuses with a readable message rather than a wall of Unity log
output. Builds are serialized with Godot builds (both drive Gradle), write their full
editor log to build/build_log.txt, and are allowed up to 45 minutes — an IL2CPP Android
build compiles the whole scripting runtime and routinely runs past the Godot ceiling.
All configuration is stored in gitignored files (never committed):
server/config/settings.json — tool paths, server settings, credentialsserver/config/mcp_servers.json — MCP server configs and API keysTemplate files with empty values are committed for reference:
server/config/settings.example.jsonIf you're an AI agent configuring this project, read AGENT_SETUP_GUIDE.md for complete instructions on JSON formats, tool search strategies, and configuration rules.
Contributions are welcome! Whether it's bug fixes, new features, documentation improvements, or translations — all pull requests are thoroughly reviewed. Feel free to open an issue to discuss ideas before submitting.
If you build something you think every user would benefit from, open a pull request — we'd love to see it.
Maintainer: @Lifecharger
This project is meant to be forked and customized. Change the app name, the theme, the package name, the features — whatever fits your workflow. The setup wizard handles developer identity and package naming so your build is truly yours, not a clone.
Some ideas:
app/lib/theme.dartGames and apps you build with Auto Game Builder are entirely yours. You own all rights to your creations — sell them, publish them, modify them, do whatever you want. No attribution required, no revenue sharing, no restrictions. Auto Game Builder is just the tool; what you make with it belongs to you.
This project (Auto Game Builder itself) is licensed under the GNU General Public License v3.0 — see LICENSE for details. This license applies to the tool, not to what you create with it.
Self-hosted game project management system for indie developers
Dart
23
210 commits
updated Oct 5, 2026
A self-hosted game project management system for indie developers. Manage builds, deployments, AI-powered bug fixes, and automation — all from your phone.
Lifecharger on Google Play — Arcade Snake was built and deployed entirely through Auto Game Builder's automation pipeline. Check it out as a demo of what this tool can do.
In-Progress APKs (Google Drive) — Raw development builds of games and apps currently being made with Auto Game Builder. Fair warning:
qwen2.5-coder:7b)One-tap Studio Actions — each button creates an enriched task in your project's tasklist.json that the next autonomous AI run consumes. Distilled from the Claude Code Game Studios skill framework into a condensed, autonomous-first shape.
Studio Reviews (Issues screen → 🧪 popup):
assets/ against code references and GDD plans — broken refs, orphans, missing planned, placeholdersArt & Assets (Issues screen → 🎨 popup):
design/art-bible.md, the 9-section visual identity anchor (color palette, character direction, UI language, style prohibitions) that every future asset-generation task reads as a constraintTask creation:
gdd.md and CLAUDE.md files (App Detail screen)Built-in knowledge base at server/config/studio/*.md — 15 condensed specialist files covering brainstorming, GDD templates, gameplay/UX, code quality, visual audit, polish, consistency scanning, tech debt, asset audit, content audit, scope, performance, art bible, asset specs. Each is ~40-60 lines, autonomous-first, and loads into task prompts automatically based on the action.
python -m build workflowsExtend AI agent capabilities with Model Context Protocol servers:
Python scripts in tools/, organized by vendor/category subfolders:
tools/pixellab/ — pixel art generation, UI elements, backgrounds, image-to-pixel conversion, inpaintingtools/meshy/ — text-to-3D, image-to-3D, retexturing, remeshing, rigging, animationtools/tripo/ — Tripo3D text/image → 3D, rigging, animation (official SDK + Studio JWT path with refresh_studio_token.py)tools/grok/ — Grok (xAI) image/video generation + favorites downloadertools/chrome/ — Chrome DevTools Protocol launcher and network capturetools/blender/ — automatic mesh splitting and Mixamo bulk animation downloadtools/media/ — pad_image, video_to_frames, png_to_pixel_arraytools/extract/ — per-project asset extractorstools/pixel_guy/ — merged Pixel Guy character viewer app + Python pipelinetools/comic_translator/ — merged Gemini-powered comic translatortools/animation_generator/ — merged 2D Animation Generator UI (wraps the grok + media + tripo subfolders)All vendor API keys live in the gitignored server/config/mcp_servers.json under {vendor}._api_key. Client modules walk upward from their script directory to find it, so moving tools between depths just works. See tools/CLAUDE.md for the full per-tool reference.
Auto Game Builder takes security seriously. Your development PC is exposed to the internet via Cloudflare tunnels, so multiple layers of protection are in place:
Phone ──X-API-Key──> Worker ──verify HMAC──> Tunnel ──validate key──> PC Server
| Layer | Threat | Protection |
|---|---|---|
| API Key Authentication | Unauthorized access to your server | Every request requires a shared secret (X-API-Key header). Both the Cloudflare Worker and the PC server independently validate it. |
| HMAC-Signed Tunnel URLs | KV poisoning / man-in-the-middle | When the server writes its tunnel URL to Cloudflare KV, it also writes an HMAC-SHA256 signature. The Worker verifies this signature before proxying — a poisoned URL fails verification. |
| QR Code Pairing | Secure key exchange | The API key is transferred from PC to phone via QR code scan (physical/local channel). The key never travels through the internet during setup. |
| Worker Secrets | Key leakage | API key and HMAC secret are stored as Cloudflare Worker secrets (encrypted, never visible in dashboards or logs). |
settings.json/api/* endpoints require a valid API key (except /api/health)auto-game-builder/
server/ Python/FastAPI backend (runs on your dev PC)
api/server.py REST API (apps, issues, tasks, builds, studio, chat)
core/ Engine modules (build, deploy, autofix, AI tools)
config/ Settings, MCP servers, studio knowledge base
database/ SQLite with WAL mode (thread-safe, auto-migrating)
app/ Flutter mobile app (Android + Windows)
worker/ Cloudflare Worker proxy (JS)
tools/ Asset generation toolkit, organized by vendor:
grok/ pixellab/ meshy/ tripo/ chrome/ blender/ media/ extract/
pixel_guy/ comic_translator/ animation_generator/ dart/
| Engine | Detection | Build Targets | Scaffold |
|---|---|---|---|
| Flutter | pubspec.yaml | AAB, APK, EXE, IPA, Web | flutter create |
| Godot 4.x | project.godot | APK, AAB, Windows, Web, Linux | — |
| Unity 6 | ProjectSettings/ProjectVersion.txt | AAB, APK, Debug APK | — (see Unity Support) |
| Phaser | capacitor.config.ts | AAB, APK, Web | Custom template |
| React Native | package.json | AAB, APK | npx react-native init |
| Python | pyproject.toml | dist/ | — |
| Custom | Manual | User-defined | — |
git clone https://github.com/Lifecharger/auto-game-builder.git
cd auto-game-builder
pip install -r server/requirements.txt
python setup_wizard.py
python server/main.py
The setup wizard offers two modes:
Install from Google Play or build from source:
cd app
flutter pub get
flutter build windows --release # Windows desktop
flutter build apk --release # Android APK
flutter build appbundle --release # Android AAB (Google Play)
To access your server from your phone over the internet:
Install cloudflared:
winget install Cloudflare.cloudflaredbrew install cloudflaredInstall and authenticate wrangler (for Cloudflare KV — stores your tunnel URL):
npm install -g wrangler
wrangler login
This opens a browser to authenticate with your Cloudflare account. After login, the setup wizard can auto-configure tunnel settings.
Deploy the worker and set secrets (after first server start generates keys):
cd worker && npx wrangler deploy
# Read keys from server/config/settings.json, then:
echo "YOUR_API_KEY" | npx wrangler secret put API_KEY
echo "YOUR_HMAC_SECRET" | npx wrangler secret put HMAC_SECRET
Pair your phone — see Security > Pairing Your Phone above
pip install uv)| Group | Endpoints | Description |
|---|---|---|
| Apps | GET/POST/PATCH /api/apps | CRUD for game projects, auto-scan for projects |
| Issues | GET/POST/PATCH/DELETE /api/issues | Bug tracking with priority, category, status |
| Tasks | GET/POST/PATCH/DELETE /api/apps/{id}/tasks | Task management with archiving and statistics |
| Builds | GET /api/builds, POST /api/apps/{id}/deploy | Build orchestration, Google Play upload, retry |
| Automations | GET/POST/PATCH/DELETE /api/automations | Continuous automation loops, start/stop/run-once |
| Studio | POST /api/studio/brainstorm, POST /api/apps/{id}/studio/{action} | Game studio — brainstorm + 11 one-tap skill actions (design-review, code-review, balance-check, consistency-check, tech-debt, asset-audit, content-audit, scope-check, perf-profile, art-bible, asset-spec) |
| Chat | POST /api/chat | Context-aware AI conversation |
| MCP | POST/DELETE /api/mcp/servers | MCP server management, presets, per-app config |
| GDD | GET/PUT /api/apps/{id}/gdd | Game Design Document read/write |
| Enhance | POST /api/apps/{id}/enhance | AI-powered document improvement |
| Logs | GET /api/logs | Build and automation log viewer |
| Health | GET /api/health | Server status (no auth required) |
Unity 6 Android projects are first-class alongside Flutter, Godot and Phaser: detection, version bumping, head-less builds, and Google Play upload all work from the phone.
What is different from the other engines: Unity has no CLI export command. Every build runs a static C# method inside the project, so a Unity project must ship its own editor build script before Auto Game Builder can build it.
Unity 6 with Android Build Support, installed through Unity Hub. The path is
auto-detected from the Hub folder and stored as engines.unity_path in
server/config/settings.json — set it manually if you installed Unity elsewhere.
An editor build script at Assets/Editor/BuildPlayer.cs exposing three static
methods on a BuildPlayer class:
| Method | Build target | Output |
|---|---|---|
Aab() | aab | build/<slug>.aab |
Apk() | apk | build/<slug>.apk |
DebugApk() | debug | build/<slug>.apk |
The class may live in any namespace — it is read from the file, not assumed. If the script is missing, the build fails with that reason instead of producing nothing. Keystore passwords belong in environment variables read by that script, never in the project or in this repo.
Unity projects are created in Unity Hub, then imported — there is no scaffolding for
them yet (see the roadmap). Put the project under your projects_root and either:
POST /api/apps/scan — registers new folders and refreshes the engine of existing ones, orPOST /api/apps/{id}/detect-engine — re-reads one app's engine from disk.Engine re-detection also runs automatically at server start, so a project ported from another engine (for example Godot → Unity) starts reporting the new one on the next restart without any manual edit.
Unity keeps two separate values in ProjectSettings/ProjectSettings.asset:
bundleVersion — the display semver (1.0.23)AndroidBundleVersionCode — the integer Google Play orders uploads by (24)The deploy pipeline bumps both on every aab/apk build, and the version code is always
incremented rather than derived from the patch number, so a minor bump can never repeat a
code Play has already seen. When porting a project from another engine, copy the last
shipped version into these two fields first — otherwise the first Unity upload starts at
code 1 and Play rejects it.
Unity locks a project folder while the editor has it open, so a head-less build cannot
run while you have that project open in Unity. The deploy engine checks for
Temp/UnityLockfile and refuses with a readable message rather than a wall of Unity log
output. Builds are serialized with Godot builds (both drive Gradle), write their full
editor log to build/build_log.txt, and are allowed up to 45 minutes — an IL2CPP Android
build compiles the whole scripting runtime and routinely runs past the Godot ceiling.
All configuration is stored in gitignored files (never committed):
server/config/settings.json — tool paths, server settings, credentialsserver/config/mcp_servers.json — MCP server configs and API keysTemplate files with empty values are committed for reference:
server/config/settings.example.jsonIf you're an AI agent configuring this project, read AGENT_SETUP_GUIDE.md for complete instructions on JSON formats, tool search strategies, and configuration rules.
Contributions are welcome! Whether it's bug fixes, new features, documentation improvements, or translations — all pull requests are thoroughly reviewed. Feel free to open an issue to discuss ideas before submitting.
If you build something you think every user would benefit from, open a pull request — we'd love to see it.
Maintainer: @Lifecharger
This project is meant to be forked and customized. Change the app name, the theme, the package name, the features — whatever fits your workflow. The setup wizard handles developer identity and package naming so your build is truly yours, not a clone.
Some ideas:
app/lib/theme.dartGames and apps you build with Auto Game Builder are entirely yours. You own all rights to your creations — sell them, publish them, modify them, do whatever you want. No attribution required, no revenue sharing, no restrictions. Auto Game Builder is just the tool; what you make with it belongs to you.
This project (Auto Game Builder itself) is licensed under the GNU General Public License v3.0 — see LICENSE for details. This license applies to the tool, not to what you create with it.