Next.js

Fix shadcn combobox: item was not found at the registry

Why the combobox is the one component the CLI cannot find in an older shadcn project, reproduced with shadcn 4.22.1, and the one-line change for each Tailwind version.

Mahdi Ben RhoumaMahdi Ben Rhouma
8 min read

TL;DR#

npx shadcn@latest add combobox builds the registry URL from the style field of your components.json. The combobox was only published for the Tailwind v4 styles (new-york-v4 and newer styles such as radix-nova and base-nova). A project whose components.json still says "style": "new-york" with a tailwind.config path, or "style": "default", asks for a file that does not exist and gets a 404. If the project really runs Tailwind v4 with "style": "new-york", set "config": "" under tailwind (the shadcn docs say to leave it blank on v4) and the CLI switches to new-york-v4 by itself. That remap does not exist for "style": "default": a v4 project on default still gets the 404 with a blank config, so rename the style to new-york-v4 or install by URL. If the project is still on Tailwind v3, whatever its style, install the component from its full URL and adapt it.

The report is shadcn-ui/ui issue #9400, opened on 21 January 2026 and still open, with dozens of "+1" comments from Next.js, Vite, Tauri and monorepo projects. The output below was reproduced on 21 October 2026 with shadcn 4.22.1 on Node 22 in the official node:22-alpine Docker image, with a components.json that says "style": "new-york" and "config": "tailwind.config.js":

text
$ npx -y shadcn@4.22.1 add combobox --dry-run --yes
 
 
Something went wrong. Please check the error below for more details.
If the problem persists, please open an issue on GitHub.
 
Message:
The item at https://ui.shadcn.com/r/styles/new-york/combobox.json was not found. It may not exist at the registry.
 
Suggestion:
Check if the item name is correct and the registry URL is accessible.
 
You can also try a previous version to see if that works:
npx shadcn@4.21.0 add combobox --dry-run --yes
 
[exit code: 1]

The "try a previous version" hint is a red herring here: the CLI is fine, the file it asks for is missing from the registry. The message itself comes from RegistryNotFoundError in packages/registry/src/registry/errors.ts, the error class the registry client builds for an item that answers with HTTP 404.

Why the CLI asks for a style that has no combobox#

Each component is a JSON file on ui.shadcn.com under /r/styles/, in one folder per style. The style comes from components.json, after one remap in packages/registry/src/registry/config.ts (identical at the shadcn@4.22.1 tag and on main):

ts
function resolveStyleFromConfig(config: DeepPartial<Config>) {
  if (!config.style) {
    return FALLBACK_STYLE
  }
 
  // Check if we should use new-york-v4 for Tailwind v4.
  // We assume that if tailwind.config is empty, we're using Tailwind v4.
  if (config.style === "new-york" && config.tailwind?.config === "") {
    return FALLBACK_STYLE
  }
 
  return config.style
}

FALLBACK_STYLE is "new-york-v4" (constants.ts). So the CLI treats a project as Tailwind v4 only when style is new-york and tailwind.config is an empty string. A project initialised on Tailwind v3 has a config path there. If you upgraded it to Tailwind v4 later and nobody cleared that field, the CLI still requests the v3 new-york files.

For most components that goes unnoticed, because the v3 styles still publish them. The combobox is different. On 10 February 2026 the maintainer wrote in the issue: "The combobox is only Tailwind v4. I did not create it for v3." On 23 February he added that it "is not available in the default style (default is Tailwind v3 only and was deprecated)". He also said he would add a v3 version. Eight months later, the live registry still has none:

text
https://ui.shadcn.com/r/styles/new-york-v4/combobox.json 200
https://ui.shadcn.com/r/styles/new-york/combobox.json 404
https://ui.shadcn.com/r/styles/default/combobox.json 404
https://ui.shadcn.com/r/styles/radix-nova/combobox.json 200
https://ui.shadcn.com/r/styles/base-nova/combobox.json 200

The same missing file explains a variant reported in the thread: shadcn add --all --dry-run stops on the combobox when the style is default, with the same 404 on /styles/default/combobox.json, because "all" includes it.

Which fix fits your project#

The right change depends on two things: the style in components.json and the Tailwind version the project actually runs. A wrong components.json value only hides a mismatch. Read the style first, then check the Tailwind version:

bash
npm ls tailwindcss
grep -rn "tailwindcss" src/app/globals.css src/index.css 2>/dev/null

A tailwindcss@4.x entry plus a stylesheet that starts with @import "tailwindcss"; means Tailwind v4. Three @tailwind base/components/utilities lines and a tailwind.config.* that Tailwind really loads mean v3. shadcn's own init makes a similar check (the tailwindcss entry in package.json and the Tailwind line in your CSS), described in the "No Tailwind CSS configuration found" fix.

Then pick the branch:

  • Tailwind v4, "style": "new-york": empty the tailwind.config field (next section).
  • Tailwind v4, "style": "default": emptying the field is not enough. In the reproduction, default with "config": "" still returned the 404 above for /styles/default/combobox.json. Rename the style to new-york-v4 (the maintainer's route, below) or install by URL.
  • Tailwind v3, any style: install by URL and adapt the file (last fix section).

Fix on Tailwind v4 with the new-york style: empty the tailwind.config field#

  1. Open components.json and clear the config value under tailwind. Keep the key and set it to an empty string. The components.json documentation says of this field: "For Tailwind CSS v4, leave this blank."

    json
    {
      "$schema": "https://ui.shadcn.com/schema.json",
      "style": "new-york",
      "tailwind": {
        "config": "",
        "css": "src/app/globals.css",
        "baseColor": "neutral",
        "cssVariables": true,
        "prefix": ""
      }
    }
  2. Run the command again, with --dry-run first so nothing is written yet:

    bash
    npx shadcn@latest add combobox --dry-run

With "style": "new-york", that one change is enough. In the reproduction, the same project with only "config": "" changed resolved the item:

text
$ npx -y shadcn@4.22.1 add combobox --dry-run --yes
- Resolving items.
┌ shadcn add combobox (dry run)
│
├ Files (5) +5 new
│ + src/components/ui/button.tsx       create
│ + src/components/ui/input.tsx        create
│ + src/components/ui/textarea.tsx     create
│ + src/components/ui/input-group.tsx  create
│ + src/components/ui/combobox.tsx     create

The other route, and the only components.json fix for a v4 project on default, is the one the maintainer posted on 13 March 2026, is to rename the style: "Rename to style: new-york-v4 then run npx shadcn add combobox again." In the reproduction this also resolves the item, even with tailwind.config.js still set. Be aware that the docs say the opposite about this field: the components.json page states that the style "cannot be changed after initialization". Both routes make every later add pull the v4 files, not just the combobox. That is what you want on a Tailwind v4 project and the wrong thing on a v3 one.

Fix on Tailwind v3: add the v4 file by URL#

On a Tailwind v3 project, neither edit to components.json is safe. It would switch all future components to v4 markup. Instead, pass the registry URL directly, as the maintainer suggested:

bash
npx shadcn@latest add https://ui.shadcn.com/r/styles/new-york-v4/combobox.json

With the unchanged "style": "new-york" and "config": "tailwind.config.js" project, the URL form resolves:

text
$ npx -y shadcn@4.22.1 add https://ui.shadcn.com/r/styles/new-york-v4/combobox.json --dry-run --yes
- Resolving items.
┌ shadcn add https://ui.shadcn.com/r/styles/new-york-v4/combobox.json (dry run)
│
├ Files (5) +5 new
│ + src/components/ui/button.tsx       create
│ + src/components/ui/input.tsx        create
│ + src/components/ui/textarea.tsx     create
│ + src/components/ui/input-group.tsx  create
│ + src/components/ui/combobox.tsx     create
│
├ Dependencies (3)
│ + @radix-ui/react-slot
│ + cn
│ + @base-ui/react

The dependency list differs from the v4 route, which listed radix-ui instead of @radix-ui/react-slot. The supporting button, input and input-group files can therefore come out differently in a v3 project. Read the dry run before you apply it, and use --diff on any file you already have. For the default style, the maintainer's advice is the same: install the new-york-v4 version "and adjust it". The classes are written for Tailwind v4, so expect manual work on anything v4-specific. If you are about to move the project to v4 anyway, note that v4 moved its PostCSS plugin to a separate package, and an old PostCSS config then fails the build with the "using tailwindcss directly as a PostCSS plugin" error.

Verify the fix#

Run the dry run until it prints the file list instead of Message:, then install for real:

bash
npx shadcn@latest add combobox

In the reproduction, the real install on the "config": "" project created the five files and added three packages to package.json:

text
✔ Created 5 files:
  - src/components/ui/button.tsx
  - src/components/ui/input.tsx
  - src/components/ui/textarea.tsx
  - src/components/ui/input-group.tsx
  - src/components/ui/combobox.tsx
text
  "@base-ui/react": "^1.9.0",
  "cn": "^0.5.0",
  "radix-ui": "^1.8.1",

One email a month — the latest explained errors

What the site published that month — mostly Next.js, Supabase and Node errors, explained. You confirm by email; unsubscribe any time in one click.

The Radix project that ends up with Base UI#

Several commenters in the issue assumed the combobox would install on Radix, because the documentation lists it under the Radix components. It does not. The maintainer confirmed that it is "built base-ui primitives". The installed file starts with:

text
4:import { Combobox as ComboboxPrimitive } from "@base-ui/react"
5:import { cn } from "cn"

The manual tab of the Radix combobox documentation page gives the same instruction, npm install @base-ui/react. A Radix project therefore carries both libraries once the combobox is in. That is expected, not a broken install. The second import pulls the cn package, which the npm registry lists as shadcn's own class-merging helper (repository shadcn-ui/cn). It does not use the cn from your lib/utils. Keep both, or change the import to your alias if you prefer one helper.

Monorepos (Turborepo, pnpm workspaces) hit the same 404 for the same reason. shadcn add --help describes --cwd as "the working directory", defaulting to the current one, so check the components.json of the package you run the command in, not only the one at the repository root.

If the combobox installs but the project then fails to build with Cannot apply unknown utility class border-border, the project is on Tailwind v4 while its stylesheet still follows the v3 shadcn setup. That is a separate fix, covered in the border-border guide. The combobox 404 itself always comes down to the same cause. The registry only publishes the component for the Tailwind v4 styles, so components.json has to point the CLI at one of them, or you name the file by URL.

Frequently Asked Questions

|

Have more questions? Contact us

Still stuck? Paste your error.

Paste the error message or stack trace — we check it against every fix and tool on the site.

Matching happens in your browser. When you search, a cleaned error signature is sent so we can spot errors we do not cover yet — never the raw text, your IP address or your e-mail. Do not paste passwords or keys. Details

Written by

Mahdi Ben Rhouma
Mahdi Ben Rhouma

Full-Stack Dev — Next.js & Supabase

Solo developer building SaaS products with Next.js and Supabase. Writing about production patterns the official docs skip.

Remote