---
title: "Template"
description: "A TypeScript monorepo starter with pnpm workspaces, Turborepo, oxlint, oxfmt, tsdown, Vitest, Changesets, and CI."
canonical_url: "https://stijnvanhulle.be/projects/template"
---

> Index of every page on this site: [llms.txt](https://stijnvanhulle.be/llms.txt)

## What it is

A TypeScript monorepo starter. Fork it, update a few fields, and you get a repository
with build, test, lint, format, release, and CI workflows.

## Why I built it

I kept copying the same configuration between repositories: the linter, formatter, test
runner, release flow, and CI workflow. This template puts that setup in one repository so
the projects I build stay consistent.

## Tooling

[pnpm](https://pnpm.io) workspaces and [Turborepo](https://turborepo.com) run the
monorepo. [oxlint](https://oxc.rs) and [oxfmt](https://oxc.rs) handle linting and
formatting, [tsdown](https://tsdown.dev) builds the packages, and
[Vitest](https://vitest.dev) runs the tests with coverage reported to
[Codecov](https://about.codecov.io). A
[GitHub Actions](https://github.com/features/actions) workflow runs lint, type-check, and
test on every push.

Releases go through [Changesets](https://github.com/changesets/changesets): add a
changeset, and when it lands on `main` a release workflow opens a Version Packages PR that
publishes the affected packages to [npm](https://www.npmjs.com) with provenance.
Dependency upgrades run through [taze](https://github.com/antfu-collective/taze) with a
three-day maturity period, so new releases soak before they land.

## Set up for AI agents

`AGENTS.md` is the canonical instruction file, and `AGENT.md` is a symlink to it, so every
tool reads from one source instead of drifting copies.
[Claude Code](https://claude.com/claude-code), [Codex](https://github.com/openai/codex),
[Copilot](https://github.com/features/copilot), [Cursor](https://cursor.com),
[Gemini](https://github.com/google-gemini/gemini-cli), and other AGENTS.md runtimes all read
from it. Hooks under `.claude/` install dependencies and format on edit.

Shared skills, rules, commands, and subagents live in a separate project,
[agents](https://stijnvanhulle.be/projects/agents).

## Start a new project

```bash
gh repo create my-project --template stijnvanhulle/template
```

Fork it, update the package fields, and start writing code.

## Sitemap

See the full [sitemap](https://stijnvanhulle.be/sitemap.md) for all pages.
