THE ALTITUDE ATLAS — DRAWING SETSHEET 11 / 14

the ENTRY QUARTERS

ALTITUDE 2⅞ — the same wire, cut by published package · every exported entry priced alone · 27 doors in 11 package quarters, footprint from minified bytes and height from gzipped, dependencies external — counted at origin/main @ eb1162da (2026-10-18)

lit-ui-router — six doors ui-router-server — ten doors lit-ui-router-effect lit-ui-router-mobx eslint-plugin-lit-ui-router navigation-location-plugin lit-ui-router-ssr — three doors lit-ui-router-signals ui-router-signals ui-router-effect ui-router-mobx 9 1 2 3 5 4 6 7 8 14 15 18 27 16 19 25 20 17 23 24 21 13 26 10 22 11 12 «.» and «./pure»: 227 bytes gz apart — the price of registration the two flagship doors: 8,957 · 7,188 — the client door leads the server by 1,769 the one-element doors sum to 5,449 gz — «./register» ships the shared core once, at 3,684 the lint plugin's one door: 6,313 gz — the only door here no browser ever opens four adapters within 77 bytes of one another — thin skins on one server core the eight companion index doors price like footnotes: mobx 513 · effect 1,125 · ssr 2,876 · nav 1,152 lit-signals 657 · signals 804 · ui-effect 464 · ui-mobx 459 gz SCALE — footprint area ∝ minified bytes · 1 px of height ≈ 40 gz bytes PROBE — git archive origin/main @ eb1162da + pnpm install --frozen-lockfile --silent (mise-provisioned pnpm) + turbo run build:js --filter <each public member> + tools/bundle-probe (rolldown, minify, declared deps+peers external, annotations off) STRUCTURE SCHEDULE — minified bytes → gzipped bytes, deps external · note 1 lit-ui-router . — 33,872 → 8,957 gz · the flagship door 2 lit-ui-router ./pure — 33,097 → 8,730 gz · 227 gz cheaper — registration off 3 lit-ui-router ./register — 11,453 → 3,684 gz · the umbrella — shared core once 4 lit-ui-router ./ui-router.register — 4,380 → 1,812 gz · one element 5 lit-ui-router ./ui-view.register — 11,060 → 3,637 gz · one element 6 lit-ui-router ./context — 1,519 → 758 gz · the context seam, split out 7 lit-ui-router-effect . — 2,593 → 1,125 gz · the whole effect layer 8 lit-ui-router-mobx . — 1,354 → 513 gz · the Lit binding over the mobx store 9 lit-ui-router-signals . — 1,777 → 657 gz · the Lit binding over the signals 10 lit-ui-router-ssr . — 6,010 → 2,876 gz · the prerender bridge 11 lit-ui-router-ssr ./client — 4,418 → 1,947 gz · the browser half — hydrateRoot 12 lit-ui-router-ssr ./register — 1,936 → 913 gz · the served <ui-view>, registered 13 ui-router-navigation-location-plugin . — 2,569 → 1,152 gz · the whole plugin 14 ui-router-server . — 17,627 → 7,188 gz · 1769 gz shy of the flagship 15 ui-router-server ./redirects — 9,108 → 3,756 gz · redirect machinery 16 ui-router-server ./matcher — 6,758 → 2,918 gz · standalone matcher 17 ui-router-server ./hono — 3,747 → 1,939 gz · adapter 18 ui-router-server ./fetch — 3,677 → 1,913 gz · adapter 19 ui-router-server ./vite — 3,644 → 1,919 gz · adapter 20 ui-router-server ./connect — 3,517 → 1,862 gz · adapter 21 ui-router-server ./simulate — 1,220 → 668 gz · the headless-router recipe the pool builds — 668 b 22 ui-router-server ./location — 1,167 → 626 gz · the server location service 23 ui-router-server ./url-config — 562 → 363 gz · the mount's url config, shared with any router 24 ui-router-effect . — 770 → 464 gz · one route ref, no renderer 25 ui-router-signals . — 1,787 → 804 gz · route signals, no renderer 26 ui-router-mobx . — 970 → 459 gz · the observable store, no renderer 27 eslint-plugin-lit-ui-router . — 19,401 → 6,313 gz · the lint plugin — editor-side, never shipped
FIG. 11The split view to sheet 10’s unified city: every exported entry of every publishable package bundled alone and priced — 11 package quarters, 27 doors, the codecov bundle-analysis series drawn as skylines.

GENERAL NOTES

Method: the same probe as sheet 10's doors strip, run to completion: every exported entry of the 11 publishable packages bundled alone with rolldown — minified, declared dependencies and peers external — which is the price a consumer's bundler pays at that door, and byte-for-byte the <pkg>-<label>-esm series CI uploads to codecov. Footprint is minified bytes, height gzipped. Every number is read at build time from the checked-in plate www/atlas.lit-ui-router.dev/data/census-doors.json — counted at origin/main @ eb1162da (2026-10-18), probed as git archive origin/main @ eb1162da + pnpm install --frozen-lockfile --silent (mise-provisioned pnpm) + turbo run build:js --filter + tools/bundle-probe (rolldown, minify, declared deps+peers external, annotations off) — and a door the plate carries that the drawing does not place is a build error, not a stale constant. Sheet 10 is the unified view — one real app's bundle with all of these mixed by the bundler; this sheet cuts the same machinery by published package and entry point. The quarters don't sum and shouldn't: doors overlap (./pure is . minus registration), which is exactly what the split view exists to show.

The twin towers are one building with two doors. . and ./pure differ by 227 gzipped bytes — the whole cost of custom-element registration. The register economics run the other way: the two one-element doors sum to 5,449 gz while the umbrella ./register is 3,684, because each element door carries the shared element core with it. Take the umbrella or one element door; taking two per-element doors ships the core twice.

The server is a storefront, not a tower. Ten doors: an index at 7,188 gz, 1,769 under the client flagship; redirect and matcher wings at 3,756 and 2,918; four framework adapters — hono, fetch, vite, connect — packed within 77 bytes of one another, which is what thin skins over one core look like priced; and three doors that barely register, ./simulate at 668 bytes, ./location at 626, and ./url-config at 363, the last the cheapest door on the sheet.

Two more quarters, and one of them sits between the other two. lit-ui-router-effect enters at 1,125 gz through its one door. lit-ui-router-ssr has three: the prerender index at 2,876 gz, ./client — the browser half that adopts a served render — at 1,947, and ./register, which defines <ui-router> and a served <ui-view> in place of lit-ui-router/register, at 913. The ssr quarter is drawn in the gap between the client and server quarters because that is where its declarations put it: it is the one package here that peers both lit-ui-router and ui-router-server (sheet 4 draws that bridge). npm serves it under latest at 0.4.0, the version its package.json carries at this ref.

Four more one-door quarters, the signals pair, the renderer-free effect ref and the mobx store. lit-ui-router-signals binds the router to a Lit host at 657 gz; ui-router-signals, ui-router-effect and ui-router-mobx, the renderer-free halves that hold one hook per router, enter at 804, 464 and 459 — each under the 1,765-byte element-door gap. npm serves them under latest at 0.1.1, 0.1.1, 0.1.2 and 0.1.1, the versions their package.json files carry at this ref.

Plugins price like footnotes. The mobx Lit binding enters at 513 gz and its store at 459, the navigation-location plugin at 1,152 — each cheaper than the 1,765-byte gap between ./register and its two element doors — and the effect and ssr index doors (1,125 and 2,876) each cost under half the flagship's own . door at 8,957. The expensive thing in this family is never the adapter; it is the state machine they all defer to, and that machine (sheet 10's @uirouter/core) is external here by design.

Door 27 is not a door a browser opens. eslint-plugin-lit-ui-router (#676) is the family's one non-runtime published package, so its quarter is drawn but its number means something different: 19,401 minified, 6,313 gz is what a lint host loads, once, at author time. It is priced here because the probe prices every published entry without exception — the honest thing for a ledger — and it is worth knowing that the plugin costs 70% of the flagship to a tool that already has Node's whole module graph resident. Nothing in it ever reaches a bundle: it peers ESLint alone — oxlint loads it as a JS plugin, unpeered — never @uirouter/core (sheet 2 leaves it off the plate for the same reason).

Why both views exist. The split view is the seller's ledger — what each door costs at the threshold. The unified view is the buyer's receipt — what one app's bundler actually made of them (it paid 7,354 of the flagship's 8,957). Codecov tracks the ledger per commit; sheet 10 audits the receipt.

KEY

exported entry — height = gz, deps external
a lit-ui-router door
quarter = one published package · 27 doors, 11 packages
PROJECTTHE ALTITUDE ATLAS
SHEET TITLEthe ENTRY QUARTERS
SCALEELEVEN PACKAGES
FORMENTRY QUARTERS
CLIENTlit-ui-router · simshanith
DATE / REV2026-10-18 · I
DRAWN BYFable (Claude, AI)
SHEET11 OF 14