Skip to content

[webdev] Add support for --[no-]deprecated-js-interop - #2874

Open
biggs0125 wants to merge 3 commits into
dart-lang:mainfrom
biggs0125:deprecated-js-interop-flag
Open

biggs0125 wants to merge 3 commits into
dart-lang:mainfrom
biggs0125:deprecated-js-interop-flag

Conversation

@biggs0125

@biggs0125 biggs0125 commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

The Dart SDK added a --[no-]deprecated-js-interop flag to its web compilers (https://dart-review.googlesource.com/c/sdk/+/555460, https://dart-review.googlesource.com/c/sdk/+/555500). With --no-deprecated-js-interop, the compilers reject imports of dart:html, dart:js, dart:js_util, package:js and the other deprecated JS interop libraries.

This adds the flag to webdev serve, webdev build and webdev daemon. It matches the flag added to flutter build web/run/drive/test.

  • New flag: --[no-]deprecated-js-interop, with --help text. If it isn't passed, nothing is forwarded and the SDK default applies, so older SDKs keep working.
  • Forwarded to build_runner as --define for the four build_web_compilers builders that must agree on it: ddc, ddc_modules, dart2js_modules and entrypoint. This covers DDC, dart2js, the kernel worker and the Frontend Server (web hot reload). Changing the value invalidates cached outputs through build_runner's option digest.
  • Forwarded to dwds through BuildSettings, so expression evaluation uses the same setting.
  • Version check. If the flag is passed and the project's build_web_compilers is older than 4.9.0, webdev stops early with "could not run with --no-deprecated-js-interop for this project" instead of failing inside build_runner.
  • Error output. Compiler diagnostics, including dart2js's import tree, come from build_web_compilers and are printed as [SEVERE] build logs. No change to webdev's logging.
  • README help output is updated.

Depends on DWDS PR: #2875

@biggs0125 biggs0125 changed the title Add support for --[no-]deprecated-js to webdev and dwds Add support for --[no-]deprecated-js-interop to webdev and dwds Oct 3, 2026
@biggs0125
biggs0125 requested review from Markzipan and nshahan October 3, 2026 03:27
The Dart SDK added a `--[no-]deprecated-js-interop` flag to its web compilers (https://dart-review.googlesource.com/c/sdk/+/555460, https://dart-review.googlesource.com/c/sdk/+/555500). With `--no-deprecated-js-interop`, the compilers reject imports of `dart:html`, `dart:js`, `dart:js_util`, `package:js` and the other deprecated JS interop libraries.

This adds the flag to `webdev serve`, `webdev build` and `webdev daemon`. It matches the flag added to `flutter build web/run/drive/test`.

- **New flag:** `--[no-]deprecated-js-interop`, with `--help` text. If it isn't passed, nothing is forwarded and the SDK default applies, so older SDKs keep working.
- **Forwarded to build_runner** as `--define` for the four build_web_compilers builders that must agree on it: `ddc`, `ddc_modules`, `dart2js_modules` and `entrypoint`. This covers DDC, dart2js, the kernel worker and the Frontend Server (web hot reload). Changing the value invalidates cached outputs through build_runner's option digest.
- **Forwarded to dwds** through `BuildSettings`, so expression evaluation uses the same setting.
- **Version check.** If the flag is passed and the project's `build_web_compilers` is older than 4.9.0, webdev stops early with "could not run with --no-deprecated-js-interop for this project" instead of failing inside build_runner.
- **Error output.** Compiler diagnostics, including dart2js's import tree, come from build_web_compilers and are printed as `[SEVERE]` build logs. No change to webdev's logging.
- README help output is updated.

Depends on DWDS PR: dart-lang#2875
@biggs0125
biggs0125 force-pushed the deprecated-js-interop-flag branch from f00b3fd to 9f32747 Compare October 3, 2026 03:33
@biggs0125 biggs0125 changed the title Add support for --[no-]deprecated-js-interop to webdev and dwds [webdev] Add support for --[no-]deprecated-js-interop Oct 3, 2026
Comment thread webdev/pubspec.yaml Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to bump the SDK constraint here as well to a version that has the flag in the front end and compilers?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe so, yes. I was waiting until a dev tag was made but it should be at this point. Thanks for the reminder! Updated now.

dwds also needs to get updated so that CL needs to be landed and published first too.

@Markzipan Markzipan left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM with some nits

Comment thread webdev/README.md Outdated
Comment thread webdev/lib/src/pubspec.dart
Comment thread webdev/test/pubspec_test.dart
@biggs0125
biggs0125 requested a review from Markzipan October 6, 2026 03:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants