From e1a75454c6ef505040be773c2d0cceeeb4559dff Mon Sep 17 00:00:00 2001 From: Mitch Lillie Date: Tue, 22 Sep 2026 10:02:17 -0700 Subject: [PATCH 1/2] Deprecate DOMRemoteReceiver --- .changeset/deprecate-dom-receiver.md | 5 +++++ packages/core/README.md | 2 ++ .../source/receivers/DOMRemoteReceiver.ts | 19 +++++++++++++++++-- 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 .changeset/deprecate-dom-receiver.md diff --git a/.changeset/deprecate-dom-receiver.md b/.changeset/deprecate-dom-receiver.md new file mode 100644 index 00000000..e58a6cbc --- /dev/null +++ b/.changeset/deprecate-dom-receiver.md @@ -0,0 +1,5 @@ +--- +'@remote-dom/core': patch +--- + +Deprecate `DOMRemoteReceiver`. Use `RemoteReceiver` or a framework-specific receiver instead. diff --git a/packages/core/README.md b/packages/core/README.md index 0243d3f3..594f97bb 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -647,6 +647,8 @@ receiver.get(receiver.root) === receiver.root; // true #### `DOMRemoteReceiver` +> **Deprecated:** `DOMRemoteReceiver` is no longer recommended for new code. Use `RemoteReceiver` or a framework-specific receiver instead. + `DOMRemoteReceiver` takes care of mapping remote elements to matching HTML elements on the host page. If you implement your UI with [custom elements](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements), `DOMRemoteReceiver` is a simple option that avoids much of the manual work required when using the basic `RemoteReceiver`. An empty remote receiver can be created using the `DOMRemoteReceiver` constructor. You’ll then call the `connect()` method with the HTML element that will serve as your “root” element, to which all the synchronized remote elements will be attached: diff --git a/packages/core/source/receivers/DOMRemoteReceiver.ts b/packages/core/source/receivers/DOMRemoteReceiver.ts index 9efd4e66..45b3b04d 100644 --- a/packages/core/source/receivers/DOMRemoteReceiver.ts +++ b/packages/core/source/receivers/DOMRemoteReceiver.ts @@ -15,7 +15,11 @@ import type {RemoteReceiverOptions} from './shared.ts'; const REMOTE_PROPERTIES = new WeakMap>(); const REMOTE_EVENT_LISTENERS = new WeakMap>(); -/** Host-owned configuration for a property and its corresponding attribute. */ +/** + * Host-owned configuration for a property and its corresponding attribute. + * + * @deprecated `DOMRemoteReceiver` is no longer recommended. + */ export interface DOMRemotePropertyPolicy { /** Checks non-nullish property values without coercion. */ readonly type?: @@ -29,7 +33,11 @@ export interface DOMRemotePropertyPolicy { readonly attribute?: string | boolean; } -/** Host-owned capabilities exposed to the remote for one element name. */ +/** + * Host-owned capabilities exposed to the remote for one element name. + * + * @deprecated `DOMRemoteReceiver` is no longer recommended. + */ export interface DOMRemoteElementPolicy { readonly properties?: Readonly>; /** Additional attribute-only names, independent of property definitions. */ @@ -39,6 +47,10 @@ export interface DOMRemoteElementPolicy { readonly methods?: readonly string[]; } +/** + * @deprecated `DOMRemoteReceiver` is no longer recommended. Use `RemoteReceiver` + * or a framework-specific receiver instead. + */ export interface DOMRemoteReceiverOptions extends RemoteReceiverOptions { /** * The root element for this receiver. This acts as a shortcut for calling @@ -132,6 +144,9 @@ const SCRIPT_URL = * on the host page. If you implement your UI with [custom elements](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements), * `DOMRemoteReceiver` is a simple option that avoids much of the * manual work required when using the basic `RemoteReceiver`. + * + * @deprecated `DOMRemoteReceiver` is no longer recommended. Use `RemoteReceiver` + * or a framework-specific receiver instead. */ export class DOMRemoteReceiver { /** From 54fbefc69bf4a688866368f37288eef5fb761da4 Mon Sep 17 00:00:00 2001 From: Mitch Lillie Date: Tue, 22 Sep 2026 10:11:57 -0700 Subject: [PATCH 2/2] Deprecate RemoteReceiverElement --- .changeset/deprecate-dom-receiver.md | 2 +- packages/core/README.md | 2 +- packages/core/source/elements/RemoteReceiverElement.ts | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.changeset/deprecate-dom-receiver.md b/.changeset/deprecate-dom-receiver.md index e58a6cbc..ea40a88b 100644 --- a/.changeset/deprecate-dom-receiver.md +++ b/.changeset/deprecate-dom-receiver.md @@ -2,4 +2,4 @@ '@remote-dom/core': patch --- -Deprecate `DOMRemoteReceiver`. Use `RemoteReceiver` or a framework-specific receiver instead. +Deprecate `DOMRemoteReceiver` and `RemoteReceiverElement`. Use `RemoteReceiver` or a framework-specific receiver instead. diff --git a/packages/core/README.md b/packages/core/README.md index 594f97bb..28e3c7ee 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -740,7 +740,7 @@ This list is copied at construction, applies case-insensitively to every element By default, calls on the root are denied. An explicit `call(element, method, ...args)` callback overrides method policy, including for the root. It must enforce its own allowlist and validate arguments; do not forward arbitrary method names to the DOM. -For the `` custom element, configure a host-side subclass before registering it: +For the `` custom element, configure a host-side subclass before registering it. This API is deprecated; use `RemoteReceiver` or a framework-specific receiver instead for new code. ```ts import {RemoteReceiverElement} from '@remote-dom/core/elements'; diff --git a/packages/core/source/elements/RemoteReceiverElement.ts b/packages/core/source/elements/RemoteReceiverElement.ts index ebfa796d..1f0c4fd6 100644 --- a/packages/core/source/elements/RemoteReceiverElement.ts +++ b/packages/core/source/elements/RemoteReceiverElement.ts @@ -9,6 +9,9 @@ import { * a `RemoteReceiverElement` and use its `connection` property to connect * it to a remote environment * + * @deprecated `RemoteReceiverElement` is no longer recommended. Use `RemoteReceiver` + * or a framework-specific receiver instead. + * * @example * ```ts * import {RemoteReceiverElement} from '@remote-dom/core/elements';