# What changed in @babel/plugin-transform-classes

> 24 changes in @babel/plugin-transform-classes 8 from its official release notes, upgrade guides and advisories: 21 breaking, 2 new APIs and options. Each one cited. Sources checked 2026-10-23. HTML: https://unstale.sh/npm/@babel/plugin-transform-classes/

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

## @babel/plugin-transform-classes 8

### Breaking changes

- preset-env's useBuiltIns option was removed. (8.0.1) — [release notes](https://github.com/babel/babel/blob/b23345e2a905edb19e35371ec64fcd1a0ea7c8a2/CHANGELOG.md#v801-2026-06-17)
- Babel 8 plugins require @babel/core@^8.0.0 as a peer dependency; other major-version combinations are not officially supported. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- The syntax plugin is no longer needed and can be removed from configuration and dependencies. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- The package was renamed from @babel/plugin-proposal-private-property-in-object to @babel/plugin-transform-private-property-in-object; update the package name in dependencies and configuration. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- Internal files can no longer be imported; use the exported API instead. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- BigIntLiteral.value is a bigint rather than a string; use toString() when you need its string representation. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- TSParenthesizedType is no longer generated unless createParenthesizedExpression is enabled; node.extra.parenthesized can indicate parentheses when it is false. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Babel is shipped as native ECMAScript modules, affecting how the plugin is loaded and integrated. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- 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)
- Babel 8 packages require Node.js ^22.18.0 || >=24.11.0, so Babel itself will not run on older versions. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- The parameters field becomes params on TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSFunctionType, TSConstructorType, and TSMethodSignature. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The field on ClassDeclaration and ClassExpression is renamed to superTypeArguments. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Enum members are wrapped in a TSEnumBody node under the declaration's body field. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- This node is split into TSClassImplements and TSInterfaceHeritage; the new nodes use typeArguments, and qualified expressions are represented as MemberExpression. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Exported TSImportEqualsDeclaration nodes are parsed inside an ExportNamedDeclaration; the isExport field is removed. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The TSImportType argument field is renamed to source. (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)
- A dotted namespace name is represented as one TSQualifiedName rather than nested TSModuleDeclaration nodes. (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 return type field becomes returnType on TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSFunctionType, TSConstructorType, and TSMethodSignature. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The 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)

### New APIs and options

- When both estree and typescript parser plugins are enabled, Babel creates TSAbstractMethodDefinition and TSPropertyDefinition nodes. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Interpolated template literal types are represented by TSTemplateLiteralType; literals without interpolation retain their existing AST representation. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)

### Fixes and other changes

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