DOTS hex-world game clientRareIcon
A Unity DOTS hex-world game client with a Burst-driven simulation — shipping to itch.io as Win/Linux/macOS standalone and to Steam as a demo.
Two destinations, one build
The same ci-unity.yml run reads external_publish to pick which post-build deploy fires — itch.io standalone or Steam.
- itch.io — Win/Linux/macOS standalone builds.
- Steam — demo (AppID 3791950) + main (AppID 2238370).
What it gives you
Features
ECS DOTS world
A Burst-driven hex-world simulation covering hex tiles, items, logistics, buildings, units, combat, professions, and quests.
Standalone-only Steam
Steam integration is locked to standalone via RareIcon.Platform.asmdef plus a SteamPluginPlatformGate editor hook, so mobile builds compile without seeing Steamworks types.
Two publish destinations
One build ships to itch.io as Win/Linux/macOS standalone and to Steam with a demo and main app.
Manifest-driven CI
The unity pipeline dispatches ci-main.yml to ci-unity.yml whenever the MDX version outpaces version.toml.
The client
Overview
RareIcon Unity client. Source: apps/rareicon/unity-rareicon. ECS DOTS world (Hex / Items / Logistics / Buildings / Units / Combat / Professions / Quests).
Pipeline & CI
Build, publish & release
Pipeline
Section titled “Pipeline”pipeline: unity → dispatched by ci-main.yml to ci-unity.yml whenever version here outpaces version.toml. Standard manifest-driven flow, no bespoke workflow.
Build matrix
Section titled “Build matrix”engine.build_targets:
StandaloneLinux64StandaloneWindows64StandaloneOSXAndroid— APK / AAB (debug-signed for now; production keystore + Play upload pending)iOS— Unity exports the Xcode project; the.ipastep is gated on an Apple Developer account
WebGL deliberately omitted — DOTS hybrid renderer + Burst aren’t WebGL-friendly.
Steam integration is locked to standalone via RareIcon.Platform.asmdef (includePlatforms excludes mobile / WebGL) plus SteamPluginPlatformGate editor hook (disables com.rlabrecque.steamworks.net native binaries on iOS / Android / WebGL importers). Mobile builds compile without seeing Steamworks types and ship without libsteam_api.so in the APK / IPA.
External publish
Section titled “External publish”Two destinations from one build:
Itch (external_publish.itch_user / itch_game):
kbve/rareicon:linux-x86_64kbve/rareicon:windows-x86_64kbve/rareicon:osx-universal
Build runs with DISABLESTEAMWORKS scripting define so SteamManager auto-no-ops when launched outside Steam.
Steam (external_publish.steam_apps[]):
- AppID
3791950—label: demo(the public demo, shipped first) - AppID
2238370—label: main(full game, queued for later) - Build keeps
steam_appid.txt+ Steamworks.NET enabled (the AppID flips per build via the Editor postprocessor)
The same ci-unity.yml run can target either route — the workflow reads external_publish to pick which post-build deploy fires.
Secrets required
Section titled “Secrets required”UNITY_LICENSE(Personal/Professional auth artifact, GameCI flow)UNITY_EMAIL,UNITY_PASSWORD(Personal license)BUTLER_API_KEY(itch.io upload)STEAM_USERNAME,STEAM_CONFIG_VDF(Steam Guard mobile auth, encoded)
Trigger
Section titled “Trigger”Tag-driven via the standard manifest dispatch. Bump version here, run npx nx run astro-kbve:sync:ci-manifest, commit, the next push fans ci-main.yml → ci-unity.yml for this entry.
Questions
Frequently asked
What is Unity RareIcon?
RareIcon is a KBVE game client built in Unity using the DOTS ECS. It runs a Burst-driven hex-world simulation covering hex tiles, items, logistics, buildings, units, combat, professions, and quests.
Where does RareIcon ship?
RareIcon ships to itch.io as a Windows, Linux, and macOS standalone build, and to Steam, where it has a demo app (AppID 3791950) and a main app (AppID 2238370).
How is RareIcon built in CI?
It uses the unity pipeline; ci-main.yml dispatches to ci-unity.yml whenever the MDX version outpaces version.toml. The engine build targets are StandaloneLinux64, StandaloneWindows64, StandaloneOSX, Android, and iOS.
