Developer
News and Updates
Get Support
Sign in
Get Support
Sign in
DOCUMENTATION
Cloud
Data Center
Resources
Sign in
Sign in
DOCUMENTATION
Cloud
Data Center
Resources
Sign in
Last updated Sep 1, 2026

ADF Builder Java change log

Quick Start Guide

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.

JDK 21

2.6.3 – Table valign, breakout mark on panel, wiki table in list parsing

  • ABJL-6: ADF Change 98: allow valign on table cells/headers
  • EDITOR-7934: ADF Change 104: allow breakout mark on rule and panel nodes
  • JRACLOUD-81739: Add feature gate ListParser.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.

2.5.1 – Nested lists enabled; code block attrs in full schema

  • ADF Change 94: Feature.ALLOW_NESTED_LISTS_AS_FIRST_CHILD deprecated / now forced on
  • ADF Change 94: Wiki markup context feature ListBuilder.ALLOW_NESTED_LIST_AS_FIRST_ITEM to remove the extra blank paragraph insertion during Wiki-to-ADF conversions
  • ADF Change 90: New codeBlock attrs available in full schema

2.5.x Upgrade Notes

  • Anyone using adf-builder-java-wiki to convert from Wiki to ADF should roll out ListBuilder.ALLOW_NESTED_LIST_AS_FIRST_ITEM before upgrading to (TBD: version that no-ops this feature) or later.

2.4.0 – Improved HTML parsing available as opt-in

  • ABJL-3: Improvements to HtmlParser, currently opt-in with .useEnhancedParser()

2.4.x Upgrade Notes

  • The HtmlParser.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 upgrading to (TBD: version that no-ops this feature) or later.

2.3.1 – Jackson 3 support

  • ABJL-7 TC-48917: Jackson 3 support
  • CRCS-5199: Render URL from blockCard and embedCard in plaintext (feature-gated)

2.2.6 – Context.GlobalDefaultFeatureProvider

  • New mechanism to make it easier for applications to manage the feature flag configuration globally by changing the default per-thread feature provider.
  • Nested lists as first child element still behind Feature gate, but promoted to full schema
  • Support for paragraph with fontSize mark
  • ABJL-5: Fix custom panel icon handling; add new icon() and icon(Emoji) methods
  • TOC handling fixes in DocX converter

2.1.0 – Feature.ALLOW_NESTED_LISTS_AS_FIRST_CHILD, fontSize

  • ADF Change 94: ability to nest lists without a placeholder empty paragraph first, (feature-flagged)
  • ADF Change 95: fontSize mark for paragraphs
  • ADF Change 97: allow dataConsumer on media and mediaInline nodes

2.1.x Upgrade Notes — IMPORTANT!!!

  • *WARNING!!! *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.
  • JSDCLOUD-18412: Fix for [ text|url] invalid wiki generation
  • 145: ACTIVATION-193: continued improvements to DocX support (EXPERIMENTAL)

2.0.x Upgrade Notes

  • MINIMUM JDK 21
  • Removal of @Deprecated methods:
    • com.atlassian.adf.model.Schema.url() – Leaked internal detail; no replacement
    • com.atlassian.adf.model.Schema.inputStream() – Leaked internal detail; no replacement
    • com.atlassian.adf.model.node.LayoutSection.Partial.NeedsSecondColumn – A single column is now sufficient, so this incomplete builder state no longer exists
    • com.atlassian.adf.model.node.type.Marked.mark(String) – Use marks(Class) or mark(MarkKey) instead
    • com.atlassian.adf.util.Sanitizer.sanitize(Doc) – Removed to reduce any possible confusion about its behavior. Use sanitizeMutate(Doc) instead
    • com.atlassian.adf.schema.SchemaValidator.getInstance() – Use full() or stage0() explicitly
    • com.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 released
    • Except: Anything related to the link type value for media and mediaInline will be retained indefinitely to support backward-compatibility of the schema
  • Other incompatible changes:
    • com.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.
    • Several exception classes changed internal field storage from Object to Serializable, which is unlikely to affect consumers.
  • Dropped support for Jackson v1 – Consumers will have to maintain this themselves from now on. Example source: [→ AdfJackson1.java]
  • Dropped support for Scala PlayJson – Consumers will have to maintain this themselves from now on. Example source: [→ AdfPlayJson.scala]
  • JSDCLOUD-18412: Fix for [ text|url] invalid wiki generation
  • 145: ACTIVATION-193: continued improvements to DocX support (EXPERIMENTAL)

Upgrade Notes

  • MINIMUM JDK 21
  • Removal of @Deprecated methods:
    • com.atlassian.adf.model.Schema.url() – Leaked internal detail; no replacement
    • com.atlassian.adf.model.Schema.inputStream() – Leaked internal detail; no replacement
    • com.atlassian.adf.model.node.LayoutSection.Partial.NeedsSecondColumn – A single column is now sufficient, so this incomplete builder state no longer exists
    • com.atlassian.adf.model.node.type.Marked.mark(String) – Use marks(Class) or mark(MarkKey) instead
    • com.atlassian.adf.util.Sanitizer.sanitize(Doc) – Removed to reduce any possible confusion about its behavior. Use sanitizeMutate(Doc) instead
    • com.atlassian.adf.schema.SchemaValidator.getInstance() – Use full() or stage0() explicitly
    • com.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 released
    • Except: Anything related to the link type value for media and mediaInline will be retained indefinitely to support backward-compatibility of the schema
  • Other incompatible changes:
    • com.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.
    • Several exception classes changed internal field storage from Object to Serializable, which is unlikely to affect consumers.
  • Dropped support for Jackson v1 – Consumers will have to maintain this themselves from now on. Example source: AdfJackson1.java
  • Dropped support for Scala PlayJson – Consumers will have to maintain this themselves from now on. Example source: AdfPlayJson.scala

JDK 17 (Unsupported)

1.11.2 – Wiki-to-ADF table+header fix, syncBlock, bodiedSyncBlock

  • EDITOR-1526 EDITOR-2332: syncBlock and bodiedSyncBlock added to full schema
  • JRACLOUD-96758: Fix header immediately after table (without a blank line separating them)

1.10.15 – Adding BodiedSyncBlock node type

  • EDITOR-2332: ADF Change 89: bodiedSyncBlock nodes
  • 145: ACTIVATION-193: continued improvements to DocX support (EXPERIMENTAL)
  • 145: ACTIVATION-193: New API available: ContentNode.contentWithMarkValidation(Iterable) (1.10.10)

1.9.1 - Adding SyncBlock node type

  • EDITOR-1526: ADF Change 88: syncBlock nodes
  • 145: ACTIVATION-193: continued improvements to DocX support (EXPERIMENTAL)

1.8.4 – widthType in wiki; columnRuleStyle; PARSE_REPAIR_EMPTY_TEXT; docx

  • 148: Fix UnsupportedOperationException introduced in 1.8.2
  • HOT-120995: media encoder did not respect mediaSingle.widthType
  • 148: feature for repairing empty text nodes
  • 142: support layoutSection.columnRuleStyle, which should have been included in 1.5.0, but was accidentally overlooked.
  • 145: ACTIVATION-193: continued improvements to DocX support (EXPERIMENTAL)

1.8.0 – DocX, localId attributes, blockTaskItem

  • 145: explore/implement DocX-to-ADF conversion (EXPERIMENTAL)
  • 146: schema 50.1.1, adding localId attributes to most nodes and new blockTaskItem

1.7.1 – schema changes, extension nesting

  • 142: correction to multiBodiedExtension’s marks section in the stage-0 schema
  • 143: ADF Change 85: extension nesting
    • extension within blockquote, listItem, nestedExpand, and panel
  • 51: revert changes made for CS consistency
    • codeBlock – revert including attrs even when empty
    • paragraph – revert including content even when empty

1.6.0 – Context/Feature API for core library, mention id in plaintexxt

  • CRCL-3421: introduce ability to render plaintext mentions as @[id] instead of @unknown
  • CRCL-3421: to support rolling that out safely, introduce Context/Feature API and hide it behind Feature.PLAINTEXT_MENTION_USE_ID

1.5.0 – schema changes, stage-0 support

  • 142: schema changes
    • schema 47.2.0
    • core library now packages both the stage-0 and full schemas
    • schema-related APIs allow caller to specify which schema to use
    • core library node always follow stage-0 schema; see Upgrade Notes
    • new nodes: multiBodiedExtension, extensionFrame
    • new mark use: date, emoji, mention, and status can now accept annotation
  • 142: several marker interfaces now narrow the return type for copy()

1.5.x Upgrade Notes

Going 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.0 – SOX compliance; API stability

  • 131: SOX compliance controls; API stability

1.0.x Upgrade Notes

There 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.

0.52.2 - Remove PanelMacroParser.ALLOW_NEW_CONTENT

  • 79: clean up feature flag for new content in panel macros
  • 130: text mode for adf-cli

0.46.2 – JDK 17

  • MINIMUM JDK 17

1.4.2 – updated transitive dependencies, plaintext fixes

  • 140: bump slf4j, gson, and jackson1 transitives
  • 141: fix regressions in plaintext generation for caption and heading

1.3.3 – observer SPI, plaintext fixes

  • 136: wiki conversion observer SPI
  • 138: plaintext needs to separate blocks in expand and nestedExpand
  • 139: plaintext: ignore empty mention.text; ignore embedCard and blockCard completely

1.2.0 – schema update, Breakout.width

  • 135: Update schema to 46.1.0 (includes introduction of Breakout.width)

1.1.2 – findMatchingDescendants; fix loopback bug; linebreaks in tables; annotation.id empty

  • 121: Wiki encoding of tables with hardbreaks (FF: TableEncoder.PROTECT_HARD_BREAKS)
  • 132: ContentNode.findMatchingDescendants
  • 133: Fix loopback call replaceContent(content())
  • 134: Default annotation.id to "" when parsing

0.51.2 - Fix some issues with negative values in colwidth and rowspan

  • ISSUE-18861: Rowspan has to be positive; zero is not a valid value.
  • ISSUE-18861: Fix exception if colwidth with negative double value

0.49.1 - Fix date parser for negative dates and non-number inputs.

  • ISSUE-18844: wiki conversion of date node with negative / garbage timestamp
  • ISSUE-18751: wiki conversion of lists with hardbreak followed by literal list item prefix (FF)

0.48.5 – expand with nestedExpand, blockquote with codeBlock or media

  • ISSUE-18751: wiki conversion of lists with hardbreak followed by literal list item prefix (FF)
  • ISSUE-18022: wiki conversion of lists with hardbreaks / empty paragraphs
  • 123: Reorder media/status attrs for consistency with FCS
  • 117: ADF Change 80: expand with nestedExpand
  • 117: ADF Change 80: blockquote with codeBlock, mediaGroup, mediaSingle

0.47.1 – Performance improvements, empty tableRow

  • 109: Performance improvements, mainly to the new schema validator
  • ISSUE-120: Allow empty tableRow

JDK 11 (Unsupported)

0.45.2 – Experimental schema validator; Jackson 2 bump; wiki improvements

  • 109: Make new schema validator official
  • 114: Move trailing NBSPs outside of marks in ADF-to-Wiki
  • 115: Bump Jackson2
  • 116: Harden ADF macro content sanitization in Wiki-to-ADF

0.45.x Upgrade Notes

  • The NetworkNT json-schema-validator transitive dependency has been removed
  • useExperimentalValidator() no longer has any effect and will be removed in the future

0.39.0 – schema validator, mention.localId, backgroundColor, table layouts

  • 93: switch schema validator library
  • 94: backgroundColor mark for text nodes
  • 95: localId attribute for mention nodes
  • 96: additional options for table layout

0.39.x Upgrade Notes

  • The schema validator’s transitive dependencies changed, with the result that most of its previous dependencies, like Guava and Joda-Time, are no longer required.
  • Although the schema validator’s Result 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.
  • The public API utility class 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.

0.44.2 – Experimental schema validator

  • 109: experimental opt-in bespoke schema validator
  • 112: reorder fields for consistency with content service
  • 113: reorder fields for consistency with content service

0.43.1 – NetworkNT schema validator 1.5.0, mention.localId sanitizer

  • 105: Bump schema validator dependency (memory and performance improvements)
  • 108: retain mention.localId in sanitizer

0.42.0 – Table displayMode

  • 98: ADF Change 75: Table.displayMode

0.41.0 – schema validator downgrade, REQIN-676 Added optional "localId" attribute to paragraph and heading nodes

  • REQIN-676: support paragraph.localId and heading.localId
  • 105: downgrade networknt schema validator to work around memory leak

0.40.1 – skeleton, localId minimum length,

  • 97: create Skeleton
  • 99, 101: fix localId inconsistencies
  • 92, 104: allow codeBlock in nestedExpand

0.38.0 – Feature flag rework; nestedExpand enhancements

  • 85: New feature flag conventions (SPI-breaking change for FeatureFlagProvider)
  • 92: Supports lists, panels, rules, and blockquotes in nestedExpand

0.37.2 – Wiki conversion fixes, more node nestings

  • 89: Rename wiki-cli tool to adf-cli
  • 90: Support default media width and height with input as auto
  • 91: Allow conversion from issue key to inline card when in color mark
  • 78: Allow actions (task list) inside bullet/ordered lists
  • 79: Allow several new nested node types inside panels
  • 81: Allow annotation marks on media
  • 86: Parse inline cards with touching NBSPs
  • 87: Treat NBSPs as whitespace when trimming code blocks
  • 88: Fix rgba color support

0.36.0 – Licensing and repeatable marks

  • 83: Clarify licensing
  • 84: Allow multiple marks of same type for annotation and fragment

0.35.1 – Lists in blockquotes

  • 75: Support lists in blockquote (wiki conversion gated by feature flag)

0.34.1 – Media parse hardening, MediaInline image type

  • 80: Ignore invalid width/height during media parse
  • Revert support for additional nested nodes (editor is not ready, yet)
  • 76: Support for mediaInline nodes with type of image
  • 74: Introduce BlockquoteContent interface

0.31.0 – Scala PlayJson parser, WarmUp

  • Moved warm-up code to make it available to test suite
  • Added support for Scala PlayJson

0.30.4 – Wiki Markup mid-word markup, URL escaping, parser hardening, HTML

  • 70: ADF Sanitizer now mutates doc in place instead of making a copy
  • 72: ADFEXP-660: Better support for mid-word wiki markup in curly braces such as foo{*}bar* meaning foobar.
  • ISSUE-16021: Result.orThrow() returns this now.
  • 70: Encode < as %3C during URL escaping
  • 67: Tolerate negative colwidth when parsing tables
  • 67: Tolerate missing layout for mediaSingle by defaulting to CENTER
  • 66: Tolerate empty shortname value for emoji
  • 65: Tolerate incompatible marks during parsing using first-one-wins
  • 64: Experimental HTML parser

0.29.0 - JDK 11, Wiki Markup conversion improvements

  • MINIMUM JDK 11
  • 60: Handle tables with trailing whitespace on unclosed rows
  • 59: Allow non-integer width for media nodes
  • 58: Tolerate macros with empty string as args, such as {code:}

JDK 8 (Unsupported)

0.28.1 – BlockCard datasource, Wiki Markup whitespace, empty paragraph, Hex3 colors

  • 52: Support blockCard with datasource type
  • 53: Improved handling of whitespace and special chars
  • 54: Adopting checkstyle
  • 55: Wiki CLI: validate
  • 51: Paragraphs use empty content instead of omitting it entirely
  • 50: Support 3-digit hex like #ccc
  • 43: Add support for controlling whether or not a trailing / is appended to URLs that have an empty path
  • 44: Better URI validation
  • 47: InternalMediaNode interface common to media and mediaInline
  • 49: media nodes with type set to link are deprecated
  • 44: Preserve mailto: prefix during text fallback
  • 47: Finish implementing mediaInline

0.26.0 – MediaSingle widthType

  • 46: Support mediaSingle with widthType

0.25.1 – Markdown, color format, URI validation

  • 45: Experimental Markdown parser improvements
  • 37: Support table with fragment mark and/or width attr
  • 41: Make tableCell and tableHeader write empty attrs map by default
  • 43: ADFEXP-548: Normalize color names to hex6 representation
  • 44: Better URI validation
  • 45: Experimental Markdown parser

0.24.3 – Wiki markup fixes, mediaSingle visitor, table.localId, ADF sanitizer

  • 39: Fixes for wiki markup list conversions
  • 40: Include empty text and accessLevel attrs in mention by default
  • 35: Fix visitors for mediaSingle (transformDescendants, etc.)
  • 36: Support table with localId
  • 34: Port ADF sanitizer from TypeScript

0.23.4 – Custom panels, tolerate 1.0 as version, wiki conversion fixes, media border

  • ADFEXP-463: Improve custom panel support
  • Fix bitbucket pipeline
  • 32: Tolerate version 1.0 instead of the usual 1
  • 28: Wiki conversion sets orderedList to order of 1 by default
  • 29: codeBlock write empty attrs map by default
  • 25: Support media with border mark
  • 26: Fix ArrayIndexOutOfBoundsException when converting wiki to mediaGroup
  • 27: Fix * paragraphs

0.22.2 – Conversion limits, plain text rendering fix, wiki macros in lists, wiki escaping

  • JGQL-1424: Fix plain text rendering of mediaSingle to be [media]
  • 24: Add ability to set limits with naïve enforcement
  • ADFEXP-371: Improve handling of macros in list items
  • 22: Fix wiki escaping of text that looks like a mediaGroup
  • 23: Add warm-up

0.21.0 – Performance, marker interfaces, plaintext

  • 18: More performance improvements
  • 20: Marker interfaces for the various mark types
  • 21: Add plaintext rendering

0.19.0 – Performance, URI parsing

  • 18: Performance improvements
  • 19: More URI schemes
  • Add markClass() and more mark factories
  • Assorted bug fixes and tests

0.18.0 – Schema validator

  • 17: Implement schema validator

Spike (Unsupported)

0.17.0 – Nicer defaults

  • 16: Nicer defaults instead of requiring client to specify garbage, such as .collection("") on a media node.

0.16.0 – Deprecation cleanup

  • 15: Remove deprecated WikiMarkupTransformer from old package

0.15.1 – Initial wiki markup support

  • 13: Move WikiMarkupTransformer to better package (and deprecate old location)
  • 9: Add wiki markup conversion
  • 14: Add CLI for exploring wiki markup conversions

0.14.1 – Docs, Jackson security fix, general cleanup

  • 12: General clean-up in preparation for implementing wiki markup conversions
  • 8: Add quick start guide
  • 11: JDK 11 fix-ups
  • 11: Jackson2 version bump to address VULN in databind

0.12.0 – Node.copy()

  • 7: Implement deep copy for nodes

0.11.0 – URI parsing

  • 6: Improve URL vs URI behaviors and document them better

0.10.0 – Parser hardening

  • 5: Relax input validation to reduce risk of exceptions when parsing real ADF produced by the editor

0.9.1 – Minor fixes to MediaSingle width and extension marker types, mediaSingle in tables

  • RLSS-3262: Allow mediaSingle node to use integer value for width
  • 4: extension should be allowed as NonNestableBlockContent
  • 3: mediaSingle should be allowed in tableCell and tableHeader

0.8.0 – Tolerate mentions with blank access levels

  • 2: Relax mention node's accessLevel attr to be any string instead of requiring it to match enum, because the real editor often uses "" for it.

0.7.0 – Move to closed-source poms

  • Give up on open-source, for now

0.6.0 – Better exceptions, Jackson security fix

  • VULN-944816: Bump jackson to fix DoS
  • 1: Use bespoke exception classes

0.5.1 – Media builders; Hello world!

  • Fix builders for media (methods weren't public)
  • Major rework of the entire library from earlier experimental code

Rate this page: