CompactNumber
हिन्दीA K/M/B ladder is not how most of the world shortens numbers. India groups by lakh and crore; Japan and China group by ten-thousands.
Formatting shortcut
1.2M
`${(n / 1e6).toFixed(1)}M`Open source. Yours to build with.
210 React components for slow connections, different languages, and people who navigate by keyboard. Copy the source. Make it yours.
One command. Source in your project.
npx shadcn@latest add https://gear5-ui.vercel.app/r/async-boundary.jsonReact + Tailwind CSSMIT licensedNo extra runtime packages
playground.tsx
Live componentTry a different state
1,234,567 visitors this month
A local simulation. Change the state or language to see the actual component respond. No requests are sent.
Built for the states between the happy paths.
01 / Accessible02 / Locale-aware03 / Source-owned
Start with a real problem
Give loading, empty, error, and ready states a place in your interface.
<AsyncBoundary status="error" />
Save allowed drafts locally and help people recover from a rejected submission.
<ResilientForm formKey="contact" />
Search, move through results, and jump straight to the right place.
<CommandPalette commands={commands} />
Parse and display currency using the conventions of the selected locale.
<CurrencyField currency="EUR" />
Break it. Then recover.
Type a sample answer, choose a response, and submit. See what happens to the draft when the connection drops or a session expires.
Recovery lab
A local simulation. No application or email is sent.
An interrupted request is intentionally not labelled “failed”. The server may have received it, so the product must check before retrying.
Do not enter sensitive information.
Beyond English defaults
These examples compare a simple formatting shortcut with a locale-aware component. Both sides are computed in your browser.
A K/M/B ladder is not how most of the world shortens numbers. India groups by lakh and crore; Japan and China group by ten-thousands.
Formatting shortcut
1.2M
`${(n / 1e6).toFixed(1)}M`A right-to-left name next to a number pulls the number to the wrong side of it. Here the naive version renders the reply count before the name instead of after. The sentence reads backwards, and only for users with RTL names.
Formatting shortcut
إيان - 42 replies
<span>{name} - {n} replies</span>Array#sort compares UTF-16 code points, not letters. Accented names file after Z, and lowercase files after uppercase.
Formatting shortcut
Zebra · apple · Ångström · Élodie
names.sort()parseFloat on a German-formatted amount silently truncates at the thousands separator. Twelve hundred euros becomes one euro twenty-three.
Formatting shortcut
€1.23
parseFloat("1.234,56")Check the receipts
Size budgets, accessibility fixtures, SSR, and source scans run in CI. Your application still needs testing with its own content and users.
View CI resultsEvery registry item is bundled and gzipped against its declared size ceiling.
Read the tests ↗Each documented component fixture is rendered and checked with axe.
Read the tests ↗Component fixtures are rendered with react-dom/server to catch browser-only assumptions.
Read the tests ↗Tests cover direction, calendars, numerals, and locale-aware form handling.
Read the tests ↗The collection
210 components · 8 categories
Yes. The source is MIT licensed, including commercial use. Keep the copyright and licence notice with copies or substantial portions of the software.
No. The shadcn CLI copies the component and its shared helpers into your project. You own those files and choose which future changes to adopt. React, React DOM, and Tailwind CSS are prerequisites.
The registry components do not import Next.js. They are React source files styled with Tailwind CSS. This documentation site uses Next.js, but your application does not have to.
LocaleProvider controls formatting and writing direction where a component supports them. You supply translated labels and application content. Changing a locale is not an automatic translation service.
No. ResilientForm preserves permitted drafts locally and asks the user to submit again. Reliable background delivery and duplicate prevention need an application-owned queue and an idempotent server endpoint.
Test your own content, labels, keyboard flows, screen readers, target browsers, and server integration. The library's automated checks are a useful baseline, not an accessibility certification or a guarantee about your complete application.
Your source. Your next idea.
No account, no subscription. Just code in your project.
npx shadcn@latest add https://gear5-ui.vercel.app/r/async-boundary.json