Item level, crawled nightly
crawl 3 days agoSearch the index
75,944 items985 registries34,217 verified free11,020 verified paid30,707 unverified18,895 previewable live11,371 removed in 30 daysrebuilt 2026-09-13 · captured 2026-09-13

The whole index, as JSON

8 calls, every one read-only

No key, no account, CORS open to everyone. Every screen on this site makes exactly one call, and these are the calls.

Examplecurl https://blockdex.thecompound.tech/api/search?q=marquee
items75,944registries985verified free34,217cache15 min, SWR 24 hcounted2026-09-13

Items counts every entry across every indexed manifest. Each registry is addressable by its slug. access=free filters to exactly the verified free items. The corpus is rebuilt once a night, so a cache shorter than that adds load without freshness.

Endpoints

EndpointWhat it answersMethod
/api/searchItem-level search across every indexed registry, ranked in Postgres and counted in the same pass. Omit q to browse the whole corpus. Nothing is re-sorted on the client. The order that comes back is the order to render.GET/api/items/{registry}/{name}One component, with everything its page needs in a single call: install command, dependencies, files it writes, the access verdict, whether its registry permits framing, and its siblings.GET/api/registriesEvery registry the crawl reaches, one row each, with its inventory counts and its GitHub facts.GET/api/registries/{slug}One registry plus its whole inventory, grouped by kind, with anything that has since been removed from its manifest.GET/api/statsThe corpus counts and when the index was last rebuilt. This is where every figure on this site comes from.GET/api/healthLiveness, for anything polling it.GET/r/registry.jsonThe same search, in the shape the shadcn CLI's own search command expects. This is the endpoint behind the @blockdex namespace. Returns pagination, which is what tells the CLI the ranking is ours and not to re-sort a page locally.GET/r/{registry}/{item}.jsonResolves a namespaced item to the registry's own endpoint, as a 307. Nothing is served from here. The install fetches the component from whoever published it, which is also why a component that has been removed answers 410 rather than redirecting into somebody else's error.GET

8 calls, every one read-only, unauthenticated and cross-origin readable. Each row runs its example.

Search it from the shadcn CLI

BlockDex is a shadcn registry namespace, so the whole index is searchable and installable from the terminal without opening this site. Add it to your components.json:

components.json"registries": { "@blockdex": "https://blockdex.thecompound.tech/r/{name}.json" }

Then search across every registry at once, and install from the one that has it:

Searchnpx shadcn@latest search @blockdex -q "date picker"
Installnpx shadcn@latest add @blockdex/shadcn-space/date-picker-01

The install does not come from here. A namespaced item resolves to a 307 pointing at the registry's own endpoint, so the component is fetched from whoever published it, at whatever it says today. This index holds no copy of anybody's source and cannot serve a stale one. Filter with --type and page with --offset. The ranking and the match count come from the same query the search on this site runs.

/api/registries

ParameterAccepts
sortitems (default) · stars · name · fresh · newest
accessfree · paid · mixed · unknown
includegone, which adds registries that have stopped answering
limitDefault 200, max 500

Anything not listed is ignored rather than rejected, so an unknown parameter never turns a working call into an error.

Example: /api/registries?sort=stars&limit=20

/r/registry.json

ParameterAccepts
qFree text. Omit to browse everything.
typeOne or more registry types, comma-separated, e.g. registry:ui,registry:block
limitDefault 40, max 200
offsetDefault 0, max 5000

Anything not listed is ignored rather than rejected, so an unknown parameter never turns a working call into an error.

Example: /r/registry.json?q=date%20picker&limit=5

What the data is, and is not

Everything here is derived from what a registry actually served. The access verdict is a measurement: an item endpoint was fetched and either answered or returned 401. unknown means the registry serves no item endpoint we could ask, which is neither free nor paid.

There is no quality score, no rating and no ranking of registries against each other, because a crawler cannot establish any of those. Ordering by stars orders by GitHub stars and means nothing more. Licence fields are the string the repository published. They are not a licence interpretation and not advice.

Errors are JSON too, { "error": "..." }, so a consumer never has to parse an HTML error page. A call that times out is the database waking up rather than a result, and the same call a moment later will answer.

BlockDex is not affiliated with shadcn or with any registry it indexes. How the index is built.

The counts above were served on 2026-09-13 and are stored in this repository. The routes themselves read the live index, so a call made now answers with tonight's crawl.