@bevel
Tactile, skeuomorphic React components for real product work: guarded switches, annunciators, motorized faders, split-flap boards. Base UI and Tailwind CSS v4.
Install this registry
npx shadcn@latest add https://bevel-ui.vercel.app/r/registry.json pnpm dlx shadcn@latest add https://bevel-ui.vercel.app/r/registry.json bunx shadcn@latest add https://bevel-ui.vercel.app/r/registry.json curl -s https://bevel-ui.vercel.app/r/registry.json Components
121 totalLight, depth, materials, motion and shape tokens, plus the utilities components use to apply them.
npx shadcn@latest add https://bevel-ui.vercel.app/r/bevel.json Switch light and dark as a change in lighting: the room dims, or the lights come up. Uses View Transitions.
npx shadcn@latest add https://bevel-ui.vercel.app/r/theme-transition.json Brass, bakelite and anodized aluminium. Set data-bevel-theme on <html> or any container; build your own at /themes.
npx shadcn@latest add https://bevel-ui.vercel.app/r/themes.json Opt-in sound and haptics for Bevel controls: <BevelFeedback sound haptics> and useBevelFeedback(). Synthesised with Web Audio; silent outside the provider.
npx shadcn@latest add https://bevel-ui.vercel.app/r/feedback.json A button made as a keycap: a cap with a lit top edge on a visible side, which travels down by the side's depth when pressed by pointer, Space or Enter. While i…
npx shadcn@latest add https://bevel-ui.vercel.app/r/key.json A square keycap for a single icon: copy, close, toolbar actions. It must be given an aria-label, and is secondary by default so a row of them stays quiet.
npx shadcn@latest add https://bevel-ui.vercel.app/r/icon-key.json A keycap printed in a line of text, for shortcuts and docs. Symbols such as ⌘ are read aloud by name. With listen, the cap goes down when the reader presses th…
npx shadcn@latest add https://bevel-ui.vercel.app/r/kbd.json A small printed plate with an indicator lamp, for status in tables, lists and headings. Five tones; a lamp is lit while its condition holds and dark when it do…
npx shadcn@latest add https://bevel-ui.vercel.app/r/badge.json A customer's stored balance, shown as a leather wallet. Saved cards sit in it, and picking one pulls it out of the pocket.
npx shadcn@latest add https://bevel-ui.vercel.app/r/wallet.json A plastic payment card at real proportions. Use it on its own, as a radio in a picker, or inside a Wallet.
npx shadcn@latest add https://bevel-ui.vercel.app/r/payment-card.json A formatted figure with steady digits, in any currency and locale. Every amount in Bevel is one of these.
npx shadcn@latest add https://bevel-ui.vercel.app/r/amount.json Mechanical rolling digits. Each digit is a printed drum that turns to its figure, lowest digit first.
npx shadcn@latest add https://bevel-ui.vercel.app/r/number-wheel.json A brass metering instrument with a rolling reading: live spend that ticks up, or a prepaid balance that counts down.
npx shadcn@latest add https://bevel-ui.vercel.app/r/meter.json A rubber-stamp impression in ink for statuses, and an embossed seal for the moment something becomes official.
npx shadcn@latest add https://bevel-ui.vercel.app/r/stamp.json Thermal paper with torn edges. Lines print in as they're added; a stamp or seal lands when it's paid.
npx shadcn@latest add https://bevel-ui.vercel.app/r/receipt.json A sheet of perforated tickets, one per option. Picking one tears it off. A radio group underneath.
npx shadcn@latest add https://bevel-ui.vercel.app/r/ticket-sheet.json A needle on a brass-bezelled scale. Gauge reads a value; Dial sets one, turned by drag or keyboard.
npx shadcn@latest add https://bevel-ui.vercel.app/r/dial.json A circuit breaker: on, off, or tripped until someone resets it. For spending caps, kill switches and feature flags.
npx shadcn@latest add https://bevel-ui.vercel.app/r/breaker.json A ruled page of numbered entries with a red margin. History and audit logs that read like a passbook.
npx shadcn@latest add https://bevel-ui.vercel.app/r/ledger.json An API key on a plastic card that slides into a brass reader. For bring-your-own-key and credential screens.
npx shadcn@latest add https://bevel-ui.vercel.app/r/keycard.json Who someone is: an agent, a person, a guest. The “HELLO my name is” sticker, a visitor badge for outside collaborators, and a plain tag for lists.
npx shadcn@latest add https://bevel-ui.vercel.app/r/name-tag.json An exhibit sticker in the text that opens the exact passage it cites, with a stamp saying whether the source checks out.
npx shadcn@latest add https://bevel-ui.vercel.app/r/citation.json An agent's plan on a legal pad. Finished steps are ticked in ink, the current one is underlined in red pen, the rest are still in pencil.
npx shadcn@latest add https://bevel-ui.vercel.app/r/task-plan.json A docket of what an agent did: thoughts, actions, questions, responses and errors, each timed. Questions waiting on you are highlighted.
npx shadcn@latest add https://bevel-ui.vercel.app/r/activity-log.json An action an agent wants to take, waiting for a person. Say what it does and what can't be undone; press and hold the brass seal to approve.
npx shadcn@latest add https://bevel-ui.vercel.app/r/approval.json Pigeonholes for delegated work, one per subagent: its task slip, a lamp and a word for its status, and its progress. Finished work rises out of its cubby.
npx shadcn@latest add https://bevel-ui.vercel.app/r/delegation-board.json Proposed edits in proofreader's red ink, each with a sign-here flag to accept or reject it. Nothing is applied until someone decides.
npx shadcn@latest add https://bevel-ui.vercel.app/r/redline.json A black marker bar over withheld text, read as “Redacted” with the reason. Hidden text is never rendered; revealed text keeps a trace of the marker.
npx shadcn@latest add https://bevel-ui.vercel.app/r/redaction.json A critical switch under a flip-up cover, as in a cockpit. Lift the cover, then flip it; closing the cover returns it to safe, and the cover closes itself if le…
npx shadcn@latest add https://bevel-ui.vercel.app/r/guarded-switch.json A train cab's vigilance control for supervised agent runs: the run keeps going only while someone checks in. Miss the window and it warns, then pauses.
npx shadcn@latest add https://bevel-ui.vercel.app/r/vigilance.json A lockout-tagout hasp: everyone working on something hangs their own padlock and tag, and it can't start until the last lock comes off. For freezes and holds.
npx shadcn@latest add https://bevel-ui.vercel.app/r/lockout.json A ticket dispenser and a Now Serving sign: your place in the queue is the number in your hand. For support queues, waitlists and jobs waiting their turn.
npx shadcn@latest add https://bevel-ui.vercel.app/r/take-a-number.json A ship's engine order telegraph: you set an order, the other side answers by moving its own pointer to match. Both show on one dial, so a pending order is visi…
npx shadcn@latest add https://bevel-ui.vercel.app/r/engine-telegraph.json A panel of alarm lamps from a control room. A new alarm flashes until someone acknowledges it, then stays lit while its condition lasts; one that clears unseen…
npx shadcn@latest add https://bevel-ui.vercel.app/r/annunciator.json A rotary switch that clicks into fixed positions and stops hard at both ends. For a few ordered settings where the order matters: reasoning effort, quality pre…
npx shadcn@latest add https://bevel-ui.vercel.app/r/detent-knob.json A radio's push-to-talk key: it listens only while held, and letting go stops it. Nothing records by accident. For voice input to agents, walkie-talkie chat and…
npx shadcn@latest add https://bevel-ui.vercel.app/r/push-to-talk.json A console fader with a motor: when someone else sets it, the cap travels there on its own and says who moved it. Grab it and it's yours. For settings an agent,…
npx shadcn@latest add https://bevel-ui.vercel.app/r/motorized-fader.json One channel of a mixing console per agent or source: its name, mute and solo keys, and a motorized fader that an orchestrator can move and you can take. For ba…
npx shadcn@latest add https://bevel-ui.vercel.app/r/mixer-strip.json A bank of tiny numbered slide switches, ON at the top, as on a circuit board. Every flag is visible at once and the bank reads as one value. For feature flags,…
npx shadcn@latest add https://bevel-ui.vercel.app/r/dip-switch.json A rack of jacks joined by patch cables: every route from a source to a destination is a cable you can see and pull. For webhook events to handlers, agent tools…
npx shadcn@latest add https://bevel-ui.vercel.app/r/patch-bay.json Edge-notched cards from the 1950s office: each hole along the top is an attribute, notched open if the card has it. Push needles down the columns and the cards…
npx shadcn@latest add https://bevel-ui.vercel.app/r/keysort-filter.json A Kardex visible-index tray: each record shows only its edge, and coloured signal clips slide along it to mark where it stands, so a whole tray reads at a glan…
npx shadcn@latest add https://bevel-ui.vercel.app/r/visible-file.json A photographer's contact sheet: every frame at once on a strip of film, marked with a grease pencil. Circle the keepers, cross out the rest. For reviewing gene…
npx shadcn@latest add https://bevel-ui.vercel.app/r/contact-sheet.json A station departure board: each character is a pair of flaps that falls to the next value, column by column. The text is the truth and changes are announced on…
npx shadcn@latest add https://bevel-ui.vercel.app/r/split-flap.json A punch clock's time card: each session is a row with its date, time in, time out and how long it ran, and the key stamps the time now onto the next line. For …
npx shadcn@latest add https://bevel-ui.vercel.app/r/time-card.json The library card in the back of a book: each loan or renewal stamps the next ruled line, and the last date is when it's due. Overdue dates are stamped red. For…
npx shadcn@latest add https://bevel-ui.vercel.app/r/due-date-slip.json A text input cut into the panel as a slot, with a printed label above and description and error lines below. Focus lights the slot's edge amber, the colour of …
npx shadcn@latest add https://bevel-ui.vercel.app/r/text-field.json An everyday on/off switch, as a bat-handle toggle on a small plate. The lever swings through its bushing toward the side that's on and settles with a little sp…
npx shadcn@latest add https://bevel-ui.vercel.app/r/toggle-lever.json A checkbox as a latching push-key. Press it and it sinks and stays down with its mark lit amber; press again and it springs back up. Mixed holds it half-down w…
npx shadcn@latest add https://bevel-ui.vercel.app/r/latch-checkbox.json Tabs and segmented controls as interlocked preset keys, like a car radio's: press one and it latches down while the one that was down springs back up. Only one…
npx shadcn@latest add https://bevel-ui.vercel.app/r/preset-keys.json A label-maker strip: dark embossing tape with raised pale letters and a tab pointing at the trigger. It feeds out a short way from the trigger's side; in a gro…
npx shadcn@latest add https://bevel-ui.vercel.app/r/tooltip.json A sheet of panel stock lifted off the page on the shared light, with a folded tab at its trigger. It lifts toward you and settles; Escape or a click outside pu…
npx shadcn@latest add https://bevel-ui.vercel.app/r/popover.json A selector plate: items engraved into brushed metal, the highlighted one pressed in, a lamp for checked settings, engraved rules between groups and keycaps for…
npx shadcn@latest add https://bevel-ui.vercel.app/r/menu.json The lights go down and a panel rises onto the desk, screwed or stitched at its corners. Content has no padding of its own, so it hosts forms and command palett…
npx shadcn@latest add https://bevel-ui.vercel.app/r/dialog.json Supervise a coding agent and its subagents: set its autonomy, balance effort between subagents, hold the dead man's switch, and lift the cover to ship. A whole…
npx shadcn@latest add https://bevel-ui.vercel.app/r/agent-console.json A usage-based account page: the balance in a wallet, spend running on a meter, caps on breakers, the ledger, and API keys that expire on a library slip. A whol…
npx shadcn@latest add https://bevel-ui.vercel.app/r/billing-desk.json A release board for a team: regions on a split-flap board, services moving through stages, a deploy queue, a freeze everyone must lift, and the promote switch.…
npx shadcn@latest add https://bevel-ui.vercel.app/r/release-hall.json A lawyer's desk with an AI assistant: pull contracts with needles, mark up a clause, check the answer's sources, redact, and seal before it leaves. A whole scr…
npx shadcn@latest add https://bevel-ui.vercel.app/r/review-desk.json Cancel and Save at the foot of a settings form. Save latches down with its lamp lit while the request runs, then pops back up. An example of Key.
npx shadcn@latest add https://bevel-ui.vercel.app/r/key-demo.json Primary, secondary, ghost and danger at sm, md and lg, with icons, and disabled. An example of Key.
npx shadcn@latest add https://bevel-ui.vercel.app/r/key-demo-variants.json Ghost keys in a formatting toolbar, and a copy key that latches while it writes to the clipboard. An example of Icon key.
npx shadcn@latest add https://bevel-ui.vercel.app/r/icon-key-demo.json A shortcuts sheet whose caps go down as you press them. Try ⌘K or Esc. An example of Kbd.
npx shadcn@latest add https://bevel-ui.vercel.app/r/kbd-demo.json A deployments table: the lamp is lit while a build runs or a release is live, and dark once it's superseded. An example of Badge.
npx shadcn@latest add https://bevel-ui.vercel.app/r/badge-demo.json Pay from stored balance. Pay once to drain it, then pick the card that covers the rest. An example of Wallet.
npx shadcn@latest add https://bevel-ui.vercel.app/r/wallet-demo.json Account credit and saved cards. Add a card and it slides into the wallet. An example of Wallet.
npx shadcn@latest add https://bevel-ui.vercel.app/r/wallet-demo-billing.json Prepaid credits running down over a billing cycle. Low balance turns the light and meter amber. An example of Wallet.
npx shadcn@latest add https://bevel-ui.vercel.app/r/wallet-demo-usage.json Cards as a radio group, without a wallet. The chosen card lifts; arrow keys move between them. An example of Payment card.
npx shadcn@latest add https://bevel-ui.vercel.app/r/payment-card-demo.json Digits are tabular so columns line up; separators keep their natural width in any font. An example of Amount.
npx shadcn@latest add https://bevel-ui.vercel.app/r/amount-demo.json Change the value and the drums roll to it. Sized by font size. An example of Number wheel.
npx shadcn@latest add https://bevel-ui.vercel.app/r/number-wheel-demo.json The cost of a chat turn, ticking while the model writes. Run it, stop it, clear it. An example of Meter.
npx shadcn@latest add https://bevel-ui.vercel.app/r/meter-demo.json Like a postage meter: each call stamps a little off; add credit to refill. An example of Meter.
npx shadcn@latest add https://bevel-ui.vercel.app/r/meter-demo-prepaid.json Stamps replace badges: Received, Refunded, Held, Auto. The seal marks something verified. An example of Stamp and seal.
npx shadcn@latest add https://bevel-ui.vercel.app/r/stamp-demo.json Pick a pack and the receipt reprints; pay and it's stamped. Ticket sheet, receipt and stamp together. An example of Receipt.
npx shadcn@latest add https://bevel-ui.vercel.app/r/receipt-demo.json Plans as tickets. Arrow keys move between them; a sold-out one is disabled. An example of Ticket sheet.
npx shadcn@latest add https://bevel-ui.vercel.app/r/ticket-sheet-demo.json The sheet driving a receipt. An example of Ticket sheet.
npx shadcn@latest add https://bevel-ui.vercel.app/r/ticket-sheet-demo-credits-checkout.json Days of credit left, with the auto top-up level marked. An example of Gauge and dial.
npx shadcn@latest add https://bevel-ui.vercel.app/r/dial-demo.json Set like a thermostat: the level to keep above, and how much to add. An example of Gauge and dial.
npx shadcn@latest add https://bevel-ui.vercel.app/r/dial-demo-auto-top-up.json The per-person cap has tripped; switch it to reset. Overage is locked to owners. An example of Breaker.
npx shadcn@latest add https://bevel-ui.vercel.app/r/breaker-demo.json Numbered entries with the balance after each, and stamped statuses. An example of Ledger.
npx shadcn@latest add https://bevel-ui.vercel.app/r/ledger-demo.json Switch the breaker and the key goes into the reader: usage bills to it instead of credits. An example of Keycard.
npx shadcn@latest add https://bevel-ui.vercel.app/r/keycard-demo.json Drag the card through the reader, or flick it. A short drag springs back. Keyboard: focus the card, press Enter. An example of Keycard.
npx shadcn@latest add https://bevel-ui.vercel.app/r/keycard-demo-swipe.json Rename the agent by writing on its sticker. Guests get a visitor badge; lists use the plain tag. An example of Name tag.
npx shadcn@latest add https://bevel-ui.vercel.app/r/name-tag-demo.json Open a sticker to read the cited passage. The third source has been appealed. An example of Citation.
npx shadcn@latest add https://bevel-ui.vercel.app/r/citation-demo.json The plan advances on its own. Each step is ticked in ink as it finishes. An example of Task plan.
npx shadcn@latest add https://bevel-ui.vercel.app/r/task-plan-demo.json Entries arrive as the agents work. Who acted is a plain Name tag. An example of Activity log.
npx shadcn@latest add https://bevel-ui.vercel.app/r/activity-log-demo.json Hold the seal until it presses. Let go early and nothing happens. An example of Approval.
npx shadcn@latest add https://bevel-ui.vercel.app/r/approval-demo.json Four agents working in parallel. Drafting stops to ask you a question; answer it to unblock Review. An example of Delegation board.
npx shadcn@latest add https://bevel-ui.vercel.app/r/delegation-board-demo.json Three suggested edits. Decide each one, or all at once. An example of Redline.
npx shadcn@latest add https://bevel-ui.vercel.app/r/redline-demo.json A privileged memo, stamped. Switch who's reading: opposing counsel sees the redactions. An example of Redaction.
npx shadcn@latest add https://bevel-ui.vercel.app/r/redaction-demo.json Lift a cover, then flip the switch. Leave it and the cover closes, turning it off. An example of Guarded switch.
npx shadcn@latest add https://bevel-ui.vercel.app/r/guarded-switch-demo.json Check in every 12 seconds to keep it going. Stop checking in and watch it warn, then pause. An example of Dead man's switch.
npx shadcn@latest add https://bevel-ui.vercel.app/r/vigilance-demo.json Three locks hold the migration. Remove yours; the others come off as their work finishes. An example of Lockout.
npx shadcn@latest add https://bevel-ui.vercel.app/r/lockout-demo.json Take a number; the sign rolls on every two seconds until it's your turn. An example of Take a number.
npx shadcn@latest add https://bevel-ui.vercel.app/r/take-a-number-demo.json Set how much the agent may do alone. It answers once its current step is done. An example of Engine telegraph.
npx shadcn@latest add https://bevel-ui.vercel.app/r/engine-telegraph-demo.json Conditions come and go on their own. Acknowledge them one by one, or all at once. An example of Annunciator.
npx shadcn@latest add https://bevel-ui.vercel.app/r/annunciator-demo.json Turn the knob to trade speed and cost for how hard the model thinks. An example of Detent knob.
npx shadcn@latest add https://bevel-ui.vercel.app/r/detent-knob-demo.json Hold the key, or Space, to record a note. Let go to send it. An example of Push to talk.
npx shadcn@latest add https://bevel-ui.vercel.app/r/push-to-talk-demo.json The agent adjusts its own temperature; grab the fader to take over, then hand it back. An example of Motorized fader.
npx shadcn@latest add https://bevel-ui.vercel.app/r/motorized-fader-demo.json A lead agent rebalances effort as it goes. Take a fader to override it; mute pauses a subagent, solo runs one alone. An example of Mixer strip.
npx shadcn@latest add https://bevel-ui.vercel.app/r/mixer-strip-demo.json Flip a workspace's flags; the bank is also the config value you ship. One is locked by the organisation. An example of DIP switches.
npx shadcn@latest add https://bevel-ui.vercel.app/r/dip-switch-demo.json Patch a billing provider's events to your handlers. One event can feed several handlers. An example of Patch bay.
npx shadcn@latest add https://bevel-ui.vercel.app/r/patch-bay-demo.json Push needles through to find the contracts with every attribute. An example of Keysort filter.
npx shadcn@latest add https://bevel-ui.vercel.app/r/keysort-filter-demo.json Signals slide along each card as its task moves through the stages. An example of Visible file.
npx shadcn@latest add https://bevel-ui.vercel.app/r/visible-file-demo.json Eight variants of one prompt. Circle the keepers, cross out the rest. An example of Contact sheet.
npx shadcn@latest add https://bevel-ui.vercel.app/r/contact-sheet-demo.json Each region's status flips over as its rollout moves on. An example of Split-flap board.
npx shadcn@latest add https://bevel-ui.vercel.app/r/split-flap-demo.json Three sessions on the card already. Punch in, then out, and watch the clock stamp each time. An example of Time card.
npx shadcn@latest add https://bevel-ui.vercel.app/r/time-card-demo.json The key lapsed four days ago. Renew it, and again, until the renewals run out. An example of Due-date slip.
npx shadcn@latest add https://bevel-ui.vercel.app/r/due-date-slip-demo.json Fields validate as you leave them and again on save; the server's answer comes back on the field it's about. Save as is: the URL is taken. An example of Text f…
npx shadcn@latest add https://bevel-ui.vercel.app/r/text-field-demo.json An icon and a key hint in the slot. ⌘K or / focuses it from anywhere on the page. An example of Text field.
npx shadcn@latest add https://bevel-ui.vercel.app/r/text-field-demo-search.json A lever per row, and a master lever that pauses them all. An example of Toggle lever.
npx shadcn@latest add https://bevel-ui.vercel.app/r/toggle-lever-demo.json Which tools an agent may use. The top key presses them all, and sits half-down while only some are on. An example of Latch checkbox.
npx shadcn@latest add https://bevel-ui.vercel.app/r/latch-checkbox-demo.json The tabs over a docs example, at the small size. An example of Preset keys.
npx shadcn@latest add https://bevel-ui.vercel.app/r/preset-keys-demo.json A segmented range picker over a usage chart. An example of Preset keys.
npx shadcn@latest add https://bevel-ui.vercel.app/r/preset-keys-demo-range.json An editor toolbar. Hover one button and slide along: each label prints at once. An example of Tooltip.
npx shadcn@latest add https://bevel-ui.vercel.app/r/tooltip-demo.json Each label feeds out from its own side. Red and blue tape are for the label that must stand out. An example of Tooltip.
npx shadcn@latest add https://bevel-ui.vercel.app/r/tooltip-demo-tapes.json A link to copy and who can see it. An example of Popover.
npx shadcn@latest add https://bevel-ui.vercel.app/r/popover-demo.json The menu on a docs page with a Markdown version: copy it, view it, or open it in ChatGPT or Claude. Pass markdownUrl. An example of Menu.
npx shadcn@latest add https://bevel-ui.vercel.app/r/menu-demo.json Shortcuts as keycaps, a submenu, a setting with a lamp, a sort order and a destructive item. An example of Menu.
npx shadcn@latest add https://bevel-ui.vercel.app/r/menu-demo-file-actions.json An alert dialog with a red key. Cancel takes focus, and a stray click outside does nothing. An example of Dialog.
npx shadcn@latest add https://bevel-ui.vercel.app/r/dialog-demo.json Rename a document. Enter saves; Escape, × or Cancel leave it. An example of Dialog.
npx shadcn@latest add https://bevel-ui.vercel.app/r/dialog-demo-rename.json ⌘K opens a palette in the dialog: top-aligned, no padding, no fasteners. An example of Dialog.
npx shadcn@latest add https://bevel-ui.vercel.app/r/dialog-demo-command.json