npm / @babel/cli
@babel/cli
What changed in @babel/cli 8, from its official release notes, upgrade guides and advisories. Also covers @babel/eslint-plugin, @babel/node, @babel/plugin-transform-typescript, @babel/register, @babel/types. Sources checked 2026-10-23.
59 breaking1 deprecations3 new APIs and options5 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli init@babel/cli 868 changes
Breaking changes 59
Identifier definition is updated to Unicode 18, affecting which identifiers Babel accepts.
The parser now disallows this TypeScript syntax.
The parser now forbids
let x!andlet x! =.The preset-env useBuiltIns option was removed.
The method was removed from plugin pass; use addNamed or addDefault from @babel/helper-module-imports instead.
Babel is shipped as native ECMAScript modules, changing how the CLI package is loaded by Node.js.
The CLI flag is no longer used for module transformation options; configure the relevant module transform plugin in a Babel config instead.
The CLI flag is no longer used for module transformation options; configure the relevant module transform plugin in a Babel config instead.
The CLI flag is no longer used for module transformation options; configure the relevant module transform plugin in a Babel config instead.
The undocumented sub-export was removed; use core-js-compat/data.json instead.
The undocumented sub-export was removed; use @babel/compat-data/native-modules instead.
The undocumented sub-export was removed; use core-js-compat/data.json instead.
The undocumented sub-export was removed; use @babel/compat-data/plugins instead.
The undocumented sub-export was removed; use .unreleasedLabels from @babel/helper-compilation-targets instead.
BigIntLiteral.value is now a bigint rather than a string; callers needing a string representation can use the bigint instance's toString() method.
The typeParameters field is renamed to typeArguments.
The superTypeParameters field is renamed to superTypeArguments.
The superTypeParameters field is renamed to superTypeArguments.
The named export was removed from @babel/helper-replace-supers; import it from @babel/helper-environment-visitor instead.
The function was removed; add chalk to your dependencies if you need to use it.
The plugin pass method was removed; use .file.getModuleName instead.
Dynamic import() is represented by an ImportExpression node instead of a CallExpression, enabling support for new ES features such as Source Phrase Imports.
The third parameter was removed from the default export; Babel 8 behavior matches Babel 7's default, where it is true.
Importing internal files from @babel/cli is disallowed; use only the exported API.
The undocumented API was removed; use isRequired from @babel/helper-compilation-targets instead.
The typeParameters field is renamed to typeArguments.
With modules: auto, Babel now falls back to assuming ESM support.
The typeParameters field is renamed to typeArguments.
Babel 8 packages require Node.js ^22.18.0 || >=24.11.0; Babel itself will not run on older versions.
The typeParameters field is renamed to typeArguments.
Bundling @babel/plugin-transform-runtime now uses package.json#imports with a browser condition instead of package.json#browser; configure that condition and ensure your bundler supports imports.
Plugin fields can no longer be provided as named exports; export a plugin object or factory function as the default instead.
The named export was removed from @babel/helper-replace-supers; use requeueComputedKeyAndDecorators from @babel/helper-environment-visitor instead.
The default compilation target changes from all browsers to browserslist's defaults; specify targets or a .browserslistrc if you need different support.
The parameters field is renamed to params.
The typeAnnotation field is renamed to returnType.
Class implements clauses now use TSClassImplements nodes instead of TSExpressionWithTypeArguments; the new node uses typeArguments.
The parameters field is renamed to params.
The typeAnnotation field is renamed to returnType.
The parameters field is renamed to params.
The typeAnnotation field is renamed to returnType.
Enum members are now wrapped in a TSEnumBody node in the body property.
The parameters field is renamed to params.
The typeAnnotation field is renamed to returnType.
Exported declarations are now parsed as ExportNamedDeclaration nodes, and isExport is removed; detect export status through the parent path.
The argument field is renamed to source.
The typeParameters field is renamed to typeArguments.
The typeParameters field is renamed to typeArguments.
Interface heritage clauses now use TSInterfaceHeritage nodes instead of TSExpressionWithTypeArguments; the new node uses typeArguments.
The typeParameter property is flattened into key and constraint properties on TSMappedType.
The typeParameter property is flattened into key and constraint properties on TSMappedType.
The parameters field is renamed to params.
The typeAnnotation field is renamed to returnType.
A qualified namespace name such as X.Y is represented as one TSModuleDeclaration with a TSQualifiedName, instead of nested declarations.
TSParenthesizedType is no longer generated unless createParenthesizedExpression is enabled; parentheses can also be detected through node.extra.parenthesized.
Interpolated template literal types now produce TSTemplateLiteralType nodes; non-interpolated template literal types are unchanged.
TSTypeParameter.name is now an Identifier node rather than a plain string.
The typeParameters field is renamed to typeArguments.
The typeParameters field is renamed to typeArguments.
Deprecations 1
The legacy import() AST is deprecated; set this parser option to false to retain it temporarily. The option will be removed in Babel 9.
New APIs and options 3
Enable this parser option to retain parenthesized type information as TSParenthesizedType nodes.
When both estree and typescript parser plugins are enabled, Babel creates TSAbstractMethodDefinition nodes to align with typescript-eslint.
When both estree and typescript parser plugins are enabled, Babel creates TSPropertyDefinition nodes to align with typescript-eslint.
Fixes and other changes 5
Fixes parsing of arrow function parameters inside ternaries when using Flow.
Polishes the error message reported for invalid binary literal 0b19.
The CLI no longer inherits the parent process's execArgv.
Calling
replaceWithinVisitor#exitno longer stops traversal.TSTypeQuery.exprName can now be a ThisExpression for typeof this, rather than an Identifier named this.