A Widget Context Protocol (WCP) widget providing a full theme gallery and custom theme editor for WCP-compatible dashboards. Ships with 15 built-in themes (12 community + 3 Penrith Beacon WCP native) and allows unlimited custom themes, all shareable via URL.
Specification: widgetcontextprotocol.com | Part of the Penrith Beacon WCP widget suite.
WCP 2.1.0 certified. Full theme reception, orchestration-aware state, Publish to Web, WCP export.
| Component | Default size | Description |
|---|---|---|
| Theme Studio | 6x4 | Compact theme card with theme list |
| Theme Studio Full | Full page | 3-column gallery + editor |
| Theme Guide | Full page | Theme format documentation page |
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
services:
theme-studio:
image: docker.io/penrithbeacon/wcp-widget-theme-studio:latest
container_name: wcp-widget-theme-studio
ports:
- "3740:3740"
volumes:
- theme_data:/app/data
- ./published:/app/published
environment:
- CONTAINER_NAME=wcp-widget-theme-studio
restart: unless-stopped
volumes:
theme_data:
| Header | Required | Description |
|---|---|---|
Wcp-Instance-Id | Yes | Unique card instance identifier |
Wcp-Dashboard-Id | Yes | Dashboard installation identifier |
Wcp-Version | Yes | WCP protocol version of the requesting dashboard |
Wcp-Widget-Id | Yes | Widget identifier within the dashboard |
Wcp-Orchestration-Id | No | Active orchestration identifier (for state scoping) |
Wcp-Application-Id | No | Active application identifier (for state scoping) |
| Endpoint | Description |
|---|---|
GET /wcp | Container Directory — WCP two-tier discovery |
GET /widget/wcp | Widget Manifest with runtime publish status |
OPTIONS /wcp | CORS preflight (all widget routes) |
GET /widget/ | Compact theme card (iframe) |
GET /widget/index | Widget Index — lists all controls |
GET /widget/health | Health check with container name |
GET /widget/icon.svg | Widget icon (SVG) |
GET /widget/api/guids | Component UUIDs for orchestration binding |
GET /widget/full | Full Theme Studio (3-column gallery + editor) |
GET /widget/guide | Theme format documentation page |
GET /widget/manifest | Lightweight manifest subset |
GET /widget/themes/<id>.pbtheme.json | Download a theme as JSON |
GET /widget/api/themes | List all themes (built-in + custom) |
POST /widget/api/custom | Save a custom theme |
DELETE /widget/api/custom/<id> | Delete a custom theme |
GET /widget/api/export-wcpt/<id> | Export theme as .wcpt package |
GET /widget/export.wcp | Self-export as .wcp package |
POST /widget/publish | Accept SPA HTML for Publish to Web |
DELETE /widget/publish | Remove published SPA |
GET / | Serve published SPA (if present) |
| Property | Value |
|---|---|
| WCP Version | 2.1.0 |
| Widget Version | 1.7.0 |
| Render mode | iframe |
| Auth | None |
| Default card size | 6x4 |
| Multi-instance | Yes (global theme storage) |
| Property | Value |
|---|---|
| Base image | python:3.12-slim |
| Platforms | linux/amd64, linux/arm64 |
| Port | 3740 |
| Framework | Flask |
| Dependencies | Flask |
| Persistent storage | Named volume for custom themes |
| Tag | Description |
|---|---|
latest | Most recent stable release |
1.7.0-wcp2.1.0 | /widget/index directory page, audit compliance |
1.6.0-wcp2.1.0 | /widget/health returns container name |
1.5.0-wcp2.1.0 | WCP 2.1.0 upgrade, orchestration ID context |
1.4.0-wcp2.0.0 | Container block, manifest image source |
1.3.1-wcp1.4.0 | Server UUID, Container Directory, Wcp-Widget-Id |
1.3.0-wcp1.3.1 | CORS headers, multi-instance support |
1.2.0-wcp1.3.0 | Mandatory components array |
Content type
Image
Digest
sha256:4f76133f0…
Size
46.2 MB
Last updated
4 months ago
docker pull penrithbeacon/wcp-widget-theme-studio