Note: App Broadcasting requires the
app-broadcasting feature switch to be enabled on your instance. When the switch is off, all SDK methods are safe no-ops.When to use broadcasting
Use App Broadcasting when your apps need free-form, real-time coordination that goes beyond what page filters or variables provide:
Choose broadcasting when you need:
- Multiple independent channels between apps (e.g., selection events separate from configuration changes)
- Sticky state that late-mounting apps can read immediately
- Source identity — knowing which app sent a message
- Structured coordination declared in the manifest for discoverability
Architecture
- Host-mediated — All messages route through the Domo page (DomoWeb). Apps never see each other’s iframes or postMessage traffic directly.
- Per-page lifecycle — The bus is created when the first app mounts and cleared entirely on page navigation. Subscriptions and sticky values do not persist across pages.
- Broker-only — The host validates, stamps, rate-limits, and routes. It does not transform payloads.
Core concepts
Topics
A topic is a named string that identifies a message channel. Apps publish to and subscribe on topics.- Use
namespace:eventformat (e.g.,filter:region,chart:hover,config:theme) - Topics are exact strings — no wildcards
- Topics starting with
domo:are reserved for system events and cannot be used by apps
Messages
Every delivered message has this shape:sourceAppId is stamped by the host and cannot be spoofed. Use it to identify which app sent a message or to filter messages from a specific source.
Sticky messages
A sticky message is retained by the bus. When a new subscriber joins a sticky topic, it immediately receives the last published value — even if that value was published before the subscriber existed.Manifest declarations
Apps declare their broadcast channels inmanifest.json. Declarations serve three purposes:
- Discoverability — The App Store and wiring UIs show what an app publishes and subscribes to
- DevTools validation — The broadcasting inspector warns when an app uses undeclared topics
- Runtime enforcement — In production, the host rejects messages on undeclared topics
Security model
App Broadcasting enforces several security primitives at the host level:Reserved namespace
Topic names starting withdomo: are reserved for host-emitted system events. The SDK rejects these client-side before any message is sent, and the host rejects them server-side as a defense-in-depth measure.
Source identity
The host stamps every message with the publishing app’ssourceAppId. This value is derived from the iframe’s registration — apps cannot set or override it. Subscribers can trust msg.sourceAppId to identify the true sender.
Rate limiting
Each app instance is limited to 100 messages per second (configurable by instance admins). Messages exceeding this limit are rejected, and the SDK surfaces an error.Payload size
Each message payload is capped at 64 KB when serialized. Oversized payloads are rejected client-side by the SDK before reaching the bus.Page-scoped isolation
The bus exists only within a single page load. There is no cross-page communication, no persistence, and no way for apps on different pages to exchange messages. Navigating away clears all subscriptions and sticky state.Comparison with variables and filters
Rule of thumb: Use variables or filters when you need state that persists across navigation. Use broadcasting when you need real-time, topic-based coordination within a single page session.
Lifecycle
- Page loads — The bus is created (empty, no subscriptions)
- Apps mount — Each app subscribes to its declared topics via
domo.onBroadcast() - Messages flow — Apps publish and receive messages in real time
- Sticky replay — Late-mounting apps receive the last sticky value for each topic they subscribe to
- Page navigates — The bus is destroyed; all subscriptions and sticky state are cleared
Quick start
Publisher app (manifest.json):
app.js):
manifest.json):
app.js):
Next steps
- Broadcast SDK Reference — Full API documentation for
domo.broadcast(),domo.onBroadcast(), and helper methods - The Manifest File — Channel declaration schema
- Cross-App Broadcasting Tutorial — Step-by-step tutorial building a filter-and-chart coordination pattern