Projects

Template

A TypeScript monorepo starter with pnpm workspaces, Turborepo, oxlint, oxfmt, tsdown, Vitest, Changesets, and CI.

#typescript #monorepo #tooling #turbo #pnpm #vitest #changeset #github-actions #oxlint #claude

Highlights

  • Monorepo starter

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

    Fork it and start writing code

    Build, test, lint, format, release, and CI are set up from the first commit.

  • pnpmTurborepooxlintoxfmttsdownVitestChangesetsCodecov

    Tooling, already wired

    The same setup in every project, so they stay consistent.

  • CI on every push

    GitHub Actions runs lint, type-check, and test.

  • 3 days

    Upgrades soak first

    taze waits three days before a new release lands.

  • Releases with provenance

    Changesets open a Version Packages PR and publish to npm.

  • Claude CodeCodexCopilotCursorGemini

    One AGENTS.md for every agent

    Symlinks keep one source instead of drifting copies.

  • Hooks for agents

    Dependencies install on session start, and files format on edit.

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 workspaces and Turborepo run the monorepo. oxlint and oxfmt handle linting and formatting, tsdown builds the packages, and Vitest runs the tests with coverage reported to Codecov. A GitHub Actions workflow runs lint, type-check, and test on every push.

Releases go through 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 with provenance. Dependency upgrades run through 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, Codex, Copilot, Cursor, Gemini, 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.

Start a new project

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

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

Portrait of Stijn Van Hulle

Stijn Van Hulle

Front-end engineer