What changed between two versions of a library, as `tcm lib upgrade` would say it: what broke and what was added, each with its signature before and after, then what changed with the same API; how many of what the hub has use each version; and what upgrading does.
HomePage({ show }: { show: string; }) => Promise<Element>
Home: what's happened lately, newest first: releases, reviews and advisories (and yanks), or one of them (`show`); for a visitor signed in, what people they follow did (`following`), or what's happened to libraries they use (`mine`: in releases they've announced, or in the codebase they gave). Beside it, what to show, and, signed in, the libraries they use.
HubCodePage({ name }: { name: string; }) => Promise<Element>
A definition or namespace of a mirrored library: the forge's page for it, in the hub's frame.
Search: by name, words in docs, or a type (`:(s: Shape) => number`), across every library's newest version, grouped by library; only what reaches nothing outside itself, what's in a reviewed library, or what runs in the browser, if asked; and, by type, the close matches after.
A library: its newest version, or the one asked for, with its README, code, versions, dependents and what tcm checked; beside them, how to add it, where it runs, what it reaches, where it's fetched from and the libraries it holds.
Someone: their Bluesky name, picture and bio; what they've done (releases, reviews, advisories), their libraries and their reviews; beside them, how many libraries and releases, where they serve code from, and where it runs.
Browser
CodebaseForm({ url }: { url: string; }) => Element
The codebase whose libraries are "Libraries I use", as the visitor gave it: a `tcm serve` URL.
Who's signed in, in the hub's header: "Sign in with your handle", which asks for it and sends the browser to sign in, or the visitor's handle and "Sign out". Coming back from signing in, it finishes it.
The header's search: names, docs or :types across the libraries. `/` goes to it.
SearchFilters({ q, asked }: { q: string; asked: SearchAsked; }) => Element
The search's filters, for what tcm works out from the code (what it reaches, where it runs) and what people say (reviews), and the legend for where code runs. Changing one searches again.
A library's stars, and the visitor's: starring writes a `codes.tcm.star` record to their own repository (one per library, across its versions), and taking it back deletes it; the hub checks it there at once.
The hub's frame: its mark and name, a narrow search, who's signed in, and its two tabs (Libraries is the tab of every page about libraries: one, its code, its changes, a search).
A library in a list: its name and version, how many use it, what it is, where it runs and what it reaches, its licence, what people say of it and its stars.