Confluence Storage Format

On this page

Still need help?

The Atlassian Community is here for you.

Ask the community

This page describes the XHTML-based format that Confluence uses to store the content of pages, page templates, blueprints, blog posts, and comments. This information is for advanced users who need to interpret or edit the underlying markup of a Confluence page.

We refer to the Confluence storage format as "XHTML-based." Technically, it's XML, since the storage format doesn't fully comply with the XHTML definition. For example, Confluence includes custom elements for macros and other features. We use the term "XHTML-based" to highlight that much of the storage format is similar to HTML.

More options  
and then View storage format.

On this page:

Storage Format Source Editor

Starting from the version 10.2.3, we’ve bundled Storage Format Source Editor with Confluence.

By default, the Source Editor is disabled for all users, including admins. Admins can open Source Editor Configuration and grant access to specific groups or to all users.

 With the Storage Format Source Editor, you can edit the storage format of Confluence pages. Advanced users can review the XHTML source of a page to diagnose and troubleshoot content issues. You can use the Source Editor to:

  • Edit macro parameters

  • Update link URLs

  • Change image names

  • Fix formatting errors

  • Search for values and replace them

Before you begin

When you upgrade to a Confluence version that includes the bundled Storage Format Source Editor app, the upgrade is automatic in most cases. However, keep the following in mind:

  • If you’re using Storage Format Source Editor versions 19.3.22, 19.3.29, 19.3.30, or 19.5.22, uninstall the app before upgrading your Confluence.

  • If you uninstall and then reinstall the app, your previous configuration will be restored automatically.

  • When you upgrade Confluence, any existing Source Editor permissions will carry over to the new version, so your setup won’t be disrupted.

Granting access to the Source Editor

To grant access to the Source Editor, open the Administration menu gear, and then go to Source Editor Configuration.

Permissions window for the Source Editor in Confluence Administration menu

Using the Source Editor

To open the Source Editor:

  1. Open the Confluence editor. How to use the editor

  2. In the editor toolbar, select the Source Editor icon <>.

Source editor icon in the confluence editor

The XHTML source of a page will open in the Source Editor.

Source editor window in Confluence

warning If you select More options, then View source, you'll see the editor panel format, not the storage format of the page.

Headings

Format type

In Confluence 4.0 and laterWhat you will get
Heading 1
<h1>Heading 1</h1> 

Heading 2
<h2>Heading 2</h2> 

Heading 3
<h3>Heading 3</h3> 

Headings 4 to 6 are also available and follow the same pattern

Text effects

Format type

In Confluence 4.0 and laterWhat you will get
strong/bold
<strong>strong text</strong>
strong
emphasis
<em>Italics Text</em>
emphasis
strikethrough
<span style="text-decoration: 
line-through;">
strikethrough</span>
strikethrough
underline
<u>underline</u>
underline
superscript
<sup>superscript</sup>
superscript
subscript
<sub>subscript</sub>
subscript
monospace
<code>monospaced</code>
monospaced
preformatted
<pre>preformatted text</pre>



preformatted text
block quotes
<blockquote>
<p>block quote</p>
</blockquote>
block quote
text color
<span style="color: rgb(255,0,0);">red text
</span>
red text
small
<small>small text</small>



small text

big
<big>big text</big>

big text

center-align
<p style="text-align: center;">centered text
</p>
centered text
right-align
<p style="text-align: right;">right aligned text
</p>

right aligned text

Text breaks

Format type

In Confluence 4.0 and laterWhat you will get
New paragraph
<p>Paragraph 1</p>

<p>Paragraph 2</p>

Paragraph 1

Paragraph 2

Line break
Line 1 <br /> Line 2

Note: Created in the editor using Shift + Return/Enter

Line 1
Line 2 
Horizontal rule
<hr />

— symbol

&mdash;

– symbol
&ndash;

Lists

Format type

In Confluence 4.0 and laterWhat you will get
Unordered list – round bullets
<ul>

<li>round bullet list item</li>
</ul>
  • Round bullet list item
Ordered list (numbered list)
<ol>

<li>numbered list item</li>
</ol> 
  1. Ordered list item
Task Lists
<ac:task-list>
    <ac:task>
        <ac:task-status>incomplete</ac:task-status>
        <ac:task-body>task list item</ac:task-body>
    </ac:task>
</ac:task-list>
  • task list item

Format type

In Confluence 4.0 and laterWhat you will get
Link to another Confluence page
<ac:link>
<ri:page ri:content-title="Page Title" />
<ac:plain-text-link-body>
 <![CDATA[Link to another Confluence Page]]>
</ac:plain-text-link-body>
</ac:link> 
Link to another Confluence page
Link to an attachment
<ac:link>
<ri:attachment ri:filename="atlassian_logo.gif" />
<ac:plain-text-link-body>
 <![CDATA[Link to a Confluence Attachment]]>
</ac:plain-text-link-body>
</ac:link>
Link to an attachment
Link to an external site
<a href="http://www.atlassian.com">Atlassian</a>
Atlassian
Anchor link (same page)
<ac:link ac:anchor="anchor">
  <ac:plain-text-link-body>
    <![CDATA[Anchor Link]]>
  </ac:plain-text-link-body>
</ac:link>
Anchor Link
Anchor link (another page)
<ac:link ac:anchor="anchor">
  <ri:page ri:content-title="pagetitle"/>
  <ac:plain-text-link-body>
    <![CDATA[Anchor Link]]>
  </ac:plain-text-link-body>
</ac:link>
Anchor Link
Link with an embedded image for the body
<ac:link ac:anchor="Anchor Link">
  <ac:link-body>
	<ac:image><ri:url ri:value="http://confluence.atlassian.com/
images/logo/confluence_48_trans.png" /></ac:image>
  </ac:link-body>
</ac:link>

For rich content like images, you need to use ac:link-body to wrap the contents.


A note about link bodies

All links received from the editor will be stored as plain text by default, unless they are detected to contain the limited set of mark up that we allow in link bodies. Here are some examples of markup we support in link bodies.

An example of different link bodies
<ac:link>
  <!-- Any resource identifier --> 
  <ri:page ri:content-title="Home" ri:space-key="SANDBOX" /> 
  <ac:link-body>Some <strong>Rich</strong> Text</ac:link-body>
</ac:link>
<ac:link>
  <ri:page ri:content-title="Plugin developer tutorial stuff" ri:space-key="TECHWRITING" />
  <ac:plain-text-link-body><![CDATA[A plain <text> link body]]></ac:plain-text-link-body>
</ac:link>
<ac:link>
  <ri:page ri:content-title="Plugin developer tutorial stuff" ri:space-key="TECHWRITING" />
  <!-- A link body isn't necessary. Auto-generated from the resource identifier for display. --> 
</ac:link>


The markup tags permitted within the <ac:link-body> are <b>, <strong>, <em>, <i>, <code>, <tt>, <sub>, <sup>, <br> and <span>.

Images

Format type

In Confluence 4.0 and laterWhat you will get
Attached image
<ac:image>
<ri:attachment ri:filename=
"atlassian_logo.gif" />
</ac:image>
External image
<ac:image>
<ri:url ri:value="http://confluence.atlassian.com/
images/logo/confluence_48_trans.png" /></ac:image>

Supported image attributes (some of these attributes mirror the equivalent HTML 4 IMG element): 

NameDescription
ac:alignimage alignment
ac:borderSet to "true" to set a border
ac:classcss class attribute.
ac:titleimage tool tip.
ac:stylecss style
ac:thumbnailSet to "true" to designate this image as a thumbnail.
ac:altalt text
ac:heightimage height
ac:widthimage width
ac:vspacethe white space on the top and bottom of an image
ac:hspacethe white space on the left and right of an image

Tables

Format type

In Confluence 4.0 and laterWhat you will get 
Two column, two row (top header row)
<table>

<tbody>
  
<tr>
    
<th>Table Heading Cell 1</th>
    
<th>Table Heading Cell 2</th>
  </tr>
  
<tr>
    
<td>Normal Cell 1</td>
    
<td>Normal Cell 2</td>
  </tr>
</tbody>
</table> 
Table Heading Cell 1Table Heading Cell 2
Normal Cell 1Normal Cell 2
Two column, three rows, 2nd and third with merged cells in first row
<table>

<tbody>
  
<tr>
    
<th>Table Heading Cell 1</th>
    
<th>Table Heading Cell 2</th>
  </tr>
  
<tr>
    
<td rowspan="2">Merged Cell</td>
    
<td>Normal Cell 1</td>
  </tr>
  
<tr>
    
<td colspan="1">Normal Cell 2</td>
  </tr>
</tbody>
</table> 
Table Heading Cell 1Table Heading Cell 2
Merged CellNormal Cell 1
Normal Cell 2

Page layouts

Confluence supports page layouts directly, as an alternative to macro-based layouts (using, for example, the section and column macros). This section documents the storage format XML created when these layouts are used in a page.

Element nameIn Confluence 5.2 and laterAttributes
ac:layout

Indicates that the page has a layout. It should be the top level element in the page.

None
ac:layout-section

Represents a row in the layout. It must be directly within the ac:layout tag. The type of the section indicates the appropriate number of cells and their relative widths.


ac:type
ac:layout-cellRepresents a column in a layout. It must be directly within the ac:layout-section tag. There should be an appropriate number of cells within the layout-section to match the ac:type.None

The recognized values of ac:type for ac:layout-section are:

ac:type

Expected number of cells

Description

single

1One cell occupies the entire section.
two_equal 2Two cells of equal width.
two_left_sidebar 2A narrow (~30%) cell followed by a wide cell.
two_right_sidebar 2A wide cell followed by a narrow (~30%) cell.
three_equal 3Three cells of equal width.
three_with_sidebars 3A narrow (~20%) cell at each end with a wide cell in the middle.

The following example shows one of the more complicated layouts from the old format built in the new. The word {content} indicates where further XHTML or Confluence storage format block content would be entered, such as <p> or <table> tags.

<ac:layout>
  <ac:layout-section ac:type="single">
     <ac:layout-cell>
        {content}
     </ac:layout-cell>
  </ac:layout-section>
 <ac:layout-section ac:type="three_with_sidebars">
     <ac:layout-cell>
       {content}
     </ac:layout-cell>
     <ac:layout-cell>
       {content}
     </ac:layout-cell>
     <ac:layout-cell>
       {content}
     </ac:layout-cell>
  </ac:layout-section>
  <ac:layout-section ac:type="single">
     <ac:layout-cell>
        {content}
     </ac:layout-cell>
  </ac:layout-section>
</ac:layout>

Emojis

Format type

In Confluence 4.0 and laterWhat you will get
Emoticons
<ac:emoticon ac:name="smile" />

(smile)


<ac:emoticon ac:name="sad" />
(sad)

<ac:emoticon ac:name="cheeky" />
(tongue)

<ac:emoticon ac:name="laugh" />
(big grin)

<ac:emoticon ac:name="wink" />
(wink)

<ac:emoticon ac:name="thumbs-up" />
(thumbs up)

<ac:emoticon ac:name="thumbs-down" />
(thumbs down)

<ac:emoticon ac:name="information" />
(info)

<ac:emoticon ac:name="tick" />
(tick)

<ac:emoticon ac:name="cross" />
(error)

<ac:emoticon ac:name="warning" />
(warning)

Resource identifiers

Resource identifiers are used to describe "links" or "references" to resources in the storage format. Examples of resources include pages, blog posts, comments, shortcuts, images and so forth. 

Resource

Resource identifier format
Page
<ri:page ri:space-key="FOO" ri:content-title="Test Page"/>

Notes:

  • ri:space-key: (optional) denotes the space key. This can be omitted to create a relative reference.
  • ri:content-title: (required) denotes the title of the page.
Blog Post
<ri:blog-post ri:space-key="FOO" ri:content-title="First Post" ri:posting-day="2012/01/30" />

Notes:

  • ri:space-key: (optional) denotes the space key. This can be omitted to create a relative reference.
  • ri:content-title: (required) denotes the title of the page.
  • ri:posting-day: (required) denotes the posting day. The format is YYYY/MM/DD.
Attachment
<ri:attachment ri:filename>
	... resource identifier for the container of the attachment ...
</ri:attachment>

Notes:

  • ri:filename: (required) denotes the name of the attachment.
  • the body of the ri:attachment element should be a resource identifier denoting the container of the attachment. This can be omitted to create a relative attachment reference (similar to [foo.png] in wiki markup).

Examples:

Relative Attachment Reference
<ri:attachment ri:filename="happy.gif" />
Absolute Attachment Reference
<ri:attachment ri:filename="happy.gif">
	<ri:page ri:space-key="TST" ri:content-title="Test Page"/>
</ri:attachment>
URL
<ri:url ri:value="http://example.org/sample.gif"/>

Notes:

  • ri:value: (required) denotes the actual URL value.
Shortcut
<ri:shortcut ri:key="jira" ri:parameter="ABC-123">

Notes:

  • ri:key: (required) represents the key of the Confluence shortcut.
  • ri:parameter: (required) represents the parameter to pass into the Confluence shortcut.
  • The example above is equivalent to [ABC-123@jira] in wiki markup.
User
<ri:user ri:userkey="2c9680f7405147ee0140514c26120003"/>

Notes:

  • ri:userkey: (required) denotes the unique identifier of the user.
Space
<ri:space ri:space-key="TST"/>

Notes:

  • ri:space-key: (required) denotes the key of the space.
Content Entity
<ri:content-entity ri:content-id="123"/>

Notes:

  • ri:content-id: (required) denotes the id of the content.

Template variables

This screenshot shows a simple template:

The template contains the following variables:

Variable nameTypeValues
$MyTextSingle-line text
$MyMultiMulti-line textSize: 5 x 100
$MyListListList items: Apples,Pears,Peaches

The XML export produces the following code for the template:

<at:declarations>
  <at:string at:name="MyText" />
  <at:textarea at:columns="100" at:name="MyMulti" at:rows="5" />
  <at:list at:name="MyList">
    <at:option at:value="Apples" />
    <at:option at:value="Pears" />
    <at:option at:value="Peaches" />
  </at:list>
</at:declarations>


<p>This is Sarah's template</p>

<p>A single-line text variable:&nbsp;<at:var at:name="MyText" /></p>

<p>A multi-line text variable:&nbsp;<at:var at:name="MyMulti" /></p>

<p>A selection list:&nbsp;<at:var at:name="MyList" /></p>

<p>End of page.</p>

Instructional Text

Instructional text allows you to include information on how to fill out a template for an end-user (the person using creating a page from the template). Instructional text will:

  • automatically clear all instructional text as the user types in a specific text block, and
  • automatically trigger a @mention prompt for user selection (for 'mention' type instructional text).

Screenshot: Example of instructional text.

<ul>
    
<li><ac:placeholder>This is an example of instruction text that will get replaced when a user selects the text and begins typing.</ac:placeholder></li>
</ul>
<ac:task-list>
    <ac:task>
        <ac:task-status>incomplete</ac:task-status>
        <ac:task-body><ac:placeholder ac:type="mention">@mention example. This placeholder will automatically search for a user to mention in the page when the user begins typing.</ac:placeholder></ac:task-body>
    </ac:task>
</ac:task-list>
Last modified on Feb 3, 2026

Was this helpful?

Yes
No
Provide feedback about this article
Powered by Confluence and Scroll Viewport.