Bun is a fast, incredibly capable all-in-one toolkit for JavaScript and TypeScript apps — runtime, bundler, test runner and package manager in a single binary.
curl -fsSL https://bun.sh/install | bashRuns TypeScript and JSX out of the box, with Node compatibility built in.
Installs dependencies dramatically faster than npm, yarn or pnpm.
A Jest-compatible runner with snapshots, mocks and coverage.
Bundles for the browser and the server from the same binary.
$ bun install bun install v1.3.14 + react@19.0.0 + react-dom@19.0.0 + typescript@5.7.2 (dev) 412 packages installed [89.00ms]
The tab-topped panel is the structural signature — switchers have only their top corners rounded and sit flush on the panel beneath, and the active tool tab keeps the panel fill while switching only its label to pink. Buttons carry a keycap bevel: rgb(40,45,85) 0 -2px 0 inset, rgb(81,87,125) 0 0 1px 1px inset. Transition timings resolved only to generic values and are not captured. No form fields are exposed anywhere on this surface — the copyable install line is the only field-shaped control — so input fills, heights, placeholder colours and focus rings could not be measured. The pair above is therefore composed rather than measured, and borrows only captured tokens: the shell takes the panel fill #282a36, the primary button’s 44px height, 8px radius and rgba(255,255,255,.16) border, and the 0 1px 2px rgba(0,0,0,.05) subtle shadow; the text is the install line in JetBrains Mono 16px at the caption grey #9ca3af. Since focus was never captured, the focus state is derived — it steps the surface ladder one rung to #3b3f4b and makes the page’s own keycap bevel visible so its rgb(81,87,125) 0 0 1px 1px inset ring stands in for a focus ring, lifts the text to #fbcfe8, and sets the caret in brand pink #f472b6. Treat both states as a placeholder for a real capture, not as measured values.
Depth is bevel and hairline over the #0d0e11 → #282a36 → #3b3f4b ladder. The orange and magenta gradients belong to third-party framework cards, not to Bun’s own chrome. No WebGL, canvas, backdrop-filter or grain. Motion values were not captured. Breakpoints are published at 600px and 900px.