Title: ShopSocket
Author: wpsignal
Published: <strong>September 24, 2026</strong>
Last modified: September 25, 2026

---

Search plugins

![](https://ps.w.org/shopsocket/assets/banner-772x250.png?rev=3711333)

![](https://ps.w.org/shopsocket/assets/icon-256x256.png?rev=3711333)

# ShopSocket

 By [wpsignal](https://profiles.wordpress.org/wpsignal/)

[Download](https://downloads.wordpress.org/plugin/shopsocket.0.3.2.zip)

 * [Details](https://wordpress.org/plugins/shopsocket/#description)
 * [Reviews](https://wordpress.org/plugins/shopsocket/#reviews)
 *  [Installation](https://wordpress.org/plugins/shopsocket/#installation)
 * [Development](https://wordpress.org/plugins/shopsocket/#developers)

 [Support](https://wordpress.org/support/plugin/shopsocket/)

## Description

ShopSocket puts what is happening in your store on screen the moment it happens,
for staff and shoppers alike.

**For your team: the ShopSocket board**

A screen under WooCommerce that staff keep open all day.

 * Live orders: every new order lands on the board the instant it is placed, with
   a chime, and status changes update the row in place
 * Baskets, live and abandoned: how many shoppers hold a basket right now, how many
   have left with one still held, and the revenue in each
 * Products in live baskets: what shoppers on the site are holding at this moment,
   with the number of baskets and units for each, linking to the product’s edit 
   screen
 * Users online and open connections, straight from the relay
 * Low-stock and out-of-stock alerts as they happen
 * Full-screen mode for a wall display

Live and abandoned are not guesses from timestamps. A basket is live exactly while
its shopper has an open connection to the site, and flips to abandoned the instant
their last tab closes.

**For shoppers: the storefront**

 * Stock text on product pages updates in place when the product sells out or comes
   back, and the add-to-cart button follows
 * “N shoppers have this in their cart right now” under the price, kept current 
   as baskets change
 * “Someone just added this to their basket” toasts, shown only for products the
   shopper also holds
 * A shopper holding a product that sells out hears at once, wherever they are, 
   and the cart shows WooCommerce’s own notice without a reload
 * The Live Stock block: availability, units left, and the in-cart counter as one
   block for the Single Product template or any page
 * A card on WordSocket’s Extensions tab with the connection state and a link to
   the board

**How it works**

WordSocket carries the events over one WebSocket per browser, with an SSE fallback.
ShopSocket publishes order, stock, and basket events from WooCommerce’s own hooks,
and reads presence from the relay to tell live baskets from abandoned ones. The 
storefront never polls: it fetches once per page load and then only reacts to events.
The board does the same, plus a quiet refresh every 30 seconds as a safety net in
case an event is ever missed.

ShopSocket requires WordSocket and a WPSignal account. WPSignal is an independent
service and is not affiliated with or endorsed by the WordPress project or by WooCommerce.

**What leaves your site, and who can read it**

**Every event is encrypted before it leaves WordPress, and WPSignal cannot read 
it.** WordSocket encrypts the contents of every event with AES-256-GCM before it
is sent: always on HTTPS sites, and on plain HTTP sites too with WordSocket 0.25
or later (older versions encrypt only over HTTPS). The key is derived from your 
site’s own WordPress salts in wp-config.php, which never leave your server and which
WPSignal never has. The service relays ciphertext it has no way to open: it never
sees an order total, a customer name, a product, or a stock level.

What is inside those encrypted events:

 * Order events, on a staff-only channel: the order number, status, total, item 
   count, payment method, and the customer’s first name and last initial. No email,
   address, or line items.
 * Stock and basket-activity events, public to your storefront: product names, permalinks,
   thumbnails, and counts, plus the anonymous basket id of the shopper behind the
   change, so a shopper’s own adds and purchases are never announced back to them.

What the service does see, only because it needs it to route messages: channel names,
how many browsers are connected, and each shopper’s presence, which is a random 
per-browser id and a keyed hash identifying their basket. None of it is personal,
and none of it is reversible.

#### Third-Party Service

ShopSocket relies on the **WPSignal service** at api.wpsignal.io, reached through
the WordSocket plugin. ShopSocket opens no connection of its own: everything below
travels over the connection WordSocket already holds for your site.

 * **Event publishing**: when an order is placed or changes status, stock changes,
   or a product is added to a basket, WordSocket sends an HMAC-signed HTTP request
   to the service with the event described under “What leaves your site”.
 * **Realtime connections**: browsers on your storefront and the staff board connect
   to the service over WebSocket (or SSE) to receive those events. Shoppers’ browsers
   also announce their presence on the site, which is how the board tells a live
   basket from an abandoned one.
 * **Connection count**: the board asks the service how many browsers are connected
   to your site right now.

Events are relayed in realtime and are **not stored** on the service. Event contents
are AES-256-GCM encrypted before they leave WordPress (on HTTPS sites, and on plain
HTTP ones with WordSocket 0.25 or later), with a key derived from your site’s own
WordPress salts, so the service relays ciphertext it cannot read. A WPSignal account
is required; the free plan is enough to start.

 * [Terms of Service](https://wpsignal.io/terms)
 * [Privacy Policy](https://wpsignal.io/privacy)

#### Source code and build steps

ShopSocket is developed in the open. The full, uncompiled source for everything 
in `build/`, together with the build tooling, lives at [github.com/wpsignal/wordsocket-extensions](https://github.com/wpsignal/wordsocket-extensions)
under `shopsocket/`.

The compiled files in `build/` are generated from `src/` with:

    ```
    npm install
    npm run build
    ```

That runs [@wordpress/scripts](https://www.npmjs.com/package/@wordpress/scripts)(
webpack) for the board, settings and block bundles, and `tsc` for the Interactivity
API storefront modules. The bundled styles under `build/style-*.css` are produced
by that same build from [@wordpress/components](https://www.npmjs.com/package/@wordpress/components),
which is GPL-2.0-or-later.

## Screenshots

[⌊The Realtime board under Analytics, before the first shopper arrives.⌉⌊The Realtime
board under Analytics, before the first shopper arrives.⌉[

The Realtime board under Analytics, before the first shopper arrives.

[⌊The board with a busy store: users online, live and abandoned baskets with their
revenue, the products in live baskets, and orders as they are placed.⌉⌊The board
with a busy store: users online, live and abandoned baskets with their revenue, 
the products in live baskets, and orders as they are placed.⌉[

The board with a busy store: users online, live and abandoned baskets with their
revenue, the products in live baskets, and orders as they are placed.

[⌊A product page: live stock, how many shoppers hold the product right now, and 
a toast when someone else adds it.⌉⌊A product page: live stock, how many shoppers
hold the product right now, and a toast when someone else adds it.⌉[

A product page: live stock, how many shoppers hold the product right now, and a 
toast when someone else adds it.

[⌊The cart at the moment a held product sells out elsewhere: WooCommerce's own notice
appears without a reload, with ShopSocket's alert beside it.⌉⌊The cart at the moment
a held product sells out elsewhere: WooCommerce's own notice appears without a reload,
with ShopSocket's alert beside it.⌉[

The cart at the moment a held product sells out elsewhere: WooCommerce’s own notice
appears without a reload, with ShopSocket’s alert beside it.

[⌊The Live Stock block on an ordinary page: availability, units left, and the in-
cart count, all live.⌉⌊The Live Stock block on an ordinary page: availability, units
left, and the in-cart count, all live.⌉[

The Live Stock block on an ordinary page: availability, units left, and the in-cart
count, all live.

## Blocks

This plugin provides 1 block.

 *   Live Stock A product's availability and how many shoppers hold it, kept live
   over WordSocket.

## Installation

 1. Install and activate WooCommerce and WordSocket 0.23 or newer, and connect WordSocket
    to your WPSignal account.
 2. Install and activate ShopSocket.
 3. Open Analytics > Realtime for the board (WooCommerce > ShopSocket when WooCommerce
    Analytics is switched off). Product pages start updating on their own.

## FAQ

### Does it work with block themes?

Yes. The storefront features bind to the classic templates and to the Product Price
and Product Stock Indicator blocks. For markup that is yours to place, add the Live
Stock block to the Single Product template, or to any page with a product chosen.

### Does it work on a local site over plain HTTP?

Yes. The connection to the relay is always TLS, even from an `http://` page, and
with WordSocket 0.25 or later event contents are encrypted there too, so the relay
cannot read them. Older versions of WordSocket send them unencrypted on plain HTTP.
Use HTTPS in production regardless: it protects the page itself.

### Does it support High-Performance Order Storage?

Yes. ShopSocket declares HPOS compatibility and reads orders through WooCommerce’s
order API.

### Can I turn parts of it off?

Filters: `shopsocket_storefront` controls which pages load the live storefront (
every front-end page by default, so a shopper stays live wherever they browse), `
shopsocket_in_carts_enabled` the basket counter, `shopsocket_activity_enabled` the
added-to-basket toasts, `shopsocket_activity_throttle` how often one product may
announce an add, and `shopsocket_publish_stock` whether stock changes are published(
they are silent during imports).

### Who can see the board?

Users with the `manage_woocommerce` capability. Order and basket events travel on
a channel only their connection tokens can read.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“ShopSocket” is open source software. The following people have contributed to this
plugin.

Contributors

 *   [ wpsignal ](https://profiles.wordpress.org/wpsignal/)
 *   [ Jared Rethman ](https://profiles.wordpress.org/jaredrethman/)

[Translate “ShopSocket” into your language.](https://translate.wordpress.org/projects/wp-plugins/shopsocket)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/shopsocket/), check
out the [SVN repository](https://plugins.svn.wordpress.org/shopsocket/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/shopsocket/) by 
[RSS](https://plugins.trac.wordpress.org/log/shopsocket/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 0.3.2

 * Fixed: the extension registered its name and description before WordPress loads
   translations, which logged a notice with debugging enabled

#### 0.3.1

 * Fixed: a shopper who buys the last unit is no longer told it has sold out (stock
   events now carry the buyer’s anonymous basket id)
 * Fixed: the board’s logo no longer flashes at full screen width before its styles
   load
 * The readme spells out what leaves your site and what the relay can read

#### 0.3.0

 * The plugin is listed under WordSocket on the Plugins screen, where WordSocket
   0.24 and later keep the family together

#### 0.2.1

 * Requires WordSocket 0.23: the visitor id and channel check now come from WordSocket
 * Fixed: the Live Stock block’s in-cart count was missing on load on pages other
   than the product’s own
 * Works on plain HTTP sites

#### 0.2.0

 * First public release
 * The Realtime board under WooCommerce Analytics: users online, live and abandoned
   baskets from relay presence, products in live baskets with units, and live orders
   that update in place
 * Live stock on product pages, the shop, and the cart: availability text, add-to-
   cart buttons, quantity limits, and “N shoppers have this in their cart”
 * Sell-out notices: a shopper holding a product that sells out hears at once, and
   the cart shows WooCommerce’s own notice without a reload
 * “Someone just added this to their basket” toasts, shown only for products the
   shopper also holds
 * The Live Stock block for the Single Product template or any page
 * A card on WordSocket’s Extensions tab

## Meta

 *  Version **0.3.2**
 *  Last updated **4 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.7 or higher **
 *  Tested up to **7.1.2**
 *  PHP version ** 8.2 or higher **
 * Tags
 * [abandoned cart](https://wordpress.org/plugins/tags/abandoned-cart/)[inventory](https://wordpress.org/plugins/tags/inventory/)
   [realtime](https://wordpress.org/plugins/tags/realtime/)[woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/shopsocket/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/shopsocket/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/shopsocket/reviews/)

## Contributors

 *   [ wpsignal ](https://profiles.wordpress.org/wpsignal/)
 *   [ Jared Rethman ](https://profiles.wordpress.org/jaredrethman/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/shopsocket/)