Inspiration

Phone sandbox games usually pick one lane: you build, or you explore, or you automate, or you grind loot. We wanted to see what happens when you stitch all of those genres together into one creature, and make it run offline on a mid-range phone with no artist and no audio designer. That is the Frankenstein brief taken literally.

What it does

PlanetCraft: Galactic Survival is an original, fully offline 3D voxel survival sandbox for Android. You crash-land on an alien world, mine and build, automate a colony, tame and hunt alien creatures, fly between six worlds and terraform dead planets into living ones.

The chimera, part by part:

Part Usually found in In PlanetCraft
Block-by-block building Sandbox builders Streaming 16x16x128 chunk engine with greedy meshing and ambient occlusion
Space exploration Space games 6 seed-generated worlds, ship assembly, star map, jumps
Factory automation Automation sims Power grid, miner drones, auto-smelting, production while you are on another planet
Survival Survival games Oxygen, suit energy, food, temperature, radiation, storms
Loot and bosses Action RPGs Rarity tiers, elite variants, 16 rare-or-better items, a bestiary, the Void Guardian boss
Planet simulation Terraforming / god games Mining raises pollution; terraformers change atmosphere, water, life, sky colour and ground
Story Narrative RPGs 25-step campaign in 6 chapters, 6 NPCs, 14 side jobs, trading

Plus 61 placeable blocks, 75 data-driven recipes, 11 creatures with procedural animation, a drivable rover, weather and meteor showers, an offline cosmetic Stellar Store, touch controls and full settings. The APK requests no permissions and works fully offline.

How we built it

The technology chimera is just as mixed as the genres:

  • Godot 4.7.2 + GDScript for the engine, UI and Android export.
  • A custom voxel engine in GDScript: seeded generation, padded-volume greedy mesher, WorkerThreadPool streaming, DDA raycasts, AABB voxel physics.
  • Custom GL ES 3.0 shaders: terrain lighting from a Texture2DArray, wind sway, fluids, and a procedural sky with a ringed planet, stars, clouds and storms.
  • Procedural pixel art: all 78 block textures and every item icon are generated from JSON recipes at boot.
  • Procedural audio: 28 sound effects from oscillators and noise, plus generative day/night music rendered on a background thread. The repo has no image or audio assets apart from the SVG app icon.
  • A JSON data layer: 12 data files drive content, so new planets, creatures or quests need no code.
  • Python, PowerShell + adb, and GitHub Actions for tooling, real-device testing and CI that tests and exports the APK on every push.

How Kiro was used

The whole project was built from an empty folder with Kiro CLI:

  • Steering docs (.kiro/steering/product.md, tech.md, structure.md) pinned the hard rules from day one: offline only, original art, 30+ FPS on mid-range Android, Godot 4.7.2 + GDScript only, no nodes touched from worker threads, all content in data/*.json, and an honesty rule that the docs must list limitations instead of overstating features. These rules are visible in the code, for example the worker threads only touch packed arrays.
  • Spec-driven development (.kiro/specs/phase1-foundation and phase2-4-gameplay): requirements R1 to R17 with acceptance criteria, a design doc and 28 tasks. The design decided things before code existed, such as the column-contiguous block index the mesher relies on, the face-key format that keeps AO exact when quads merge, and clockwise winding that a test later checks. Compared with vibe coding, the spec kept a game this size coherent across many sessions.
  • Agentic verification: Kiro ran godot --headless --import after changes to catch GDScript errors, grew a headless suite to 47 checks, and wrote a gameplay bot (tests/autoplay.gd) whose screenshots it inspected. That is how it caught a zero-size HUD, spawning inside a cave, and a planet jump that reloaded the old planet.
  • Real-device loop over adb: install, launch, simulated touch, logcat [PERF] lines and screenshots. The first run showed 20 FPS; Kiro changed render scale and lighting and reached about 50 FPS on a Redmi Note 11.
  • MCP: .kiro/settings/mcp.json connects a local gateway with Blender and Godot tools, set up and verified in-session. It was not used to make game assets, since all art is procedural by design.
  • Agent hooks were not used in this project.

Challenges we ran into

  • Voxel meshing and world generation are CPU-heavy, and GDScript is interpreted, on a phone. The fix was threading plus data layout (column-contiguous blocks, padded volumes) and a per-frame mesh budget.
  • Automation and planet simulation want the whole universe running, but a phone can afford one planet. Other worlds advance with a time-delta simulation when you return.
  • Original art and sound for dozens of systems with no artist: everything is synthesised by code, which also keeps the APK small and the style consistent.
  • GitHub's CDN returned 504s on the 1.2 GB Godot template archive, so Kiro wrote a Python tool that pulls only the Android entries with HTTP range requests.

Accomplishments that we're proud of

  • Seven genres in one 29 MB APK with zero permissions, running fully offline.
  • Not a single hand-made texture or sound file in the repo.
  • About 50 FPS on a mid-range Snapdragon 680 phone, up from 20 FPS on the first device run.
  • CI that tests and builds the APK on every push and publishes releases.

What we learned

Steering and specs matter more as a project grows. Writing the constraints down once meant Kiro kept respecting performance and offline rules even when we redirected it mid-session ("make everything much more massive", "add a main story, NPCs and music", "add an offline store and rare drops"). Letting Kiro look at its own screenshots found bugs that unit tests could not.

What's next for PlanetCraft: Galactic Survival

Wired power networks and real conveyor transport, modular space stations with zero-g building, underground multi-room dungeons with a second boss, colonist AI that builds from blueprints, far-terrain LOD, flowing water and lava, a balancing pass, and a release-signed Play Store build.

Known limits today (honest list): balancing is first-pass, the APK is debug-signed, and it has been tested on one physical device.

Built With

Share this project:

Updates

Submission history