A sane, opinionated template for ESM Node.js projects written in TypeScript without a transpilation step — TypeScript is executed directly by Node.js.
Note
This template includes an Arch Linux Dev Container based on mise-devcontainers, providing a consistent development environment with mise preconfigured.
mise manages the project-specific runtimes, tools, and tasks inside the container, so it does not need to be installed on the host.
Uses, among other tools/packages:
- pnpm as package manager
- Biome for linting and formatting
- Lefthook for Git hooks
- Cocogitto for commit message linting
- Vitest for testing
To use the included Dev Container you need:
- Docker or a compatible container runtime
- a Dev Container-compatible editor or the Dev Container CLI
- an SSH agent exposed through
SSH_AUTH_SOCKwith at least one key loaded
The SSH agent is forwarded into the container for Git authentication and commit signing. Private keys remain on the host.
Once inside the container, install the project dependencies:
pnpm installThe project-specific runtimes and development tools are managed by mise.
If you prefer not to use the Dev Container, install mise locally and run mise install before installing the project dependencies.
Note
Git hooks keep the tooling managed by mise and the project dependencies synchronized after checkouts and merges.
Subpath imports (#/) are used instead of relative paths. They are mapped through the imports field in package.json, allowing native Node.js resolution at runtime without additional build tooling, and mirrored in tsconfig.json for editor support.
Example:
import { add } from "#/lib/math"; // ./src/lib/math.tsRuns the project in watch mode.
Runs the tests.
Runs Biome in fix mode to lint and format the project.
Runs TypeScript type checking.
CI is provided by GitHub Actions through .github/workflows/checks.yml.
It runs:
- Biome linting and formatting checks
- TypeScript type checking
- Vitest tests