Skip to main content

Get a token

The registry is private, so shadcn needs credentials.
1

Create a GitHub token

Create a personal access token with read access to ilovehugetits/9am-ui.
2

Export it

Add it to your shell profile so it survives a reboot.
Never commit the token. components.json references it as ${NINEAM_UI_TOKEN} and shadcn expands it at install time, so the file itself stays safe to check in.

Point a script at the registry

Add a registries block to your script’s web/components.json:
Items are served straight off raw.githubusercontent.com, so there is nothing to host and no npm registry to authenticate against.

Start a new script

1

Create the web project

Then add the components.json shown above.
2

Install the scaffold

This writes vite.config.ts, tsconfig.json, eslint.config.js, postcss.config.js, index.html, src/main.tsx, and a starter src/components/App.tsx — and pulls in the theme, fonts, NUI bridge, i18n, viewport, and the icons the starter uses.
3

Add the Lua half

Writes fxmanifest.lua, client/nui.lua, shared/locale.lua, and locales/en.json into the resource root. Existing files are skipped unless you pass --force.
This step is not a registry item because shadcn rejects any install target containing .., and the Lua files belong one level above the web project.
4

Configure the script

Edit web/src/nui.config.ts — this is the one kit file you are meant to change.
Keep the localStorage key in index.html in sync with themeStorageKey. It runs before first paint to stop the wrong theme flashing.
5

Build and verify

Add the kit to an existing script

Add the registries block, then take only what you want:
Dependencies resolve transitively. Asking for @9am/data-table also installs button, input, table, i18n, and its three icons — and nothing else, so a script that only wants a button does not pull in charts. After adding the theme, import it from your entry stylesheet. Order matters:

Where files land