Routes and navigation ids
A reference for the internal locations you can link to and the ids you can hide, so the distribution profile hide, hideSettings, welcome, links and home fields have something concrete to point at.
The nav id column is also the key a profile's home.zones art map uses to give one tool its own card picture.
Coilbox uses hash routing: every screen is a URL fragment beginning with #/. That's what makes in-app links work from a profile's welcome HTML. <a href="#/play/skirmish"> navigates without a page reload.
Top-level pages
These appear in the sidebar for every user (unless hidden). The nav id column is what you pass to the profile hide list (only the ids marked hideable can currently be hidden).
| Sidebar group | Item | Link (href) | Nav id | Hideable |
|---|---|---|---|---|
| Play | Singleplayer | #/play/skirmish | play.skirmish | no |
| Play | Campaigns | #/campaign | campaign.list | no¹ |
| Play | Scenarios | #/scenarios | scenario.list | no¹ |
| Play | Conquest | #/conquest | conquest.list | yes |
| Play | Warpath | #/warpath | runlite.list | yes |
| Play | Save Games | #/play/savegames | play.savegames | no |
| Multiplayer | Login | #/lobby | multiplayer.lobby | no² |
| Multiplayer | Chat | #/chat | multiplayer.chat | no² |
| Multiplayer | Battles | #/battles | multiplayer.battles | yes |
| Multiplayer | Matchmaking | #/matchmaking | multiplayer.matchmaking | no² |
| Multiplayer | Battle Room | #/battle | multiplayer.battle | no² |
| Multiplayer | Server admin | #/admin | multiplayer.admin | yes² |
| Records⁵ | Career | #/career | career.overview | yes |
| Records⁵ | Player stats | #/stats | multiplayer.stats | yes |
| Records⁵ | Replays | #/play/replays | play.replays | no |
| Library | Maps | #/library/maps | library.maps | no |
| Library | Games | #/library/games | library.games | yes |
| Library | Blueprints | #/library/blueprints | library.blueprints | no |
| Library | Downloads | #/library/downloads | library.downloads | no |
| Downloads | Coilbox hub | #/hub | hub.browse | yes |
| Downloads | Browse Rapid | #/downloads | downloads.browse | yes |
| Downloads | Maps | #/downloads/maps | downloads.maps | no |
| Downloads | Games | #/downloads/games | downloads.games | yes |
| Settings⁴ | Appearance | #/settings/frame.appearance | settings.appearance | no³ |
| Settings⁴ | Engine settings | #/settings/engine-settings | settings.engine | no³ |
| Settings⁴ | Accounts | #/settings/lobby-servers | settings.accounts | no³ |
| Settings⁴ | All settings | #/settings | settings.all | no |
¹ Campaigns only appears in the sidebar once at least one campaign exists (bundled or created locally), and Scenarios once at least one scenario names a game and a map. Until then the item is hidden automatically.
⁵ Records is the sidebar group for records of games already played, between Multiplayer and Library. Career, Player stats and Replays used to sit under Play and Multiplayer. Their nav ids and links did not change, so a profile hide entry or a saved link keeps working. The name Records is provisional (issue #3455). The group has no id of its own to hide: hide takes item ids only, and the sidebar drops a group when none of its items is visible.
⁴ Settings items appear on the welcome page only, not in the sidebar. The sidebar's way in is the footer gear, which also carries the settings badge. Four Settings rows above a row already saying Settings was two answers to one question.
³ Settings items are not on the hide list. They link to settings sections rather than to routes of their own, so hideSettings already governs them: hide engine-settings, frame.appearance or lobby-servers and both the settings section and its card here disappear together.
² Multiplayer items appear contextually, not via the profile. Login shows only while logged out. Chat appears after the first connect, then stays for the session. Matchmaking shows only while connected to a Tachyon server, because TASServer has no matchmaking. Battle Room shows only while you're in a battle. Battles is not contextual, it stays visible even logged out, because a direct room can be hosted from that page with no server and no login (issue #1580). It is profile-hideable instead. Server admin shows only while a connected account is a moderator or admin on an uberserver lobby (never on Teiserver or Zero-K), and is also on the profile's hide list, so a distribution can turn it off outright.
Want a nav item hideable that isn't yet? It's a one-line change per item in the plugin. Ask and the list can grow. Today
campaign.builder,career.overview,conquest.list,library.games,downloads.browse,downloads.games,hub.browse,multiplayer.admin,multiplayer.battles,multiplayer.statsandrunlite.listare wired for hiding (the authoritative set isHIDEABLE_NAV_IDSinsrc/profile/hidden.tsx).content.setupPacksis also on the samehidelist. It no longer names a nav item. It hides the Coilbox hub screen's "Share a pack" button instead.The
analytics.*ids are on the same list too and also name no nav item.analytics.matchStatshides the match statistics on a replay's page, the Replays page figures and the player dossier's match figures.analytics.runhides the button that runs the engine analysis, the one part with a cost, and an analysis already stored still shows.analytics.spatialLayershides the layers on a replay's map (start positions, buildings ordered, building density and order density) and their toggles, and leaves the start boxes.analytics.mapInsighthides the "How this map is played" section on a map's page, the picture of every match on that map. That section has no route of its own, and is reached from a map's page at#/library/maps/:name. See Where a replay's numbers come from.
Old paths:
#/content/replays(/:name)and#/content/stats(/:name)redirect to#/play/replays(/:name)and#/stats(/:name)respectively, so existing bookmarks and links keep working (#467).#/content/setup-packsredirects to#/downloads/maps, since the Setup packs page is gone and sharing a pack now happens from the Coilbox hub screen instead.Content became Library, so every browser path moved from
#/content/to#/library/. The old ones redirect:#/content/maps,#/content/maps/:name,#/content/games,#/content/games/:name,#/content/games/:name/units,#/content/games/:name/units/:unit,#/content/blueprints,#/content/blueprints/:id,#/content/archives,#/content/archives/:nameand#/content/archives/:name/repl.The nav ids moved with them. A distribution profile written against
content.maps,content.games,content.blueprints,content.archivesor thecontentsettings section keeps working, inhide,hideSettingsand the home pageartmap alike. The old names are mapped insrc/profile/renamedIds.ts.content.setupPacksdid not move, because it never named a nav item.
Advanced-mode pages
These are hidden unless Advanced mode is on (Settings > General). They're modding/authoring tools, not player-facing, so a game distribution usually leaves Advanced mode off and never sees them.
| Sidebar group | Item | Link (href) | Nav id |
|---|---|---|---|
| Library | Archives | #/library/archives | library.archives |
| uberstress | Run | #/uberstress | uberstress.run |
| uberstress | History | #/uberstress/history | uberstress.history |
| Campaign Builder | Campaigns | #/campaign-builder | campaign.builder |
| Campaign Builder | Scenarios | #/scenario-builder | scenario.builder |
| Mapping Tools | Projects | #/mapconv/projects | mapconv.projects |
| Mapping Tools | Compile | #/mapconv | mapconv.compile |
| Mapping Tools | Decompile | #/mapconv/decompile | mapconv.decompile |
| animation | BOS → Lua | #/animation | animation.bos2lua |
| animation | COB tools | #/animation/cob | animation.cob |
| unit builder | Models | #/lego | lego.units |
| unit builder | Lego Parts | #/lego/parts | lego.parts |
| workshop | Unit tweaks | #/workshop | workshop.units |
(Mapping Tools and animation also add a few external-link items, wiki/tool guides, that open in the browser rather than routing in-app.)
The Mapping Tools group keeps the nav group id mapconv, the #/mapconv/* paths and the mapconv settings section. Only the sidebar label changed, because mapconv is the name of the tool itself.
Campaign Builder is one sidebar group (nav group id builder), shared by the campaign and scenario plugins. It is not two separate "Campaign Builder" and "Scenario Builder" groups. src/scenario/index.ts registers its item into the same builder group under the label "Campaign Builder", so the two items merge into one group in the sidebar.
Detail pages
Reachable by clicking through the lists above. Not sidebar items, but you can deep-link to them if you know the id/name. :name, :id and :unit are placeholders.
Link (href) | What it is |
|---|---|
#/library/maps/:name | A single map's detail page |
#/library/games/:name | A single game's detail page |
#/library/games/:name/units | A single game's unit list |
#/library/games/:name/units/:unit | A single unit's detail page |
#/library/games/:name/units/reference | Sortable table and comparison view over the game's own units |
#/library/blueprints/:id | A single layout's detail page |
#/play/replays/:name | A single replay's detail page |
#/stats/:name | A player's dossier (head-to-head stats) |
#/stats/:name/matchup | Your games against that player, grouped by map, faction pairing and game length. ?me= names your player, and without it the page picks the dossier's player |
#/chatlogs | Saved chat history (DMs and channels), read from disk with no live connection |
#/hub/:id | A single shared Coilbox hub item's page |
#/library/archives/:name | A single archive (advanced) |
#/library/archives/:name/repl | An archive's Lua console (advanced) |
#/campaign/:id | A campaign's mission list |
#/campaign/:id/:missionId | A mission briefing/result |
#/campaign-builder/:id | Editing a campaign (advanced) |
#/scenario-builder/:id | Editing a scenario (advanced) |
#/conquest/:id | A conquest in progress |
#/warpath/:runId | A Warpath run's node map |
#/lego/open | Opens an archive member in the unit builder (advanced) |
#/lego/:id | Editing a unit in the builder (advanced) |
#/workshop/:id | Editing one tweak project (advanced) |
#/workshop/:id/:section? | One section of a tweak project: weapons, collections, checks or package. No section is the unit editor (advanced) |
#/workshop/new?game=:name&unit=:unit | The tweak editor on a unit with no project yet, which the first change starts (advanced) |
#/workshop/:id/reference | Sortable table and comparison view over one project's units, resolved through its own edits (advanced) |
Settings sections
Each settings section lives at #/settings/<id>. Any of these ids can be hidden from the Settings nav via the profile hideSettings list. Sections with no page of their own are group headers. Visiting one shows an index of the sections nested under it (the indented rows below it).
| Settings section | Id | Link |
|---|---|---|
| General | general | #/settings/general |
| Appearance | frame.appearance | #/settings/frame.appearance |
| Engine Settings | engine-settings | #/settings/engine-settings |
| → Display | engine-display | #/settings/engine-display |
| → Graphics | engine-graphics | #/settings/engine-graphics |
| → Sound | engine-sound | #/settings/engine-sound |
| → Input and camera | engine-input | #/settings/engine-input |
| → In game | engine-game | #/settings/engine-game |
| → Keybinds | engine-keybinds | #/settings/engine-keybinds |
| → Saved configs | engine-profiles | #/settings/engine-profiles |
| → Engine log | engine-log | #/settings/engine-log |
| Notifications | notifications | #/settings/notifications |
| Coilbox hub | hub | #/settings/hub |
| Coilbox updates | updates | #/settings/updates |
| Game updates | game-updates | #/settings/game-updates |
| Multiplayer | multiplayer | #/settings/multiplayer |
| → Lobby servers | lobby-servers | #/settings/lobby-servers |
| → Chat highlights | chat-highlights | #/settings/chat-highlights |
| → Ignored users | ignored-users | #/settings/ignored-users |
| Library | library | #/settings/library |
| → Content folders | content-folders | #/settings/content-folders |
| → Engines | engines | #/settings/engines |
| → Downloads | downloads | #/settings/downloads |
| → Storage | storage | #/settings/storage |
| → Import | import | #/settings/import |
| Advanced | advanced | #/settings/advanced |
| → mapconv | mapconv | #/settings/mapconv |
| → uberstress | uberstress | #/settings/uberstress |
| → Distribution profile | profile | #/settings/profile |
Hiding is presentational: a hidden nav item or settings section is still reachable by a direct
#/…link. Hiding removes the button, not the page.
Useful links for a welcome screen
A profile's welcome HTML commonly points at:
<a href="#/play/skirmish">Play Skirmish</a>
<a href="#/campaign">Campaigns</a>
<a href="#/library/maps">Maps</a>
<a href="#/play/replays">Replays</a>
<a href="#/battles">Multiplayer</a>
<a href="#/settings">Settings</a>Welcome HTML also has one non-navigation action available, closing the app:
<button data-coilbox-action="quit">Exit</button>