Yet another (opinionated) TypeScript library starter template.
If you're looking for a backend service starter, check out my typescript-service-starter
- Relies as much as possible on each included library's defaults
- Only relies on GitHub Actions
- Does not include documentation generation
npx degit gjuchault/typescript-library-starter my-project
or click on theUse this template
button on GitHub!cd my-project
npm install
git init
(if you used degit)node --run setup
To enable deployment, you will need to:
- Set up the
NPM_TOKEN
secret in GitHub Actions (Settings > Secrets > Actions) - Give
GITHUB_TOKEN
write permissions for GitHub releases (Settings > Actions > General > Workflow permissions)
TypeScript Library Starter relies on Volta to ensure the Node.js version is consistent across developers. It's also used in the GitHub workflow file.
Leverages esbuild for blazing-fast builds but keeps tsc
to generate .d.ts
files.
Generates a single ESM build.
Commands:
build
: runs type checking, then ESM andd.ts
files in thebuild/
directoryclean
: removes thebuild/
directorytype:check
: runs type checking
TypeScript Library Starter uses Node.js's native test runner. Coverage is done using c8 but will switch to Node.js's one once out.
Commands:
test
: runs test runnertest:watch
: runs test runner in watch modetest:coverage
: runs test runner and generates coverage reports
This template relies on Biome to do both formatting & linting in no time. It also uses cspell to ensure correct spelling.
Commands:
lint
: runs Biome with automatic fixinglint:check
: runs Biome without automatic fixing (used in CI)spell:check
: runs spell checking
Under the hood, this library uses semantic-release and Commitizen.
The goal is to avoid manual release processes. Using semantic-release
will automatically create a GitHub release (hence tags) as well as an npm release.
Based on your commit history, semantic-release
will automatically create a patch, feature, or breaking release.
Commands:
cz
: interactive CLI that helps you generate a proper git commit message, using Commitizensemantic-release
: triggers a release (used in CI)