install
two commands put superthread into a tanstack start app on tailwind 4: init once, then add what you need.
init
init sets an app up for @mk. it writes the base-nova style and the registry into components.json, then installs the utils, the tokens and the button.
bunx --bun shadcn@latest init https://superthread.mauricekleine.com/r/init.json --base base -yadd an item
after init, every item installs by name, and the @mk items it needs come with it. most apps start with the tokens and the button:
bunx --bun shadcn@latest add @mk/tokens @mk/buttonthe files go to components/superthread/, outside components/ui/, so a later shadcn apply or init --reinstall never overwrites them.
the css entry
@mk/tokens adds three imports to the app's css entry, after tailwind's:
@import "tailwindcss";
@import "tw-animate-css";
@import "shadcn/tailwind.css";
@import "./components/superthread/styles/superthread.css";the third import is relative to src/styles.css in a start app. elsewhere, point it at the installed file from wherever your css entry sits: next's app/globals.css needs ../components/superthread/styles/superthread.css.
pin a version
to stay on one version, map @mk to its snapshot in components.json. an item that needs other @mk items fetches them from the same snapshot.
{
"registries": {
"@mk": "https://superthread.mauricekleine.com/r/v/2.0.0-next.1/{name}.json"
}
}/r/versions.json lists every version with a snapshot.
every item
each item in the registry with its line. an item with a page links to it.
the theme
initsets up an app for @mk: the base-nova style, the tokens, utils and the button
bunx --bun shadcn@latest init https://superthread.mauricekleine.com/r/init.json --base base -ytokensthe superthread theme: colour roles for light and dark, type, motion, shape and the texture tiles
bunx --bun shadcn@latest add @mk/tokens
code
plain tokensthe same tokens as plain css with no tailwind, and as a typed module
bunx --bun shadcn@latest add @mk/tokens-plainutilscn, with superthread's type steps taught to the class merger
bunx --bun shadcn@latest add @mk/utilsfleetthe six ships: ids, names, one-line descriptors, line-screen angles and mark file names
bunx --bun shadcn@latest add @mk/fleet
branded components
glyphsthe pixel icons and status glyphs, drawn as whole-pixel squares in the current colour
bunx --bun shadcn@latest add @mk/glyphsbadgea badge, with a status variant for each state: done, running, waiting, failed and queued
bunx --bun shadcn@latest add @mk/badgeinputa text field with the one focus edge
bunx --bun shadcn@latest add @mk/inputinput groupa field box that holds a text control with addons and buttons beside it
bunx --bun shadcn@latest add @mk/input-grouptextareaa multi-line text field with the one focus edge
bunx --bun shadcn@latest add @mk/textareaselecta select whose trigger is a field and whose list is a raised layer
bunx --bun shadcn@latest add @mk/selectdialoga square dialog on the sheet lift
bunx --bun shadcn@latest add @mk/dialogtabstabs with a solid current tab
bunx --bun shadcn@latest add @mk/tabstablea table with mono ids and tabular numbers, and an edge beside the row under the pointer
bunx --bun shadcn@latest add @mk/tableprogressa flat house-ink bar with a screened leading edge
bunx --bun shadcn@latest add @mk/progresstoastbase ui toasts on the leaf lift, with a status glyph for each kind
bunx --bun shadcn@latest add @mk/toastfleet railthe rail of ship marks for moving between fleet surfaces; you pass the hrefs
bunx --bun shadcn@latest add @mk/fleet-railcheckboxa square checkbox with a screened mixed state
bunx --bun shadcn@latest add @mk/checkboxskeletonloading rows, screened on whole-pixel bars
bunx --bun shadcn@latest add @mk/skeleton
base-nova on the tokens
cardbase-nova's card, on the superthread tokens
bunx --bun shadcn@latest add @mk/cardlabelbase-nova's label, on the superthread tokens
bunx --bun shadcn@latest add @mk/labelseparatorbase-nova's separator, on the superthread tokens
bunx --bun shadcn@latest add @mk/separatorsheetbase-nova's sheet, on the superthread tokens
bunx --bun shadcn@latest add @mk/sheettooltipbase-nova's tooltip, on the superthread tokens
bunx --bun shadcn@latest add @mk/tooltipuse mobilebase-nova's hook that tells a phone-width viewport
bunx --bun shadcn@latest add @mk/use-mobile