# io.Connect Data Sharing Comparison Cheatsheet

**URL:** <https://community.interop.io/t/io-connect-data-sharing-comparison-cheatsheet/324>\
**Category:** io.Connect Desktop\
**Tags:** Knowledge-base, tech-blog, cheatsheet\
**Created:** [November 4, 2025, 1:00pm UTC](https://community.interop.io/t/io-connect-data-sharing-comparison-cheatsheet/324 "2025-11-04T13:00:57Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Georgi\_G](https://yyz2.discourse-cdn.com/flex028/user_avatar/community.interop.io/georgi_g/32/184_2.png) [@Georgi\_G](https://community.interop.io/u/Georgi_G)\
**Post date:** [November 4, 2025, 1:00pm UTC](https://community.interop.io/t/io-connect-data-sharing-comparison-cheatsheet/324/1 "2025-11-04T13:00:57Z")

</div>

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 | ❌ | ❌ |

> **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](https://docs.interop.io/desktop/capabilities/data-sharing/interop/javascript/index.html#method_registration)  
> [Key io.Connect Integration Concepts Explained](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:**  
> [io.Connect Desktop Documentation - Data Sharing \> Intents \> Overview](https://docs.interop.io/desktop/capabilities/data-sharing/intents/overview/index.html)  
> [Key io.Connect Integration Concepts Explained](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:**  
> [io.Connect Desktop Documentation - Data Sharing \> Interop \> JavaScript](https://docs.interop.io/desktop/capabilities/data-sharing/interop/javascript/index.html#streaming)  
> [Key io.Connect Integration Concepts Explained](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:**  
> [io.Connect Desktop Documentation - Windows \> Window Management \> JavaScript](https://docs.interop.io/desktop/capabilities/windows/window-management/javascript/index.html#context)  
> [Key io.Connect Integration Concepts Explained](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:**  
> [io.Connect Desktop Documentation - Data Sharing \> Pub Sub \> Overview](https://docs.interop.io/desktop/capabilities/data-sharing/pub-sub/overview/index.html)  
> [Key io.Connect Integration Concepts Explained](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://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](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://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](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://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](https://community.interop.io/t/key-io-connect-integration-concepts-explained/255#workspace-context-multi-tasking-without-confusion)

For a simple overview, check:

- [Key io.Connect Integration Concepts Explained](https://community.interop.io/t/key-io-connect-integration-concepts-explained/255)
- [io.Connect Complete Guide to Integration Mechanisms](https://community.interop.io/t/complete-guide-to-io-connect-integration-mechanisms/538)

And for more details see the respective documentation pages:

- [Pub/Sub](https://docs.interop.io/desktop/capabilities/data-sharing/pub-sub/overview/index.html)
- [Shared Contexts](https://docs.interop.io/desktop/capabilities/data-sharing/shared-contexts/overview/index.html)
- [Color Channels](https://docs.interop.io/desktop/capabilities/data-sharing/channels/overview/index.html)
- [Workspace Contexts](https://docs.interop.io/desktop/capabilities/windows/workspaces/javascript/index.html#workspace_context)
- [Interop Methods](https://docs.interop.io/desktop/capabilities/data-sharing/interop/javascript/index.html#method_registration)
- [Intents](https://docs.interop.io/desktop/capabilities/data-sharing/intents/overview/index.html)
- [Streams](https://docs.interop.io/desktop/capabilities/data-sharing/interop/javascript/index.html#streaming)
- [Window Context](https://docs.interop.io/desktop/capabilities/windows/window-management/javascript/index.html#context)

---

<div class="post-metadata">

**Author:** ![sara.courson](https://yyz2.discourse-cdn.com/flex028/user_avatar/community.interop.io/sara.courson/32/43_2.png) [@sara.courson](https://community.interop.io/u/sara.courson)\
**Post date:** [November 5, 2025, 8:13pm UTC](https://community.interop.io/t/io-connect-data-sharing-comparison-cheatsheet/324/2 "2025-11-05T20:13:21Z")

</div>

@joel.fringeli I was speaking with Filip about this today, I’m curious if your end users have interest in color channels?

---

<div class="post-metadata">

**Author:** ![joel.fringeli](https://yyz2.discourse-cdn.com/flex028/user_avatar/community.interop.io/joel.fringeli/32/61_2.png) [@joel.fringeli](https://community.interop.io/u/joel.fringeli)\
**Post date:** [November 7, 2025, 12:58pm UTC](https://community.interop.io/t/io-connect-data-sharing-comparison-cheatsheet/324/3 "2025-11-07T12:58:53Z")

</div>

Hi Sara  
We do not yet have an active use case for this.
