npm / @babel/compat-data
@babel/compat-data
What changed in @babel/compat-data 8, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-25.
27 breaking3 new APIs and options1 behavior and defaults1 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli init@babel/compat-data 832 changes
Breaking changes 27
Package entrypoints are JSON files instead of JavaScript files; ESM imports need
with { type: "json" }.BigIntLiteral.value is a bigint instead of a string, aligning it with NumericLiteral handling.
Babel 8 uses the ImportExpression AST by default; setting this parser option to false retains the legacy import() AST.
Babel is shipped as native ECMAScript modules.
Dynamic import() is represented as an ImportExpression node, with source and options fields, instead of a CallExpression.
The ios_saf entry is removed from data/native-modules.json; use ios instead.
The isExport field is removed from TSImportEqualsDeclaration; inspect the parent path for an ExportNamedDeclaration instead.
Babel 8 packages require Node.js ^22.18.0 || >=24.11.0; Babel itself will not run on older versions.
The parameters field is renamed to params on TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSFunctionType, TSConstructorType, and TSMethodSignature.
The params field replaces parameters on TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSFunctionType, TSConstructorType, and TSMethodSignature.
Stage 4 plugin entries are renamed from proposal-* to transform-*; update plugin names passed to isRequired as well.
The returnType field replaces typeAnnotation on TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSFunctionType, TSConstructorType, and TSMethodSignature.
The field replaces superTypeParameters on ClassDeclaration and ClassExpression.
The ClassDeclaration and ClassExpression field is renamed to superTypeArguments.
Class implements entries use TSClassImplements instead of TSExpressionWithTypeArguments.
TSEnumDeclaration members are now wrapped in a TSEnumBody node.
This node is replaced by TSClassImplements and TSInterfaceHeritage for class implements and interface heritage entries.
An exported TSImportEqualsDeclaration is represented inside an ExportNamedDeclaration; its isExport field is removed.
The TSImportType argument field is renamed to source.
The source field replaces argument on TSImportType.
Interface extends entries use TSInterfaceHeritage instead of TSExpressionWithTypeArguments.
The nested typeParameter is flattened into key and constraint properties on TS MappedType.
A dotted namespace name is represented as one TSQualifiedName on a single TSModuleDeclaration rather than nested declarations.
TSTypeParameter.name is an Identifier node rather than a plain string.
The return type field is renamed from typeAnnotation to returnType on TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSFunctionType, TSConstructorType, and TSMethodSignature.
The field replaces typeParameters on CallExpression, JSXOpeningElement, NewExpression, OptionalCallExpression, TSImportType, TSInstantiationExpression, TSTypeQuery, and TSTypeReference.
The field is renamed to typeArguments on CallExpression, JSXOpeningElement, NewExpression, OptionalCallExpression, TSImportType, TSInstantiationExpression, TSTypeQuery, and TSTypeReference.
New APIs and options 3
This node is created when both estree and typescript parser plugins are enabled.
This node is created when both estree and typescript parser plugins are enabled.
Interpolated template literal types are represented by TSTemplateLiteralType; non-interpolated template literal types retain their existing AST shape.
Behavior and default changes 1
TSParenthesizedType is generated only when this parser option is enabled; otherwise parentheses can be detected with node.extra.parenthesized.
Fixes and other changes 1
TSTypeQuery.exprName can be a ThisExpression for typeof this, rather than an Identifier named this.