# What changed in @babel/cli

> 68 changes in @babel/cli 8 from its official release notes, upgrade guides and advisories: 59 breaking, 1 deprecations, 3 new APIs and options. Each one cited. Sources checked 2026-10-23. HTML: https://unstale.sh/npm/@babel/cli/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## @babel/cli 8

### Breaking changes

- Identifier definition is updated to Unicode 18, affecting which identifiers Babel accepts. (8.0.6) — [release notes](https://github.com/babel/babel/blob/b23345e2a905edb19e35371ec64fcd1a0ea7c8a2/CHANGELOG.md#v806-2026-09-18)
- The parser now disallows this TypeScript syntax. (8.0.4) — [release notes](https://github.com/babel/babel/blob/b23345e2a905edb19e35371ec64fcd1a0ea7c8a2/CHANGELOG.md#v804-2026-07-09)
- The parser now forbids `let x!` and `let x! =`. (8.0.4) — [release notes](https://github.com/babel/babel/blob/b23345e2a905edb19e35371ec64fcd1a0ea7c8a2/CHANGELOG.md#v804-2026-07-09)
- The preset-env useBuiltIns option was removed. (8.0.1) — [release notes](https://github.com/babel/babel/blob/b23345e2a905edb19e35371ec64fcd1a0ea7c8a2/CHANGELOG.md#v801-2026-06-17)
- The method was removed from plugin pass; use addNamed or addDefault from @babel/helper-module-imports instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Babel is shipped as native ECMAScript modules, changing how the CLI package is loaded by Node.js. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- The CLI flag is no longer used for module transformation options; configure the relevant module transform plugin in a Babel config instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- The CLI flag is no longer used for module transformation options; configure the relevant module transform plugin in a Babel config instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- The CLI flag is no longer used for module transformation options; configure the relevant module transform plugin in a Babel config instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- The undocumented sub-export was removed; use core-js-compat/data.json instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The undocumented sub-export was removed; use @babel/compat-data/native-modules instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The undocumented sub-export was removed; use core-js-compat/data.json instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The undocumented sub-export was removed; use @babel/compat-data/plugins instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The undocumented sub-export was removed; use .unreleasedLabels from @babel/helper-compilation-targets instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- BigIntLiteral.value is now a bigint rather than a string; callers needing a string representation can use the bigint instance's toString() method. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The typeParameters field is renamed to typeArguments. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The superTypeParameters field is renamed to superTypeArguments. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The superTypeParameters field is renamed to superTypeArguments. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The named export was removed from @babel/helper-replace-supers; import it from @babel/helper-environment-visitor instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The function was removed; add chalk to your dependencies if you need to use it. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The plugin pass method was removed; use .file.getModuleName instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Dynamic import() is represented by an ImportExpression node instead of a CallExpression, enabling support for new ES features such as Source Phrase Imports. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The third parameter was removed from the default export; Babel 8 behavior matches Babel 7's default, where it is true. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Importing internal files from @babel/cli is disallowed; use only the exported API. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The undocumented API was removed; use isRequired from @babel/helper-compilation-targets instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The typeParameters field is renamed to typeArguments. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- With modules: auto, Babel now falls back to assuming ESM support. (8.0.0) — [release notes](https://github.com/babel/babel/blob/b23345e2a905edb19e35371ec64fcd1a0ea7c8a2/CHANGELOG.md#v800-2026-06-16)
- The typeParameters field is renamed to typeArguments. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Babel 8 packages require Node.js ^22.18.0 || >=24.11.0; Babel itself will not run on older versions. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- The typeParameters field is renamed to typeArguments. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- 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. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Plugin fields can no longer be provided as named exports; export a plugin object or factory function as the default instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The named export was removed from @babel/helper-replace-supers; use requeueComputedKeyAndDecorators from @babel/helper-environment-visitor instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The default compilation target changes from all browsers to browserslist's defaults; specify targets or a .browserslistrc if you need different support. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- The parameters field is renamed to params. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The typeAnnotation field is renamed to returnType. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Class implements clauses now use TSClassImplements nodes instead of TSExpressionWithTypeArguments; the new node uses typeArguments. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The parameters field is renamed to params. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The typeAnnotation field is renamed to returnType. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The parameters field is renamed to params. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The typeAnnotation field is renamed to returnType. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Enum members are now wrapped in a TSEnumBody node in the body property. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The parameters field is renamed to params. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The typeAnnotation field is renamed to returnType. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Exported declarations are now parsed as ExportNamedDeclaration nodes, and isExport is removed; detect export status through the parent path. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The argument field is renamed to source. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The typeParameters field is renamed to typeArguments. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The typeParameters field is renamed to typeArguments. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Interface heritage clauses now use TSInterfaceHeritage nodes instead of TSExpressionWithTypeArguments; the new node uses typeArguments. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The typeParameter property is flattened into key and constraint properties on TSMappedType. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The typeParameter property is flattened into key and constraint properties on TSMappedType. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The parameters field is renamed to params. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The typeAnnotation field is renamed to returnType. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- A qualified namespace name such as X.Y is represented as one TSModuleDeclaration with a TSQualifiedName, instead of nested declarations. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- TSParenthesizedType is no longer generated unless createParenthesizedExpression is enabled; parentheses can also be detected through node.extra.parenthesized. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Interpolated template literal types now produce TSTemplateLiteralType nodes; non-interpolated template literal types are unchanged. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- TSTypeParameter.name is now an Identifier node rather than a plain string. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The typeParameters field is renamed to typeArguments. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The typeParameters field is renamed to typeArguments. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)

### Deprecations

- The legacy import() AST is deprecated; set this parser option to false to retain it temporarily. The option will be removed in Babel 9. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)

### New APIs and options

- Enable this parser option to retain parenthesized type information as TSParenthesizedType nodes. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- When both estree and typescript parser plugins are enabled, Babel creates TSAbstractMethodDefinition nodes to align with typescript-eslint. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- When both estree and typescript parser plugins are enabled, Babel creates TSPropertyDefinition nodes to align with typescript-eslint. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)

### Fixes and other changes

- Fixes parsing of arrow function parameters inside ternaries when using Flow. (8.0.6) — [release notes](https://github.com/babel/babel/blob/b23345e2a905edb19e35371ec64fcd1a0ea7c8a2/CHANGELOG.md#v806-2026-09-18)
- Polishes the error message reported for invalid binary literal 0b19. (8.0.6) — [release notes](https://github.com/babel/babel/blob/b23345e2a905edb19e35371ec64fcd1a0ea7c8a2/CHANGELOG.md#v806-2026-09-18)
- The CLI no longer inherits the parent process's execArgv. (8.0.5) — [release notes](https://github.com/babel/babel/blob/b23345e2a905edb19e35371ec64fcd1a0ea7c8a2/CHANGELOG.md#v805-2026-09-10)
- Calling `replaceWith` in `Visitor#exit` no longer stops traversal. (8.0.4) — [release notes](https://github.com/babel/babel/blob/b23345e2a905edb19e35371ec64fcd1a0ea7c8a2/CHANGELOG.md#v804-2026-07-09)
- TSTypeQuery.exprName can now be a ThisExpression for typeof this, rather than an Identifier named this. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
