Stats
Every number on this page is read out of the repository when the site builds. Nothing here is typed by hand, so nothing here can quietly go stale. If a count looks wrong, the source changed and this page already knows.
The Library
169 documented components, but 195 custom elements. The difference is child items like arc-tab and arc-menu-item, which are part of a parent's API rather than components you reach for on their own. The7 targets are React, Vue, Svelte, Angular, Solid, Preact and HTML, each generated from the same Lit source rather than maintained by hand.
Shape
Components by tier. A library's proportions say what it is for. This one is mostly content and input, which suits a documentation-heavy product interface.
- Input44
- Content26
- Data25
- Navigation22
- Layout19
- Feedback18
- Typography15
Surface Area
Everything a consumer can touch, counted from the JSDoc the components declare it in. These same annotations generate the API tables, the editor autocomplete data and the typed wrapper packages, so a number being wrong here would mean all three are wrong too.
That is roughly 5 props and 5 styleable parts per component. The parts matter more than they look, since a shadow root is otherwise a closed door to a consumer's stylesheet.
The Build
All 195 elements server-render to declarative shadow DOM, and a build check fails if that stops being true. The single runtime dependency is Lit. Everything else in the 9 packages is generated by the 56-step pipeline described in Contributing.
How These Are Counted
Components · tiersThe docs data index: one entry per documented component, tier included.Custom elementsOne .register.js per element, counted on disk. The same set the SSR check renders.Props · events · parts · slotsJSDoc tags in the component sources, excluding icons and generated files.Design tokensUnique custom properties declared in the generated base.css.TestsEvery it( across the component suites.IconsExports in the generated Phosphor and Lucide sets.The counts live in one module, site-stats.ts, shared by this page, the landing page and the social card, so the number on a link preview cannot disagree with the number on the page it previews.