Introduction

Handset UI is a set of React components for embedded texting, built on the Handset API and distributed the shadcn way: as source code the CLI copies into your project.

Why copy-source

Messaging UI has to look native to your product — that's the whole point of embedding it. Widget SDKs and iframes always feel foreign. So Handset UI doesn't ship a styled black box: the shadcn CLI drops the component source into your repo, styled with your Tailwind tokens. Restyle it, rewrite it, delete the parts you don't need. It's your code.

Two layers

The logic lives in @handset/react, a small versioned npm package of headless hooks — useConversations, useThread, useComposer — handling polling, pagination, optimistic sends, and SMS segment math. We maintain and fix that layer in place. The visual components are the copy-source layer on top; they get better releases over time, but the copy in your repo never changes unless you re-install it.

No keys in the browser

Components never talk to the Handset API directly. They call proxy routes in your own backend (added by @handset/next-routes), where your server holds the API key and your existing session auth decides which tenant each signed-in user can see. See Architecture for the full picture.

Next steps

Head to Installation to wire up the registry, or jump straight to the Messaging block — the two-pane surface most products start with.