ALTITUDE · ECOSYSTEM PLATES READ: census-bricks.json · census-couplings.json · census-npm.json SEE ALSO 2 

FIT VERDICTevery limb re-massed from sloc × files — one red gate: @uirouter/react pins core as a dependency

THE ALTITUDE ATLAS — DRAWING SETSHEET 4 / 14

the FAMILY SPINE

ALTITUDE 4 — one core, four living adapters, four dormant instruments, massed by authored source and gated on the core range each admits · versions npm registry read 2026-10-18, mass counted at origin/main @ eb1162da (2026-10-18)

ADAPTERS — one per renderer, standing on the spine THE WAVE, AND WHAT FOLLOWED 2025-12-31: core, angularjs and react patched within 26 h — then angular shipped 22.0.0 on 2026-08-18: upstream is consolidating ui-router into one monorepo @uirouter/core 6.1.2 80 files · 5,272 sloc 30% of the family’s authored mass states · registry · transitions ^6.1.2 @uirouter/angularjs 1.1.2 18 files · 1,512 sloc last publish 2025-12-31 ^6.1.2 @uirouter/angular 22.0.0 18 files · 1,023 sloc last publish 2026-08-18 dep 6.1.2 pinned · not a peer @uirouter/react 1.0.8 22 files · 650 sloc last publish 2025-12-31 ^6.0.8 lit-ui-router 1.16.5 22 files · 2,860 sloc last publish 2026-10-15 >=5.0.0 @uirouter/visualizer 7.2.1 34 files · 2,018 sloc quiet since 2020-09-19 >=6.0.1 @uirouter/rx 1.0.0 4 files · 72 sloc quiet since 2021-11-30 >=5.0.1 @uirouter/sticky-states 1.5.1 2 files · 233 sloc quiet since 2019-10-08 >=5.0.0 @uirouter/dsr 1.2.0 4 files · 266 sloc quiet since 2019-12-26 COMPANIONS — this repo version · authored files (f) ui-router-server 0.4.0 · 15f lit-ui-router-ssr 0.4.0 · 13f ui-router-mobx 0.1.1 · 2f lit-ui-router-mobx 1.2.0 · 5f …-nav-location-plugin 1.1.2 · 2f ui-router-effect 0.1.2 · 2f lit-ui-router-effect 0.4.1 · 4f ui-router-signals 0.1.1 · 3f lit-ui-router-signals 0.1.1 · 4f ^6.0.8 all nine PLUGINS & INSTRUMENTS — hanging below the spine no @uirouter/vue was ever published: the vue seat has zero mass — the one name absent from the registry plate SCALE — block width = 2.7 · √sloc · block height = 2.2 px per authored file · gates and rail not to scale mass ranks by code volume, not downloads · authored src, tests and d.ts excluded PROVENANCE — three plates and one set of hand-carried counts every version and last-publish date on this sheet: census-npm.json · npm registry read 2026-10-18 @uirouter/core and this repo — files and sloc: census-bricks.json · counted at origin/main @ eb1162da (2026-10-18) this repo's gates: census-couplings.json · origin/main @ eb1162da upstream adapters and instruments — files and sloc: no plate · clone counts 2026-08-16 of the ui-router org repos STRUCTURE SCHEDULE — authored source per member · files (f) · sloc · mean lines per file · core gate 1 @uirouter/core 6.1.2 — 80f · 5,272 sloc · 66 l/f · the spine itself 2 lit-ui-router 1.16.5 — 22f · 2,860 sloc · 130 l/f · gate ^6.0.8 3 @uirouter/visualizer 7.2.1 — 34f · 2,018 sloc · 59 l/f · gate >=5.0.0 4 ui-router-server 0.4.0 — 15f · 1,670 sloc · 111 l/f · gate ^6.0.8 5 @uirouter/angularjs 1.1.2 — 18f · 1,512 sloc · 84 l/f · gate ^6.1.2 6 lit-ui-router-ssr 0.4.0 — 13f · 1,127 sloc · 87 l/f · gate ^6.0.8 7 @uirouter/angular 22.0.0 — 18f · 1,023 sloc · 57 l/f · gate ^6.1.2 8 @uirouter/react 1.0.8 — 22f · 650 sloc · 30 l/f · gate 6.1.2 (dependency) 9 lit-ui-router-effect 0.4.1 — 4f · 281 sloc · 70 l/f · gate ^6.0.8 10 @uirouter/dsr 1.2.0 — 4f · 266 sloc · 67 l/f · gate >=5.0.0 11 @uirouter/sticky-states 1.5.1 — 2f · 233 sloc · 117 l/f · gate >=5.0.1 12 …-nav-location-plugin 1.1.2 — 2f · 208 sloc · 104 l/f · gate ^6.0.8 13 lit-ui-router-signals 0.1.1 — 4f · 171 sloc · 43 l/f · gate ^6.0.8 14 lit-ui-router-mobx 1.2.0 — 5f · 145 sloc · 29 l/f · gate ^6.0.8 15 ui-router-signals 0.1.1 — 3f · 95 sloc · 32 l/f · gate ^6.0.8 16 @uirouter/rx 1.0.0 — 4f · 72 sloc · 18 l/f · gate >=6.0.1 17 ui-router-mobx 0.1.1 — 2f · 68 sloc · 34 l/f · gate ^6.0.8 18 ui-router-effect 0.1.2 — 2f · 21 sloc · 11 l/f · gate ^6.0.8 TOTAL — 18 packages · 254 authored files · 17,692 sloc · versions and dates npm registry read 2026-10-18 · this repo + core counted at origin/main @ eb1162da (2026-10-18) · upstream family clone counts 2026-08-16 NOT MASSED — eslint-plugin-lit-ui-router 1.2.1 on npm (published 2026-10-10) · 1.2.1 in the repo: the one of this repo's eleven published packages that is not a router limb — it declares no gate on the spine.
FIG. 4Not a loop and not a city: a spine. Every limb shares @uirouter/core and no limb talks to another, so the honest drawing is radial. Each block is massed from its own authored source and each stem crosses a gate naming the core range that limb admits — and the gates do not agree.

GENERAL NOTES

Method — four provenances, kept apart. This repo's own gates — the core range its ten router packages share and the four ranges declared on lit-ui-router itself — are read from www/atlas.lit-ui-router.dev/data/census-couplings.json (origin/main @ eb1162da); the upstream limbs' gates are read from their manifests by hand. Versions and last-publish dates are not typed on this sheet: every one is read by name from www/atlas.lit-ui-router.dev/data/census-npm.json (npm view, npm registry read 2026-10-18), and a drawn package missing from that plate throws the build. Mass has two sources. @uirouter/core and this repo's own packages are read from www/atlas.lit-ui-router.dev/data/census-bricks.json — scc Code over authored .ts/.tsx/.js/.mjs under each source dir, *.d.ts, specs and typedoc stubs excluded, counted at origin/main @ eb1162da (2026-10-18). The upstream adapters and instruments have no plate at all: their file and line counts are clone counts 2026-08-16 of the ui-router org repositories, carried in this file by hand and labelled as such. 18 packages, 254 authored files, 17,692 lines.

An isometric city would still lie here. Adjacent blocks imply interaction, and the adapters have none — each rib touches only the spine. So the plan stays radial and the new ink is mass: block width ∝ √sloc, block height ∝ file count, which lets a two-file, 233-line package like sticky-states read as the sliver it is beside core's 80-file slab. Core alone is 5,272 lines — 30% of the family's authored mass, and more than the four adapters combined.

The gates disagree, and that is the finding. Every limb declares a range on @uirouter/core, drawn here as a hatched tablet where the limb's stem crosses toward the rail. The dormant instruments still admit core 5 (>=5.0.0, >=5.0.1); rx admits >=6.0.1; angularjs and angular carets on ^6.1.2; this repo's ten router packages sit on ^6.0.8. One gate is red: @uirouter/react pins core at exactly 6.1.2 and ships it as a dependency, not a peer — the only limb that can install a second copy of the state machine into a consumer's tree, and the only one that cannot be moved forward without a react release.

Mass does not track liveness. The largest limb on the sheet is the dormant @uirouter/visualizer (34 files, 2,018 lines, last published 2020-09-19) — it carries a preact/d3 rendering stack, so it out-masses every living adapter. The limb this repo builds, lit-ui-router, is 22 files and 2,860 lines at 1.16.5, and it is the only limb growing limbs of its own: the companion bay adds another 3,786 lines behind a single shared gate, and 4 of its 9 members peer the limb as well as the spine — lit-ui-router-ssr at ^1.16.1, lit-ui-router-mobx at ^1.15.0, lit-ui-router-effect at ^1.15.0 and lit-ui-router-signals at ^1.15.0. Sheet 2 draws all nine as bricks.

Four companions each stand under a companion they peer. lit-ui-router-ssr declares on lit-ui-router ^1.16.1 and on ui-router-server ^0.2.0 || ^0.3.0 || ^0.4.0, so it cannot be installed without both. That is why it is drawn taking two arrows rather than one — it is a bridge between the element library and the server router, not a limb hanging off either — and it stands under the server in the bay's first column. lit-ui-router-mobx declares on the flagship ^1.15.0 and on ui-router-mobx ^0.1.0, the renderer-free observable store it binds to a Lit host, lit-ui-router-effect declares on the flagship ^1.15.0 and on ui-router-effect ^0.1.0, the renderer-free route ref it binds to a Lit host and lit-ui-router-signals declares on the flagship ^1.15.0 and on ui-router-signals ^0.1.0, the renderer-free signals it binds to a Lit host, so each Lit binding stands under its renderer-free package — the mobx pair in the bay's first column and the effect pair and the signals pair in the bay's second column — its bridge run up that column's right gutter. ui-router-mobx, ui-router-effect and ui-router-signals declare on the spine and on no other limb, as the navigation plugin does. Every version on this sheet is the one npm serves under latest.

Publish dates sort the family into three states. @uirouter/angular stands at 22.0.0 (2026-08-18), a major of its own, so it is drawn active; angularjs and react carry only the 2025-12-31 patch wave that followed core inside a day, so they are drawn wave. Below the rail nothing is current — the newest instrument publish is rx at 2021-11-30, the rest 2019–2020 — and the dashes say so. @uirouter/vue holds a seat with no registry row at all: an absence, not a package.

KEY

member — width ∝ √sloc, height ∝ files
dormant — no publish since 2021 or earlier
this repo
gate — the @uirouter/core range admitted
hard gate — core pinned exactly, as a dependency
declares on the spine (and only the spine)
also declares on a companion, not just the spine
a bridge — ssr declares ui-router-server ^0.2.0 || ^0.3.0 || ^0.4.0, mobx ui-router-mobx ^0.1.0, effect ui-router-effect ^0.1.0, signals ui-router-signals ^0.1.0
PROJECTTHE ALTITUDE ATLAS
SHEET TITLEthe FAMILY SPINE
SCALEUI-ROUTER ECOSYSTEM
FORMMASSED SPINE
CLIENTlit-ui-router · simshanith
DATE / REV2026-10-18 · H
DRAWN BYFable (Claude, AI)
SHEET4 OF 14