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-31, mass counted at origin/main @ 3f55e419 (2026-10-31)

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 26% 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.19.0 25 files · 3,262 sloc last publish 2026-10-30 >=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.7.1 · 21f lit-ui-router-ssr 0.7.0 · 18f ui-router-mobx 0.2.0 · 3f lit-ui-router-mobx 1.4.0 · 5f …-nav-location-plugin 1.2.0 · 2f ui-router-effect 0.2.0 · 3f lit-ui-router-effect 0.6.0 · 4f ui-router-signals 0.2.0 · 4f lit-ui-router-signals 0.3.0 · 4f ui-router-registry 0.3.0 · 5f ^6.0.8 all ten 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-31 @uirouter/core and this repo — files and sloc: census-bricks.json · counted at origin/main @ 3f55e419 (2026-10-31) this repo's gates: census-couplings.json · origin/main @ 3f55e419 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 · sloc · mean lines per file · core gate

#packageversionfilessloclines / filecore gate
1@uirouter/core6.1.2805,27266the spine itself
2lit-ui-router1.19.0253,262130^6.0.8
3ui-router-server0.7.1213,006143^6.0.8
4@uirouter/visualizer7.2.1342,01859>=5.0.0
5@uirouter/angularjs1.1.2181,51284^6.1.2
6lit-ui-router-ssr0.7.0181,48583^6.0.8
7@uirouter/angular22.0.0181,02357^6.1.2
8@uirouter/react1.0.822650306.1.2 (dependency)
9ui-router-registry0.3.0536272^6.0.8
10lit-ui-router-effect0.6.0428571^6.0.8
#packageversionfilessloclines / filecore gate
11@uirouter/dsr1.2.0426667>=5.0.0
12@uirouter/sticky-states1.5.12233117>=5.0.1
13…-nav-location-plugin1.2.02214107^6.0.8
14lit-ui-router-signals0.3.0417043^6.0.8
15lit-ui-router-mobx1.4.0514429^6.0.8
16ui-router-mobx0.2.0311739^6.0.8
17ui-router-signals0.2.0410426^6.0.8
18@uirouter/rx1.0.047218>=6.0.1
19ui-router-effect0.2.033010^6.0.8

TOTAL — 19 packages · 276 authored files · 20,225 sloc · versions and dates npm registry read 2026-10-31 · this repo + core counted at origin/main @ 3f55e419 (2026-10-31) · upstream family clone counts 2026-08-16 · NOT MASSED — eslint-plugin-lit-ui-router 1.3.0 on npm (published 2026-10-22) · 1.3.0 in the repo: the one of this repo's twelve 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 eleven 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 @ 3f55e419); 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-31), 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 @ 3f55e419 (2026-10-31). 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. 19 packages, 276 authored files, 20,225 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 — 26% 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 eleven 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 25 files and 3,262 lines at 1.19.0, and it is the only limb growing limbs of its own: the companion bay adds another 5,917 lines behind a single shared gate, and 4 of its 10 members peer the limb as well as the spine — lit-ui-router-ssr at ^1.19.0, lit-ui-router-mobx at ^1.16.0, lit-ui-router-effect at ^1.16.0 and lit-ui-router-signals at ^1.16.0. Sheet 2 draws every one of them as a brick but ui-router-registry, which it schedules.

Four companions each stand under a companion they peer. lit-ui-router-ssr declares on lit-ui-router ^1.19.0 and on ui-router-server ^0.7.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.16.0 and on ui-router-mobx ^0.2.0, the renderer-free observable store it binds to a Lit host, lit-ui-router-effect declares on the flagship ^1.16.0 and on ui-router-effect ^0.2.0, the renderer-free route ref it binds to a Lit host and lit-ui-router-signals declares on the flagship ^1.16.0 and on ui-router-signals ^0.2.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. ui-router-registry declares on the spine and, optionally, on ui-router-effect ^0.2.0, ui-router-mobx ^0.2.0 and ui-router-signals ^0.2.0, whose route state its adapter entries type; an install may skip an optional peer, so the bay runs no bridge for them. 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.7.0, mobx ui-router-mobx ^0.2.0, effect ui-router-effect ^0.2.0, signals ui-router-signals ^0.2.0
PROJECTTHE ALTITUDE ATLAS
SHEET TITLEthe FAMILY SPINE
SCALEUI-ROUTER ECOSYSTEM
FORMMASSED SPINE
CLIENTlit-ui-router · simshanith
DATE / REV2026-10-30 · J
DRAWN BYFable (Claude, AI)
SHEET4 OF 14