Create React App but for creating TypeScript-based packages to be published to the npm registry.
npm create ts-fast@latest
Supported templates:
- Universal utility: Platform-agnostic utilities intended to run on both server and client, e.g.
axios
,lodash
,clsx
,zod
- Command line utility: Runs in the terminal, e.g.
eslint
,vite
,jest
- React hooks: Custom React hooks, e.g.
react-use
,usehooks-ts
Contains just enough features to help you author and publish TypeScript-based npm packages in under 15 minutes. Features include:
- Lean and mean: Zero
dependencies
, minimaldevDependencies
- TypeScript: Modern, de facto flavor of JavaScript
- Vitest: Next generation testing framework with out-of-the-box TypeScript support. Easily replace this with Jest should you wish to
- tsup: Bundles your TypeScript code, powered by esbuild
- Unopinionated: Includes only the necessary dependencies to get you started
- Types generation: Type declaration files are automatically generated
- Continuous integration: Test, typecheck, and build on every commit / pull request. Uses GitHub actions
The project is unopinionated about the following:
- Alternative package managers, e.g. pnpm, Yarn
- Linting, e.g. ESLint, Biome, oxlint
- Formatting, e.g Prettier, Biome
- Alternative runtimes e.g. Bun, Deno
Why? Because no matter the choice, someone will have a different opinion and want to use something else, so we rather leave it to you. Moreover, these tools can be easily added yourself.
If/when one of them becomes the standard (e.g. TypeScript), we can then include them as a default.
Run the scaffolding command, use the scaffolded project as a starting point and customize it to your liking.
Start by running the appropriate command and answering a few questions:
npm create ts-fast@latest
yarn create ts-fast
pnpm create ts-fast@latest
bun create ts-fast@latest
Scaffolded projects have these base files:
├── .github/workflows/ci.yml
├── dist
├── src
│ ├── __tests__
│ └── index.ts
├── package.json
├── README.md
├── tsconfig.json
├── tsup.config.ts
└── vitest.config.ts
- Implement your library within
src
. Add tests if you take pride in being a developer - Modify
package.json
– updatename
,version
,author
and any other relevant fields - Update
README.md
npm run publish
. You will have to login to npm if you aren't already logged in- Profit!
- Scaffolding command similar to
create-vite
andcreate-react-app
- Multiple output formats (esm, cjs)
- Choose between tools (Jest vs Vitest)