npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

err-create

v1.2.1

Published

A CLI tool to create new 5m projects with ease.

Readme

err-create

Scaffold a FiveM resource in one command. Lua, JavaScript or TypeScript backend. Optional framework wiring. Optional NUI. A fxmanifest.lua that matches what was actually generated.

npm version license Discord


Preview

The interactive CLI, start to finish.

Why

Starting a FiveM resource usually means the same setup work: a manifest, a folder layout, a build step for TypeScript, NUI plumbing, a Vite config, and wiring for your framework. err-create does that once, from your answers, and gets out of the way.

It only generates what you select. Choose no state manager and there is no store. Choose plain CSS and there is no Tailwind. Choose Vanilla and there is no build tooling at all.

Install

npx err-create

Quick start

npx err-create

The CLI asks, in this order:

| Prompt | Choices | | --- | --- | | Project name | free text, default my-resource | | Backend language | Lua, JavaScript, TypeScript | | Framework | Standalone, QBCore, Qbox, ESX, vRP | | Include a UI? | yes / no | | UI framework | Vanilla, React, Vue, Svelte, Solid | | Styling | Normal CSS, Tailwind | | shadcn/ui | yes / no | | State management | None, Zustand, Redux | | Install dependencies? | yes / no (default yes) |

Questions that don't apply are skipped. For example, Vanilla has no styling, shadcn or state questions, and shadcn is only offered when Tailwind is selected on a UI that supports it.

The install step is always last. It runs npm install in every generated folder that has a package.json. If it fails, your project is kept and the CLI tells you which folder to run it in.

Options

Backend

| Backend | Source | Manifest loads | | --- | --- | --- | | Lua | client/, server/, common/ | the .lua files (lua54 'yes' is set) | | JavaScript | client/, server/, shared/, config/ | client/*.js, server/*.js, shared/*.js | | TypeScript | the same folders as JavaScript, as .ts | compiled output in dist/ |

The TypeScript backend comes with its own package.json, tsconfig.json files and an esbuild-based build.mjs. The manifest points at the compiled JavaScript, never at .ts files.

Framework

| Framework | What it adds | | --- | --- | | Standalone | Nothing. | | QBCore | qb-core in dependencies, and the QBCore object at the top of every client and server file. | | Qbox | @qbx_core/modules/lib.lua in shared_scripts and @qbx_core/modules/playerdata.lua in client_scripts. | | ESX, vRP | Selectable in the prompt. |

Framework entries that load from another resource (@resource/...) are always ordered before your own scripts.

UI

| UI | Build | Output used by the manifest | | --- | --- | --- | | Vanilla | none, plain HTML, CSS and JS | web/index.html | | React | Vite | web/dist/index.html | | Vue | Vite | web/dist/index.html | | Svelte | Vite | web/dist/index.html | | Solid | Vite | web/dist/index.html |

All five render the same starter window: a client-to-UI message card and a UI-to-client callback card with loading, error and empty states. Icons are Lucide everywhere. The UI lives in web/, with its own package.json when it has a build step.

Styling, shadcn and state

| Layer | Available for | Notes | | --- | --- | --- | | Normal CSS | all UIs | shared design tokens, no extra dependencies | | Tailwind | React, Vue, Svelte, Solid | Tailwind v3 with PostCSS, mapped to the same tokens | | shadcn/ui | React, with Tailwind | components.json, cn() helper and the Button and Badge components | | Zustand | React, Vue, Svelte, Solid | holds UI visibility; the hook that uses it is swapped in | | Redux | React, Vue, Svelte, Solid | Redux Toolkit, same idea |

Picking None for state generates no store files, folders or packages.

What you get

Lua backend, Qbox, React UI:

police-job/
├── fxmanifest.lua
├── client/
├── common/
├── server/
└── web/
    ├── index.html
    ├── package.json
    ├── vite.config.ts
    └── src/
        ├── App.tsx
        ├── main.tsx
        ├── components/
        ├── hooks/
        ├── lib/        # fetchNui, onNuiMessage, browser mocks
        ├── types/
        └── styles/
fx_version 'cerulean'
game 'gta5'
lua54 'yes'

shared_scripts {
    '@qbx_core/modules/lib.lua',
    'common/*.lua',
}

client_scripts {
    '@qbx_core/modules/playerdata.lua',
    'client/*.lua',
}

server_scripts {
    'server/*.lua',
}

files {
    'web/dist/**/*',
}

ui_page 'web/dist/index.html'

TypeScript backend, no UI:

police-job/
├── fxmanifest.lua
├── package.json
├── tsconfig.json
├── build.mjs
├── client/
├── config/
├── server/
└── shared/
cd police-job
npm run build        # writes dist/client, dist/server, dist/shared

Working on the UI

Built UIs (React, Vue, Svelte, Solid):

cd web
npm run dev          # browser preview with mocked NUI callbacks
npm run build        # writes web/dist, which the manifest points at

Vanilla needs no tooling. Open web/index.html in a browser for a preview, or start the resource in game.

In a browser, fetchNui answers from src/lib/mocks.ts (js/mocks.js in Vanilla). Add an entry there for every NUI callback you register. Add ?nuiError to the URL to see the error state.

Customize it

The generator is built from plain files, so changing it rarely means touching TypeScript.

| To change | Edit | | --- | --- | | What a backend generates | templates/backend/<language>/. manifest.json there declares how the manifest loads those files. | | A UI | templates/ui/<name>/. template.json declares where it is copied (destination), its manifest entries (uiPage, files) and package patches. | | Optional layers (Tailwind, shadcn, Zustand, Redux) | templates/ui/<name>/layers/<layer>/. A layer shows up in the prompts when its folder exists. | | Shared UI design and NUI helpers | templates/ui/shared/ (CSS tokens) and templates/ui/shared-ts/ (TypeScript helpers). | | A framework | src/definitions/frameworks/. A framework is data: manifest entries plus optional source lines injected into client and server files. |

New files in a template are copied automatically; the generator never lists them. Text files can use {{projectName}} and {{projectSlug}}. A file named _gitignore is written as .gitignore. The full metadata format is in templates/README.md.

Contributing

Adding a template, a framework, a UI layer, or fixing something you ran into is all fair game. You don't need to ask first.

git clone https://github.com/errDev-t/create.git
cd create
npm install

| Script | What it does | | --- | --- | | npm run dev | Runs the CLI from source with tsx. | | npm run typecheck | Type-checks the project (tsc --noEmit). | | npm run verify | Generates a matrix of projects in a temp folder and checks files, manifests and options. No network needed. |

Before opening a pull request, run npm run typecheck and npm run verify. If you add a template or option, verify is where to add a check that it generates what it should.

Support

Found a bug, stuck on something, or have an idea? Come talk to us in the ERR Discord. If it's something that should be tracked, open an issue.

Links

License

MIT