# What changed in @babel/core

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

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

## @babel/core 8

### Breaking changes

- The method is removed from the plugin pass; use addNamed or addDefault from @babel/helper-module-imports instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The default export no longer accepts the third parameter; behavior matches Babel 7's default, includeUpdateExpression: true. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- When transforming ESM through @babel/preset-env, explicitly use one of the module transform plugins. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- The bugfixes option has been removed; Babel now compiles broken syntax to the closest non-broken modern syntax supported by target browsers. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- The corejs option must specify the minor version of core-js 3 so Babel can polyfill features available in the version you use. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- This undocumented sub-export is removed; use core-js-compat/data.json instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- This undocumented sub-export is removed; use @babel/compat-data/native-modules instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- This undocumented sub-export is removed; use core-js-compat/data.json instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- This undocumented sub-export is removed; use @babel/compat-data/plugins instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- This undocumented sub-export is removed; use unreleasedLabels from @babel/helper-compilation-targets instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The exclude option respects renamed package names; update entries to the new package names. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- Removed syntax plugins can no longer be used in exclude; remove any such plugins from the option. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- The include option respects renamed package names; update entries to the new package names. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- Removed syntax plugins can no longer be used in include; remove any such plugins from the option. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- The loose and spec options have been removed; use the top-level assumptions option instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- 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), [upgrade guide](https://babel.dev/docs/v8-migration)
- BigIntLiteral.value is a bigint rather than a string, aligning it with NumericLiteral. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The named export is 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)
- Exported TSImportEqualsDeclaration is wrapped in an ExportNamedDeclaration; its isExport field is removed. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Use forceAllTransforms if you relied on the removed uglify target to make @babel/preset-env transform down to ES5. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- The function is 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 method is removed from the plugin pass; use pass.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 with an Import callee. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Importing internal files is disallowed; use exported APIs instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The undocumented API is removed; use isRequired from @babel/helper-compilation-targets instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The loose and spec options have been removed from @babel/preset-env; migrate their equivalent settings to the top-level assumptions option. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- A TS qualified name in TSClassImplements or TSInterfaceHeritage expressions is parsed as a MemberExpression. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- @babel/plugin-transform-runtime replaces package.json#browser with package.json#imports using a browser condition; browser bundling requires configuring that condition and imports support. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The parameters field is renamed to params on TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSFunctionType, TSConstructorType, and TSMethodSignature. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Plugins can no longer expose fields as named exports; use a default export of a plugin object or factory function. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The typeAnnotation field is renamed to returnType on TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSFunctionType, TSConstructorType, and TSMethodSignature. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The named export is removed; use requeueComputedKeyAndDecorators from @babel/helper-environment-visitor instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The loose and spec options have been removed from @babel/preset-env; migrate their equivalent settings to the top-level assumptions option. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- Stage 4 plugin entries are renamed from proposal-* to transform-*; use the new names when referring to these plugins. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- ClassDeclaration and ClassExpression rename superTypeParameters to superTypeArguments. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The default compilation target changes from all browsers to browserslist's defaults; set targets explicitly if you need to support legacy browsers. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- Setting targets.esmodules to true now intersects with browser or browserslist targets instead of overriding them. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- Class implements entries use TSClassImplements instead of TSExpressionWithTypeArguments. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- TSEnumDeclaration members are wrapped in a TSEnumBody node. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- TSImportType.argument is renamed to source. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Interface extends entries use TSInterfaceHeritage instead of TSExpressionWithTypeArguments. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- TSMappedType flattens typeParameter into key and constraint properties on the node. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- A namespace X.Y declaration is represented by one TSModuleDeclaration with a TSQualifiedName, rather than nested declarations. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- TSParenthesizedType is generated only when createParenthesizedExpression is enabled; parentheses can otherwise be detected with node.extra.parenthesized. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- TSTypeParameter.name is 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 on CallExpression, JSXOpeningElement, NewExpression, OptionalCallExpression, TSImportType, TSInstantiationExpression, TSTypeQuery, and TSTypeReference. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- preset-env's useBuiltIns option was removed, so it can no longer be configured. (8.0.0) — [release notes](https://github.com/babel/babel/blob/b23345e2a905edb19e35371ec64fcd1a0ea7c8a2/CHANGELOG.md#v801-2026-06-17), [upgrade guide](https://babel.dev/docs/v8-migration)

### New APIs and options

- The upgrade guidance recommends enabling bugfixes in @babel/preset-env when modernizing a Babel 7 configuration. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- When both estree and typescript parser plugins are enabled, the parser creates TSAbstractMethodDefinition and TSPropertyDefinition nodes. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- A template literal type with at least one interpolated position produces a TSTemplateLiteralType node. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)

### Fixes and other changes

- TSTypeQuery.exprName can be a ThisExpression for typeof this instead of an Identifier named this. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
