Community Blog

Community Blog

Announcing FDC3 1.2

May 06, 2021

The FDC3 community is proud to announce the release of version 1.2 of the FDC3 standard, after a year of dedicated collaboration, with active contributions from numerous different firms, including several new participants.

We want to extend a huge thanks to all of the stakeholders who worked so hard to make this release possible, with a special shout out to our newly minted project maintainers, Kris West, Matt Jamieson and Georgi Georgiev, who have joined Riko Eksteen and Johan Sandersson in leadership roles, driving the standard forward.

Be sure to join the upcoming webinar on May 12th at 10:00am EDT to learn more about FDC3 and the new version from leaders at Adaptive Financial Technologies, Cosaic, and Glue42. 

What IS FDC3?

The Financial Desktop Connectivity and Collaboration Consortium (FDC3) aims to establish an open standard for interoperability between applications on the financial desktop. It is a fully open source initiative, addressing long-standing challenges in seamlessly delivering content between disparate internal and external systems to the front, middle, and back office. 

Participants build agreement around the key interfaces, types and operations required to support interoperability on the financial desktop, and believe that implementing interop should be fast, easy, and secure, while it should not tie you in to any particular framework.

FDC3 1.0 was released in March of 2019, consisting of four complementary specifications: intents, context data, app directory and API. FDC3 1.1 followed a year later, in March 2020, with support for channels, several standardised context types and an improved API & developer experience.

FDC3 1.2 brings further improvements to the API specification, incorporating feedback and contributions from firms and participants who use FDC3 to build real-world workflows between their applications.

You can find out more about the standard at https://fdc3.finos.org, at our GitHub repository, or by joining in the conversation on Slack!

 

What’s new in version 1.2 of the standard?

A NEW WAY TO RAISE INTENTS

Intents are a key building block of FDC3: They are standardised verbs or capabilities that applications can publish, and other applications can invoke.

In FDC3 1.0 and 1.1 it was possible to use the FDC3 API to raise intents directly, or look them up by data type, like so:

 

const instrument = {

   type: 'fdc3.instrument',

   id: {

       ticker: 'AAPL'

   }

}

const appIntents = await fdc3.findIntentsByContext(instrument)

// look at the app + intents array, pulling out the one that you want

// (or present a choice to the user)

const intentName = appIntents[0].intent

const targetApp = appIntents[0].apps[1]

     await fdc3.raiseIntent(intentName, instrument, targetApp)

 

However, this does not allow for the use case where you start with a piece of data, and want to present the user with a choice of the available actions and applications they can action from that data.

It is useful to ask the FDC3-supporting framework that your application is running in (or the “desktop agent” as it is known in FDC3) just to raise a relevant intent, and then let the desktop agent discover and present the user with all the available options.

I like to think of this as similar to the “Open with…” or “Launch with…” option in an operating system, or the “Share” function on your phone, only much more powerful!

This is the new workflow that the raiseIntentForContext() API operation enables, for example:

 

const instrument = {

   type: 'fdc3.instrument',

   id: {

       ticker: 'TSLA'

   }

}

     await fdc3.raiseIntentForContext(instrument)

 

I think you will agree that is a lot simpler!

 

applications can now be targeted through metadata

The open() and raiseIntent() operations of FDC3 1.0 and 1.1 have always supported the ability to target specific applications for interop workflows (as opposed to letting the desktop agent resolve the target).

However, the feedback we received from users was that only being able to target an application by its identifier, is too limiting.

Therefore, in FDC3 1.2, it is now possible to use the pre-existing AppMetadata interface when targeting applications. The interface has also been extended with additional metadata like the application name and version, to more closely align it with the FDC3 app directory specification.

For example:

 

const target: AppMetadata = {

   name: 'MyApp',

   version: '2.5'

}

     await fdc3.open(target)

 

 

BETTER Developer SUPPORT

In previous versions of FDC3, it was challenging to detect when the window.fdc3 global object has been initialized by the desktop agent, and the FDC3 operations are ready to use.

FDC3 1.2 introduces the fdc3Ready global event, which will notify you when FDC3 is ready to use and the global object should be available:

 

if (window.fdc3) {

   action()

} else {

   window.addEventListener('fdc3Ready', action)

}

 

We have also added the getInfo() operation, which developers can use to obtain information about the FDC3 provider and version of the environment they are running in.

 

A NEW NPM PACKAGE FOR WEB APPLICATIONS

Something the community has been requesting for a while is an NPM package that makes it easy to import FDC3 support into a web application in a vendor-agnostic way.

The @finos/fdc3 npm package includes TypeScript types for all of the FDC3 API operations, generated types for standard FDC3 context types like Instrument or Contact, and handy enums for intent names and context type names.

It also includes several utility functions, for example compareVersions() and versionIsAtLeast() to aid with version detection, and the awaitable fdc3Ready() helper function that encapsulates checking for the new fdc3Ready event.

What’s more, all the FDC3 operations are also exported as ES6 functions, so that they can easily be imported in your modern JavaScript code!

For example:

 

import { fdc3Ready, addIntentListener, Intents } from '@finos/fdc3'

async function getInstrumentListener() {

await fdc3Ready()

   return addIntentListener(Intents.ViewAnalysis, instrument => {

       // handle intent

   })

}

 

We have also retroactively published a package for the 1.1 version of the FDC3 standard.

Please try out the NPM packages, and let us know what else we can add to make your development easier!

 

LOOKING AHEAD TO FDC3 2.0

The FDC3 community has decided to make the next release of FDC3 a major one, so that we can make some important breaking changes to the API and app directory specifications to address feedback from users.

Currently being planned, is a revamp of the app directory specification, the area in most need of attention, to add support for host-independent application manifests, more types of application metadata and improved search capabilities.

Also being planned are further improvements to the channel APIs, including clarification of app and system channels, the ability to join multiple channels, resetting the context on a channel, and removing the “global channel” concept (which has been deprecated in FDC3 1.2).

And then we want to look at two oft-requested features: supporting bi-directional data flow between applications, and targeting and working with multiple instances of the same application.

We also want to decrease the time between releases, and we are hoping that we can publish FDC3 2.0 before the end of 2021. But for that, we need your help!

 

Get involved and help us build an even stronger FDC3

We’re excited about the new capabilities opened up by the 1.2 release, and as we work on version 2.0 of the standard, we really want to hear from our community and users about what is most important and how we can help you achieve it. 

Please help us make this standard even stronger by sharing your usage and use cases, attending our Standards Working Group meetings, raising issues/PRs on GitHub, emailing the group via our mailing list, or chat with us on our new Slack channel

The more voices we have, the better the standard will be! 


Details on all the ways you can get involved, can be found here.

 

REGISTER FOR THE WEBINAR  TO LEARN MORE

 

Thanks! 

~ Riko Eksteen, FDC3 Lead Maintainer, and Head of Desktop Strategy at Adaptive Financial Consulting.

 

 

Interested in this FINOS open source project, or any of our other projects? Click the link below to see how to get involved in the FINOS Community.

Get Involved