Repository navigation
v1.1.0
The template now builds browser libraries and command-line tools as well as Node libraries. It publishes without any stored npm secret, checks every package before it ships, and refuses dependencies published in the last 14 days.
Added
- Browser library example (
packages/browser-example): an ES module plus a script-tag build, Playwright browser tests with an axe accessibility check, and a size budget that fails CI when the build grows. - Command-line example (
packages/cli-example): abinentry, a Node 24 build target, and a test that runs the built command. - Package checks (
pnpm check:packages): each package is packed as it would publish, then checked with publint and Are The Types Wrong. CI and the release workflow both run them. - 14-day dependency age rule: pnpm refuses any version published in the last 14 days, including transitive ones. Renovate (opt-in, via its GitHub App) proposes weekly grouped updates once releases pass that age.
- Agent instructions:
AGENTS.mdcovers setup, the definition of done, lockfile hygiene and troubleshooting.CLAUDE.mdimports it.
Changed
- Publishing uses npm trusted publishing. No npm secret is stored, and public packages get provenance. The release workflow runs as four jobs; only the publish job can obtain npm credentials, and it never builds.
- CI hardening: least-privilege permissions, and every action pinned to a commit SHA.
- Tooling: Node 24 (Volta 24.12.0), pnpm 10.26.2, TypeScript 6.0.3, tsup 8.5.1, Turborepo 2.11.7, Biome 2.5.15, Vitest 5.0.4, Changesets 3.0.3, commitlint 21.2.3.
- Versioning: template versions mark milestones, not compatibility, because a template is copied once and never upgraded in place. This section is where compatibility is described.
Changes for existing projects
A project created from v1.0.0 would change the following to match:
- Node 24 and pnpm 10. Raise
engines.nodeto>=24. SetpackageManagertopnpm@10.26.2and the Volta pins. Reinstall to regenerate the lockfile. - Builds use tsup. Packages built with
tscmove to atsup.config.ts. Add"type": "module", anexportsmap intodist/, and"files": ["dist"]. Withoutfiles,npm packships nodist/. - TypeScript 6 deprecates
baseUrl. Remove it from the roottsconfig.jsonand prefixpathswith./. Packages built with tsup 8 also needdts: { compilerOptions: { ignoreDeprecations: '6.0' } }until tsup 9. - Biome 2 and Turborepo 2. Migrate
biome.json(biome migrate) and renamepipelinetotasksinturbo.json. - Changesets 3 no longer versions private packages by default. To keep that behavior, set
"privatePackages": { "version": true, "tag": false }in.changeset/config.json. - Publishing. Delete the
NPM_TOKENsecret. Replacerelease.yml. Add a trusted publisher on npmjs.com forrelease.ymland thenpmenvironment, then set the package to "disallow tokens". The README's "Setting Up npm Publishing" section covers each step. - Dependency age. Add
minimumReleaseAge: 20160topnpm-workspace.yaml. If the lockfile already holds young versions, deletenode_modulesand the lockfile, then reinstall.