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 | ||||||||
| Read Data | ||||||||
| Discovery | ||||||||
| User Controlled | ||||||||
| Defined Statically | ||||||||
| Global | ||||||||
| Persistence Across Restarts | ||||||||
| Persistent (remains available if the server disconnects) | ||||||||
| 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 | ||||||||
| 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 |
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:
io.Connect Desktop Documentation - Data Sharing > Interop > JavaScript
Key io.Connect Integration Concepts Explained
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:
io.Connect Desktop Documentation - Data Sharing > Intents > Overview
Key io.Connect Integration Concepts Explained
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:
io.Connect Desktop Documentation - Data Sharing > Interop > JavaScript
Key io.Connect Integration Concepts Explained
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:
io.Connect Desktop Documentation - Windows > Window Management > JavaScript
Key io.Connect Integration Concepts Explained
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:
io.Connect Desktop Documentation - Data Sharing > Pub Sub > Overview
Key io.Connect Integration Concepts Explained
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
For a simple overview, check:
And for more details see the respective documentation pages: