Skip to main content

Praman Compatibility: Node.js 22–26 and TypeScript 5–7

· 7 min read
Maheshwar Kanitkar
Creator of Praman

Praman v1.3 is CI-tested on Node.js 22, 24, and 26 across three operating systems, ships published types compiled with TypeScript 6.0.3, validates against TS 5.9 and TS 6.0 on every push, and passes a clean typecheck against the TypeScript 7.0 beta (tsgo). This post documents the evidence behind each compatibility claim so your team can adopt Praman with confidence.


Node.js 22, 24, 26 — CI-Verified

Praman declares "engines": { "node": ">=22" } in package.json and enforces it with engine-strict=true in .npmrc — npm will refuse to install on any Node version below 22.

CI Test Matrix

Every push runs 4,476 unit tests across a 9-cell matrix:

Node.js 22 LTSNode.js 24 LTSNode.js 26 Current
UbuntuPassPassPass
WindowsPassPassPass
macOSPassPassPass

Additionally, the Install Matrix workflow tests npm, yarn, and pnpm across all three OSes — verifying CJS require(), ESM import(), and CLI execution for each combination.

Why It Just Works

Zero native dependencies. All five runtime dependencies are pure JavaScript:

DependencyPurposeNative Code
commanderCLI argument parsingNo
css-selector-parserCSS selector analysisNo
fontoxpathXPath evaluationNo
pinoStructured JSON loggingNo
zodSchema validationNo

No native addons means no recompilation when you switch Node versions, no node-gyp failures on CI, and no N-API version mismatches.

ESM-first with CJS fallback. Praman ships "type": "module" and uses node: prefixed imports throughout (node:path, node:fs, node:url). The build produces dual-format output via tsup:

  • ESM: dist/*.js + dist/*.d.ts — primary format
  • CJS: dist/*.cjs + dist/*.d.cts — Node.js compatibility

Both formats are validated by @arethetypeswrong/cli on every build to ensure correct export resolution.

Build target: node22. The transpiled output targets Node 22 syntax — it uses top-level await, import.meta.url, and other ES2022+ features natively supported by all three versions.

What Each Version Brings

VersionStatusReleaseKey Highlights
Node.js 22Active LTSApril 2024Baseline — import.meta.resolve(), stable test runner
Node.js 24Active LTSApril 2025URLPattern, V8 13.6, npm 11 bundled
Node.js 26CurrentApril 2026Temporal API, V8 14.6, Iterator.concat(), Map.getOrInsert()

All three versions work identically with Praman — no conditional code paths, no polyfills, no version-specific workarounds.


TypeScript 5.x — Compatible

The CI ts-compat job validates Praman against TypeScript 5.9.3 on every push. The codebase uses modern TypeScript features that have been stable since the 5.x era:

FeatureIntroducedUsage in Praman
verbatimModuleSyntaxTS 5.0Enabled in tsconfig — preserves import type in output
satisfies operatorTS 4.9Used for type-safe config presets without widening
import typeTS 3.8241 type-only imports across 114 files
as const assertionsTS 3.453+ usages for frozen literals and tuples

No deprecated patterns. The codebase contains zero enums, zero decorators, zero namespaces, and zero import ... assert {} statements — all patterns that have been deprecated or removed in later TypeScript versions. This ensures a clean upgrade path from 5.x to 6.x or 7.x.

If your project uses TypeScript 5.5 or later, Praman's types will work out of the box. No additional configuration needed.


TypeScript 6.x — Full Support

Praman's published types are compiled with TypeScript 6.0.3 (the latest stable release). The CI ts-compat job validates against TS 6.0.2 on every push, ensuring types remain correct across minor patch differences.

TS 6.0 Requirements — Already Adopted

TypeScript 6.0 introduced breaking changes that catch many libraries off guard. Praman addressed these proactively:

TS 6.0 RequirementPraman StatusConfig
Explicit types field (auto-discovery removed)"types": ["node"]tsconfig.json
noUncheckedSideEffectImports recommendedEnabled as truetsconfig.json
with {} syntax replaces assert {}Used throughouttsup.config.ts

Migration from TS 5.x was zero source changes — only tsconfig.json adjustments. If you're upgrading your project from TS 5.x to 6.x, Praman won't be the thing that breaks.


TypeScript 7.0 Beta — Forward-Ready

TypeScript 7.0 is a ground-up rewrite in Go, delivering approximately 10x faster type checking. It's published as @typescript/native-preview with the tsgo CLI.

Verification Result

We installed @typescript/native-preview@beta (version 7.0.0-dev.20260421.2) and ran:

npx tsgo --noEmit
# Exit code: 0 — zero errors, zero warnings

The entire Praman codebase — 187 TypeScript files in src/, plus tests — passes a clean typecheck under TypeScript 7.0 beta with no modifications.

Breaking Change Compatibility

TS 7.0 removes several deprecated features. Here's how Praman maps against each:

TS 7.0 Breaking ChangeImpact on PramanStatus
baseUrl removedNot used in tsconfigNo impact
moduleResolution: node/node10 removedUses Node16 (still supported)No impact
types defaults to []Already explicit: ["node"]No impact
strict defaults to trueAlready enabledNo impact
rootDir defaults to "./"Already set to "."No impact
esModuleInterop cannot be falseAlready trueNo impact
target: es5 removedUses ES2022No impact
assert {} syntax removedUses with {}No impact
amd/umd/systemjs/none module removedUses Node16No impact
alwaysStrict cannot be falseAlready strictNo impact

Every breaking change in TS 7.0 has zero impact on Praman. The codebase was already aligned with TS 7.0's stricter defaults.

What This Means for You

  • If you adopt tsgo today, Praman's types work immediately with full inference
  • Published .d.ts files are structurally identical whether consumed by tsc 6.x or tsgo 7.0
  • The strict: true tsconfig is enforced throughout — all generics, narrowing, and inference behave correctly under TS 7 semantics

Known Caveat

The tsup bundler's DTS rollup plugin internally injects baseUrl: "." during declaration generation. This is a tsup upstream issue — Praman's own tsconfig.json has no baseUrl. The workaround (ignoreDeprecations: '6.0' in the DTS config) is already in place and does not affect consumers.


How We Ensure Compatibility

Praman's CI pipeline runs 5 parallel validation stages on every push:

quality ─────── lint + typecheck + spell + knip + markdownlint
unit-tests ──── 9-cell matrix (3 Node × 3 OS) + coverage
build ────────── dual ESM+CJS + smoke tests + attw + size-limit
ts-compat ───── TS 5.9.3 + TS 6.0.2 typecheck + build
install-test ── npm/yarn/pnpm × 3 OSes (CJS + ESM + CLI)

Key Safeguards

MechanismWhat It Catches
engine-strict=truePrevents install on unsupported Node versions
attw export validationBroken ESM/CJS resolution, missing types
9-cell unit test matrixPlatform-specific path or timing bugs
Install matrix (9 cells)Package manager resolution differences
Runtime feature detectionGraceful degradation across Playwright versions

Runtime feature detection deserves special mention. Praman uses 15 feature flags to detect Playwright capabilities at runtime — not version string comparisons. This means new Playwright features are adopted progressively without breaking older installations:

FeatureRequired PW VersionDetection Key
Clock API1.45+hasClockAPI
ARIA snapshots1.49+hasAriaSnapshot
Screencast API1.59+hasScreencastAPI
Test abort1.60+hasTestAbort
Full-page ARIA snapshot1.60+hasPageAriaSnapshot
Locator highlight style1.60+hasLocatorHighlightStyle

(6 of 15 flags shown — see the full compatibility guide for the complete list.)


Quick Verification

Run these commands to confirm your environment is compatible:

# Check Node.js version (>=22 required)
node --version

# Check TypeScript version (5.5+ / 6.x supported)
npx tsc --version

# Install Praman
npm install playwright-praman@latest

# Verify CLI works
npx playwright-praman --version

# Run your tests
npx playwright test

Summary Compatibility Matrix

DimensionSupported RangeCI-TestedStatus
Node.js 22LTS (Active)Yes — 3 OSesSupported
Node.js 24LTS (Active)Yes — 3 OSesSupported
Node.js 26CurrentYes — 3 OSesSupported
TypeScript 5.5–5.9Stable5.9.3Compatible
TypeScript 6.xStable6.0.2Full support
TypeScript 7.0BetaVerified (tsgo)Forward-ready
Playwright1.57–1.60YesSupported
Operating SystemsLinux, Windows, macOSYesAll three
Package Managersnpm, yarn, pnpmYesAll three