diff --git a/pkgs/web_socket_channel/CHANGELOG.md b/pkgs/web_socket_channel/CHANGELOG.md
index 02e4630..011eed1 100644
--- a/pkgs/web_socket_channel/CHANGELOG.md
+++ b/pkgs/web_socket_channel/CHANGELOG.md
@@ -1,10 +1,11 @@
 ## 2.4.1-wip
 
-- Bump minimum Dart version to 3.2.0
 - Update the examples to use `WebSocketChannel.ready` and clarify that
   `WebSocketChannel.ready` should be awaited before sending data over the
   `WebSocketChannel`.
 - Mention `ready` in the docs for `connect`.
+- Bump minimum Dart version to 3.2.0
+- Move to `pkg:web` to support WebAssembly compilation.
 
 ## 2.4.0
 
diff --git a/pkgs/web_socket_channel/lib/html.dart b/pkgs/web_socket_channel/lib/html.dart
index 0cb7ffd..2263e6e 100644
--- a/pkgs/web_socket_channel/lib/html.dart
+++ b/pkgs/web_socket_channel/lib/html.dart
@@ -3,14 +3,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
-import 'dart:html';
+import 'dart:js_interop';
 import 'dart:typed_data';
 
 import 'package:async/async.dart';
 import 'package:stream_channel/stream_channel.dart';
+import 'package:web/helpers.dart';
 
 import 'src/channel.dart';
 import 'src/exception.dart';
+import 'src/web_helpers.dart';
 
 /// A [WebSocketChannel] that communicates using a `dart:html` [WebSocket].
 class HtmlWebSocketChannel extends StreamChannelMixin
@@ -73,8 +75,15 @@
   /// [BinaryType.blob], they're delivered as [Blob]s instead.
   HtmlWebSocketChannel.connect(Object url,
       {Iterable<String>? protocols, BinaryType? binaryType})
-      : this(WebSocket(url.toString(), protocols)
-          ..binaryType = (binaryType ?? BinaryType.list).value);
+      : this(
+          WebSocket(
+            url.toString(),
+            (protocols?.toList() ?? const <String>[])
+                .map((e) => e.toJS)
+                .toList()
+                .toJS,
+          )..binaryType = (binaryType ?? BinaryType.list).value,
+        );
 
   /// Creates a channel wrapping [innerWebSocket].
   HtmlWebSocketChannel(this.innerWebSocket) {
@@ -109,11 +118,7 @@
       _controller.local.sink.close();
     });
 
-    innerWebSocket.onMessage.listen((event) {
-      var data = event.data;
-      if (data is ByteBuffer) data = data.asUint8List();
-      _controller.local.sink.add(data);
-    });
+    innerWebSocket.onMessage.listen(_innerListen);
 
     // The socket API guarantees that only a single error event will be emitted,
     // and that once it is no other events will be emitted.
@@ -124,16 +129,29 @@
     });
   }
 
+  void _innerListen(MessageEvent event) {
+    final eventData = event.data;
+    Object? data;
+    if (eventData.typeofEquals('object') &&
+        (eventData as JSObject).instanceOfString('ArrayBuffer')) {
+      data = (eventData as JSArrayBuffer).toDart.asUint8List();
+    } else {
+      data = event.data;
+    }
+    _controller.local.sink.add(data);
+  }
+
   /// Pipes user events to [innerWebSocket].
   void _listen() {
-    _controller.local.stream.listen(innerWebSocket.send, onDone: () {
+    _controller.local.stream.listen((obj) => innerWebSocket.send(obj!.jsify()!),
+        onDone: () {
       // On Chrome and possibly other browsers, `null` can't be passed as the
       // default here. The actual arity of the function call must be correct or
       // it will fail.
       if (_localCloseCode != null && _localCloseReason != null) {
-        innerWebSocket.close(_localCloseCode, _localCloseReason);
+        innerWebSocket.close(_localCloseCode!, _localCloseReason!);
       } else if (_localCloseCode != null) {
-        innerWebSocket.close(_localCloseCode);
+        innerWebSocket.close(_localCloseCode!);
       } else {
         innerWebSocket.close();
       }
diff --git a/pkgs/web_socket_channel/lib/src/web_helpers.dart b/pkgs/web_socket_channel/lib/src/web_helpers.dart
new file mode 100644
index 0000000..7ef46e5
--- /dev/null
+++ b/pkgs/web_socket_channel/lib/src/web_helpers.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2023, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:web/helpers.dart';
+
+// TODO(kevmoo): remove when https://github.com/dart-lang/web/commit/4cb5811ed06
+// is in a published release and the min constraint on pkg:web is updated
+extension WebSocketEvents on WebSocket {
+  Stream<Event> get onOpen => EventStreamProviders.openEvent.forTarget(this);
+  Stream<MessageEvent> get onMessage =>
+      EventStreamProviders.messageEvent.forTarget(this);
+  Stream<CloseEvent> get onClose =>
+      EventStreamProviders.closeEvent.forTarget(this);
+  Stream<Event> get onError =>
+      EventStreamProviders.errorEventSourceEvent.forTarget(this);
+}
diff --git a/pkgs/web_socket_channel/pubspec.yaml b/pkgs/web_socket_channel/pubspec.yaml
index c772f4d..5c3b9cf 100644
--- a/pkgs/web_socket_channel/pubspec.yaml
+++ b/pkgs/web_socket_channel/pubspec.yaml
@@ -14,6 +14,7 @@
   async: ^2.5.0
   crypto: ^3.0.0
   stream_channel: ^2.1.0
+  web: ^0.4.0
 
 dev_dependencies:
   dart_flutter_team_lints: ^2.0.0
diff --git a/pkgs/web_socket_channel/test/html_test.dart b/pkgs/web_socket_channel/test/html_test.dart
index d444d7c..9d91025 100644
--- a/pkgs/web_socket_channel/test/html_test.dart
+++ b/pkgs/web_socket_channel/test/html_test.dart
@@ -6,12 +6,14 @@
 library;
 
 import 'dart:async';
-import 'dart:html';
+import 'dart:js_interop';
 import 'dart:typed_data';
 
 import 'package:async/async.dart';
 import 'package:test/test.dart';
+import 'package:web/helpers.dart' hide BinaryType;
 import 'package:web_socket_channel/html.dart';
+import 'package:web_socket_channel/src/web_helpers.dart';
 import 'package:web_socket_channel/web_socket_channel.dart';
 
 void main() {
@@ -176,6 +178,6 @@
 Future<List<int>> _decodeBlob(Blob blob) async {
   final reader = FileReader();
   reader.readAsArrayBuffer(blob);
-  await reader.onLoad.first;
-  return reader.result as Uint8List;
+  await reader.onLoadEnd.first;
+  return (reader.result as JSArrayBuffer).toDart.asUint8List();
 }
