Sneak Peak at Referentiality within Confluence

:wave: Hello there Atlassian Partner Developers,

During the last few months, we have been focused on addressing a key functionality gap between Confluence Server and Confluence Cloud - specifically support for nesting bodied macros in the Fabric editor. Nesting bodied macros allows customers in Server to compose elaborate macro structures which can easily pass their content upward to an outer macro. While we continue to encourage customers and apps towards the Cloud, these structures will not all work as is in the Fabric editor in Cloud and will need to be updated. This is because the macros themselves are sandboxed within an iframe, making data communication between nested bodied macros more difficult than would be than on the Server.

In order to support this functionality, we have begun building a new technical architecture to provide a more WYSIWYG experience than was available in Server. This architecture will allow users to create references from one macro to another, including Dynamic Content macros. This new technical foundation, as well as new user experience of referencing, will help users address the use cases that they relied on nesting bodied macros to compose, aiming to provide equivalent functionality with a better user experience.

We would like to take this opportunity to show you what is coming soon to support Nested Bodied Macros, to keep you informed of our engineering progress and to get feedback on what is coming down the pipe in the months ahead. We are calling the capability Referentiality (for now), and we are excited for the possibilities it can bring for Partners, but we also want to hear from all of you what you think about this before we get too far down the line.

What are the problems we are trying to solve for?
As more customers migrate over from Server to Cloud, end-users expect similar functionality as they have had in Server with nested bodied macros. As content creators create more pages within the new Editor, they will still want a way to easily chain macros together regardless of whether it is a native Confluence macro, or a Connect or Forge macro.

And as Partner developers have already invested in the Connect ecosystem, we know that you want to easily adapt your existing Connect macros to empower content creators to continue using your macros in the Cloud. We hear you and understand that it will take time to update your app to Forge, and that you need an intermediary solution.

What is our vision for tackling this?

Our solution includes building a Referentiality model to allow data sharing between different types of macros within Confluence, whether it be an existing Connect macro, a native Confluence macro, or a Forge app. All of these would be able to be chained (rather than nested), linking them together interchangeably via an internal message broker. With a few minor modifications within the macro and to your Connect Descriptor or Forge Manifest, your macro would be able to publish, subscribe, and react to changes based on the data coming from another macro (both native or Marketplace app), similar to what you had in the Server world with nested bodied macros.

For our initial release, we are adding a Connect and Forge extension point in the Contextual Toolbar which you can add to your macro. Each subscribing macro will be included as a Contextual Toolbar Item to ingest the data from the publishing macro. Here is an example of an existing Table Macro using the Contextual Toolbar which includes the option to inject a dynamic pie chart with its data binded to the table.

Our longer-term North Star will include additional features such as the ability to name and reference macros, to visualizing a navigable macro chain, to allowing multiple macros from different pages to be chained and rendered in a WYSIWYG fashion. Having a WYSIWYG experience will reduce user uncertainty by rendering the same view within the Editor and Renderer. This allows the content creator to be able to experience what the published version of the page looks like without having to publish the current page being edited, ensuring a much better user experience for the content creator and content consumer alike.

This can all be configured using the Right Context Panel. Content creators would be able to configure the macro chain, how each macro fits within the data chain, and set the view settings for the individual macros within the chain as shown on the diagram below. Imagine how much happier content creators will be with the new WYSIWYG experience in Cloud; they would have wished they migrated to the Cloud sooner.

How will it work and what are some of the changes required?

Your descriptor or manifest will need to be updated with a new refDataSchema property dictating the data ingress and data egress types of each of the macros. While this allows for any unstructured data types to be freely used, we are starting with an initial rollout to support our most common use case, Tables. For your macro to support data flows to and from Tables, you can use either the table-adf or table-json schema types. To support Connect macros, we have created a new API for your macros to emit data - AP.dataProvider.emitToDataProvider - and register for data changes with the data_provider topic.

Why not just migrate my existing Connect application to Forge?

While we would like for all our Partners to migrate and rewrite all their apps with Forge eventually, we know that this undertaking will be significant and will not happen overnight. So we made these changes to ease this transition phase for Partners while allowing our end users to fully adopt the new Fabric Editor. If you are interested in migrating your Connect application to Forge, you can read more about our Connect-on-Forge path here .

What’s next?

We expect an initial release for our Partners in the Ecosystem Beta Group to land later this year. In the meantime, if you haven’t joined the Ecosystem Beta Group, consider joining by reaching out to your Technical Program Manager. Also, look forward to the next post detailing the specific changes required to take advantage of Referentiality within Confluence, and a demo of how you can enable Referentiality.

Let us know what you think of what’s coming!


Interesting! Excited to try this out! :slight_smile:

Please note that designs are still evolving, so those presented above may change somewhat.


That’s a good decision to get nested macros back in Cloud.
Will this approach support nesting several macros within a single macro? So it is not a chain, but a tree of macros.
Will it support combining macros and other content like images, text, lists, tables, and so on in the tree structure?
I mean will it be as flexible as it is in the legacy editor and in Data Center/Server version?


This approach differs from the nesting solution found in the Server, and would only support a singular chain for now. While there have been discussions to enable the tree like structure, it is currently out of scope as there are more restrictions placed on macro content rendered within an iframe.
We believe this would be a better and more intuitive experience for the end user, but would not be as flexible as it was in the older Data Center / Server versions.

1 Like

This looks to be focussed on the v2 fabric editor - will the v1 editor continue to lack support for nesting Dynamic macros? Are there any plans to make v1 nesting work like server?

Do you plan to release (preview for partners) Referentiality support for Connect and Forge at the same time?

1 Like

That’s bad. I’ll try to explain why I think so.
In the times when the legacy editor was not legacy and was the only one editor, there were three groups of power editors:

  • A - used chained nested macros
  • B - used a number of macros and other types of content in macros (one level depth)
  • C - combined A and B approaches and used a tree structure
    There are not many power editors, but they create content for the rest of the users, the readers.
    Then the fabric editor appeared. It was forced and groups A and C had gone. But group B is still with us!
    But the referentiality is coming. If it will be forced like the fabric editor was (and I’m sure it will be), then group B will leave us. But group A will be happy! Stop, we’ve already lost them… So for whom is it made?
    Why not make the product better only? Please, don’t make it better in one case and unusable in the other one. I’m sure it is possible.
    Hope the Atlassian team finds a better solution. Good luck!