# What changed in @babel/plugin-proposal-decorators

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

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

## @babel/plugin-proposal-decorators 8

### Breaking changes

- Set the version option to legacy or 2023-11 when using the plugin with Babel 8. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- BigIntLiteral.value is a bigint rather than a string, aligning with NumericLiteral; JSON.stringify cannot serialize the new value directly. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- TSParenthesizedType is generated only when createParenthesizedExpression is enabled; otherwise use node.extra.parenthesized to detect parentheses. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The `decoratorsBeforeExport` option has been removed; remove it from your Babel config. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- Exporting a TSImportEqualsDeclaration is represented as an ExportNamedDeclaration containing the declaration; the isExport field is removed. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Importing internal files is disallowed; use the exported API only. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The `legacy` boolean option has been removed; remove it from your Babel config. The `legacy` proposal version remains supported. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)
- With modules: auto, the plugin 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 parameters field is renamed to params in TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSFunctionType, TSConstructorType, and TSMethodSignature. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The typeAnnotation field is renamed to returnType in TSCallSignatureDeclaration, TSConstructSignatureDeclaration, TSFunctionType, TSConstructorType, and TSMethodSignature. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- ClassDeclaration and ClassExpression use superTypeArguments instead of superTypeParameters. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Class implements entries use TSClassImplements instead of TSExpressionWithTypeArguments; typeArguments replaces typeParameters, and qualified expressions parse as MemberExpression. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- TSEnumDeclaration members are now wrapped in a TSEnumBody node. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The argument field is renamed to source; TSImportType also uses typeArguments instead of typeParameters. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- Interface extends entries use TSInterfaceHeritage instead of TSExpressionWithTypeArguments and use typeArguments instead of typeParameters. (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)
- Interpolated template literal types now produce TSTemplateLiteralType nodes; types without interpolated positions 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 in CallExpression, JSXOpeningElement, NewExpression, OptionalCallExpression, TSImportType, TSInstantiationExpression, TSTypeQuery, and TSTypeReference. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- The plugin now requires `version` and supports only `legacy` and `2023-11`; migrate to `2023-11` and rewrite decorator functions as needed. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration)

### New APIs and options

- Dynamic import() is represented by an ImportExpression node instead of a CallExpression; the legacy AST is deprecated and does not support newer ES features such as Source Phrase Imports. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- When both estree and typescript parser plugins are enabled, the AST uses TSAbstractMethodDefinition and TSPropertyDefinition; this aligns it with typescript-eslint. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)

### Fixes and other changes

- A dotted namespace name such as namespace X.Y is represented as one TSModuleDeclaration whose name is a TSQualifiedName, rather than nested declarations. (8.0.0) — [upgrade guide](https://babel.dev/docs/v8-migration-api)
- 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)
