If you are new to FDC3, start with the FDC3 website.
FDC3 Sail is an open source implementation of the FDC3 interoperability standard. The supported product path is a browser-resident Desktop Agent: @finos/sail-browser-agent owns WCP and MessagePort connections in the page, and hosts @finos/sail-headless-agent for FDC3 2.2 and 3.0 DACP behavior. Shells and @finos/sail-platform compose that agent into example workspaces.
For package ownership, entry points, and what's implemented vs. planned, see the Architecture Overview; this README does not repeat it.
graph BT
Engine["@finos/sail-headless-agent"]
Env["@finos/sail-env"]
Theme["@finos/sail-theme"]
Platform["@finos/sail-platform"]
Common["@finos/fdc3-sail-common"]
DA["@finos/sail-browser-agent"]
V2["@finos/fdc3-sail-web"]
Harness["@finos/sail-conformance-harness"]
One["@finos/sail-one"]
Finance["@finos/sail-finance"]
DA --> Engine
V2 --> Engine
V2 --> Common
V2 --> Env
Harness --> DA
Harness --> Env
One --> DA
One --> Platform
One --> Env
Finance --> DA
Finance --> Platform
Finance --> Theme
Finance --> Env
Harness ~~~ One ~~~ Finance ~~~ V2
| Package | Description |
|---|---|
packages/sail-env |
Shared host bootstrap — query params (appId, fdc3Directory, noSplash) and Vite env (VITE_FDC3_DIRECTORY_URL, VITE_AUTO_RESOLVE). See README. |
packages/sail-headless-agent |
FDC3 engine (@finos/sail-headless-agent) — 2.2 and 3.0 handlers behind FDC3ServerInstance |
packages/sail-browser-agent |
Browser host for that engine — WCP, MessagePorts, AppLauncher / intent UI contracts |
packages/sail-platform |
Composition layer — host UI seams, pluggable storage, lifecycle |
packages/sail-theme |
Shared brand theme — design tokens and assets |
packages/sail-finance |
Example shell — finance-specific workspace dashboard |
packages/sail-one |
Example shell — domain-neutral tab-and-grid canvas |
packages/sail-conformance-harness |
Playwright runner for FINOS FDC3 conformance against product hosts |
packages/sail-v2-common / packages/sail-v2-web |
Previous Socket.IO Sail UI (still runnable; shares sail-headless-agent) |
Full documentation, including per-package guides, lives at https://fdc3-sail.finos.org (built from website/ via Netlify).
- Node.js >= 24.x
- npm >= 11.x
git clone https://github.com/finos/FDC3-Sail.git
cd FDC3-Sail
npm installnpm run devOpen http://localhost:3000. FDC3 apps in iframes connect via WCP. Use npm run dev:one for the sail-one shell.
npm run dev:v2Starts the Socket.IO-based app in packages/sail-v2-web against the same sail-headless-agent engine.
npm run dev:browser:2.2 -w @finos/sail-conformance-harness
npm run dev:browser:3.0 -w @finos/sail-conformance-harnessOpen http://localhost:3001. Unattended runs:
npm run test:browser:2.2 -w @finos/sail-conformance-harness
npm run test:browser:3.0 -w @finos/sail-conformance-harness(Playwright selects suite All, clicks Run, scrapes #mocha until Mocha ends.)
See the Development Guide for the full command reference.
Environment setup, build/test/lint/typecheck, quality gates, and publishing are documented in the Development Guide, not in this README.
Engine behavior for FDC3 2.2 and 3.0 is covered by Cucumber in packages/sail-headless-agent (npm run test -w @finos/sail-headless-agent).
FDC3 Sail holds regular project meetings to discuss development progress, roadmap, and community contributions.
Meeting agendas and minutes are tracked through GitHub issues with the meeting label.
FDC3 Sail targets FDC3 2.2 conformance and is extending toward FDC3 3.0 via sail-headless-agent's versioned handlers. It is in active development and not yet ready for production use. Contributions and bug reports are welcome.
To join the FDC3 Sail mailing list please email fdc3-sail+subscribe@lists.finos.org.
FDC3 is an open standard; other desktop agents are listed on the FDC3 website. Sail is one open-source implementation — you can use another agent with the same FDC3 apps where supported.
- Fork it (https://github.com/finos/fdc3-sail/fork)
- Create your feature branch (
git checkout -b feature/fooBar) - Read our contribution guidelines and Community Code of Conduct
- Commit your changes (
git commit -am 'Add some fooBar') - Push to the branch (
git push origin feature/fooBar) - Create a new Pull Request
See the Development Guide for environment setup and the commands to run before opening a PR.
NOTE: Commits and pull requests to FINOS repositories will only be accepted from those contributors with an active, executed Individual Contributor License Agreement (ICLA) with FINOS OR who are covered under an existing and active Corporate Contribution License Agreement (CCLA) executed with FINOS. Commits from individuals not covered under an ICLA or CCLA will be flagged and blocked by the FINOS Clabot tool (or EasyCLA). Please note that some CCLAs require individuals/employees to be explicitly named on the CCLA.
Need an ICLA? Unsure if you are covered under an existing CCLA? Email help@finos.org
- Nick Kolba contributed the first version of FDC3-Sail, initially called "FDC3 Electron", in 2022.
- Seb M'Barek and Nick Kolba renamed the project to FDC3-Sail and presented it at OSFF New York in 2023.
Copyright 2022–2026 FINOS
Distributed under the Apache License, Version 2.0.
SPDX-License-Identifier: Apache-2.0
