npm / @babel/core
@babel/core
What changed in @babel/core 8, from its official release notes, upgrade guides and advisories. Also covers @babel/eslint-parser, @babel/preset-env. Sources checked 2026-10-23.
47 breaking3 new APIs and options1 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli init@babel/core 851 changes
Breaking changes 47
The method is removed from the plugin pass; use addNamed or addDefault from @babel/helper-module-imports instead.
The default export no longer accepts the third parameter; behavior matches Babel 7's default, includeUpdateExpression: true.
When transforming ESM through @babel/preset-env, explicitly use one of the module transform plugins.
The bugfixes option has been removed; Babel now compiles broken syntax to the closest non-broken modern syntax supported by target browsers.
The corejs option must specify the minor version of core-js 3 so Babel can polyfill features available in the version you use.
This undocumented sub-export is removed; use core-js-compat/data.json instead.
This undocumented sub-export is removed; use @babel/compat-data/native-modules instead.
This undocumented sub-export is removed; use core-js-compat/data.json instead.
This undocumented sub-export is removed; use @babel/compat-data/plugins instead.
This undocumented sub-export is removed; use unreleasedLabels from @babel/helper-compilation-targets instead.
The exclude option respects renamed package names; update entries to the new package names.
Removed syntax plugins can no longer be used in exclude; remove any such plugins from the option.
The include option respects renamed package names; update entries to the new package names.
Removed syntax plugins can no longer be used in include; remove any such plugins from the option.
The loose and spec options have been removed; use the top-level assumptions option instead.
With modules: "auto", Babel now falls back to assuming ESM support.
BigIntLiteral.value is a bigint rather than a string, aligning it with NumericLiteral.
The named export is removed from @babel/helper-replace-supers; import it from @babel/helper-environment-visitor instead.
Exported TSImportEqualsDeclaration is wrapped in an ExportNamedDeclaration; its isExport field is removed.
Use forceAllTransforms if you relied on the removed uglify target to make @babel/preset-env transform down to ES5.
The function is removed; add chalk to your dependencies if you need to use it.
The method is removed from the plugin pass; use pass.file.getModuleName instead.
Dynamic import() is represented by an ImportExpression node instead of a CallExpression with an Import callee.
Importing internal files is disallowed; use exported APIs instead.
The undocumented API is removed; use isRequired from @babel/helper-compilation-targets instead.
The loose and spec options have been removed from @babel/preset-env; migrate their equivalent settings to the top-level assumptions option.
A TS qualified name in TSClassImplements or TSInterfaceHeritage expressions is parsed as a MemberExpression.
@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.
The parameters field is renamed to params on TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSFunctionType, TSConstructorType, and TSMethodSignature.
Plugins can no longer expose fields as named exports; use a default export of a plugin object or factory function.
The typeAnnotation field is renamed to returnType on TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSFunctionType, TSConstructorType, and TSMethodSignature.
The named export is removed; use requeueComputedKeyAndDecorators from @babel/helper-environment-visitor instead.
The loose and spec options have been removed from @babel/preset-env; migrate their equivalent settings to the top-level assumptions option.
Stage 4 plugin entries are renamed from proposal-* to transform-*; use the new names when referring to these plugins.
ClassDeclaration and ClassExpression rename superTypeParameters to superTypeArguments.
The default compilation target changes from all browsers to browserslist's defaults; set targets explicitly if you need to support legacy browsers.
Setting targets.esmodules to true now intersects with browser or browserslist targets instead of overriding them.
Class implements entries use TSClassImplements instead of TSExpressionWithTypeArguments.
TSEnumDeclaration members are wrapped in a TSEnumBody node.
TSImportType.argument is renamed to source.
Interface extends entries use TSInterfaceHeritage instead of TSExpressionWithTypeArguments.
TSMappedType flattens typeParameter into key and constraint properties on the node.
A namespace X.Y declaration is represented by one TSModuleDeclaration with a TSQualifiedName, rather than nested declarations.
TSParenthesizedType is generated only when createParenthesizedExpression is enabled; parentheses can otherwise be detected with node.extra.parenthesized.
TSTypeParameter.name is an Identifier node rather than a plain string.
The typeParameters field is renamed to typeArguments on CallExpression, JSXOpeningElement, NewExpression, OptionalCallExpression, TSImportType, TSInstantiationExpression, TSTypeQuery, and TSTypeReference.
preset-env's useBuiltIns option was removed, so it can no longer be configured.
New APIs and options 3
The upgrade guidance recommends enabling bugfixes in @babel/preset-env when modernizing a Babel 7 configuration.
When both estree and typescript parser plugins are enabled, the parser creates TSAbstractMethodDefinition and TSPropertyDefinition nodes.
A template literal type with at least one interpolated position produces a TSTemplateLiteralType node.
Fixes and other changes 1
TSTypeQuery.exprName can be a ThisExpression for typeof this instead of an Identifier named this.