Read this before connecting

This is a proof-of-concept, not the full Purple Team Arena. It demonstrates the Y.js + WebRTC pattern that a future production arena would build on. It is not the arena itself, and it should not be treated as one. No authentication, no persistence, no moderation, no rate-limiting.
External CDN exception: Nexus SecOps is normally a zero-external-dependency static site. This tool is the documented exception. It loads yjs@13.6.18 and y-webrtc@10.3.0 from cdn.jsdelivr.net. The <script> tags use Subresource Integrity (SRI) hashes for tamper detection.
SRI hashes are PLACEHOLDERS in this POC The integrity="sha384-PLACEHOLDER_VERIFY_BEFORE_PUBLICATION" attributes below are placeholders. Before deploying this page publicly, regenerate real SHA-384 SRI hashes for the exact pinned version URLs at srihash.org (or via openssl dgst -sha384 -binary file.mjs | openssl base64 -A) and replace the placeholder strings. With placeholders, modern browsers will refuse to execute the modules and the tool will silently fail — that is the intended fail-closed behavior until verification.
Public WebRTC signaling servers: The y-webrtc default signaling endpoints are wss://signaling.yjs.dev, wss://y-webrtc-signaling-eu.herokuapp.com, and wss://y-webrtc-signaling-us.herokuapp.com. Your room name is sent to those servers in plaintext. Anyone who knows your room name can join. Do not transmit real attack details, real IOCs, real credentials, or anything sensitive over this channel. All defaults below are clearly synthetic.
What a real arena needs (and this POC does not provide): self-hosted signaling (e.g. Cloudflare Workers WebSocket or a dedicated y-websocket server), TURN servers for NAT traversal in restrictive networks, persistent storage (y-leveldb / y-indexeddb), authentication tied to identity, room-level access control, abuse moderation, and observability. See the "what this POC does NOT do" list at the bottom.
Educational use only. Use this to understand how CRDTs make peer-to-peer state sync feel real-time without a central server. Use it for tabletop demos with synthetic data. Do not use it to coordinate real incident response or to share live threat intelligence.

Connection

Disconnected

Shared Whiteboard

Click and drag to draw. Strokes sync to all peers via Y.Array. Each user gets an auto-assigned color from an 8-color palette.

Your color: 0 strokes

Shared Threat Board

Synthetic data only. Use RFC 5737 IPs (192.0.2.x / 198.51.100.x / 203.0.113.x), example.com domains, and dummy hashes (e.g. aaaaaaaa...). Do not enter real IOCs.
No entries yet. Connect and add a synthetic IOC.

Connected Users

Real-time peer list via Y.Map presence channel. Updates as users connect and disconnect.

Not connected.

How it works

  • Y.Doc -- single shared CRDT document for the room.
  • Y.Array -- whiteboard strokes + threat board entries (ordered, append-mostly).
  • Y.Map -- presence channel keyed by client ID.
  • WebrtcProvider -- peer discovery via signaling, then direct P2P data channels.
  • No server holds state. When the last peer leaves, the room is gone.

What this POC does NOT do

Browser requirements

Chrome / Edge / Firefox / Safari recent versions. Requires: