Migration from V3
V5 reshapes the runtime-specific presets to make their target environment explicit in the name, and adds new presets for Cloudflare Workers, Alchemy, and isomorphic libraries.
The base, library, and shared-library presets are unchanged. The React and Next.js presets were renamed for consistency with the {category}-{variant} shape, and the runtime-specific entry points moved.
Why v5 and not v4?
V4 was skipped due to a publishing-workflow accident — package.json was bumped to 4.0.0 on the branch before merge, and the workflow then ran its own major bump on top, producing 5.0.0. The published 5.0.0 is the release that was intended to be 4.0.0; there is no 4.x line.
Renames
| V3 entry point | V5 entry point |
|---|---|
@codecompose/typescript-config/service | @codecompose/typescript-config/service-node |
@codecompose/typescript-config/infra | @codecompose/typescript-config/infra-pulumi |
@codecompose/typescript-config/react-library | @codecompose/typescript-config/library-react |
@codecompose/typescript-config/shared-react-library | @codecompose/typescript-config/shared-library-react |
@codecompose/typescript-config/nextjs | @codecompose/typescript-config/app-nextjs |
The contents of these presets are unchanged. Only the import path moved. There are no fallback aliases — the old names are removed.
{
"extends": "@codecompose/typescript-config/service-node"
}{
"extends": "@codecompose/typescript-config/infra-pulumi"
}New presets
service-worker— backend service on the Cloudflare Workers runtime. Same shape asservice-node, but withtypes: ["@cloudflare/workers-types"]instead of["node"].infra-alchemy— Alchemy projects. Files at the project root (nosrcdirectory),allowImportingTsExtensionsenabled,@types/nodeincluded.library-isomorphic— standalone libraries that target multiple Web-standards runtimes (browser, React Native, Cloudflare Workers, Deno, Bun, modern Node). Adds the DOM lib so globalfetch/Response/Headerstypes are available without leaking runtime-specific bindings like@cloudflare/workers-typesor@types/nodewould.
See Configurations for the full list.
Why the rename
V3 introduced explicit types: ["node"] on service and infra, baking a Node.js assumption into their names. With Cloudflare Workers and Alchemy added in V5, the unqualified names became misleading — a service that hard-codes Node types is friction for Worker services, and an infra named after Pulumi specifically isn't a good home for Alchemy.
The {category}-{variant} shape groups related presets together in alphabetical listings and leaves room for future variants without further renames. Applied across the board:
library,library-isomorphic,library-reactshared-library,shared-library-reactapp-nextjs(future:app-vite,app-remix, etc.)service-node,service-worker(future:service-bun,service-deno)infra-pulumi,infra-alchemy(future:infra-terraform)
The React presets (react-library, shared-react-library) were renamed to library-react and shared-library-react to put the category first. nextjs became app-nextjs so applications get their own category alongside library, service, and infra.