{"id":285224,"date":"2026-03-30T21:03:29","date_gmt":"2026-03-30T21:03:29","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/signal\/"},"modified":"2026-04-03T23:26:30","modified_gmt":"2026-04-03T23:26:30","slug":"wordsocket","status":"publish","type":"plugin","link":"https:\/\/pcd.wordpress.org\/plugins\/wordsocket\/","author":23464980,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"0.13.2","stable_tag":"0.13.2","tested":"7.0","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"WordSocket","header_author":"WPSignal","header_description":"WordSocket is the official WordPress plugin for WPSignal (wpsignal.io).","assets_banners_color":"21242d","last_updated":"2026-04-03 23:26:30","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wpsignal.io\/wordsocket","header_author_uri":"https:\/\/wpsignal.io","rating":5,"author_block_rating":0,"active_installs":0,"downloads":129,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.13.0":{"tag":"0.13.0","author":"wpsignal","date":"2026-03-30 21:02:53"},"0.13.1":{"tag":"0.13.1","author":"wpsignal","date":"2026-03-31 02:22:53"},"0.13.2":{"tag":"0.13.2","author":"wpsignal","date":"2026-04-03 23:26:30"}},"upgrade_notice":{"0.13.1":"<p>Updated screenshots<\/p>","0.13.0":"<p>Exclude BETA.md from plugin build<\/p>","0.12.0":"<p>feat: skeleton preloader for app.feat: disable automatic authentication for non-ssl.fix: disable encryption when on non-ssl.<\/p>","0.11.0":"<p>feat: skeleton preloader for app.feat: disable automatic authentication for non-ssl.fix: disable encryption when on non-ssl.<\/p>","0.10.0":"<p>feat: skeleton preloader for app.\nfeat: disable automatic authentication for non-ssl.\nfix: disable encryption when on non-ssl.<\/p>","0.9.0":"<p>Fix: non-ssl default to manual authentication<\/p>","0.7.0":"<p>Adds one-click automatic connection, a Disconnect button, and per-site JWT secrets. No configuration changes required for existing connections. To use the automatic flow on a new site, go to WordSocket &gt; Settings &gt; Connection &gt; Automatic.<\/p>","0.6.0":"<p>Simplified settings UI: the Server URL field has been removed. Re-enter your API Key and click Connect if your site does not show as connected after upgrading.<\/p>","0.5.1":"<p>Fixes Yjs provider compatibility with WordPress 7.0 Beta 2, including collection-level sync (collaborative notes). No configuration changes required.<\/p>","0.5.0":"<p>Adds PHP filters for extending JWT channel access and fixes <code>subscribe()<\/code>\/<code>unsubscribe()<\/code> on SSE connections. No configuration changes required.<\/p>","0.4.0":"<p>Adds relay-blind AES-256-GCM encryption for all event payloads. No configuration required: encryption is automatic after connecting. The WPSignal relay never has access to plaintext message content.<\/p>","0.3.0":"<p>Adds real-time collaborative editing support for WordPress 7.0+. No configuration changes required: the collaboration provider is enabled by default and can be toggled from WordSocket &gt; Settings.<\/p>","0.2.0":"<p>Major update with new admin UI, custom triggers, and public JS API. Existing installations will continue to work: no configuration changes required.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.gif":{"filename":"icon-128x128.gif","revision":3495083,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3495083,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3495083,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3495083,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.13.0","0.13.1","0.13.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3494957,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3494957,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3494957,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3494957,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3494957,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3494957,"resolution":"6","location":"assets","locale":""}},"screenshots":{"1":"Settings page (Connection tab): Automatic connection mode with a \"Connect with WPSignal\" button, and a toggle to register WordSocket as the Yjs sync provider for real-time collaboration.","2":"WPSignal dashboard authorization screen: one-click OAuth-style prompt to authorize a WordPress site and link it to your WPSignal account.","3":"Settings page (connected): active connection confirmed with site key, Disconnect button, and real-time collaboration toggle enabled.","4":"Settings page (Triggers tab): no-code trigger builder for Post Type and Option events, with channel and event name fields and a \"Triggers saved\" confirmation.","5":"Explorer page (top): connection status panel showing server URL, site key, and live health check result, plus the Registered Triggers table listing all active hooks, priorities, and channels.","6":"Explorer page (bottom): Live Event Log showing a live WebSocket connection and an incoming encrypted event, alongside the Publish Test Event form with channel, event name, and JSON data fields."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[6389,1486,7290,3518,190408],"plugin_category":[40],"plugin_contributors":[259048],"plugin_business_model":[],"class_list":["post-285224","plugin","type-plugin","status-publish","hentry","plugin_tags-collaboration","plugin_tags-events","plugin_tags-push","plugin_tags-realtime","plugin_tags-websocket","plugin_category-calendar-and-events","plugin_contributors-wpsignal","plugin_committers-wpsignal"],"banners":{"banner":"https:\/\/ps.w.org\/wordsocket\/assets\/banner-772x250.png?rev=3495083","banner_2x":"https:\/\/ps.w.org\/wordsocket\/assets\/banner-1544x500.png?rev=3495083","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/wordsocket\/assets\/icon-128x128.gif?rev=3495083","icon_2x":"https:\/\/ps.w.org\/wordsocket\/assets\/icon-256x256.gif?rev=3495083","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/wordsocket\/assets\/screenshot-1.png?rev=3494957","caption":"Settings page (Connection tab): Automatic connection mode with a \"Connect with WPSignal\" button, and a toggle to register WordSocket as the Yjs sync provider for real-time collaboration."},{"src":"https:\/\/ps.w.org\/wordsocket\/assets\/screenshot-2.png?rev=3494957","caption":"WPSignal dashboard authorization screen: one-click OAuth-style prompt to authorize a WordPress site and link it to your WPSignal account."},{"src":"https:\/\/ps.w.org\/wordsocket\/assets\/screenshot-3.png?rev=3494957","caption":"Settings page (connected): active connection confirmed with site key, Disconnect button, and real-time collaboration toggle enabled."},{"src":"https:\/\/ps.w.org\/wordsocket\/assets\/screenshot-4.png?rev=3494957","caption":"Settings page (Triggers tab): no-code trigger builder for Post Type and Option events, with channel and event name fields and a \"Triggers saved\" confirmation."},{"src":"https:\/\/ps.w.org\/wordsocket\/assets\/screenshot-5.png?rev=3494957","caption":"Explorer page (top): connection status panel showing server URL, site key, and live health check result, plus the Registered Triggers table listing all active hooks, priorities, and channels."},{"src":"https:\/\/ps.w.org\/wordsocket\/assets\/screenshot-6.png?rev=3494957","caption":"Explorer page (bottom): Live Event Log showing a live WebSocket connection and an incoming encrypted event, alongside the Publish Test Event form with channel, event name, and JSON data fields."}],"raw_content":"<!--section=description-->\n<p>WordSocket sends realtime events from your WordPress site to connected browsers.\nWhen content changes: a post is published, a comment is approved, an option is updated: the plugin pushes the event to subscribers instantly via WebSocket (with SSE fallback).<\/p>\n\n<p>On WordPress 7.0+, WordSocket also registers as a WebSocket-based Yjs sync provider for real-time collaborative editing in the block editor, replacing the default HTTP polling transport with a low-latency WebSocket connection.<\/p>\n\n<p>WPSignal is an independent service and is not affiliated with or endorsed by the WordPress project.<\/p>\n\n<p><strong>Features:<\/strong><\/p>\n\n<ul>\n<li>One-click automatic connection via the WPSignal dashboard (no API key required)<\/li>\n<li>Manual connection via API key for self-hosted or advanced setups<\/li>\n<li>Disconnect button with inline confirmation, removes the site from the server immediately<\/li>\n<li>WebSocket-first with automatic SSE fallback<\/li>\n<li>Per-site JWT signing secrets: each site's connection tokens are cryptographically isolated<\/li>\n<li>AES-256-GCM encrypted event payloads: the WPSignal relay receives ciphertext only and never has access to plaintext message content<\/li>\n<li>Real-time collaborative editing in the block editor (WordPress 7.0+, via Yjs sync provider)<\/li>\n<li>Admin toggle to disable the collaboration provider and fall back to WordPress HTTP polling<\/li>\n<li>Built-in triggers for post updates and custom post types<\/li>\n<li>Custom trigger builder: map any WordPress action hook to a realtime event<\/li>\n<li>Public JavaScript API (<code>window.WPS<\/code>) for themes and plugins to share the connection<\/li>\n<li>Extensible connection token: <code>wpsignal_token_channels<\/code> and <code>wpsignal_token_channel_prefixes<\/code> filters let other plugins add channels and namespace permissions to the JWT without modifying core<\/li>\n<li>Admin explorer page with live event log, publish form, and token inspector<\/li>\n<li>Short-lived JWTs (5 min) with automatic refresh<\/li>\n<\/ul>\n\n<p><strong>How it works:<\/strong><\/p>\n\n<ol>\n<li>Install the plugin and connect to the WPSignal service.<\/li>\n<li>When content changes in WordPress, the plugin encrypts and publishes an HMAC-signed event to the WPSignal server.<\/li>\n<li>The server pushes the ciphertext to all browsers subscribed to that channel.<\/li>\n<li>The browser decrypts the payload and dispatches <code>wpsignal:*<\/code> DOM events. The relay never sees plaintext content.<\/li>\n<li>On WordPress 7.0+, the block editor uses the same WebSocket connection for collaborative editing with no extra configuration.<\/li>\n<\/ol>\n\n<h4>Third-Party Service<\/h4>\n\n<p>This plugin connects to the <strong>WPSignal service<\/strong> at <a href=\"https:\/\/api.wpsignal.io\">api.wpsignal.io<\/a> for the following operations:<\/p>\n\n<ul>\n<li><strong>Site registration<\/strong>: when you connect in the admin (via the automatic one-click flow or by entering an API key manually), the plugin registers your site with the server and receives credentials.<\/li>\n<li><strong>Event publishing<\/strong>: when a trigger fires (e.g. a post is saved), the plugin sends an encrypted, HMAC-signed HTTP request to the server.<\/li>\n<li><strong>Realtime connections<\/strong>: logged-in users' browsers connect to the server via WebSocket or SSE to receive events.<\/li>\n<li><strong>Collaborative editing<\/strong>: on WordPress 7.0+, Yjs document updates are relayed over the same WebSocket connection.<\/li>\n<\/ul>\n\n<p>Event payloads are AES-256-GCM encrypted before leaving WordPress. The WPSignal server relays ciphertext and never has access to plaintext message content. Data is delivered in realtime and is <strong>not persisted<\/strong> on the server.<\/p>\n\n<ul>\n<li><a href=\"https:\/\/wpsignal.io\/terms\">Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/wpsignal.io\/privacy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h3>Building from source<\/h3>\n\n<p>The JavaScript files distributed with this plugin (<code>build\/client.js<\/code>, <code>build\/settings.js<\/code>, <code>build\/explorer.js<\/code>, <code>build\/yjs-provider.js<\/code>) are compiled from TypeScript source using <code>@wordpress\/scripts<\/code> (webpack). The full source code is publicly available:<\/p>\n\n<ul>\n<li>Source repository: https:\/\/github.com\/wpsignal\/wordsocket<\/li>\n<\/ul>\n\n<p>To build locally:<\/p>\n\n<ol>\n<li>Clone or download the repository.<\/li>\n<li>Navigate to the <code>wp-plugin\/<\/code> directory.<\/li>\n<li>Run <code>npm install<\/code> to install dependencies.<\/li>\n<li>Run <code>npm run build<\/code> to compile all scripts to <code>build\/<\/code>.<\/li>\n<\/ol>\n\n<p>Source entry points:<\/p>\n\n<ul>\n<li><code>src\/client.ts<\/code> compiles to <code>build\/client.js<\/code><\/li>\n<li><code>src\/settings\/index.tsx<\/code> compiles to <code>build\/settings.js<\/code><\/li>\n<li><code>src\/explorer.ts<\/code> compiles to <code>build\/explorer.js<\/code><\/li>\n<li><code>src\/yjs-provider-boot.ts<\/code> compiles to <code>build\/yjs-provider.js<\/code><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>wordsocket<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install directly from the WordPress plugin directory.<\/li>\n<li>Activate the plugin through the \"Plugins\" menu in WordPress.<\/li>\n<li>Go to <strong>WordSocket &gt; Settings &gt; Connection<\/strong>.<\/li>\n<li>Choose a connection method:\n\n<ul>\n<li><strong>Automatic (recommended):<\/strong> Click <strong>Connect with WPSignal<\/strong>. You will be redirected to the WPSignal dashboard to authorize the connection. No API key entry required.<\/li>\n<li><strong>Manual:<\/strong> Switch to the Manual tab, paste your API key, and click <strong>Save Settings<\/strong>.<\/li>\n<\/ul><\/li>\n<li>The plugin registers with the server and saves credentials automatically.<\/li>\n<\/ol>\n\n<p>To create an account, visit <a href=\"https:\/\/wpsignal.io\">wpsignal.io<\/a>.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20is%20wpsignal%3F\"><h3>What is WPSignal?<\/h3><\/dt>\n<dd><p>WPSignal is a realtime event delivery service for WordPress. It pushes events from your site to connected browsers the moment they happen, without polling.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20wpsignal.io%20account%3F\"><h3>Do I need a wpsignal.io account?<\/h3><\/dt>\n<dd><p>Yes. The plugin requires a WPSignal server to relay events. You can use the hosted service at wpsignal.io (free account available) or run your own server.<\/p><\/dd>\n<dt id=\"what%20data%20is%20sent%20to%20the%20wpsignal%20server%3F\"><h3>What data is sent to the WPSignal server?<\/h3><\/dt>\n<dd><p>During registration: your site URL and name. During normal operation: AES-256-GCM encrypted event payloads (the server never sees plaintext content). On WordPress 7.0+, Yjs document updates (binary diffs of block editor content) are also relayed. All data is delivered in realtime and is not stored on the server. See our <a href=\"https:\/\/wpsignal.io\/privacy\">Privacy Policy<\/a> for full details.<\/p><\/dd>\n<dt id=\"are%20my%20event%20payloads%20private%3F\"><h3>Are my event payloads private?<\/h3><\/dt>\n<dd><p>Event payloads are encrypted with AES-256-GCM before leaving WordPress. The encryption key is derived from your WordPress salts and site key using HKDF-SHA256, and is never sent to the WPSignal server. This means the relay cannot read your message content. Note: all logged-in users on the same site share the same derived key. Per-user message privacy is out of scope for the current version.<\/p><\/dd>\n<dt id=\"can%20i%20use%20this%20with%20a%20self-hosted%20server%3F\"><h3>Can I use this with a self-hosted server?<\/h3><\/dt>\n<dd><p>Yes. Enter your server URL in <strong>WordSocket &gt; Settings<\/strong> instead of the default <code>api.wpsignal.io<\/code>.<\/p><\/dd>\n<dt id=\"does%20this%20work%20for%20logged-out%20visitors%3F\"><h3>Does this work for logged-out visitors?<\/h3><\/dt>\n<dd><p>The built-in client script loads for logged-in users by default. You can enqueue the script for all visitors by adding <code>wpsignal<\/code> as a dependency to your own script.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20websocket%20is%20unavailable%3F\"><h3>What happens if WebSocket is unavailable?<\/h3><\/dt>\n<dd><p>The client falls back to SSE for receiving events. <code>window.WPS.subscribe()<\/code> and <code>window.WPS.unsubscribe()<\/code> work on SSE connections: channel changes are tracked and applied immediately via a lightweight SSE reconnect (50 ms debounce). For collaborative editing, the plugin detects the fallback and emits a \"not synced\" status so WordPress can surface the appropriate indicator. You can also disable the collaboration provider entirely from <strong>WordSocket &gt; Settings &gt; Connection<\/strong> to restore WordPress HTTP polling for all editors.<\/p><\/dd>\n<dt id=\"does%20collaborative%20editing%20require%20wordpress%207.0%3F\"><h3>Does collaborative editing require WordPress 7.0?<\/h3><\/dt>\n<dd><p>Yes. The Yjs sync provider integration requires WordPress 7.0 or later. The plugin detects the WordPress version and only registers the provider when <code>@wordpress\/sync<\/code> is available.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.13.1<\/h4>\n\n<ul>\n<li>Updated screenshots<\/li>\n<\/ul>\n\n<h4>0.13.0<\/h4>\n\n<ul>\n<li>Exclude BETA.md from plugin build<\/li>\n<\/ul>\n\n<h4>0.12.0<\/h4>\n\n<ul>\n<li>feat: skeleton preloader for app.feat: disable automatic authentication for non-ssl.fix: disable encryption when on non-ssl.<\/li>\n<\/ul>\n\n<h4>0.9.0<\/h4>\n\n<ul>\n<li>Fix: non-ssl default to manual authentication<\/li>\n<\/ul>\n\n<h4>0.8.0<\/h4>\n\n<ul>\n<li>Improved: Connections UI. Reduced connections from 2 to 1 on connections page.<\/li>\n<li>Fix: option key change for RTC enabled.<\/li>\n<\/ul>\n\n<h4>0.7.0<\/h4>\n\n<ul>\n<li>New: Automatic connection flow. Admins can connect via the WPSignal dashboard with a single click, without entering an API key. Uses a CSRF-protected OAuth-style code exchange.<\/li>\n<li>New: Disconnect button in the Connection tab. Removes the site from the WPSignal server and clears all local credentials, with inline confirmation before proceeding.<\/li>\n<li>New: Per-site JWT signing secrets. Each site's connection tokens are now signed with a unique secret, isolating sites cryptographically and eliminating cross-site token forgery risk.<\/li>\n<li>Improved: Connection tab redesigned with Automatic and Manual sub-tabs to clearly separate the two connection methods.<\/li>\n<li>Improved: Disconnect works correctly regardless of how the site was connected: API key authentication for manual connections, publish-secret authentication for automatic connections.<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li>New: Plugin renamed to \"WordSocket\" to comply with WordPress.org plugin directory guidelines.<\/li>\n<li>Improved: Settings Connection tab revamped: server URL field removed, flow simplified to API Key entry and a single Connect action.<\/li>\n<li>Improved: API key validated client-side before attempting connection.<\/li>\n<li>Improved: Connection tab now surfaces WordPress real-time collaboration (RTC) availability and WP version compatibility, with clearer, more descriptive warnings when collaborative editing is unavailable.<\/li>\n<li>Improved: PHP documentation blocks updated across all core classes for better tooling and doc parser support.<\/li>\n<li>Developer: <code>.pot<\/code> language file added (<code>eventra-for-wpsignal.pot<\/code>).<\/li>\n<\/ul>\n\n<h4>0.5.1<\/h4>\n\n<ul>\n<li>Fixed: WordPress 7.0 Beta 2 compatibility for the Yjs sync provider. Collection-level providers (e.g. collaborative notes) receive a null <code>objectId<\/code>; the provider now maps this to a shared <code>\"collection\"<\/code> channel suffix so all peers join the same channel.<\/li>\n<li>Fixed: <code>ProviderCreatorOptions<\/code> type updated to accept <code>objectId: string | number | null<\/code>, matching the Beta 2 provider creator API.<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>New: <code>wpsignal_token_channels<\/code> filter: plugins can append channels to the initial auto-subscribe list in the minted JWT.<\/li>\n<li>New: <code>wpsignal_token_channel_prefixes<\/code> filter: plugins can add channel-prefix permissions to the JWT <code>allowed_channel_prefixes<\/code> claim, enabling server-enforced access to custom channel namespaces.<\/li>\n<li>Improved: <code>window.WPS.subscribe()<\/code> and <code>window.WPS.unsubscribe()<\/code> now work on SSE connections. Channel changes are tracked in a persistent set and applied immediately via a debounced SSE reconnect, so plugins that call these methods do not need to know the current transport.<\/li>\n<li>Developer: <code>forceSSE<\/code> config flag available for testing the SSE transport without browser tooling.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>New: AES-256-GCM encrypted event payloads. The WPSignal relay receives and forwards ciphertext only: plaintext message content never leaves WordPress.<\/li>\n<li>New: Encryption key derived from WordPress salts and site key via HKDF-SHA256. Key is never transmitted to the WPSignal server.<\/li>\n<li>New: <code>wpsignal_encryption_seed<\/code> filter for plugins and themes to supply custom key material.<\/li>\n<li>New: <code>SubtleCrypto<\/code> decryption in the browser client: events are dispatched only after successful decryption.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>New: Real-time collaborative editing in the block editor (WordPress 7.0+) via Yjs WebSocket sync provider.<\/li>\n<li>New: <code>publishBinary()<\/code> and <code>onBinaryMessage()<\/code> methods on <code>window.WPS<\/code> for binary WebSocket frames.<\/li>\n<li>New: <code>transport<\/code> property on <code>window.WPS<\/code> exposes the current connection type (<code>'ws'<\/code>, <code>'sse'<\/code>, or <code>null<\/code>).<\/li>\n<li>New: Admin toggle in Settings to enable or disable the real-time collaboration provider independently.<\/li>\n<li>Improved: Collaboration provider emits <code>disconnected<\/code> status when WebSocket is unavailable, allowing WordPress to show its \"not synced\" indicator.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>New: Custom trigger builder: register triggers from the admin UI without code.<\/li>\n<li>New: Settings page rebuilt as a React app with Connection and Triggers tabs.<\/li>\n<li>New: Explorer (Kitchen Sink) admin page with 5 interactive panels.<\/li>\n<li>New: Public JavaScript API (<code>window.WPS<\/code>): subscribe, publish, event listeners.<\/li>\n<li>New: <code>WPS::trigger()<\/code> fluent builder and <code>WPS::publish()<\/code> facade methods.<\/li>\n<li>New: Support for self-hosted servers (configurable server URL).<\/li>\n<li>Improved: OOP architecture with PSR-4 autoloading under the <code>WPSignal<\/code> namespace.<\/li>\n<li>Improved: TypeScript source with <code>@wordpress\/scripts<\/code> build pipeline.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"WordSocket is the official WordPress plugin for WPSignal (wpsignal.io), a third-party WebSocket\/SSE delivery service.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/285224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=285224"}],"author":[{"embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wpsignal"}],"wp:attachment":[{"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=285224"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=285224"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=285224"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=285224"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=285224"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pcd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=285224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}