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)
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/ (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/ (npm view, npm registry read 2026-10-18), and a drawn package missing from that plate throws the build. Mass has two sources. @uirouter/ and this repo's own packages are read from www/ — scc Code over authored .ts/ 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/, 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/ 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/ (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/ 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/ 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 |