DEV Community

Toni Petov for interop.io

Posted on • Originally published at community.interop.io on

io.Connect Data Sharing Comparison Cheatsheet

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:

Read full topic

Top comments (0)