Visualize with AWS (Atlassian Forge)

Visualize with AWS (Atlassian Forge) is a Utoolity Labs app for Codegeist 2020 – we are very excited about the prospects of the Atlassian Forge platform and wanted to explore it with a project that helps with our own project and business planning and documentation. Joining the new wave of declarative chart and diagram rendering grammars with the power of AWS based serverless workflow automation to make these rendering engines available to every Jira and Confluence users seemed to check all the boxes.

The first iteration supports Vega and Vega-lite, PlantUML (incl. AWS and C4 modes), Mermaid, Graphviz, BPMN, and for the fun of it we’ve thrown in Svgbob for ASCII graphics. Unfortunately we failed to finish the arguably most important XKCD style rendering engine via Charts.xkcd, something to aspire too

Diagrams can be provided and edited inline, or referenced via URL for more complex ones or dynamically updating charts and diagrams (down the road we want to separate the so far combined visualization and data source declaration) – let’s see how it works:

Registration required

You currently need to be registered to edit and view charts and diagrams via Visualization with AWS – feel free to sign-in with your Atlassian ID so that you can test the app.

Rendering engines and editor support

Refer to for details and links to examples, online playground, and Visual Studio Code extensions.

Relative vs. absolute URLs

Please be aware that many online examples reference the data via relative URLs – to make these work with this app you need to convert the URLs to absolute ones.

How it works – Confluence

In Confluence the app provides a macro via the Macro module:

You can then select from a variety of declarative chart and diagram rendering engines:

You can see in action right here with a small PlantUML example:

A PlantUML use case diagram

Visualize with AWS

Here’s the inline source:

top to bottom direction actor Author actor User rectangle "Visualize with AWS" { Author --> (define diagram) (define diagram) .> (diagram) : renders (diagram) --> User } @enduml

Let’s try something more fancy via the impressive Vega renderer:

A Vega volcano contours visualization

Visualize with AWS

This time I’ve provided the data and diagram as an URL via a Bitbucket Snippet for ease of use, even though it could still be defined via JSON inline in principle:!api/2.0/snippets/utoolitylabs/MKLe9j/e03ee4996eec6566130666433ae2897f1f384ff8/files/snippet.json
{ "$schema": "", "description": "A contour plot of the Maungawhau volcano in New Zealand.", "width": 960, "autosize": "none", "signals": [ { "name": "grid", "init": "data('volcano')[0]" }, { "name": "height", "update": "round(grid.height * width / grid.width)" }, { "name": "smooth", "value": true, "bind": {"input": "radio", "options": [true, false]} } ], "data": [ { "name": "volcano", "url": "" }, { "name": "contours", "source": "volcano", "transform": [ { "type": "isocontour", "scale": {"expr": "width / datum.width"}, "smooth": {"signal": "smooth"}, "thresholds": {"signal": "sequence(90, 195, 5)"} } ] } ], "scales": [ { "name": "color", "type": "linear", "domain": [90, 190], "range": {"scheme": "blueorange"} } ], "marks": [ { "type": "path", "from": {"data": "contours"}, "encode": { "enter": { "stroke": {"value": "#ccc"}, "strokeWidth": {"value": 1}, "fill": {"scale": "color", "field": "contour.value"} } }, "transform": [ { "type": "geopath", "field": "datum.contour" } ] } ] }

Now that syntax is certainly already a bit complex, which is why the sister project Vega-Lite offers a more concise one too:

A Vega-Lite bubble plot example

Visualize with AWS

The app also supports the popular Mermaid renderer:

A Mermaid sequence diagram

Visualize with AWS

How it works – Jira

In Jira the app provides an issue panel via the IssuePanel module – you can trigger it in the issue byline, for example the initial epic for this app

An applicable example might be an architecture overview via the PlantUML with AWS mode:

The app currently only supports one diagram per issue, we are looking into the right data model to make this more flexible.


Usage - Confluence

Usage - Jira