Skip to content

TypeScript 7

Warlock 5.32 and create-warlock’s default Oxlint/Oxfmt mode pin typescript to 7.0.2. The regular tsc command now runs the native Go compiler. Install typescript@7.0.2 in the app’s development dependencies; no preview package or alternate command is needed.

Remove baseUrl. Resolve every paths target relative to the tsconfig that declares it. For example, replace baseUrl: "./src" and "app/*": ["app/*"] with "app/*": ["./src/app/*"].

Replace moduleResolution: "node" / "node10" with "bundler" and use module: "ESNext" for Warlock’s esbuild pipeline. A separately emitted Node project may use "NodeNext" for both options and follow Node’s import rules. Declare the ambient types the app uses explicitly: TS7 no longer includes all visible @types packages automatically. Node apps need "types": ["node"]. Set rootDir explicitly when a project checks source outside its config folder.

tsconfig.json
{
"compilerOptions": {
"module": "ESNext",
"moduleResolution": "bundler",
"types": ["node"],
"strict": true,
"noEmit": true,
"paths": {
"app/*": ["./src/app/*"],
"web/*": ["./src/web/*"]
}
},
"include": ["src", "warlock.config.ts", ".warlock/typings/*.d.ts"]
}

Keep other app options such as JSX and library settings. Run npx tsc --noEmit and npx warlock typecheck after upgrading. The latter retains incremental state in .warlock/cache/typecheck.tsbuildinfo; --changed retains diagnostics for changed files and their direct importers. The dev checker keeps one native compiler session, updates snapshots, and requests diagnostics for changed files. Config, translation, import and convention analysis uses OXC without executing application source.

The typescript main entry exports the compiler version rather than the old JavaScript compiler API. Core isolates its native unstable API in src/tooling/typescript/compiler.ts and pins the version exactly. warlock upgrade continues to use ts-morph’s own bundled parser for source transformations; it does not use that parser to typecheck apps.

Oxlint 1.88.0 and Oxfmt 0.73.0 are the only supported tools. New apps pin TypeScript 7.0.2 and include .oxlintrc.json, .oxfmtrc.json, .oxfmtignore, and VS Code settings for oxc.oxc-vscode. --lint=oxc is optional; --lint=eslint fails with the 5.34.0 removal message. The wizard has no toolchain choice.

Terminal window
npm create warlock@latest my-app -- --yes
cd my-app
npm run lint:check
npm run format:check

Oxlint enables "categories": { "correctness": "error" }, unused-variable/import checks, explicit class accessibility and type-import style. Oxfmt sorts imports with "sortImports": { "newlinesBetween": false, "internalPattern": ["app/", "web/", "@shared/"] }. It keeps built-ins, packages, internal aliases and relative imports in one block. Formatting retains unused imports; lint reports them. Local package scripts use oxlint, oxfmt and tsc directly. The non-mutating scripts are lint:check and format:check. Background checks run TypeScript and configured Oxlint.

For existing ESLint apps, follow the migration guide.