The io.Connect platform provides several ways for apps to communicate and share data, from simple broadcasts to request/response calls, user-driven context linking, and continuous streaming. Each option has its own model, scope, and persistence rules that work best in different use cases and scenarios.
The table below is a cheat sheet that lines Interop Methods, Intents, Streams, Pub/Sub, Shared Contexts, Channels, Workspace Contexts, and Window Context side-by-side. The goal isn’t to teach each one in depth, but to help compare them quickly and choose the right tool for your workflow. If you’re looking for full explanations and examples (like how Shared Contexts differ from Workspace Contexts, or how Channels give users control), see the dedicated pages in the docs.
| Interop Methods | Intents | Streams | Pub/Sub | Shared Contexts | Color Channels | Workspace Contexts | Window Context | |
|---|---|---|---|---|---|---|---|---|
| Communication Model | Request-Response | Request-Response | Streaming | Broadcast | Broadcast | Broadcast | Broadcast | Window-specific |
| Publish Data | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ * Based on Channel Restrictions | ✅ | ❌* Not intended for dynamic interop |
| Read Data | ✅* Servers could restrict access to data | ✅* Servers could restrict access to data | ✅* Servers could restrict access to data | ✅ | ✅ | ✅* Based on Channel Restrictions | ✅ | ❌* Not intended for dynamic interop |
| Discovery | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ |
| User Controlled | ❌ | ✅* Users are responsible for resolving ambiguous Intents through the Intents Resolver UI | ❌ | ❌ | ❌ | ✅* Users assign Application Instances to Color Channels | ✅* Users control the Workspace grouping of Windows | ❌ |
| Defined Statically | ❌ | ✅* Intents could also be defined dynamically | ❌ | ❌ | ❌ | ❌ | ✅* Could be defined as part of a Workspace Layout | ✅* Could be defined as part of a Global Layout |
| Global | ✅ | ✅ | ✅ | ✅ | ✅ | ❌* By design, scoped to the Application Instances joined on the same Color Channel | ❌* By design, scoped to the Applications Instances within a Workspace | ❌ |
| Persistence Across Restarts | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅* Data could be persisted as part of a Workspace Layout | ✅* Data could be persisted as part of a Global Layout |
| Persistent (remains available if the server disconnects) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅* The Workspaces Application could automatically destroy a Workspace Context when the Workspace is closed, based on configuration | ❌ |
| Reannouncement (e.g., after a machine state change) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
| Caller/Updater Identification | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| One-to-One or Many | One-to-many | One-to-one | One-to-many | One-to-many | One-to-many | One-to-many | One-to-many | One-to-one |
| Instance Launch Capability | ❌ | ✅* Can launch new Instances of Applications, if needed | ❌ | ❌ | ❌ | ❌ | ❌ | ✅* Can be provided as an initial context by the launching Application Instance via the AppManager API |
| io.Connect API |
methods() register() invoke() unregister() … |
all() register() raise() … |
createStream() stream.push() subscribe() stream.close() … |
publish() subscribe()
|
all() set() get() subscribe() … |
all() join() publish() subscribe() … |
workspace.setContext() workspace.updateContext() workspace.getContext() workspace.onContextUpdated()
|
window.setContext() window.updateContext() window.getContext() window.onContextUpdated()
|
| Interception | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| FDC3 API Mapping | ❌ | Intents | Private Channels | ❌ | App Channels | User Channels | ❌ | ❌ |
[details="For those who don't like tables (ChatGPT and Claude looking at you), click here"]
Interop Methods
Has: publish & read; request-response; discovery; global; one-to-many; caller/updater ID; reannouncement.
Lacks: user control, static definition, persistence across restarts, persistence if the server disconnects, instance launch, interception, FDC3 mapping.
Note: read access may be restricted by the server.
API: methods(), register(), invoke(), unregister(), …
Learn more:
https://docs.interop.io/desktop/capabilities/data-sharing/interop/javascript/index.html#method_registration
https://community.interop.io/t/key-io-connect-integration-concepts-explained/255#interop-methods-streams-service-reuse-and-data-feeds
Intents
Has: raise & handle (publish/read); request-response; discovery; user-controlled resolver UI when ambiguous; can be defined statically (also supports dynamic); global; one-to-one at execution; caller/updater ID; reannouncement; can launch a new app instance; interception supported.
Lacks: persistence across restarts, persistence if the server disconnects.
Note: read access may be restricted by the server.
FDC3: Intents.
API: all(), register(), raise(), …
Learn more:
https://docs.interop.io/desktop/capabilities/data-sharing/intents/overview/index.html
https://community.interop.io/t/key-io-connect-integration-concepts-explained/255#intents-allow-users-to-select-actions
Streams
Has: publish (push) & read (subscribe); streaming; discovery; global; one-to-many; caller/updater ID; reannouncement.
Lacks: user control, static definition, persistence across restarts, persistence if the server disconnects, instance launch, interception.
Note: read access may be restricted by the server.
FDC3: Private Channels.
API: createStream(), stream.push(), subscribe(), stream.close(), …
Learn more:
https://docs.interop.io/desktop/capabilities/data-sharing/interop/javascript/index.html#streaming
https://community.interop.io/t/key-io-connect-integration-concepts-explained/255#interop-methods-streams-service-reuse-and-data-feeds
Window Context
Has: window-specific (not global); one-to-one; can be defined statically in a Global Layout; can persist across restarts via Global Layout; reannouncement; can be supplied as initial context when launching via AppManager.
Lacks: dynamic publish/read (not meant for dynamic interop), discovery, user control, global scope, persistence if the server disconnects, caller/updater ID, interception, FDC3 mapping.
API: window.setContext(), window.updateContext(), window.getContext(), window.onContextUpdated()
Learn more:
https://docs.interop.io/desktop/capabilities/windows/window-management/javascript/index.html#context
https://community.interop.io/t/key-io-connect-integration-concepts-explained/255#window-context
Pub/Sub
Has: publish & read; broadcast; global scope; one-to-many; caller/updater ID.
Lacks: discovery, user control, static definition, persistence across restarts, persistence if the server disconnects, reannouncement, instance launch, interception, FDC3 mapping.
API: publish(), subscribe().
Learn more:
https://docs.interop.io/desktop/capabilities/data-sharing/pub-sub/overview/index.html
https://community.interop.io/t/key-io-connect-integration-concepts-explained/255#p-523-pubsub-8
Shared Contexts
Has: publish & read; broadcast; discovery; global; one-to-many; caller/updater ID; reannouncement; persists if the server disconnects.
Lacks: user control, static definition, persistence across restarts, instance launch, interception.
FDC3: App Channels.
API: all(), set(), get(), subscribe(), …
Learn more:
https://docs.interop.io/desktop/capabilities/data-sharing/shared-contexts/overview/index.html
https://community.interop.io/t/key-io-connect-integration-concepts-explained/255#shared-contexts-programmatic-data-sharing
Color Channels
Has: publish & read (subject to channel restrictions); broadcast; discovery; user-controlled (users assign app instances to channels); one-to-many; caller/updater ID; reannouncement; persists if the server disconnects.
Lacks: global scope (channel-scoped), static definition, persistence across restarts, instance launch, interception.
FDC3: User Channels.
API: all(), join(), publish(), subscribe(), …
Learn more:
https://docs.interop.io/desktop/capabilities/data-sharing/channels/overview/index.html
https://community.interop.io/t/key-io-connect-integration-concepts-explained/255#channels-empowering-end-users
Workspace Contexts
Has: publish & read; broadcast; discovery; user-controlled via workspace grouping; can be defined statically in a Workspace Layout; one-to-many; caller/updater ID; reannouncement; can persist across restarts when saved in a Workspace Layout; persists if the server disconnects (may auto-destroy on workspace close, depending on config).
Lacks: global scope (workspace-scoped), instance launch, interception, FDC3 mapping.
API: workspace.setContext(), workspace.updateContext(), workspace.getContext(), workspace.onContextUpdated()
Learn more:
https://docs.interop.io/desktop/capabilities/windows/workspaces/javascript/index.html#workspace_context
https://community.interop.io/t/key-io-connect-integration-concepts-explained/255#workspace-context-multi-tasking-without-confusion
[/details]
For a simple overview, check:
And for more details see the respective documentation pages:
Top comments (0)