Preparing for Confluence 11.0
This documentation is intended for Confluence developers who want to ensure that their existing plugins and apps are compatible with Confluence 11.0.
Watch this page to find out when a new milestone is available and what’s changed. We will publish formal release notes once we release a beta.
Latest milestones
8 September 2026 | 11.0.0-beta3 |
Issues with this milestone?
Hit the Feedback button on the Confluence EAP header or raise an issue to tell us about it.
On this page:
Planned changes
In this section we'll provide an overview of the changes we intend to make, so you can start thinking how it might impact your app. We'll indicate when a change has been implemented, and in which milestone.
This release only supports Data Center licenses. If you have a Server license, check out your options for upgrading.
AUI 11 Visual Refresh
Status: DONE
AUI 11 is coming with Jira 12, Confluence 11, Bitbucket 11, Bamboo 13, and Crowd 8. See Introducing AUI 11 (Jira 12, Confluence 11, Bitbucket 11, Bamboo 13, Crowd 8)
Asynchronous Macro Execution
Status: DONE
Confluence Data Center now supports asynchronous macro execution — a major performance capability that changes how macros are rendered on a page.
Previously, every macro on a Confluence page was executed sequentially on the same HTTP request thread. The browser couldn't receive the page until every last macro had finished — meaning a single slow macro (e.g. a Jira query or a blog-posts roll-up) could block an entire page load for all users.
With this release, macros can be configured to execute asynchronously and concurrently in a dedicated thread pool. The HTTP request thread is freed immediately, and macro results are assembled as they complete. For pages with multiple slow macros, this can dramatically reduce perceived load time.
Configuration required: Yes (opt-in per macro, admin setup)
Concurrent execution
Multiple macros on the same page can now execute in parallel rather than sequentially, significantly reducing total page render time.
Deduplication
If multiple users request the same page simultaneously, identical macro executions (same macro, same parameters, same content) can be deduplicated — one execution runs and its result is shared, avoiding redundant parallel work.
Configurable timeouts and rate limits
Administrators can set per-macro time limits and concurrency limits via the REST API, with global defaults configurable via JVM system properties. If a macro exceeds its time limit, Confluence can signal it to stop gracefully.
Result caching (opt-in)
Macro results can be cached per-user on each node, so repeat visits to the same page don't re-execute expensive macros. Cache TTL and size are configurable.
Execution cancellation
Administrators can cancel in-flight macro executions in real time — by execution ID, by macro name, or all at once — via REST API. Macro developers can implement graceful cancellation support.
Observability
Active macro executions are visible in real time, both via REST API and (on clustered setups) in the Confluence Clustering UI. A scheduled analytics job publishes execution statistics for monitoring.
Safe fallback
If the async thread pool is saturated (queue full or queue latency exceeded), macros fall back to synchronous execution automatically. No requests are dropped.
How to get started
This feature is disabled by default and requires administrator configuration:
Enable the dark feature
atlassian.macros.async.executionin Confluence Dark FeaturesUse the REST API (
PUT /rest/asyncmacros/latest/execution-controls) to configure which macros run asynchronouslyOptionally tune thread pool and timeout settings via JVM system properties
See the full Administrator & Developer User Guide for step-by-step instructions.
Macro developer impact
Existing macros are not affected unless an administrator explicitly enables async execution for them via the REST API. Macro developers who want to support graceful cancellation should implement isCancellable() and handle InterruptedException / ExecutionCancellationContextThreadLocal.isCancelled(). To enable result caching, implement isCacheable().
Atlassian Keyboard Shortcuts Upgrade
Status: DONE
The com.atlassian.plugins.shortcuts:atlassian-shortcuts-plugin was upgraded from 6.0.2 to 6.1.7 in Confluence 11 to provide compatibility with the Content Security Policy.
While the new minor version is backward compatible, there’s an undocumented feature that may have been used in Marketplace apps for triggering editor operations in the <operation> tag which changes.
Code in Confluence 10 and older:
<keyboard-shortcut key="tinymce.h1" i18n-name="admin.keyboard.shortcut.tinymce.h1" name="Heading 1">
<description key="tinymce.advanced.h1"/>
<shortcut>[Ctrl+1]</shortcut>
<operation type="execute">FormatBlock-h1</operation>
<context>tinymce.block</context>
</keyboard-shortcut>
From Confluence 11, the <operation> requires explicit Javascript code:
<keyboard-shortcut key="tinymce.h1" i18n-name="admin.keyboard.shortcut.tinymce.h1" name="Heading 1">
<description key="tinymce.advanced.h1"/>
<shortcut>[Ctrl+1]</shortcut>
<operation type="execute">FormatBlock-h1</operation>
<operation type="execute">require('tinymce').activeEditor.execCommand('FormatBlock-h1')</operation>
<context>tinymce.block</context>
</keyboard-shortcut>
More details about keyboard shortcuts module can be found in the documentation.
Complete removal of Bandana and XStream
Status: DONE
After making Bandana read-only in Confluence 10.0, we will remove Bandana entirely in Confluence 11.0. For security reasons, Confluence 11.0 will also no longer bundle the XStream library.
The following packages will be removed and will no longer be available to plugins:
com.atlassian.bandana*com.atlassian.confluence.setup.bandana*com.atlassian.confluence.setup.xstream*com.thoughtworks.xstream*
Direct access to the Bandana database table will no longer be possible in Confluence 11.0.
Apps that currently use Bandana must migrate to alternative storage (for example, Active Objects or SAL Plugin Settings) before upgrading to 11.0.
For more information, go to Preparing for Confluence 10.0.
To make this feasible for vendors, upgrade to Confluence 11.0 will be supported only from the latest Confluence 10.2 release. You must first upgrade to the latest Confluence 10.2 release before upgrading to Confluence 11.0.
The Bandana table will be automatically dropped on a successful upgrade. To retain the data, consider backing up the table before upgrading.
Complete removal of OpenSymphony PropertySet
Status: DONE
The following APIs that leverage PropertySet were made read-only in Confluence 10.0. They have been permanently removed in Confluence 11.0.
com.atlassian.confluence.user.ConfluenceUserPropertySetFactorycom.atlassian.confluence.user.UserAccessor#getPropertySetcom.atlassian.confluence.core.ConfluencePropertySetManager
Migrating data will no longer be possible in Confluence 11.0 - you must complete migration before you upgrade.
For migration guidance, refer to Preparing for Confluence 10.0 for more information.
Content Security Policy
Status: DONE
In Confluence 11, the content security policy (CSP) for the "script-src" directive has been introduced. The following adjustments apply (plugins must update their code to comply with these changes):
- All direct and indirect uses of eval are blocked.
- All inline scripts are blocked.
- Scripts loaded from other domains must be allowed via the CSP script-src header.
- Script tags with inline code must include a nonce attribute.
- Keyboard shortcuts with operation type execute are no longer supported.
How is script-src CSP enabled
Confluence 11 enables this by default alongside existing policies. Only system administrators can disable this feature via the configuring of system properties:
http.header.security.content.security.policy.strictness.enabled
(e.g. -Dhttp.header.security.content.security.policy.strictness.enabled=false)
The CSP report-only mode is disabled when the property CSP is enabled (set to true).
There is also a system property http.header.security.content.security.scriptsrc.additional.urls that let admins to allow external scripts if they need.
Handling eval removal
Remove eval and eval-like operations from the codebase. They are harmful and have no safe alternative. Implement features without eval and block direct and indirect uses. Examples include:
Function constructor
Calls to setTimeout or setInterval with string arguments
Dynamically adding scripts using
.htmlor.writeusages of underscore’s template method (_.template) will not work as it would throw an eval violation
Handling keyboard shortcut operations
Previously supported tinymce editor keyboard shortcut operations like <operation type="execute">FormatBlock-h1</operation> (inside a <keyboard-shortcut> block of the plugin descriptor) now need to be explicitly converted to a function call. Example:
<operation type="execute">require('tinymce').activeEditor.execCommand('FormatBlock-h1')</operation>
Handling inline scripts
Remove inline and add event handlers along with handling key events where applicable
Move code in script tags to separate js file or add nonce attribute to the script tag
Adding nonce in VM files<script type="text/javascript" nonce="$!request.getAttribute('cspNonceId')">Adding nonce in soy files// Get nonce value from request object public String getNonceId() { HttpServletRequest request = getActiveRequest(); if (request != null) { Object nonceId = request.getAttribute("cspNonceId"); return nonceId != null ? nonceId.toString() : ""; } return ""; } // Set the nonceId to the soy files data mapping .put("nonceId", getNonceId()) // set the nonce value in the template <script type="text/javascript" {if $nonceId}nonce="{$nonceId}"{/if}>- For scripts using external urls, allow the domain in the CSP HeaderAdd the following dependency in your pom file.
<dependency> <groupId>com.atlassian.security</groupId> <artifactId>atlassian-secure-api</artifactId> <scope>provided</scope> </dependency>Create a CSP fragment in atlasian-plugin.xml<csp name="onboarding-youtube-scripts" key="onboarding-csp-fragment" class="<FULL CLASS PATH LIKE(COM.YOUR.APP.CLASS)>"/>Create the Class Filepackage <PACKAGE_NAME> import com.atlassian.security.csp.api.CspDirective; import com.atlassian.security.csp.api.CspFragment; import java.net.URI; import java.util.Set; /** * CSP Fragment to whitelist a url * Registered via the {@code <csp>} module descriptor in atlassian-plugin.xml. */ public class CLASS_NAME implements CspFragment { private static final Set<URI> SCRIPT_ORIGINS = Set.of( URI.create("<URL>") ); @Override public Set<CspDirective> getCSPDirectives() { return Set.of(CspDirective.SCRIPT_SRC); } @Override public Set<URI> getCSPOrigins(CspDirective cspDirective) { if (CspDirective.SCRIPT_SRC == cspDirective) { return SCRIPT_ORIGINS; } return Set.of(); } @Override public Set<String> getUrlPatterns() { return Set.of("/**"); } }
Custom HTML Editing Now Disabled by Default
Status: DONE
To improve security, editing custom HTML is now disabled by default. If you need to enable custom HTML, set the confluence.custom.html.config.enabled system property to true. Only system administrators can enable this feature.
How to configure system properties
Fair Journal Index Queue
Status: DONE(enabled by default from 11.0.0-m202)
The content index queue is now drained fairly across content types instead of strictly in queue order. Entries are grouped by content type (pages and blogs, attachments, comments, user profiles, custom content, other), each with its own checkpoint, and each cycle takes entries round-robin across the groups. A bulk operation on one content type — a mass attachment upload, a space import — can no longer delay indexing of everything queued behind it. Queue depth per content type is shown on the Content indexing admin page.
Applies to the content index journal (main_index) only; other journals keep the linear path.
Configuration required: No. To turn it off, disable the confluence.fair.journal.index.queue dark feature.
Fair Journal Index Queue Concurrent Processing
Status: DONE (enabled by default from 11.0.0-beta3)
Each batch taken from the fair index queue is now indexed by a pool of worker threads instead of one, increasing throughput on multi-core nodes. Entries are chunked by content identity — same content always in the same chunk, in queue order — and chunks run in parallel, each worker on its own Hibernate session. The pool is sized from the CPUs available to the JVM (capped at 50) and gives each worker at least 100 entries. Per-group ordering is preserved, and a checkpoint only advances over a confirmed run of entries.
Configuration required: No. Requires the fair journal index queue to be enabled. To fall back to serial processing, disable the confluence.fair.journal.index.queue.parallel.processing dark feature — the gate is read every cycle, so no restart is needed.
Frontend AMD and WRM Resources Removal
Status: DONE
Confluence file dialog view
Removed AMD
confluence-editor/files/file-dialog/file-dialog-viewRemoved JavaScript global
Confluence.Editor.FileDialog.FileDialogView
Confluence placeholder
Removed AMD
confluence/placeholderRemoved JavaScript globals
AJS.Confluence.Binder.placeholderConfluence.Binder.inputDefaultText
Replacement: placeholder HTML attribute - HTML | MDN
Confluence position
Removed JavaScript globals
AJS.PositionReplacement: AMD module
confluence/position
Confluence tooltip
Removed WRM
confluence.web.resources:tooltipcom.atlassian.confluence.plugins.confluence-frontend:tooltip
Removed AMD module
confluence/tooltipRemoved the global
AJS.TooltipReplacement: AUI Tooltip component
Confluence underscore
Removed WRM
confluence.web.resources:underscoreReplacement:
com.atlassian.confluence.plugins.confluence-frontend:underscore
HttpClient 4 Removal
Status: DONE
We're removing Apache HttpClient 4 because this version is no longer actively developed and has reached its end of life. To ensure the security and stability of our next major versions, HttpClient 4 will no longer be available as a core platform dependency.
If your app relies on Apache HttpClient or another HTTP client, you'll need to embed and manage it as your own dependency. To prepare for this change, review your code for any imports from org.apache.http.* or any usage of com.atlassian.httpclient.apache.httpcomponents that assume the library is provided by the platform. You should also verify that your apps don’t rely on the transitive exposure of HttpClient 4 through Atlassian HttpClient, as the library will be removed from the platform classpath.
JNDI Sanitisation
Status: DONE
To reduce RCE risks, we’ve sanitized Java Naming and Directory Interface (JNDI) locations across Data Center. We restricted locations to the java: prefix or permitted relative prefixes jdbc/ and mail/. This change affects lookup, doLookup, lookupLink, and rename methods.
We’ve also deleted some OSWorkflow packages to further mitigate JNDI vulnerabilities and reduce maintenance.
The following packages and their classes have been removed from OSWorkflow:
com.opensymphony.workflow.timercom.opensymphony.workflow.utilcom.opensymphony.workflow.soapcom.opensymphony.workflow.ejbcom.opensymphony.workflow.spi.ejbcom.opensymphony.workflow.util.ejb.localcom.opensymphony.workflow.util.ejb.remotecom.opensymphony.workflow.spi.hibernatecom.opensymphony.workflow.loadercom.opensymphony.workflow.spi.hibernate3com.opensymphony.workflow.spi.jdbccom.opensymphony.workflow.spi.ojbcom.opensymphony.workflow.spi.prevayler
JQuery 4 upgrade
Status: DONE
We’re upgrading to jQuery 4 to align all Data Center products on a single version. This update will make developing cross-product apps easier, especially for products currently using older versions of jQuery. As part of this change, we're also removing jQuery migrate.
Because much of our frontend code depends on jQuery, this upgrade will likely require updates to your apps and custom integrations. To help you prepare, we’re backporting as many compatible changes as possible to the following product versions:
Jira Software 11.3
Jira Service Management 11.3
Confluence 10.2
Bamboo 12.1
Bitbucket 10
Crowd 7
This allows you to test your apps for jQuery 4 compatibility without worrying about other breaking changes.
Additionally, AUI 10.1 now supports jQuery 4. We’ll continue to provide jQuery web resources and ask that you use them so we can roll out security patches quickly when needed. While jQuery 4 will be included in future Early Access Program (EAP) releases, it might not be available in the first few versions.
JQuery plugins removal
Status: DONE
As part of the jQuery upgrade, we have removed the following jQuery plugins from Confluence and no replacement is provided.
Autocomplete plugin
Removed WRM
confluence.web.resources:jquery-autocompletecom.atlassian.confluence.plugins.confluence-frontend:jquery-autocomplete
Removed AMD
confluence/autocompleteRemoved jQuery plugin
$.fn.autocompleteReplacements:
Fancybox plugin
Usage (unsupported from 11.0): $jqueryElement.fancybox([settings])
Replacement: not provided, plugins need to bundle their own copy of the plugin if needed.
Removed web-resources:
com.atlassian.confluence.plugins.confluence-frontend:jquery-fancy-boxconfluence.web.resources:fancy-box
JSON plugin
Usage (unsupported from 11.0): $.toJSON(str)
Replacement: JSON.stringify() - JavaScript | MDN
Removed web-resources:
com.atlassian.confluence.plugins.confluence-frontend:jquery-json
Mousewheel plugin
Usage (unsupported from 11.0): $jqueryElement.on('mousewheel', handler)
Replacement: Element: wheel event - Web APIs | MDN
Progressbar plugin
Removed WRM
confluence.web.resources:jquery-progressbarRemoved jQuery prototype
$.fn.progressBarReplacements:
Viewport plugin
$jqueryElement.viewport([settings])
Replacement: not provided, plugins need to bundle their own copy of the plugin if needed.
Jackson 3 Upgrade
Status: DONE
We’re upgrading the Jackson dependency from version 2 to 3. If your app depends on Jackson for REST modules, we recommend testing your integration early to ensure compatibility with version 3. The official Jackson 3 upgrade guide can be found at Jackson 3 Migration Guide
Libraries migrated and moved:
- confluence-rest-jersey-jackson2 is renamed to confluence-rest-jersey-jackson, including the package rename to be com.atlassian.confluence.plugins.rest.jersey.jackson
(instead of jackson2.*). - confluence-rest-plugin-
jackson2 is renamed to confluence-rest-plugin-jackson,including a package rename to com.atlassian.confluence.plugins.rest.jackson.* (instead of jackson2.*). - New Jackson3 rest module confluence-rest-serialization-jackson3 as drop-in replacement of confluence-rest-serialization-jackson2
- Jackson2Soy now renamed to Jackson3Soy
If you have any tests that build any ObjectMapper objects, you may also need to specify the Jakarta annotations library:
<!-- Jackson 3 jakarta-xmlbind module is required transitively when a unit test
builds a real ObjectMapper (jackson-databind itself is visible via provided scope). -->
<dependency>
<groupId>tools.jackson.module</groupId>
<artifactId>jackson-module-jakarta-xmlbind-annotations</artifactId>
<scope>test</scope>
</dependency>
Jakarta 11 and Spring 7 upgrade
Status: DONE
We’re migrating to Jakarta 11 and Spring 7 to keep our technology stack current.
Jakarta 11 upgrade
Most Jakarta APIs in the Atlassian ecosystem have undergone only minor updates, indicating backward-compatible changes. While major updates may affect specific use cases, we expect less impact than the previous migration from Jakarta 8 to Jakarta 10. We recommend reviewing the official Jakarta documentation to understand how these updates might affect your work. Refer to the Jakarta documentation for more details
Spring 7 upgrade
While key concepts remain stable and some apps may work without recompilation, this upgrade carries similar complexity to the Spring 6 migration. Certain advanced features may change and require updates. We recommend reviewing the official Spring documentation to understand how these updates might affect your work. Refer the Spring documentation for more details
Java 25 is Now the Minimum Supported Version
Status: DONE
Java 25 is the minimum supported version for both compile and runtime environments. To ensure a smooth transition, we’ve confirmed that all platform apps support Java 25 through dedicated CI testing.
Joda-Time removal
Status: DONE
Confluence Data Center core will no longer provide Joda-Time as a runtime dependency or OSGi export. A migration to java.time is strongly recommended. As an interim measure, Plugins may temporarily bundle their own package-private Joda jar, as long as Joda types do not cross plugin boundaries.
Jsoup 1.22.2 upgrade
Status: DONE
To upgrade to Jsoup 1.22.2 safely in Confluence 11, use com.atlassian.confluence.util.JsoupUtil.parse() instead of org.jsoup.Jsoup.parse() for HTML parsing.
Upgrade Recommendation
Target library: Jsoup 1.22.2
Affected versions: Confluence 9.2.23, 10.2.15, and 11
Old method:
org.jsoup.Jsoup.parse()New method:
com.atlassian.confluence.util.JsoupUtil.parse()
Code Migration Steps
Replace direct calls to
Jsoup.parsewith the Confluence utility wrapper.Ensure proper import statements point to Atlassian's utility class.
Test HTML rendering behavior after updating.
Log4j 1.x API No Longer Available to Apps
Status: DONE
The log4j 1.x API is no longer part of the Confluence public API. Apps can no longer import the following package:
org.apache.log4j
An app that still imports it will fail to resolve when installed on Confluence 11.0. Log the same information through either of these, both of which are public API in Confluence 11.0:
org.slf4j— recommended. LoggerFactory.getLogger(MyClass.class) returns anorg.slf4j.Logger.org.apache.logging.log4j— the log4j 2 API, along withorg.apache.logging.log4j.messageandorg.apache.logging.log4j.util.
Most callers only need to change the import and the logger factory call. The common log4j 1.x methods (debug, info, warn, error) have direct SLF4J equivalents.
Logging Configuration Moved to log4j2.xml
Status: DONE
From Confluence 11.0, the log4j.properties format will no longer be used and is replaced by log4j2.xml. Below are the affected files:
Up to 10.2.x
WEB-INF/classes/log4j.propertiesWEB-INF/classes/log4j-diagnostic.properties
From Confluence 11.0
WEB-INF/classes/log4j2.xmlWEB-INF/classes/log4j2-diagnostic.xml
A log4j.properties left in place after an upgrade is ignored, not merged. Any logging customisation in it stops applying. Confluence logs a warning at startup when it finds one. If you customised logging, re-apply those changes to log4j2.xml before upgrading, then delete log4j.properties to silence the warning. Setting log levels at runtime through Logging and Profiling in the admin UI is unchanged.
Look and Feel layouts editing now disabled by default
Status: DONE
To improve security, configuring Look and Feel customization is now disabled by default. Admins can only view existing layout configurations. To enable look and feel customization, set the confluence.custom.look.and.feel.enabled system property to true. Only system administrators can enable this feature.
How to configure system properties
React 19 upgrade
Status: DONE
We're upgrading to React 19. React is a core frontend dependency in DC products and a dependency for other important frontend libraries such as Atlaskit. Because of this, Marketplace apps using React will also need to upgrade to React 19.
Areas affected by this upgrade:
com.atlassian.plugins:reactweb resource will now provide React 19Clientside Extensions (CSE) will now use React 19
As we learn more and develop tools to help with the migration, we will update the developer documentation.
More details can be found in community post at React 19 upgrade in Data Center (Jira 12, Confluence 11, Bitbucket 11, Bamboo 13, Crowd 8)
Removal of support for transformed plugins
Status: DONE
We are deleting all transformation code and infrastructure from the platform. This means the runtime transformation process, which previously converted older plugin formats at startup, will no longer exist.
If a user attempts to install or enable a transformed plugin, the UPM will block the action and display a clear error message. Any transformed plugins already installed will be forcibly disabled upon upgrading to a Platform 9-based product version.
To ensure your apps continue to work on Data Center Platform 9, you must migrate them to the "transformerless" format. The following guides might help you in this process:
We provide a conversion script to help automate this process. For further guidance and best practices, you can refer to our documentation on Spring Java configuration of app components.
Restore from Local Drive now disabled by default
Status: DONE
To improve application security, restoring of data from local drives is now disabled by default. To enable restoring of data from local drive , set confluence.restore.from.local.drive.enabled system property to true. Only system administrators can enable this feature via the configuring of system properties.
SSRF Protection: Default Outbound Denylist and Allowlist Enforcement
Status: DONE
To strengthen protection against Server-Side Request Forgery (SSRF) attacks, we have introduced a default outbound request denylist and extended allowlist enforcement to additional platform components. The denylist automatically blocks outbound connections to sensitive internal endpoints - such as cloud metadata services (AWS, Google Cloud, Azure) and link-local IP addresses - as well as dangerous non-HTTP protocols (e.g., file://, ftp://, ldap://).
Additionally, several platform components that previously bypassed the allowlist - including OAuth2, Gadgets, UPM/Marketplace, Application Links, and Webhooks - now respect the allowlist configuration, ensuring consistent outbound request filtering across the platform.
Why we are making this change
This work is being undertaken to address security vulnerabilities related to SSRF, which could allow attackers to use servers to make unauthorized requests to internal or external resources.
Default outbound denylist
A new hardcoded denylist has been added to the allowlist plugin that blocks outbound requests to known-dangerous destinations. The denylist is evaluated if the allowlist is disabled.
The denylist blocks:
Cloud Metadata Services: AWS, Google Cloud, and Azure instance metadata endpoints (
169.254.169.254,metadata.google.internal,metadata.azure.internal)AWS Metadata Service IP Ranges: The entire
169.254.0.0/16IPv4 range and thefd00:ec2::254IPv6 AWS metadata addressdangerous protocols:
file://,ftp://,gopher://,ldap://,dict://,smtp://,tftp://,ssh://,sftp://,jdbc://,mysql://,postgres://,ws://,smb://,jar://,phar://,nfs://loopback and localhost:
127.0.0.0/8,::1/128private networks:
10.0.0.0/8(Class A),172.16.0.0/12(Class B),192.168.0.0/16(Class C),fc00::/7(IPv6 ULA)
The denylist also performs DNS resolution of domain URIs to compare resolved IP addresses against IP/CIDR denylist rules, preventing bypasses via DNS rebinding or custom domain resolution to blocked IPs.
Allowlist enforcement extended to additional platform components
We've extended allowlist enforcement to several platform and product plugins that previously made outbound network requests without going through the allowlist. The following components now respect the allowlist configuration:
OAuth2: outbound requests made by the OAuth2 plugin
Gadgets: outbound requests made by the gadgets framework, such as gadget spec fetching, HTTP cache
UPM and Marketplace: outbound requests made by the UPM (Marketplace URLs are allowlisted by default)
Application Links: outbound requests made via application link connections
Webhooks: outbound requests made when delivering webhook events
If your app relies on any of these components to make outbound requests to external services, ensure those URLs are included in the allowlist configuration. Marketplace URLs are automatically allowlisted.
What you need to do
These protections are enabled by default and require no configuration, providing immediate out-of-the-box SSRF protection for Jira, Confluence, and JSM instances. If needed, administrators can disable the denylist via JVM system properties (e.g., -Dssrf.denylist.enabled=false), though this is not recommended for production environments.
To mitigate SSRF attacks, we ask you to configure a proper allowlist, which is an effective defense against SSRF. While a denylist can help protect against some obvious SSRF vulnerabilities, the ultimate solution should be a comprehensive allowlist.
More granular control of the denylist is achievable via the following system properties:
| Property | Default | Purpose |
|---|---|---|
| true | enables or disables the entire denylist |
| true | enables or disables DNS based IP checking |
| true | enables or disables the protocol denylist |
| | enables or disables the loopback/localhost ranges and the private networks |
V3 Attachment Storage Removal
Status: DONE
Confluence 8.1 introduced the v4 attachment layout and a background migration that moved attachment data from ver003 to v4. Confluence 11.0 removes version 3 (ver003) attachment storage entirely: the storage implementation, the automatic V3 → V4 migration, and the related APIs.
Note that the V3 → V4 migration no longer runs in Confluence 11.0 and must have been completed prior to upgrading.
Confluence Mobile Web Removal
Status: DONE
We have removed the legacy Confluence mobile web interface in Confluence 11.0. This change does not affect the Confluence Data Center mobile app.
When users access Confluence from a mobile browser, Confluence now prompts them to either:
download the Confluence Data Center mobile app, or
continue to the desktop version of Confluence in their browser.
Existing links to the former mobile interface redirect to the corresponding standard Confluence page where possible.
If your app uses resources, REST endpoints, or URLs provided by confluence-mobile-web, update it to use supported Confluence APIs and standard page URLs.
Implemented changes
In this section we'll provide details of changes we have implemented, organised by the milestone they are first available in. This will help you decide which milestone to use when testing.
Beta – 8 September 2026
Milestone 11.0.0-beta3
Contains:
Complete migration to Jackson 3
Removal of Log4j 1 (and migration to Log4j 2)
Removal of Joda time
Concurrent processing of the fair journal index queue
HttpClient 4 removal
Removal of OpenSymphony PropertySet
Minor Bug fixes, including fix for CONFSERVER-104454
EAP 08 - 5 August 2026
Milestone 11.0.0-m221
Contains:
Asynchronous macro execution
Minor bug fixes
EAP 07 - 13 July 2026
Milestone 11.0.0-m202
Contains:
Migration of REST to Jackson 3
Fair journal index queue implemented
Minor bug fixes
EAP 06 - 15 June 2026
Milestone 11.0.0-m177
Contains:
Minor bug fixes
EAP 05 - 02 June 2026
Milestone 11.0.0-m168
Contains:
Concurrent attachment uploads
Minor bug fixes
EAP 04 – 06 May 2026
Milestone 11.0.0-m148
Contains:
Look and Feel customization editing is now disabled by default
CSP strict mode enabled by default
JQuery Fancybox and JSON plugins removed
Minor bug fixes
EAP 03 – 08 April 2026
Milestone 11.0.0-m116
Contains:
A stricter Content Security Policy (CSP) is now configurable via a system property
A default outbound request denylist has been added as protection against SSRF
Minor bug fixes
JQuery 4
EAP 02 – 3 March 2026
Milestone 11.0.0-m79
Contains:
Look and Feel layouts editing now disabled by default
Minor bug fixes
EAP 01 – 10 February 2026
Milestone 11.0.0-m55
Contains:
Custom HTML editing now disabled by default
Minor bug fixes
Looking for updated documentation? Check out the Confluence EAP space for the latest docs.
Did you know we’ve got a new developer community? Head to community.developer.atlassian.com/ to check it out! We’ll be posting in the announcements category if when new EAP releases are available.