Texting inside your product, in an afternoon.
Open-source React components for embedded messaging, built on the Handset API. Installed with the shadcn CLI — the source lands in your repo, styled with your tokens, yours to change.
1. Point the CLI at the registry
2. Install the components
Live demo — this is the messaging block, running on mock data. Send something.
Components
@handset/phone-system
Texting, calls, and voicemail behind three tabs — one import.
@handset/contact-timeline
One customer's messages, calls, and voicemails in one scroll.
@handset/messaging
Two-pane texting surface — inbox plus thread, responsive to mobile.
@handset/inbox
Conversation list with previews, relative times, STOP badges, infinite scroll.
@handset/thread
Message history with delivery states, opt-out handling, wired composer.
@handset/composer
Draft box with live SMS segment counting and unicode detection.
@handset/voicemail-player
Playback with expiry-safe URLs, durations, and transcripts.
@handset/click-to-call-button
Rings the agent, bridges the customer, narrates the call live.
@handset/call-log
Call history with outcomes and expandable transcripts.
@handset/call-transcript
Speaker-labeled transcripts — one-shot or following a live call.
@handset/opt-in-form
Consent UI whose exact shape passed a real carrier review.
@handset/number-picker
Area-code search and one-click claim for self-serve onboarding.
@handset/port-status
'Where's my number?' as a stepper, rejections made fixable.
@handset/texting-readiness
The 10DLC pipeline as a checklist instead of a mystery.
@handset/usage-meter
Period usage with comparative bars — show or re-bill customers.
@handset/next-routes
Server proxy route — your API key never reaches the browser.
@handset/react
The headless layer on npm — useConversations, useThread, useComposer — if you'd rather bring your own UI.
How it works
- Components render in your app and call
/api/handset/*— routes in your backend, added by@handset/next-routes. - Your server holds the Handset API key and scopes every request to the signed-in user's tenant. No keys, no tokens in the browser.
- The Handset API does the rest: numbers, delivery, threading, 10DLC compliance, STOP/HELP handling.
MIT licensed. Built by Handset, the business phone API for vertical SaaS.