Skip to content

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 groupItemLink (href)Nav idHideable
PlaySingleplayer#/play/skirmishplay.skirmishno
PlayCampaigns#/campaigncampaign.listno¹
PlayScenarios#/scenariosscenario.listno¹
PlayConquest#/conquestconquest.listyes
PlayWarpath#/warpathrunlite.listyes
PlaySave Games#/play/savegamesplay.savegamesno
MultiplayerLogin#/lobbymultiplayer.lobbyno²
MultiplayerChat#/chatmultiplayer.chatno²
MultiplayerBattles#/battlesmultiplayer.battlesyes
MultiplayerMatchmaking#/matchmakingmultiplayer.matchmakingno²
MultiplayerBattle Room#/battlemultiplayer.battleno²
MultiplayerServer admin#/adminmultiplayer.adminyes²
Records⁵Career#/careercareer.overviewyes
Records⁵Player stats#/statsmultiplayer.statsyes
Records⁵Replays#/play/replaysplay.replaysno
LibraryMaps#/library/mapslibrary.mapsno
LibraryGames#/library/gameslibrary.gamesyes
LibraryBlueprints#/library/blueprintslibrary.blueprintsno
LibraryDownloads#/library/downloadslibrary.downloadsno
DownloadsCoilbox hub#/hubhub.browseyes
DownloadsBrowse Rapid#/downloadsdownloads.browseyes
DownloadsMaps#/downloads/mapsdownloads.mapsno
DownloadsGames#/downloads/gamesdownloads.gamesyes
Settings⁴Appearance#/settings/frame.appearancesettings.appearanceno³
Settings⁴Engine settings#/settings/engine-settingssettings.engineno³
Settings⁴Accounts#/settings/lobby-serverssettings.accountsno³
Settings⁴All settings#/settingssettings.allno

¹ 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.stats and runlite.list are wired for hiding (the authoritative set is HIDEABLE_NAV_IDS in src/profile/hidden.tsx). content.setupPacks is also on the same hide list. 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.matchStats hides the match statistics on a replay's page, the Replays page figures and the player dossier's match figures. analytics.run hides the button that runs the engine analysis, the one part with a cost, and an analysis already stored still shows. analytics.spatialLayers hides 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.mapInsight hides 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-packs redirects 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/:name and #/content/archives/:name/repl.

The nav ids moved with them. A distribution profile written against content.maps, content.games, content.blueprints, content.archives or the content settings section keeps working, in hide, hideSettings and the home page art map alike. The old names are mapped in src/profile/renamedIds.ts. content.setupPacks did 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 groupItemLink (href)Nav id
LibraryArchives#/library/archiveslibrary.archives
uberstressRun#/uberstressuberstress.run
uberstressHistory#/uberstress/historyuberstress.history
Campaign BuilderCampaigns#/campaign-buildercampaign.builder
Campaign BuilderScenarios#/scenario-builderscenario.builder
Mapping ToolsProjects#/mapconv/projectsmapconv.projects
Mapping ToolsCompile#/mapconvmapconv.compile
Mapping ToolsDecompile#/mapconv/decompilemapconv.decompile
animationBOS → Lua#/animationanimation.bos2lua
animationCOB tools#/animation/cobanimation.cob
unit builderModels#/legolego.units
unit builderLego Parts#/lego/partslego.parts
workshopUnit tweaks#/workshopworkshop.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/:nameA single map's detail page
#/library/games/:nameA single game's detail page
#/library/games/:name/unitsA single game's unit list
#/library/games/:name/units/:unitA single unit's detail page
#/library/games/:name/units/referenceSortable table and comparison view over the game's own units
#/library/blueprints/:idA single layout's detail page
#/play/replays/:nameA single replay's detail page
#/stats/:nameA player's dossier (head-to-head stats)
#/stats/:name/matchupYour 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
#/chatlogsSaved chat history (DMs and channels), read from disk with no live connection
#/hub/:idA single shared Coilbox hub item's page
#/library/archives/:nameA single archive (advanced)
#/library/archives/:name/replAn archive's Lua console (advanced)
#/campaign/:idA campaign's mission list
#/campaign/:id/:missionIdA mission briefing/result
#/campaign-builder/:idEditing a campaign (advanced)
#/scenario-builder/:idEditing a scenario (advanced)
#/conquest/:idA conquest in progress
#/warpath/:runIdA Warpath run's node map
#/lego/openOpens an archive member in the unit builder (advanced)
#/lego/:idEditing a unit in the builder (advanced)
#/workshop/:idEditing 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=:unitThe tweak editor on a unit with no project yet, which the first change starts (advanced)
#/workshop/:id/referenceSortable 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 sectionIdLink
Generalgeneral#/settings/general
Appearanceframe.appearance#/settings/frame.appearance
Engine Settingsengine-settings#/settings/engine-settings
→ Displayengine-display#/settings/engine-display
→ Graphicsengine-graphics#/settings/engine-graphics
→ Soundengine-sound#/settings/engine-sound
→ Input and cameraengine-input#/settings/engine-input
→ In gameengine-game#/settings/engine-game
→ Keybindsengine-keybinds#/settings/engine-keybinds
→ Saved configsengine-profiles#/settings/engine-profiles
→ Engine logengine-log#/settings/engine-log
Notificationsnotifications#/settings/notifications
Coilbox hubhub#/settings/hub
Coilbox updatesupdates#/settings/updates
Game updatesgame-updates#/settings/game-updates
Multiplayermultiplayer#/settings/multiplayer
→ Lobby serverslobby-servers#/settings/lobby-servers
→ Chat highlightschat-highlights#/settings/chat-highlights
→ Ignored usersignored-users#/settings/ignored-users
Librarylibrary#/settings/library
→ Content folderscontent-folders#/settings/content-folders
→ Enginesengines#/settings/engines
→ Downloadsdownloads#/settings/downloads
→ Storagestorage#/settings/storage
→ Importimport#/settings/import
Advancedadvanced#/settings/advanced
→ mapconvmapconv#/settings/mapconv
→ uberstressuberstress#/settings/uberstress
→ Distribution profileprofile#/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.

A profile's welcome HTML commonly points at:

html
<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:

html
<button data-coilbox-action="quit">Exit</button>

MIT-licensed, and the Lua that runs in the engine is MIT or GPL-2.0-or-later. Bundles pr-downloader (GPL-2.0-or-later, © the Spring/Recoil authors).