A sane, opinionated template for esm nestjs projects written in typescript.
For new, node lts (currently v24) projects.
Uses:
- biome for linting and formatting
- commitlint for linting commit messages
- husky for git hooks
- lint-staged for checks on commit
- vitest for testing
- tsx for dev time typescript
- tsdown for building
- esm
- biome is objectively faster and overall a better choice over eslint+prettier
- no weird build-then-run-dev flow, tsx runs the dev code
- people still using jest should... reconsider
- any kind of code generation is ass, but nestjs's cli is particularly terrible, so dependencies for that and the nest-cli.json file are gone - just add files yourself, I promise you'll be fine
- the result pattern is used with the @mkvlrn/result package - together with the global filter, error handling becomes a breeze; it is of course optional, but I think it's a good idea to just use it everywhere
- overall it's just as opinionated, but a tad cleaner, stricter, and modernized
Just check what is in it, it't not that different from what you'd get with nestjs-cli.
Runs the project in watch mode with tsx.
Builds/transpiles the code to ./build.
Runs the built project.
Runs tests.
Runs biome in fix mode (only safe fixes) to lint and format the project.
Runs type checking using tsc.
You might want to install the recommended extensions in vscode. Search for @recommended in the extensions tab, they'll show up as "workspace recommendations".
If you have been using eslint and prettier and their extensions, you might want to disable eslint entirely and keep prettier as the formatter only for certain types of files.
This is done by the .vscode/settings.json file.
Debug configurations are also included (for source using tsx and for bundle using the generated source maps).