Any versions that are not listed here should be avoided. They may be broken images, contain serious known-broken behavior, accidentally introduce an incompatible change in a point release, or contain a known security issue.
For brevity, only the latest patch version will be listed for each minor release version. For example, the entry for 0.48.5 includes any changes that may have previously been released under 0.48.2.
bodiedRule, rule attrs; status.color as hex string; Markdown round-trip fixesbodiedRule node — a horizontal rule with an optional label (paragraph or heading child, no marks). Supported in Confluence; not yet rolled out to Jira.rule: color (hex string), style (solid | dashed | dotted | sketch | fade), and weight (1–3).status.attrs.color accepts the six legacy names or a 6-digit # hexadecimal identifier (stage-0). Existing Status.Color factories are unchanged. Status.color() is deprecated; use colorValue() for the wire value. Wiki encodes named colors with the previous map and paints hex identifiers as {color:} text.MarkdownInlineEncoder: encode underline() as ++text++ (InsExtension delimiter syntax) instead of <u>text</u> (raw HTML that the parser could not round-trip). Underline is now a full round-trip: ADF → Markdown → ADF.MarkdownParser: register TaskListItemsExtension so GFM task list syntax (- [ ] item / - [x] item) is parsed into ADF taskList/taskItem nodes. Previously these came back as plain bulletList with literal checkbox text.TaskItem: new isDone() convenience method (equivalent to state() == State.DONE).MarkdownEncoder: ADF-to-Markdown encoderAdds MarkdownEncoder to the adf-builder-java-markdown module — the inverse of the existing
MarkdownParser. It converts an ADF Doc to a Markdown string with full support for all standard
block and inline nodes, graceful degradation for ADF-specific nodes that have no Markdown
equivalent (panels, expands, layout sections, extensions, cards), and proper escaping of
inline-structural Markdown characters in plain text.
The adf-cli tool has a new adf2markdown mode to exercise this encoder from the command line.
Key behaviours:
mediaSingle caption is rendered as image alt textextension (block) and inlineExtension emit their extensionKey as a plain-text placeholdermultiBodiedExtension flattens all frame body content in order\, `, *, _, [, ]) are escaped in plain text nodes|) are escaped in table cell contentvalign, breakout mark on panel/rule, wiki table in list parsing, DOCX security fixvalign on table cells/headersbreakout mark on rule and panel nodesListParser.PARSE_TABLES_IN_LIST_ITEMS to parse tables within list item. ADF still doesn't allow this, so they break up the containing list, but at least this permits the table to still parse rather than be treated as literal text...) segments in image paths.Feature.ALLOW_NESTED_LISTS_AS_FIRST_CHILD deprecated / now forced onListBuilder.ALLOW_NESTED_LIST_AS_FIRST_ITEM to remove the extra blank paragraph insertion during Wiki-to-ADF conversionscodeBlock attrs available in full schema2.5.x Upgrade Notesadf-builder-java-wiki to convert from Wiki to ADF should have rolled out ListBuilder.ALLOW_NESTED_LIST_AS_FIRST_ITEM before upgrading to this version. As of 2.5.0, the feature flag has no effect and the nested list behaviour is always enabled.HtmlParser, currently opt-in with .useEnhancedParser()2.4.x Upgrade NotesHtmlParser.useEnhancedParser() feature guard will likely only remain active for a short time. Consumers of adf-builder-java-html are advised to upgrade to this version and perform a safe rollout of this feature before a future version makes the flag a no-op.blockCard and embedCard in plaintext (feature-gated)Context.GlobalDefaultFeatureProviderFeature gate, but promoted to full schemaparagraph with fontSize markicon() and icon(Emoji) methodsFeature.ALLOW_NESTED_LISTS_AS_FIRST_CHILD, fontSizefontSize mark for paragraphsdataConsumer on media and mediaInline nodes2.1.x Upgrade Notes — IMPORTANT!!!Feature.ALLOW_NESTED_LISTS_AS_FIRST_CHILD **is a significant change to the library behaviour. **Consumers of this library are strongly advised to perform a safe rollout of this feature immediately to ensure interoperability with other systems and before upgrading to 2.5.x or later.[ text|url] invalid wiki generation2.0.x Upgrade Notes@Deprecated methods:
com.atlassian.adf.model.Schema.url() – Leaked internal detail; no replacementcom.atlassian.adf.model.Schema.inputStream() – Leaked internal detail; no replacementcom.atlassian.adf.model.node.LayoutSection.Partial.NeedsSecondColumn – A single column is now sufficient, so this incomplete builder state no longer existscom.atlassian.adf.model.node.type.Marked.mark(String) – Use marks(Class) or mark(MarkKey) insteadcom.atlassian.adf.util.Sanitizer.sanitize(Doc) – Removed to reduce any possible confusion about its behavior. Use sanitizeMutate(Doc) insteadcom.atlassian.adf.schema.SchemaValidator.getInstance() – Use full() or stage0() explicitlycom.atlassian.adf.schema.SchemaValidator.useExperimentalValidator() – No replacement, as it had no effect in 1.x anyway.com.atlassian.adf.wiki.encoder.nodes.TableEncoder.PROTECT_HARD_BREAKS – No replacement, as this feature is fully releasedlink type value for media and mediaInline will be retained indefinitely to support backward-compatibility of the schemacom.atlassian.adf.model.node.LayoutSection.Partial.NeedsFirstColumn.content(LayoutColumn) – Return type is now LayoutColumn as part of removing the NeedsSecondColumn state, which will break binary-compatibility but not source-compatibility.Object to Serializable, which is unlikely to affect consumers.syncBlock, bodiedSyncBlocksyncBlock and bodiedSyncBlock added to full schemaBodiedSyncBlock node typebodiedSyncBlock nodesContentNode.contentWithMarkValidation(Iterable) (1.10.10)SyncBlock node typesyncBlock nodeswidthType in wiki; columnRuleStyle; PARSE_REPAIR_EMPTY_TEXT; docxUnsupportedOperationException introduced in 1.8.2mediaSingle.widthTypelayoutSection.columnRuleStyle, which should have been included in 1.5.0, but was accidentally overlooked.localId attributes, blockTaskItemlocalId attributes to most nodes and new blockTaskItemmultiBodiedExtension’s marks section in the stage-0 schemaextension within blockquote, listItem, nestedExpand, and panelcodeBlock – revert including attrs even when emptyparagraph – revert including content even when empty@[id] instead of @unknownFeature.PLAINTEXT_MENTION_USE_IDmultiBodiedExtension, extensionFramedate, emoji, mention, and status can now accept annotationcopy()1.5.x Upgrade NotesGoing forward, the core library is going to start tracking the stage-0 schema instead of the full schema. In practice, this means that it may be possible to build documents with the library that will pass validation for the stage-0 schema but will be rejected by the full schema. Generally, Confluence supports the stage-0 schema while Jira only supports the full schema, so this should be kept in mind.
At the time of this release, the only stage-0 feature that impacts Jira is placing a blockquote inside a panel. While the library now supports this nesting, Jira will not accept that structure until it is available in the full schema.
1.0.x Upgrade NotesThere are no functional changes between 0.52.2 and 1.0.0. As per Semantic Versioning, the bump from 0.x.x to 1.0.0 indicates that the library has moved from the initial development phase to the public API phase, and it is a formal commitment to maintain API stability going forward.
PanelMacroParser.ALLOW_NEW_CONTENTtext mode for adf-clicaption and headingexpand and nestedExpandmention.text; ignore embedCard and blockCard completelyTableEncoder.PROTECT_HARD_BREAKS)replaceContent(content())annotation.id to "" when parsingexpand with nestedExpandblockquote with codeBlock, mediaGroup, mediaSingle0.45.x Upgrade NotesuseExperimentalValidator() no longer has any effect and will be removed in the future0.39.x Upgrade NotesResult object is not changed, the actual string contents of its message will look very different from before. This is likely to change again in the future and should not be considered an API.Colors has a few methods renamed in ways that are not backwards-compatible. In particular, isHex is now isHex3or6 to clarify that the hex8 format (with an alpha channel) is not tolerated by that method. With apologies to anyone affected, this change seemed worth the risk.SkeletonlocalId inconsistenciescodeBlock in nestedExpandwiki-cli tool to adf-cliautoannotation and fragmentmediaInline nodes with type of imageBlockquoteContent interfacefoo{*}bar* meaning foobar.Result.orThrow() returns this now.< as %3C during URL escapingmediaSingle by defaulting to CENTERmedia nodes{code:}blockCard with datasource typevalidatecontent instead of omitting it entirely#ccc/ is appended
to URLs that have an empty pathInternalMediaNode interface common to media and mediaInlinemedia nodes with type set to link are deprecatedmailto: prefix during text fallbackmediaInlinemediaSingle with widthTypetable with fragment mark and/or width attrtableCell and tableHeader write empty attrs map by defaulttext and accessLevel attrs in mention by defaultmediaSingle (transformDescendants, etc.)table with localId1.0 instead of the usual 1orderedList to order of 1 by defaultcodeBlock write empty attrs map by defaultmedia with border markArrayIndexOutOfBoundsException when converting wiki to mediaGroup* paragraphsmediaSingle to be [media]mediaGroupmarkClass() and more mark factories.collection("") on a media node.WikiMarkupTransformer from old packageWikiMarkupTransformer to better package (and deprecate old location)mediaSingle node to use integer value for widthextension should be allowed as NonNestableBlockContentmediaSingle should be allowed in tableCell and tableHeadermention node's accessLevel attr to be any string instead
of requiring it to match enum, because the real editor often uses
"" for it.media (methods weren't public)Rate this page: