Widget Context Protocol
Open Standard · v2.2.0

Embed widgets.
Share dashboards.
Build with AI.

WCP is a lightweight open protocol for running containerised widgets inside any host application — with portable themes, distributable apps, and an AI-assisted build chain.

Three concepts. Infinite combinations.

The entire WCP ecosystem is built from three orthogonal ideas.

📦

Widget

A Docker container that serves a compact UI at a known HTTP port. Stateless, sandboxed, and deployable anywhere Docker runs. The host embeds it in an iframe.

Docker · HTTP · iframe
⚙️

Agent

A native process on the host machine that extends widget capabilities — file access, OS APIs, process control. Widgets reach it via host.docker.internal.

Native · HTTP · localhost
🖥

Host

Any application that embeds widgets in a layout and routes postMessage themes and configuration to them. Penrith Beacon Design Studio is the reference host.

postMessage · themes · layout

Designed for the real world.

Six reasons teams choose WCP for their widget platform.

🐳

Docker-native

Every widget is a Docker container. Use any language or framework — if it serves HTTP, it's a WCP widget. Deploy anywhere Docker runs.

💬

postMessage protocol

Themes and configuration are pushed to widgets via the browser's postMessage API. No polling, no shared state, no coupling between host and widget code.

🎨

Theme portability

81 CSS custom properties. One JSON object. Any WCP-compliant widget or website instantly adopts any theme. Share themes as tiny .wcpt files.

📁

Distributable apps

A complete dashboard — widgets, layout, settings — ships as a single .wcpa application file. Recipients open it in any WCP host with one click.

🤖

AI-assisted pipeline

The WCP AI skill chain walks any AI coding assistant through design, build, test, and release. From idea to Docker Hub in a single AI session.

🔓

Open standard

WCP is free to implement. No licence, no registry, no lock-in. Build a host, build a widget, build a tool — the spec is the contract.

Your dashboard. In a file.

WCP defines two portable file formats so your work travels with you.

.wcpa

WCP Application

A complete dashboard snapshot — every widget, its layout, configuration, and settings — packaged into a single distributable file. Send a .wcpa to a colleague; they open it in Penrith Beacon and the entire application is live in seconds.

✓ Self-contained distributable
.wcpt

WCP Theme

A portable theme is just the 81 WCP CSS custom property values as JSON. Any WCP-compliant widget or website can receive and apply it instantly via postMessage or the theme engine. A complete theme is typically just a few kilobytes.

✓ A few kilobytes

Settings

About WCP Theme Portability

About .wcpt Theme Files

WCP Portability Specification

WCPP defines how WCP-based dashboard setups are bundled, transported, and reconstructed on a different machine. Where WCP handles runtime communication between widget and host, WCPP handles the packaging and distribution of those widget setups.

Importing a .wcpt file imports a theme using the .wcpt theme portability format defined in that specification.

Full specification: wcpp.widgetcontextprotocol.com

How to Create Your Own Custom Theme

The WCP Widget Theme Studio is a Docker container providing a full theme gallery and custom theme editor for WCP-compliant dashboards. It ships with 15 built-in themes and allows unlimited custom themes — all exportable as .wcpt files ready to import here, or shareable via URL.

Prerequisite: Docker Desktop must be installed before running the Studio. It is free for personal and small-team use:

www.docker.com/products/docker-desktop

The Studio is available free of charge on Docker Hub:

hub.docker.com/r/penrithbeacon/wcp-widget-theme-studio

Quick Start: With Docker Desktop running, open a terminal and paste:

docker run -d \
--name wcp-widget-theme-studio \
-p 3740:3740 \
-v theme_data:/app/data \
-v theme_published:/app/published \
-e CONTAINER_NAME=wcp-widget-theme-studio \
--restart unless-stopped \
docker.io/penrithbeacon/wcp-widget-theme-studio:latest

Once running, open http://localhost:3740 in your browser.

Applying a Theme via URL

The WCP Widget Theme Studio offers a second way to share a custom theme — one that requires no file download or manual import on the recipient’s part. Once a theme has been designed in the Studio, it can be exported directly as a URL parameter that carries the full theme inline.

Where the destination page has no existing query parameters, the Studio generates a complete query string beginning with ? that encodes the entire theme. Appending this to any WCP-aware URL causes the theme to be imported and applied automatically the moment the page loads.

Where the destination page already carries URL parameters, the Studio instead provides a single parameter ready to append with &, so the theme travels alongside existing query data without conflict.

Sharing a Theme via Web Address

What does this do?

Every theme you apply has a name and a set of colour and style choices. This feature lets you copy a special web address that carries your exact theme inside it. When someone else opens that link, the page automatically shows in your theme — without them having to find and apply it themselves.

Which version do I use?

Start of address (? …)

Use this when you are sharing a plain web address, for example https://hyperpolyglot.io. The theme information is added right after the page address, starting with a ?.

Add to existing address (& …)

Use this when the address you are sharing already has a ? somewhere in it. The theme information is added after whatever is already there, using an & to separate it. If you are not sure, look at the address in your browser — if you see a ? after the page name, use this version.

Will it work on any website?

No — only on websites that display the WCP Compliant badge. The badge means the website understands this kind of theme address and knows what to do with it. You will usually find the badge in the page footer.

On other websites the link will still open the page normally — it just will not change the colours.