create-packkit
v1.5.0
Published
Highly configurable scaffolder for modern npm packages and CLIs — pick your stack (TS/JS, bundler, tests, linter, CI, releases) from a CLI or a web configurator.
Maintainers
Readme
Packkit 📦
A highly configurable scaffolder for modern npm packages and CLIs — pick your stack from a CLI or a web configurator, and get a ready-to-ship repo.
Most scaffolders lock you into one stack, one language, and the terminal. Packkit lets you choose — TypeScript or JavaScript, library or CLI, ESM/CJS/dual, your bundler, test runner, linter, git hooks, release flow, GitHub Actions and more — and it works from a CLI or a browser page that downloads your project as a zip.
Quick start
# interactive wizard
npm create packkit@latest
# or with npx
npx create-packkit
# skip the wizard with a preset
npx create-packkit ts-lib my-lib
npx create-packkit cli my-tool
npx create-packkit --preset full my-pkg --pm pnpmThen cd, and you already have a working project — build, test, and lint all pass out of the box.
Or configure it on the web
No install needed: danmat.github.io/create-packkit — tick the options, preview the file tree, and download a zip (or copy the equivalent npx create-packkit command). Everything runs in your browser.
What you can pick
| Area | Options |
|---|---|
| Language | TypeScript (strict) · JavaScript (ESM) |
| Module format | ESM · CJS · dual (proper exports map) |
| Target | Library · CLI tool · HTTP service (Hono) · App (Vite SPA) · any combination |
| Framework | None · React · Vue · Svelte (component libraries or apps) |
| Storybook | optional, for React / Vue / Svelte component libraries |
| Bundler | tsup · tsdown · unbuild · rollup · none (tsc) · optional minify |
| Tests | Vitest · Jest · node:test · none (+ coverage) |
| Lint/format | ESLint + Prettier · Biome · oxlint · none |
| Git hooks | simple-git-hooks · husky + lint-staged · lefthook · none |
| Release | Changesets · release-it · np · none |
| GitHub Actions | CI · npm publish (provenance) · Pages · CodeQL · Codecov · stale bot |
| Deps | Renovate · Dependabot · none |
| Repo | LICENSE · community files · AGENTS.md + CLAUDE.md · VS Code · .editorconfig |
| Monorepo | optional pnpm/npm/yarn workspace with Turborepo + Changesets + example packages |
| Package manager | npm · pnpm · yarn · bun |
Presets
ts-lib · js-lib · ts-cli / cli · react-lib · react-lib-js · react-app · vue-lib · vue-app · svelte-lib · svelte-app · node-service · monorepo · oss · minimal · full — named bundles of the options above. See the roadmap for what's next.
Team profiles: save a partial config as packkit.config.json (or any file) and reuse it with npx create-packkit my-lib --from ./packkit.config.json — flags still override the file.
For AI agents & automation
Packkit is safe to drive non-interactively — every option is a flag, so no prompts are needed. Agents can introspect the whole interface as JSON:
npx create-packkit --schema # all options, presets, and aliases as JSON
npx create-packkit my-lib ts-lib --no-install --no-git # deterministic scaffoldThere's also an llms.txt (served at danmat.github.io/create-packkit/llms.txt) describing the commands for LLMs.
MCP server — packkit-mcp exposes Packkit as a native Model Context Protocol tool (schema / preview / scaffold). Add to your agent's MCP config:
{ "mcpServers": { "packkit": { "command": "npx", "args": ["-y", "packkit-mcp"] } } }How it works
Packkit is a pure config → { files } core that runs in both Node and the browser:
- the CLI writes the files to disk, runs
git init, and installs dependencies; - the web configurator zips the same files client-side (no server).
Both drive from one options schema (src/core/options.js), so the CLI and the web page always stay in sync.
Staying fresh
Two GitHub Actions keep the templates honest:
- Dependency freshness — a weekly check flags any version Packkit writes into generated projects that's fallen a major behind (versions Dependabot can't see), and opens an issue.
- Integration — on any change to generation logic or a template dependency, it generates every preset, installs it, and runs its real checks (build/test/lint, and actually starts services) — so an update can't silently break the projects you'd get.
License
MIT © DanMat
