<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yamuno</title>
    <description>The latest articles on DEV Community by Yamuno (@yamuno101).</description>
    <link>https://dev.to/yamuno101</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3894350%2F6becc7cb-035b-4a32-98a2-71b6857aa7fd.png</url>
      <title>DEV Community: Yamuno</title>
      <link>https://dev.to/yamuno101</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yamuno101"/>
    <language>en</language>
    <item>
      <title>Jira Bulk Change: Edit Many Work Items at Once</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Tue, 03 Nov 2026 05:56:30 +0000</pubDate>
      <link>https://dev.to/yamuno/jira-bulk-change-edit-many-work-items-at-once-35b3</link>
      <guid>https://dev.to/yamuno/jira-bulk-change-edit-many-work-items-at-once-35b3</guid>
      <description>&lt;h1&gt;
  
  
  Jira Bulk Change: Edit Many Work Items at Once
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; In Jira Cloud, search for the work items you want, then open &lt;strong&gt;More actions (•••) &amp;gt; Bulk change all work items&lt;/strong&gt;. A four-step wizard lets you edit fields, transition, move, delete, or watch up to 1,000 work items in one go. You need the global &lt;strong&gt;Make bulk changes&lt;/strong&gt; permission plus the normal permissions in each space, and there is no undo, so check your search before you start.&lt;/p&gt;

&lt;p&gt;Bulk change is one of those Jira features people use a few times a year: closing out an old sprint, reassigning a leaver's work, fixing labels after an import, setting the missing resolution that keeps reports wrong. This guide walks through the native wizard, the JQL that makes it safe, the limits that trip people up, and what to do when the people who need bulk edits shouldn't be given the global permission.&lt;/p&gt;




&lt;h2&gt;
  
  
  What bulk change can do
&lt;/h2&gt;

&lt;p&gt;Jira's bulk change works on the results of a search. From those results you pick one operation:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Typical use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Change fields on all selected work items&lt;/td&gt;
&lt;td&gt;Set a fix version, add labels, change priority or assignee&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Transition&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Move work items through the workflow, filling any required fields&lt;/td&gt;
&lt;td&gt;Close a batch as Done with a resolution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Move&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Move work items to another space or work type&lt;/td&gt;
&lt;td&gt;Reorganise after a team change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Delete&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Delete the work items&lt;/td&gt;
&lt;td&gt;Remove test or duplicate items&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Watch / Stop watching&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Add or remove yourself as a watcher&lt;/td&gt;
&lt;td&gt;Follow a set of work items for a release&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Which fields you can edit depends on the work items you selected. If they come from spaces with different field configurations, Jira only offers the fields they have in common.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to bulk change work items in Jira Cloud
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Search&lt;/strong&gt; and select &lt;strong&gt;View all work items&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Filter the list to the work items you want. Switching to JQL is the most reliable way to do this (see the next section).&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;More actions (•••) &amp;gt; Bulk change all n work items&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose work items.&lt;/strong&gt; Every result is ticked. Untick anything you want to leave out, then select &lt;strong&gt;Next&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose operation.&lt;/strong&gt; Pick Edit, Transition, Move, Delete, or Watch, then &lt;strong&gt;Next&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operation details.&lt;/strong&gt; Set the new values. For Edit, tick each field you want to change and give it a value. For Transition, pick the transition and fill in any fields it requires, such as the resolution.&lt;/li&gt;
&lt;li&gt;Decide on notifications. Untick &lt;strong&gt;Send mail for this update&lt;/strong&gt; if you don't want everyone involved to get an email for every work item.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confirmation.&lt;/strong&gt; Read the summary and select &lt;strong&gt;Confirm&lt;/strong&gt;. Jira shows a progress page while it works through the items.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  JQL to pick the right work items
&lt;/h2&gt;

&lt;p&gt;The search is the most important part of a bulk change, because the wizard changes everything the search returns. A few patterns that come up often:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;project = SUP AND statusCategory = Done AND resolution is EMPTY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Done work items with no resolution. These are the reason many reports and dashboards miscount closed work; bulk edit the resolution to fix them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sprint in closedSprints() AND statusCategory != Done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Work left over in sprints that are already closed, ready to move to the backlog or a new sprint.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;project = WEB AND updated &amp;lt; -90d AND statusCategory != Done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open work nobody has touched in 90 days, a good candidate for a clean-up transition.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;labels = legacy-import AND priority is EMPTY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Imported items still missing a priority.&lt;/p&gt;

&lt;p&gt;Before you run a bulk change, read the result count and open a few results. If the number surprises you, the query is wrong. Saving the query as a filter also leaves you a record of exactly which work items were changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits to know before you start
&lt;/h2&gt;

&lt;p&gt;Atlassian's documentation lists a few rules that explain most "why can't I do this" moments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You need the global Make bulk changes permission.&lt;/strong&gt; Without it, the bulk change option is missing from the menu. On top of that you need the usual permission for the change in every space involved, such as Move work items to move them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Up to 1,000 work items at a time.&lt;/strong&gt; A larger search has to be split, for example by space or by created date.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transitions go one workflow at a time.&lt;/strong&gt; If the selected work items use different workflows, Jira groups them and you transition one group at a time. Only one bulk transition can run at a time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Moving can lose data.&lt;/strong&gt; Fields that don't exist in the target space or work type are dropped.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;There is no undo.&lt;/strong&gt; The history of each work item shows what changed, but reversing a bad bulk change means another bulk change, if the old values are even known.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The permission is the one that hurts most in practice. Admins are often careful with it, because one bulk change can touch a thousand work items across every space the person can edit. That leaves team leads and support staff asking an admin every time they need to reassign or relabel a batch of work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bulk changes without the global permission
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/products/script-toolkit-for-jira"&gt;Script Toolkit for Jira&lt;/a&gt; includes seven ready-made bulk tools for exactly that situation:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bulk Transition&lt;/td&gt;
&lt;td&gt;Moves work items to a status, using whichever transition each one has available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bulk Set Resolution&lt;/td&gt;
&lt;td&gt;Sets the resolution on work items closed without one&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bulk Assign&lt;/td&gt;
&lt;td&gt;Assigns work items to one person, or unassigns them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bulk Add Comment&lt;/td&gt;
&lt;td&gt;Posts the same comment on every matching work item&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bulk Edit Labels&lt;/td&gt;
&lt;td&gt;Adds and removes labels, leaving other labels in place&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bulk Set Priority&lt;/td&gt;
&lt;td&gt;Sets the priority on many work items at once&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Copy Custom Field Values&lt;/td&gt;
&lt;td&gt;Copies one custom field into another of the same type&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;An admin decides who can use each tool under &lt;strong&gt;Jira settings &amp;gt; Apps &amp;gt; Script Toolkit &amp;gt; Tools&lt;/strong&gt;: nobody (the default), admins only, admins and chosen groups, or everyone. So you can open Bulk Assign and Bulk Edit Labels to your team leads group without handing anyone a site-wide bulk permission.&lt;/p&gt;

&lt;p&gt;People open &lt;strong&gt;Apps &amp;gt; Script Toolkit Tools&lt;/strong&gt;, pick a tool, type a JQL query (it suggests fields and values and flags invalid JQL as you type), and run it on up to 5,000 work items per run. Two details make this safe to hand out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tools run with the person's own Jira permissions.&lt;/strong&gt; Access to a tool grants no new rights. If someone can't edit a work item, that item fails with an error instead of changing silently.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Every item gets a result.&lt;/strong&gt; Progress is shown as the tool runs, and failed items say why.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Like the native wizard, these changes can't be undone, so the same habit applies: check the match count first. The tools don't move or delete work items; for those, use Jira's own bulk change. The &lt;a href="https://dev.to/docs/script-toolkit-for-jira/tools"&gt;tools guide&lt;/a&gt; covers access and limits, and the &lt;a href="https://dev.to/blogs/script-toolkit-for-jira-launch"&gt;launch post&lt;/a&gt; shows what else the app does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repeat bulk updates with Automation
&lt;/h2&gt;

&lt;p&gt;If the same bulk change keeps coming back, such as "every Monday, set the resolution on Done items that have none", don't run it by hand. Use Jira Automation:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In &lt;strong&gt;Space settings &amp;gt; Automation&lt;/strong&gt; (or global automation for several spaces), create a rule with the &lt;strong&gt;Scheduled&lt;/strong&gt; trigger.&lt;/li&gt;
&lt;li&gt;Turn on the option to run a JQL search and act on each work item it finds, and paste your query.&lt;/li&gt;
&lt;li&gt;Add an action such as &lt;strong&gt;Edit work item&lt;/strong&gt;, &lt;strong&gt;Transition work item&lt;/strong&gt; or &lt;strong&gt;Assign work item&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Turn the rule on and check its audit log after the first run.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Automation rules count toward your plan's automation usage, so very frequent rules over large searches are worth a second look. For logic a rule can't express, a Script Toolkit &lt;a href="https://dev.to/docs/script-toolkit-for-jira/scheduled-jobs"&gt;scheduled job&lt;/a&gt; runs your own JavaScript on a cron schedule.&lt;/p&gt;

&lt;h2&gt;
  
  
  A safe bulk change checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Write the JQL first, read the count, and open a few results.&lt;/li&gt;
&lt;li&gt;Save the query as a filter so you know exactly what was changed.&lt;/li&gt;
&lt;li&gt;Turn off email if the change is housekeeping that nobody needs to hear about.&lt;/li&gt;
&lt;li&gt;For transitions, check which workflows are involved and what fields each transition requires.&lt;/li&gt;
&lt;li&gt;Split anything over 1,000 work items (or 5,000 with Script Toolkit) into smaller searches.&lt;/li&gt;
&lt;li&gt;Afterwards, check a few work items and the reports that depend on them. If you track flow metrics such as &lt;a href="https://dev.to/blogs/time-in-status-jira"&gt;time in status&lt;/a&gt;, a mass transition will show up there, so note the date. Our guide to &lt;a href="https://dev.to/blogs/jira-reporting-for-product-managers"&gt;Jira reporting for product managers&lt;/a&gt; covers which reports are most affected by missing resolutions and stale statuses, and the &lt;a href="https://dev.to/use-cases/jira-reporting-dashboards"&gt;Jira reporting dashboards&lt;/a&gt; setup shows how to keep an eye on them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How do I bulk edit in Jira Cloud?
&lt;/h3&gt;

&lt;p&gt;Search for the work items, then select &lt;strong&gt;More actions (•••) &amp;gt; Bulk change all work items&lt;/strong&gt;, choose &lt;strong&gt;Edit&lt;/strong&gt;, tick the fields to change, give them values and confirm. You need the global Make bulk changes permission.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why can't I see the bulk change option?
&lt;/h3&gt;

&lt;p&gt;You probably don't have the global &lt;strong&gt;Make bulk changes&lt;/strong&gt; permission. Ask a Jira admin to grant it, or to open a bulk tool to your group in an app such as Script Toolkit for Jira.&lt;/p&gt;

&lt;h3&gt;
  
  
  How many work items can I bulk change at once?
&lt;/h3&gt;

&lt;p&gt;Up to 1,000 work items in one bulk change in Jira Cloud. Split larger searches into batches. Script Toolkit's tools run on up to 5,000 work items per run.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I undo a bulk change in Jira?
&lt;/h3&gt;

&lt;p&gt;No. Each work item's history records what changed, but there is no button to reverse a bulk change. Save the search as a filter and check the result count before you confirm.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I bulk delete work items in Jira?
&lt;/h3&gt;

&lt;p&gt;Use the same wizard and choose &lt;strong&gt;Delete&lt;/strong&gt;. You need the Delete work items permission in each space as well as the global bulk permission. Deleted work items are gone for good, so consider transitioning them to a closed status instead.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I stop Jira from emailing everyone during a bulk change?
&lt;/h3&gt;

&lt;p&gt;Yes. In the operation details step, untick &lt;strong&gt;Send mail for this update&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Next time someone asks you to "just close all of these", start with the JQL, then the bulk change wizard. If the people who need bulk edits shouldn't get the global permission, install &lt;a href="https://dev.to/products/script-toolkit-for-jira"&gt;Script Toolkit for Jira&lt;/a&gt;, free on the Atlassian Marketplace, and open the tools they need to their group. The &lt;a href="https://dev.to/docs/script-toolkit-for-jira/tools"&gt;tools guide&lt;/a&gt; takes a few minutes to set up.&lt;/p&gt;

</description>
      <category>jira</category>
      <category>atlassian</category>
      <category>automation</category>
      <category>scripting</category>
    </item>
    <item>
      <title>Reusable components and brand tokens for Confluence HTML</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Fri, 30 Oct 2026 11:26:38 +0000</pubDate>
      <link>https://dev.to/yamuno/reusable-components-and-brand-tokens-for-confluence-html-155d</link>
      <guid>https://dev.to/yamuno/reusable-components-and-brand-tokens-for-confluence-html-155d</guid>
      <description>&lt;h1&gt;
  
  
  Reusable components and brand tokens for Confluence HTML
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; HTML Macro+ for Confluence 7.0 adds a library: shared variables, reusable components and brand tokens that every HTML macro on your site can use. An admin writes a footer, a banner or a brand colour once, and every page that uses it picks up the change on its next view. With this release HTML Macro+ also becomes a paid app for sites with more than 10 users. It stays free for sites with up to 10 users, and until 28 February 2027 there's 25% off monthly and annual subscriptions.&lt;/p&gt;

&lt;p&gt;This post covers what the library does, how teams use it, and what the pricing change means for sites that already have the app.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem the library solves
&lt;/h2&gt;

&lt;p&gt;Once a team starts using HTML on Confluence pages, the same pieces turn up again and again: a page footer with the owner and review date, a status notice, a release banner, a contact card. Each copy lives inside its own macro. When the brand colour changes or the support link moves, someone has to find and edit every page by hand, and a few always get missed.&lt;/p&gt;

&lt;p&gt;The library moves those shared pieces into one place in the app's settings. Pages refer to them by name instead of carrying their own copy. There are three parts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Part&lt;/th&gt;
&lt;th&gt;What it holds&lt;/th&gt;
&lt;th&gt;How a macro uses it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Variables&lt;/td&gt;
&lt;td&gt;Named values such as a company name, a support link or a release number&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;{{companyName}}&lt;/code&gt; in HTML and CSS, &lt;code&gt;window.HTMLMacro.vars.companyName&lt;/code&gt; in JavaScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Components&lt;/td&gt;
&lt;td&gt;Reusable HTML, CSS and JavaScript, such as banners, footers and cards&lt;/td&gt;
&lt;td&gt;A tag such as &lt;code&gt;&amp;lt;ReleaseBanner /&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Brand&lt;/td&gt;
&lt;td&gt;Colours, fonts, shape, logo, images and your own design tokens&lt;/td&gt;
&lt;td&gt;CSS custom properties such as &lt;code&gt;var(--brand-primary)&lt;/code&gt;, and &lt;code&gt;{{brand.logo}}&lt;/code&gt; for images&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Only Confluence admins can change the library. Page editors use it from the macro editor but can't add, change or delete items. See the &lt;a href="https://dev.to/docs/html-macro-for-confluence/library"&gt;library documentation&lt;/a&gt; for where to find it in the app's settings.&lt;/p&gt;




&lt;h2&gt;
  
  
  Variables: write a value once
&lt;/h2&gt;

&lt;p&gt;A variable is a named value you would otherwise repeat on many pages. Use it in HTML or CSS with double braces:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Questions? Contact {{supportEmail}} or see {{companyName}}'s help centre.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In JavaScript, read the same value from &lt;code&gt;window.HTMLMacro.vars.supportEmail&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A few things make variables safe to use widely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Built-ins&lt;/strong&gt; cover common cases with no setup: &lt;code&gt;{{today}}&lt;/code&gt; for today's date in the reader's language, &lt;code&gt;{{page.title}}&lt;/code&gt; for the page's title and &lt;code&gt;{{space.key}}&lt;/code&gt; for its space.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Values are escaped&lt;/strong&gt; before they reach the page, so a value can't inject markup into a macro.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unknown placeholders are left as written&lt;/strong&gt;, and the editor warns about them, so a typo is easy to spot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Variables in use can't be deleted.&lt;/strong&gt; The library settings show which pages use each one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a value changes, every page that uses it shows the new value the next time it's viewed. No one has to edit or republish the pages. See &lt;a href="https://dev.to/docs/html-macro-for-confluence/library/variables"&gt;Variables&lt;/a&gt; for names, types and limits.&lt;/p&gt;




&lt;h2&gt;
  
  
  Components: build a block once, use it everywhere
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.yamuno.com%2Fimages%2Fblog%2Fhtml-macro-library-components-brand-components.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.yamuno.com%2Fimages%2Fblog%2Fhtml-macro-library-components-brand-components.jpg" alt="The HTML Macro+ library with starter components: release banner, contact card, status notice, project roadmap, page footer and FAQ" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A component is a reusable piece of HTML, CSS and JavaScript. An admin builds it once in the library, and anyone writing a macro adds it with a single tag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ReleaseBanner&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;"Version 5"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each component can have settings (props) of type text, number, colour, link or a list of options, with a label, help text and a default. Inside the component, a setting is &lt;code&gt;{{title}}&lt;/code&gt; in HTML and CSS and &lt;code&gt;HTMLMacro.props.title&lt;/code&gt; in JavaScript. A component's CSS applies only to that component, so its styles never leak into the rest of the macro.&lt;/p&gt;

&lt;p&gt;Components are built for teams that maintain them over time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Drafts and publishing.&lt;/strong&gt; Save a draft without touching any page, then publish when it's ready. Every page that uses the component shows the published version on its next view.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version history&lt;/strong&gt; for each component.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nesting&lt;/strong&gt; up to 3 levels deep, so a project status card can include a contact card.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Starters&lt;/strong&gt; for a page footer, document control, status notice, release banner, contact card, project status, FAQ and project roadmap. &lt;strong&gt;Set up a starter kit&lt;/strong&gt; creates all of them in one go, along with the variables they read.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Save as component.&lt;/strong&gt; If someone has already built something useful in a macro, an admin can turn it into a component from the editor's &lt;strong&gt;More&lt;/strong&gt; menu and choose which placeholders become settings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the macro editor, the new &lt;strong&gt;Components&lt;/strong&gt; button opens a picker with search, group filters, a live preview and a form for the component's settings. &lt;strong&gt;Add to my code&lt;/strong&gt; inserts the tag at the cursor, and typing &lt;code&gt;&amp;lt;&lt;/code&gt; in the HTML tab suggests component tags. See &lt;a href="https://dev.to/docs/html-macro-for-confluence/library/components"&gt;Components&lt;/a&gt; for the full guide and limits.&lt;/p&gt;




&lt;h2&gt;
  
  
  Brand: one set of tokens for every macro
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.yamuno.com%2Fimages%2Fblog%2Fhtml-macro-library-components-brand-brand.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.yamuno.com%2Fimages%2Fblog%2Fhtml-macro-library-components-brand-brand.jpg" alt="Brand tokens with colours and a font, and the same page shown in light and dark mode" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Brand section holds your colours, fonts, shape settings, logo and images, plus your own design-system tokens. Macros read them as CSS custom properties:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.notice&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="l"&gt;--brand-primary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;#fff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What it includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dark mode values.&lt;/strong&gt; Each token can have a separate dark mode value, and macros use the right one for the reader's Confluence theme. See &lt;a href="https://dev.to/docs/html-macro-for-confluence/features/dark-mode"&gt;Supporting dark mode&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fonts&lt;/strong&gt; from Google Fonts or your own font stylesheet. A font only loads on pages whose code uses it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Images&lt;/strong&gt; in PNG, JPEG, WebP, GIF or SVG, used as &lt;code&gt;{{brand.logo}}&lt;/code&gt; and similar names.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token import and Copy as CSS.&lt;/strong&gt; Paste CSS custom properties or a tokens JSON file to add many tokens at once, and copy them all back out as CSS. Up to 500 tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together with components, this is what makes a branded Confluence knowledge base practical: the &lt;a href="https://dev.to/use-cases/branded-confluence-knowledge-hub"&gt;branded knowledge hub use case&lt;/a&gt; walks through a setup. See &lt;a href="https://dev.to/docs/html-macro-for-confluence/library/brand"&gt;Brand&lt;/a&gt; for details.&lt;/p&gt;




&lt;h2&gt;
  
  
  Groups and the editor menus
&lt;/h2&gt;

&lt;p&gt;Groups, such as Company, IT or HR, sort variables and components into sections in the settings and in the editor's menus, so people can find the right item on a site with many of them. The macro editor header now has &lt;strong&gt;Variables&lt;/strong&gt; and &lt;strong&gt;Components&lt;/strong&gt; buttons, and a &lt;strong&gt;More&lt;/strong&gt; menu with &lt;strong&gt;Save as component&lt;/strong&gt; (admins only), &lt;strong&gt;Embed templates&lt;/strong&gt;, &lt;strong&gt;Copy AI prompt&lt;/strong&gt;, &lt;strong&gt;Documentation&lt;/strong&gt; and &lt;strong&gt;Support&lt;/strong&gt;. See the &lt;a href="https://dev.to/docs/html-macro-for-confluence/features/html-editor"&gt;HTML editor guide&lt;/a&gt; and the &lt;a href="https://dev.to/docs/html-macro-for-confluence/release-notes"&gt;release notes&lt;/a&gt; for everything in 7.0.&lt;/p&gt;




&lt;h2&gt;
  
  
  New pricing
&lt;/h2&gt;

&lt;p&gt;From version 7.0, HTML Macro+ is a paid app for sites with more than 10 users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free for sites with up to 10 users&lt;/strong&gt;, with every feature included.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Larger sites&lt;/strong&gt; subscribe monthly or annually through Atlassian, from $0.30 per user per month for 11 to 100 users and less per user on bigger sites. The &lt;a href="https://dev.to/docs/html-macro-for-confluence/licensing"&gt;licensing page&lt;/a&gt; has the full table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A free 1-month trial&lt;/strong&gt; through the Atlassian Marketplace, with every feature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Launch offer:&lt;/strong&gt; until 28 February 2027, 25% off monthly and annual subscriptions. &lt;a href="https://yamuno.atlassian.net/servicedesk/customer/portal/2/group/2/create/108" rel="noopener noreferrer"&gt;Request the code&lt;/a&gt;, then enter it in Atlassian Administration when you subscribe, or later under &lt;strong&gt;Billing&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pages always keep showing their content, licensed or not. Without a subscription or trial, macros still render with a short notice above them, the editor opens but can't save, and the app's settings show how to start the trial.&lt;/p&gt;




&lt;h2&gt;
  
  
  If you already have the app
&lt;/h2&gt;

&lt;p&gt;A site admin approves the paid update once:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://admin.atlassian.com" rel="noopener noreferrer"&gt;admin.atlassian.com&lt;/a&gt;, choose your site, then &lt;strong&gt;Site settings&lt;/strong&gt; → &lt;strong&gt;Connected apps&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Find &lt;strong&gt;HTML Macro+ for Confluence&lt;/strong&gt;, which shows a &lt;strong&gt;Paid update&lt;/strong&gt; tag, and select &lt;strong&gt;View app details&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Paid update&lt;/strong&gt;, then start the free trial or subscribe.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sites with up to 10 users go through the same steps and take the subscription at no charge. &lt;a href="https://dev.to/docs/html-macro-for-confluence/getting-started/paid-update"&gt;Update to the paid version&lt;/a&gt; has the steps with more detail.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is HTML Macro+ still free?
&lt;/h3&gt;

&lt;p&gt;It is free for sites with up to 10 users, with every feature included. Larger sites subscribe monthly or annually through Atlassian after a free 1-month trial.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is there a discount?
&lt;/h3&gt;

&lt;p&gt;Yes. Until 28 February 2027 there's 25% off monthly and annual subscriptions. &lt;a href="https://yamuno.atlassian.net/servicedesk/customer/portal/2/group/2/create/108" rel="noopener noreferrer"&gt;Request the code&lt;/a&gt; and enter it in Atlassian Administration when you subscribe, or later under Billing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Will our pages stop working if we don't subscribe?
&lt;/h3&gt;

&lt;p&gt;No. Pages keep showing their content. Without a subscription or trial, macros show a short notice that the app requires a valid license, and saving in the editor is turned off until an admin subscribes or starts the trial.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who can change the library?
&lt;/h3&gt;

&lt;p&gt;Only Confluence admins, from the app's settings. Page editors can insert variables and components from the macro editor but can't add, change or delete them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do pages update when a component changes?
&lt;/h3&gt;

&lt;p&gt;Yes, once it's published. Drafts don't affect any page. After you publish, every page that uses the component shows the new version on its next view, with no need to edit the pages.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can components use our brand colours and fonts?
&lt;/h3&gt;

&lt;p&gt;Yes. Components and macros read brand tokens as CSS custom properties such as &lt;code&gt;var(--brand-primary)&lt;/code&gt;, with separate dark mode values where you set them.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Start with &lt;strong&gt;Set up a starter kit&lt;/strong&gt; in the library to get a footer, banner, status notice and more in one step, then open the &lt;strong&gt;Components&lt;/strong&gt; picker in any macro. For ideas, see &lt;a href="https://dev.to/blogs/html-macro-for-confluence-use-cases"&gt;5 things you can build with HTML Macro+&lt;/a&gt; and &lt;a href="https://dev.to/blogs/how-to-build-custom-status-dashboard-confluence"&gt;how to build a status dashboard in Confluence&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/1670180315/html-macro-for-confluence?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Get HTML Macro+ for Confluence on the Atlassian Marketplace&lt;/a&gt;&lt;/p&gt;

</description>
      <category>html</category>
      <category>confluence</category>
      <category>productlaunch</category>
      <category>css</category>
    </item>
    <item>
      <title>Does Confluence Support Mermaid? 3 Ways to Add Diagrams</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Fri, 30 Oct 2026 11:26:26 +0000</pubDate>
      <link>https://dev.to/yamuno/does-confluence-support-mermaid-3-ways-to-add-diagrams-59pd</link>
      <guid>https://dev.to/yamuno/does-confluence-support-mermaid-3-ways-to-add-diagrams-59pd</guid>
      <description>&lt;h1&gt;
  
  
  Does Confluence Support Mermaid? 3 Ways to Add Diagrams
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; Confluence Cloud doesn't render Mermaid on its own. Paste a Mermaid diagram into a page and you get a code block with the source in it, not a diagram. To draw it, add an app: a Mermaid macro such as &lt;a href="https://dev.to/products/mermaid-for-confluence"&gt;Mermaid Diagram for Confluence&lt;/a&gt;, a Markdown macro that understands Mermaid, or an importer that turns the &lt;code&gt;mermaid&lt;/code&gt; blocks in your &lt;code&gt;.md&lt;/code&gt; files into diagrams as it creates the pages.&lt;/p&gt;

&lt;p&gt;Mermaid is the diagram language developers already use. GitHub and GitLab draw it in READMEs, most docs-site generators support it, and a flowchart written as ten lines of text is easier to review and change than an image exported from a drawing tool. So when docs move into Confluence, the first question is usually what happens to the diagrams.&lt;/p&gt;

&lt;p&gt;This guide covers the three routes and which one fits which job.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Confluence does with Mermaid out of the box
&lt;/h2&gt;

&lt;p&gt;Confluence's code block can be set to many languages, but Mermaid source in a code block stays as source. The editor has no Mermaid macro of its own, and the Markdown shortcuts it understands while you type don't include diagrams.&lt;/p&gt;

&lt;p&gt;That leaves teams with three habits, none of them good:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Screenshots.&lt;/strong&gt; Someone renders the diagram elsewhere and uploads a PNG. It looks right until the process changes, and then nobody has the source.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code only.&lt;/strong&gt; The Mermaid stays as a code block and readers are expected to picture it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Link out.&lt;/strong&gt; The page links to a diagram in a repository or the Mermaid Live Editor, which readers may not be able to open.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each route below keeps the diagram as text inside Confluence and draws it on the page.&lt;/p&gt;




&lt;h2&gt;
  
  
  Option 1: A Mermaid macro
&lt;/h2&gt;

&lt;p&gt;Best for: diagrams you draw and maintain in Confluence itself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/products/mermaid-for-confluence"&gt;Mermaid Diagram for Confluence&lt;/a&gt; is a free app that adds a &lt;strong&gt;Mermaid Diagram&lt;/strong&gt; macro. You write Mermaid on the left and the diagram updates on the right as you type.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Edit a page, type &lt;strong&gt;/mermaid&lt;/strong&gt; and choose &lt;strong&gt;Mermaid Diagram&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Write a diagram, or click &lt;strong&gt;Templates&lt;/strong&gt; and start from one of the 12 templates (flowchart, sequence, class, state, ER, Gantt, pie, mind map, timeline, user journey, Git graph and quadrant).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Save diagram&lt;/strong&gt; and publish the page.
&lt;/li&gt;
&lt;/ol&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    A[Pull request] --&amp;gt; B{Checks pass?}
    B -- Yes --&amp;gt; C[Merge]
    B -- No --&amp;gt; D[Fix and push]
    D --&amp;gt; B&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Because the app is built only for diagrams, it goes further than drawing them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Page trees.&lt;/strong&gt; Insert a diagram of a page and the pages under it, as a flowchart or a mind map, where every box opens its page. See &lt;a href="https://dev.to/docs/mermaid-for-confluence/features/page-tree"&gt;Page tree&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Links to pages.&lt;/strong&gt; Right-click a flowchart box and link it to a Confluence page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Colour themes.&lt;/strong&gt; Admins create named themes with your brand colours, each with a dark-mode version, and every editor can pick them. See &lt;a href="https://dev.to/docs/mermaid-for-confluence/features/themes"&gt;Colour themes&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Readers' tools.&lt;/strong&gt; Zoom, full screen, the code view and a high-resolution PNG download sit under each published diagram.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exports.&lt;/strong&gt; PDF export uses a light-colour image of the diagram, and Word export includes the Mermaid code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app runs on Atlassian Forge and keeps diagrams in the app's Forge storage for your site, so nothing is sent to an outside server. If your team also uses Jira, &lt;a href="https://dev.to/products/mermaid-for-jira"&gt;Mermaid Diagrams for Jira&lt;/a&gt; draws the &lt;code&gt;mermaid&lt;/code&gt; code blocks in issue descriptions and comments.&lt;/p&gt;




&lt;h2&gt;
  
  
  Option 2: Mermaid inside a Markdown macro
&lt;/h2&gt;

&lt;p&gt;Best for: pages you already write in Markdown, where the diagram sits between headings, tables and code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/products/markdown-renderer-for-confluence"&gt;Markdown Macro+ for Confluence&lt;/a&gt; renders Mermaid inside its Markdown editor. You write a fenced code block with &lt;code&gt;mermaid&lt;/code&gt; as the language, and the macro draws it in the preview and on the published page.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Type &lt;strong&gt;/markdown&lt;/strong&gt; on a page and insert Markdown Macro+.&lt;/li&gt;
&lt;li&gt;Start a fenced code block marked &lt;code&gt;mermaid&lt;/code&gt;, write the diagram and close the block.&lt;/li&gt;
&lt;li&gt;Check the preview, save the macro and publish.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Deploy flow&lt;/span&gt;

Every merge to main runs the same pipeline:

&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;mermaid
&lt;/span&gt;&lt;span class="sb"&gt;sequenceDiagram
    participant Dev
    participant CI
    participant Prod
    Dev-&amp;gt;&amp;gt;CI: Merge to main
    CI-&amp;gt;&amp;gt;CI: Build and test
    CI-&amp;gt;&amp;gt;Prod: Deploy&lt;/span&gt;
&lt;span class="p"&gt;```&lt;/span&gt;

If the deploy fails, CI rolls back to the last good release.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The diagram is one block in the page, so a runbook can open with a flowchart of the process and follow it with the commands for each step. The same &lt;code&gt;mermaid&lt;/code&gt; block you have in a README works here unchanged. More examples are in the &lt;a href="https://dev.to/docs/markdown-renderer-for-confluence/how-to-and-features/mermaid-diagrams"&gt;Mermaid diagrams guide&lt;/a&gt;, and &lt;a href="https://dev.to/blogs/confluence-wiki-markup-vs-markdown"&gt;Confluence wiki markup vs Markdown&lt;/a&gt; explains where Markdown fits in Confluence in general.&lt;/p&gt;




&lt;h2&gt;
  
  
  Option 3: Import Markdown files with Mermaid in them
&lt;/h2&gt;

&lt;p&gt;Best for: an existing docs folder or repository, with diagrams already written.&lt;/p&gt;

&lt;p&gt;If your diagrams live in &lt;code&gt;.md&lt;/code&gt; files, adding them one by one is the slow way. &lt;a href="https://dev.to/products/markdown-importer-for-confluence"&gt;Markdown Importer for Confluence&lt;/a&gt; imports a single file, many files or a ZIP of folders as a page tree, and it can turn every &lt;code&gt;mermaid&lt;/code&gt; code block it finds into a diagram on the new page.&lt;/p&gt;

&lt;p&gt;A Confluence admin sets it once for the site:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Confluence Settings&lt;/strong&gt; and, under &lt;strong&gt;Apps&lt;/strong&gt;, select &lt;strong&gt;Markdown Importer for Confluence&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Open the &lt;strong&gt;Import settings&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Mermaid diagrams&lt;/strong&gt;, choose an option. It saves straight away.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;What each &lt;code&gt;mermaid&lt;/code&gt; block becomes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Keep as code blocks&lt;/strong&gt; (default)&lt;/td&gt;
&lt;td&gt;A code block with the diagram source&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Render with Mermaid Diagrams&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A Mermaid Diagram macro, drawn on the page and editable in its live editor (needs Mermaid Diagram for Confluence)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Render with Markdown Macro+&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A Markdown Macro+ macro that draws the diagram (needs Markdown Macro+)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Then import as usual: open a page's &lt;strong&gt;•••&lt;/strong&gt; menu, choose &lt;strong&gt;Markdown Importer &amp;amp; Exporter&lt;/strong&gt;, pick your files or a ZIP, preview and click &lt;strong&gt;Import&lt;/strong&gt;. The setting also applies to imports through the importer's &lt;a href="https://dev.to/docs/markdown-importer-for-confluence/rest-api"&gt;REST API&lt;/a&gt;, so a CI job that publishes docs on every merge gets diagrams too. &lt;a href="https://dev.to/blogs/how-to-sync-github-docs-to-confluence-automatically"&gt;How to sync GitHub docs to Confluence automatically&lt;/a&gt; walks through that setup.&lt;/p&gt;

&lt;p&gt;A few things to know before a big import:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Install the app you choose first.&lt;/strong&gt; If it isn't installed, pages show Confluence's placeholder for a missing app instead of the diagram.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Top-level diagrams only.&lt;/strong&gt; Confluence doesn't allow macros in every place, so diagrams inside lists, quotes or tables stay as code blocks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New imports only.&lt;/strong&gt; Changing the setting doesn't touch pages you imported earlier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Government Cloud&lt;/strong&gt; sites only offer Keep as code blocks for now.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full reference is in the importer's &lt;a href="https://dev.to/docs/markdown-importer-for-confluence/how-to-and-features/mermaid-diagrams"&gt;Mermaid diagrams docs&lt;/a&gt;. For the import itself, see &lt;a href="https://dev.to/blogs/how-to-import-markdown-into-confluence"&gt;How to import Markdown into Confluence&lt;/a&gt; or, for a whole repository, &lt;a href="https://dev.to/blogs/migrate-github-gitlab-docs-to-confluence"&gt;Migrate GitHub and GitLab docs to Confluence&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Which one should you use?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;You want to&lt;/th&gt;
&lt;th&gt;Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Draw and maintain diagrams in Confluence, with templates, page trees and brand colours&lt;/td&gt;
&lt;td&gt;Mermaid Diagram for Confluence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keep diagrams inside Markdown pages, next to text, tables and code&lt;/td&gt;
&lt;td&gt;Markdown Macro+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bring a docs folder or repository across with its diagrams drawn&lt;/td&gt;
&lt;td&gt;Markdown Importer, set to one of the two above&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The routes work together. A common setup is Markdown Importer set to &lt;strong&gt;Render with Mermaid Diagrams&lt;/strong&gt; for the migration, then the Mermaid macro for new diagrams, so every diagram on the site has the same editor and the same colour themes. Teams that keep their docs in Markdown on both sides pick Markdown Macro+ instead, and can export pages back to &lt;code&gt;.md&lt;/code&gt; later; see &lt;a href="https://dev.to/blogs/confluence-to-markdown-export-options"&gt;Confluence to Markdown: 4 ways to export&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does Confluence Cloud support Mermaid natively?
&lt;/h3&gt;

&lt;p&gt;No. Confluence Cloud has no built-in Mermaid macro, and a Mermaid diagram pasted into a page stays as code. An app from the Atlassian Marketplace is needed to draw it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is there a free Mermaid app for Confluence?
&lt;/h3&gt;

&lt;p&gt;Yes. &lt;a href="https://dev.to/products/mermaid-for-confluence"&gt;Mermaid Diagram for Confluence&lt;/a&gt; is free on the Atlassian Marketplace and runs on Atlassian Forge.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which Mermaid diagram types work in Confluence?
&lt;/h3&gt;

&lt;p&gt;With Mermaid Diagram for Confluence, every type Mermaid supports, including flowcharts, sequence, class, state, entity relationship, Gantt, pie, mind map, timeline, user journey, Git graph and quadrant charts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I import a README with Mermaid diagrams into Confluence?
&lt;/h3&gt;

&lt;p&gt;Yes. Markdown Importer for Confluence imports the README as a page. Set its Mermaid option to Render with Mermaid Diagrams or Render with Markdown Macro+ first, and each top-level &lt;code&gt;mermaid&lt;/code&gt; block becomes a diagram instead of code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do Mermaid diagrams show up in Confluence PDF exports?
&lt;/h3&gt;

&lt;p&gt;With Mermaid Diagram for Confluence, yes: PDF export uses a light-colour image of the diagram, and Word export includes the Mermaid code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I edit an imported diagram later?
&lt;/h3&gt;

&lt;p&gt;Yes. A diagram imported with the Mermaid Diagrams option is a normal Mermaid Diagram macro, so anyone who can edit the page can open it in the live editor and change it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Install &lt;a href="https://marketplace.atlassian.com/apps/1155746326/mermaid?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Mermaid Diagram for Confluence&lt;/a&gt; from the Atlassian Marketplace, type &lt;strong&gt;/mermaid&lt;/strong&gt; on a page and start from a template. If your diagrams are already in Markdown files, add &lt;a href="https://dev.to/products/markdown-importer-for-confluence"&gt;Markdown Importer for Confluence&lt;/a&gt; and set its Mermaid option before you import. The &lt;a href="https://dev.to/docs/mermaid-for-confluence"&gt;Mermaid Diagram docs&lt;/a&gt; and the &lt;a href="https://dev.to/docs/mermaid-for-confluence/getting-started/quick-start"&gt;quick start&lt;/a&gt; cover the rest.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Confluence Documentation Best Practices for Findability</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Thu, 29 Oct 2026 15:00:26 +0000</pubDate>
      <link>https://dev.to/yamuno/confluence-documentation-best-practices-for-findability-51o9</link>
      <guid>https://dev.to/yamuno/confluence-documentation-best-practices-for-findability-51o9</guid>
      <description>&lt;h1&gt;
  
  
  Confluence Documentation Best Practices for Findability
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; Atlassian's 2026 State of Developer Experience report puts "finding information" at the top of the list of things that slow developers down, ahead of meetings. In Confluence, most of that friction comes from duplicate pages, vague titles, pages nobody owns, and copies of repo docs that drifted. Five habits fix most of it: one home per topic, titles that match how people search, an owner and review date on every page, archiving what is stale, and keeping repo docs and Confluence in sync.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the 2026 developer experience report says
&lt;/h2&gt;

&lt;p&gt;On October 20, 2026, Atlassian published a summary of its &lt;a href="https://www.atlassian.com/blog/development/developer-experience-report-2026" rel="noopener noreferrer"&gt;2026 State of Developer Experience report&lt;/a&gt;. The headline numbers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;87%&lt;/strong&gt; of developers say AI helps them ship work faster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;72%&lt;/strong&gt; experience the same or more friction than before AI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;65%&lt;/strong&gt; now regularly spend time correcting AI output.&lt;/li&gt;
&lt;li&gt;The top sources of friction, in order: &lt;strong&gt;finding information&lt;/strong&gt;, meetings, context switching, technical debt and unclear requirements. The write-up says finding information "takes top spot again in 2026".&lt;/li&gt;
&lt;li&gt;Only &lt;strong&gt;17%&lt;/strong&gt; of developers and &lt;strong&gt;23%&lt;/strong&gt; of leaders say their organisation has a clearly communicated and implemented AI strategy. Developers at those organisations are twice as likely to report less friction than before AI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The part that matters for anyone who runs a Confluence site is the ranking. Finding information beat meetings as a source of friction. That is a documentation problem, and most of it can be fixed without buying anything.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why faster AI did not make docs easier to find
&lt;/h2&gt;

&lt;p&gt;AI tools speed up writing code. They do not decide which of three "Deployment process" pages is the current one. An assistant that searches or summarises your Confluence site reads the same duplicates, stale runbooks and half-finished drafts a person would, and it can repeat an outdated answer with more confidence than a person would.&lt;/p&gt;

&lt;p&gt;So the order of work matters. A tidy, well-labelled space makes both people and search tools better. A messy one makes both worse, and the report's 65% figure on correcting AI output is partly a measure of how much bad source material is out there.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where your documentation actually lives
&lt;/h2&gt;

&lt;p&gt;Before changing anything in Confluence, list where docs live today. In most engineering teams it is some mix of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Confluence spaces:&lt;/strong&gt; onboarding, architecture, runbooks, postmortems, decisions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The repository:&lt;/strong&gt; READMEs, &lt;code&gt;docs/&lt;/code&gt; folders, API specs, ADRs written in Markdown.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jira:&lt;/strong&gt; requirements and context buried in issue descriptions and comments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chat:&lt;/strong&gt; answers given once in a thread and never written down.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Findability breaks at the seams between these. A developer searches Confluence, finds a page that was copied from a README a year ago, and does not know the README has changed since. The fix is not to force everything into one tool. It is to decide which tool is the source for each kind of doc, and make the others point to it. Our &lt;a href="https://dev.to/use-cases/confluence-technical-documentation"&gt;technical documentation use case&lt;/a&gt; shows one way to split it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Five habits that make Confluence docs findable
&lt;/h2&gt;

&lt;h3&gt;
  
  
  One home per topic
&lt;/h3&gt;

&lt;p&gt;Duplicate pages are the biggest single cause of "which one is right?". Pick one page as the home for each topic (a service, a process, a decision) and turn the others into short pointers or archive them.&lt;/p&gt;

&lt;p&gt;A structure that helps: organise spaces around teams or services rather than projects, because projects end and their pages become orphans. Our guide to &lt;a href="https://dev.to/blogs/how-to-use-confluence-as-developer-wiki"&gt;using Confluence as a developer wiki&lt;/a&gt; has a full example tree. When someone is about to create a page, the question to ask is "where would I look for this?", not "where am I right now?".&lt;/p&gt;

&lt;h3&gt;
  
  
  Titles that match how people search
&lt;/h3&gt;

&lt;p&gt;People search for "payments service runbook" or "how to rotate the API key", not "Q3 platform notes v2". Write titles that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start with the thing, then the type: "auth-service: runbook", "Billing API: authentication".&lt;/li&gt;
&lt;li&gt;Use the words your team says out loud, including product and service names.&lt;/li&gt;
&lt;li&gt;Avoid dates and version numbers unless the page really is a dated record (a postmortem, a release note).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first line under the title matters too. A one-sentence summary of what the page covers and who it is for shows up in search results and tells a reader in seconds whether they are in the right place. For API pages, see &lt;a href="https://dev.to/blogs/how-to-document-apis-in-confluence"&gt;how to document APIs in Confluence&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  An owner and a review date on every page
&lt;/h3&gt;

&lt;p&gt;Confluence Cloud already tracks a page owner, shown in the page details. On Premium and Enterprise, admins can use the content manager to find pages whose owner has left and change the owner in bulk. Whatever your plan, make ownership visible on the page itself.&lt;/p&gt;

&lt;p&gt;A simple pattern: put a small table at the top of every important page inside a &lt;strong&gt;Page Properties&lt;/strong&gt; macro, with three rows:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Owner&lt;/th&gt;
&lt;th&gt;Last reviewed&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a class="mentioned-user" href="https://dev.to/name"&gt;@name&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;2026-10-15&lt;/td&gt;
&lt;td&gt;current&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Then add a &lt;strong&gt;Page Properties Report&lt;/strong&gt; macro to the space home page. It collects those tables from every page with a given label into one list, so you can sort by "Last reviewed" and see what is overdue. A review every six months suits most reference pages; runbooks and onboarding pages are worth checking every quarter.&lt;/p&gt;

&lt;h3&gt;
  
  
  Archive or label what is stale
&lt;/h3&gt;

&lt;p&gt;Stale pages are worse than missing pages, because they look trustworthy. Confluence Cloud lets you archive a page from its more actions menu on Standard, Premium and Enterprise, and Premium and Enterprise add bulk archiving. Archived pages keep their permissions and leave everyday search results, but they can be restored if someone needs them.&lt;/p&gt;

&lt;p&gt;Use labels for the cases in between. A &lt;code&gt;current&lt;/code&gt; label on maintained pages and a &lt;code&gt;needs-review&lt;/code&gt; label on pages you are unsure about make it easy to build a "Content by label" list or a search filter. If old attachments are part of the clutter, &lt;a href="https://dev.to/blogs/confluence-storage-cleanup"&gt;Confluence storage cleanup&lt;/a&gt; covers how to audit them safely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keep repo docs and Confluence in sync
&lt;/h3&gt;

&lt;p&gt;If a doc lives in the repository, it should be written there and published to Confluence, not maintained twice. Engineers update Markdown in the same pull request that changes the code, so the repo copy stays right. The Confluence copy is where product, support and new hires find it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/products/markdown-importer-for-confluence"&gt;Markdown Importer for Confluence Cloud&lt;/a&gt; handles both the first move and the ongoing sync:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;First move:&lt;/strong&gt; import a single &lt;code&gt;.md&lt;/code&gt; file, many files or a ZIP. Folders become parent pages, so a &lt;code&gt;docs/&lt;/code&gt; folder becomes a page tree, and local images are uploaded with the pages. See &lt;a href="https://dev.to/blogs/how-to-bulk-import-markdown-into-confluence"&gt;how to bulk import Markdown into Confluence&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ongoing sync:&lt;/strong&gt; a REST API that creates or updates one page per request, with Bearer tokens that expire after 1 to 30 days. A GitHub Actions workflow can send changed files on every merge to &lt;code&gt;main&lt;/code&gt;. The step-by-step setup is in &lt;a href="https://dev.to/blogs/how-to-sync-github-docs-to-confluence-automatically"&gt;how to sync GitHub docs to Confluence automatically&lt;/a&gt;, and the &lt;a href="https://dev.to/docs/markdown-importer-for-confluence"&gt;Markdown Importer docs&lt;/a&gt; cover the API.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add a line at the top of each synced page saying "Edit this in the repo" with a link, so nobody fixes the Confluence copy by hand and loses the change on the next sync. If you need the opposite direction, &lt;a href="https://dev.to/products/markdown-exporter-for-confluence"&gt;Markdown Exporter&lt;/a&gt; exports pages, page trees or whole spaces to Markdown; &lt;a href="https://dev.to/blogs/confluence-markdown-export-docs-as-code"&gt;Confluence Markdown export for docs as code&lt;/a&gt; explains when that is worth doing.&lt;/p&gt;




&lt;h2&gt;
  
  
  A 30-minute findability audit
&lt;/h2&gt;

&lt;p&gt;Pick your busiest engineering space and run this with a timer.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ten searches (10 minutes).&lt;/strong&gt; Write down ten questions new joiners asked in the last month. Search for each in Confluence. Note whether the right page was in the top three results, and how many competing pages came up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stale pages (5 minutes).&lt;/strong&gt; In search, filter the space by "Last updated" and look at pages untouched for over a year. Mark each as keep, update or archive. Admins on Premium or Enterprise can use the content manager's "Last active" filter in space settings instead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owners (5 minutes).&lt;/strong&gt; Open the ten most-viewed pages. Does each have a named, current owner? Note the ones that do not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicates (5 minutes).&lt;/strong&gt; For the topics where search returned two or more candidates, pick the home page and list the others to merge or archive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repo drift (5 minutes).&lt;/strong&gt; For three pages that started life as repo docs, compare them with the current Markdown in the repository. If they differ, that topic is a candidate for automated sync.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You end with a short list: pages to archive, pages that need owners, duplicates to merge and docs to sync. That list is usually enough work for one sprint.&lt;/p&gt;




&lt;h2&gt;
  
  
  What to measure next quarter
&lt;/h2&gt;

&lt;p&gt;You do not need a dashboard to tell whether this worked. Re-run the same ten searches in three months and track:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Search hit rate:&lt;/strong&gt; how many of the ten questions return the right page in the top three.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pages with an owner and a review date in the last six months&lt;/strong&gt;, as a share of the space.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicates per topic&lt;/strong&gt; for the topics you merged.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repo-synced pages that match the repo&lt;/strong&gt;, if you set up the sync.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want a people measure, ask new joiners in their first month how often they could not find something. It is the same question the Atlassian report asked, at the size of your team.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What does the 2026 State of Developer Experience report say about documentation?
&lt;/h3&gt;

&lt;p&gt;It does not mention documentation by name. It ranks "finding information" as the top source of developer friction for 2026, ahead of meetings, context switching, technical debt and unclear requirements. It also reports that 87% of developers say AI helps them ship faster, while 72% experience the same or more friction than before.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I find stale pages in Confluence?
&lt;/h3&gt;

&lt;p&gt;Use the "Last updated" filter in Confluence search to list pages in a space that have not changed for a year or more. On Premium and Enterprise, space admins can also open space settings, choose the content manager and filter by "Last active". Review the list before archiving, because some old pages, such as decision records, are meant to stay unchanged.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should engineering docs live in Confluence or in the repo?
&lt;/h3&gt;

&lt;p&gt;Docs that change with the code, such as READMEs, API references and setup steps, are easiest to keep correct in the repo. Docs that other teams read, such as runbooks, onboarding guides and architecture overviews, are easier to find in Confluence. Many teams write in the repo and publish to Confluence automatically, so both audiences get the same content.&lt;/p&gt;

&lt;h3&gt;
  
  
  How often should Confluence pages be reviewed?
&lt;/h3&gt;

&lt;p&gt;Every six months suits most reference pages. Runbooks, onboarding pages and anything tied to a fast-changing system are worth checking every quarter. Record the date on the page so anyone can see when it was last checked.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Confluence have page owners?
&lt;/h3&gt;

&lt;p&gt;Yes. Confluence Cloud shows a page owner in the page details. On Premium and Enterprise, admins can find pages whose owners are no longer active and change the owner in bulk from the content manager. Many teams also add an Owner row to a Page Properties table so the owner is visible at the top of the page.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I stop duplicate pages in Confluence?
&lt;/h3&gt;

&lt;p&gt;Give each topic one home page, organise spaces around teams or services, and use titles that match how people search, so the existing page shows up before someone creates a new one. When duplicates appear, merge the content into the home page and archive the rest.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Run the 30-minute audit on one space this week. If repo docs drifting out of date is on your list, &lt;a href="https://dev.to/products/markdown-importer-for-confluence"&gt;Markdown Importer for Confluence Cloud&lt;/a&gt; can import your &lt;code&gt;docs/&lt;/code&gt; folder as a page tree and keep it in sync from GitHub Actions. The &lt;a href="https://dev.to/docs/markdown-importer-for-confluence/getting-started/quick-start"&gt;quick start&lt;/a&gt; takes a few minutes.&lt;/p&gt;

</description>
      <category>documentation</category>
      <category>productivity</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Time in Status in Jira: How to Measure It</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Tue, 27 Oct 2026 11:28:15 +0000</pubDate>
      <link>https://dev.to/yamuno/time-in-status-in-jira-how-to-measure-it-28be</link>
      <guid>https://dev.to/yamuno/time-in-status-in-jira-how-to-measure-it-28be</guid>
      <description>&lt;h1&gt;
  
  
  Time in Status in Jira: How to Measure It
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; Jira records every status change in each issue's history, but Jira Cloud has no built-in report that adds those changes up into time per status for a set of issues. You can read it one issue at a time in the History tab, or approximate it for a board with the Control chart. For a whole project, sprint or JQL search, use an app that reads the changelog and totals the time for you, such as Issue History+ for Jira.&lt;/p&gt;

&lt;p&gt;"How long does work sit in review?" sounds like a question Jira should answer in one click. The data is there: every time an issue moves from one status to another, Jira writes a changelog entry with the old status, the new status, who moved it and when. What is missing is the arithmetic across many issues.&lt;/p&gt;

&lt;p&gt;This guide covers what time in status means, what Jira Cloud gives you natively, how to read the numbers without being misled, and how to get a report for a whole project.&lt;/p&gt;




&lt;h2&gt;
  
  
  What time in status means
&lt;/h2&gt;

&lt;p&gt;Time in status is how long an issue stays in a workflow status before it moves on. For a single issue it is simple: the issue entered In Review on Monday at 10:00 and left on Wednesday at 16:00, so it spent two days and six hours in review.&lt;/p&gt;

&lt;p&gt;Three details make it less simple in practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repeat visits.&lt;/strong&gt; An issue can go In Progress, In Review, back to In Progress, then In Review again. Each stay is a separate visit, and the issue's total time in review is the sum of both.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The first status.&lt;/strong&gt; The first status has no "entered" change in the history. It starts when the issue is created.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calendar time or working time.&lt;/strong&gt; An issue that enters a status on Friday evening and leaves on Monday morning spent most of a weekend there. Whether that counts depends on what you are measuring.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Across many issues, time in status tells you where work waits. If issues spend a day in development and four days in review, the review step is the bottleneck, whatever the team's velocity says.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Jira Cloud shows out of the box
&lt;/h2&gt;

&lt;p&gt;Jira gives you several partial views. Each one is useful, and each one stops short of a report you can run for any set of issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  The History tab on each issue
&lt;/h3&gt;

&lt;p&gt;Open an issue, scroll to &lt;strong&gt;Activity&lt;/strong&gt; and choose &lt;strong&gt;History&lt;/strong&gt;. You see every field change, including each status transition with its timestamp. You can work out time in each status by hand.&lt;/p&gt;

&lt;p&gt;That works for one issue. For fifty issues it means fifty tabs and a spreadsheet.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Control chart
&lt;/h3&gt;

&lt;p&gt;On a company-managed Jira Software board, &lt;strong&gt;Reports &amp;gt; Control chart&lt;/strong&gt; plots cycle time for issues across the board columns you select. It shows the trend and outliers well.&lt;/p&gt;

&lt;p&gt;It is tied to a board and its columns rather than to statuses, it is not available in every project type, and it does not give you a per-issue table of time in each status that you can share or export.&lt;/p&gt;

&lt;h3&gt;
  
  
  Days in column on cards
&lt;/h3&gt;

&lt;p&gt;Boards can show a small indicator of how long a card has been in its current column. It tells you an issue is sitting still now. It does not tell you where the time went before that, or how long the column usually takes.&lt;/p&gt;

&lt;h3&gt;
  
  
  JQL
&lt;/h3&gt;

&lt;p&gt;JQL can find issues by their status history:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;status CHANGED FROM "In Progress" TO "In Review" DURING ("2026-09-01", "2026-09-30")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;status WAS "Blocked" ON "2026-10-01"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are good for finding issues, for example everything that passed through Blocked last month. JQL returns issues, not durations, so it cannot tell you how long anything stayed in a status.&lt;/p&gt;

&lt;h3&gt;
  
  
  The changelog API
&lt;/h3&gt;

&lt;p&gt;If you are comfortable with scripts, &lt;code&gt;GET /rest/api/3/issue/{issueIdOrKey}/changelog&lt;/code&gt; returns the full, paginated history of an issue. You can fetch it for every issue in a search, walk the status changes and total the time per status yourself. Many teams do exactly this in a spreadsheet or notebook, and then maintain the script.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to read time in status
&lt;/h2&gt;

&lt;p&gt;Once you have the numbers, the way you summarise them matters more than the tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use the median, not the average
&lt;/h3&gt;

&lt;p&gt;Time in status is almost always skewed. Most issues pass through review in a day or two, and one issue that waited three weeks for a decision pulls the average up for everyone. The &lt;strong&gt;median&lt;/strong&gt; is the typical visit: half the visits were shorter, half longer. It moves when the process changes, not when one issue gets stuck.&lt;/p&gt;

&lt;h3&gt;
  
  
  Add the 85th percentile
&lt;/h3&gt;

&lt;p&gt;The median hides the slow tail. The &lt;strong&gt;85th percentile&lt;/strong&gt; answers a question people actually ask: "How long will this probably take?" If 85% of visits to In Review finish within three days, that is a fair expectation to give a stakeholder, and anything well beyond it is worth a look.&lt;/p&gt;

&lt;h3&gt;
  
  
  Count visits
&lt;/h3&gt;

&lt;p&gt;A status with a short median but many visits per issue is a sign of rework. Issues bouncing between In Progress and In Review three times are not waiting long each time, but they are coming back.&lt;/p&gt;

&lt;h3&gt;
  
  
  Decide on business hours
&lt;/h3&gt;

&lt;p&gt;If your team works weekdays, calendar time makes anything that crosses a weekend look slow. Business hours count only the working day. Pick one and use it consistently, especially when comparing teams.&lt;/p&gt;

&lt;h3&gt;
  
  
  Set SLAs per status
&lt;/h3&gt;

&lt;p&gt;For support or operations work, a target per status is often more useful than a trend: "nothing should sit in Waiting for triage for more than 8 working hours." Then the report is a list of breaches rather than a chart to interpret.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step by step: time in status for a whole project
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/products/issue-history-for-jira"&gt;Issue History+ for Jira&lt;/a&gt; reads the same changelog Jira already keeps and does the totals for any set of issues. It runs on Atlassian Forge with no external servers, and every request runs with the viewing user's Jira permissions.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Open Apps &amp;gt; Issue History.&lt;/strong&gt; Choose a project, a sprint, an assignee, labels, a JQL query or a list of issue keys, and a date range. Click &lt;strong&gt;Search&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open the Time in Status tab.&lt;/strong&gt; Each status has a card with its &lt;strong&gt;median&lt;/strong&gt; time per visit, the time &lt;strong&gt;85% of visits finish within&lt;/strong&gt;, and the number of visits. Below is a table with one row per issue and one column per status, in workflow order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sort by the slowest status.&lt;/strong&gt; Click a status column header to see the issues that spent longest there, or &lt;strong&gt;Total&lt;/strong&gt; for the longest-running issues overall.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switch to business hours if you need them.&lt;/strong&gt; In &lt;strong&gt;Settings &amp;gt; Analysis&lt;/strong&gt;, choose business hours, set the working day, and decide whether weekends count.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add SLA thresholds.&lt;/strong&gt; In the same settings, pick a status and the maximum hours an issue should spend in it. Breaching cells are marked in the table, and a status card turns red when its typical visit is over the limit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check the Status Timeline tab.&lt;/strong&gt; Each issue's path through the workflow appears as one bar, coloured by status category, so repeat visits and long waits are visible at a glance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export.&lt;/strong&gt; Download CSV or Excel for further analysis, or a branded PDF with your company name and logo for people who don't use Jira.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;a href="https://dev.to/docs/issue-history-for-jira/features/time-in-status"&gt;time in status documentation&lt;/a&gt; explains exactly how visits, medians and SLAs are calculated. The &lt;a href="https://dev.to/docs/issue-history-for-jira/getting-started/quick-start"&gt;quick start&lt;/a&gt; walks through a first search.&lt;/p&gt;

&lt;p&gt;Custom workflows work as they are. The app uses each status's Jira category (To Do, In Progress, Done), so statuses like Shipped or Won't Fix count correctly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Three questions time in status answers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is stuck right now?
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Insights&lt;/strong&gt; tab has an &lt;strong&gt;Inactive work&lt;/strong&gt; list: issues that are not done and have had no status change for 7, 14 or 30 days. It is a short list to bring to stand-up instead of scanning the board for old cards.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where are we missing our targets?
&lt;/h3&gt;

&lt;p&gt;With SLA thresholds set, Insights counts the issues over SLA and lists the worst overruns first. Excel and PDF exports include the SLA and the number of issues over it, which is usually what a service review needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much work comes back?
&lt;/h3&gt;

&lt;p&gt;Insights also shows &lt;strong&gt;reopened&lt;/strong&gt; issues (anything that left Done at least once) and &lt;strong&gt;rework&lt;/strong&gt;, the share of status moves that go back to an earlier category. Together with median &lt;strong&gt;cycle time&lt;/strong&gt; and &lt;strong&gt;weekly throughput&lt;/strong&gt;, they show whether work is flowing or circling. The &lt;a href="https://dev.to/docs/issue-history-for-jira/features/insights"&gt;Insights documentation&lt;/a&gt; defines each metric.&lt;/p&gt;

&lt;p&gt;For a single issue, you don't need to leave it: an &lt;strong&gt;Issue Insights&lt;/strong&gt; tab in the issue's Activity section shows its time in status, its status timeline and every change.&lt;/p&gt;

&lt;p&gt;If you also report on Jira through dashboards, &lt;a href="https://dev.to/blogs/jira-reporting-for-product-managers"&gt;our guide to Jira reporting for product managers&lt;/a&gt; and &lt;a href="https://dev.to/blogs/building-jira-dashboard-that-tells-you-something"&gt;building a Jira dashboard that tells you something&lt;/a&gt; cover the other half: where issues are now, rather than how long they took to get there.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does Jira Cloud have a built-in time in status report?
&lt;/h3&gt;

&lt;p&gt;Not as a report for any set of issues. Jira records every status change in the issue history, and company-managed boards have a Control chart for cycle time across columns, but there is no native table of time per status per issue for a project, sprint or JQL search.&lt;/p&gt;

&lt;h3&gt;
  
  
  How is time in status calculated?
&lt;/h3&gt;

&lt;p&gt;From the moment an issue enters a status until it leaves it. The first status starts at the issue's creation date. If an issue visits the same status more than once, each visit is measured separately and the issue's total is the sum.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I use the average or the median?
&lt;/h3&gt;

&lt;p&gt;The median. One issue stuck for weeks can double an average, while the median shows the typical visit. Add the 85th percentile to see how long most visits take, including the slower ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I measure time in status in business hours?
&lt;/h3&gt;

&lt;p&gt;In Issue History+ for Jira, yes: choose business hours in Settings &amp;gt; Analysis, set the working day and choose whether weekends count. Business hours use each viewer's local time zone, so use calendar time when comparing figures across time zones.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it work with custom statuses and workflows?
&lt;/h3&gt;

&lt;p&gt;Yes. Issue History+ uses each status's Jira category, so any custom status counts correctly for time in status, cycle time and completion. It reads the standard changelog, which both company-managed and team-managed projects record.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does my Jira data leave Atlassian?
&lt;/h3&gt;

&lt;p&gt;No. Issue History+ runs entirely on Atlassian Forge and declares no egress. It stores only each user's saved searches and settings, in Forge storage. The &lt;a href="https://dev.to/docs/issue-history-for-jira/data-and-privacy"&gt;data and privacy page&lt;/a&gt; lists exactly what it reads and stores.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/products/issue-history-for-jira"&gt;Issue History+ for Jira&lt;/a&gt; is on the Atlassian Marketplace for Jira Cloud. Install it, open &lt;strong&gt;Apps &amp;gt; Issue History&lt;/strong&gt;, pick a project and open the Time in Status tab. You will see where your work waits in the time it takes to run one search.&lt;/p&gt;

</description>
      <category>jira</category>
      <category>atlassian</category>
      <category>timeinstatus</category>
      <category>projectmanagement</category>
    </item>
    <item>
      <title>Confluence to Markdown: 4 Ways to Export, Compared</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Mon, 26 Oct 2026 12:42:57 +0000</pubDate>
      <link>https://dev.to/yamuno/confluence-to-markdown-4-ways-to-export-compared-4koo</link>
      <guid>https://dev.to/yamuno/confluence-to-markdown-4-ways-to-export-compared-4koo</guid>
      <description>&lt;h1&gt;
  
  
  Confluence to Markdown: 4 Ways to Export, Compared
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; Confluence Cloud can export pages to PDF and Word, and spaces to HTML, XML, CSV or PDF, but not to Markdown. For one page, you can copy the content into a Markdown editor or convert the HTML with Pandoc. For page trees, whole spaces or regular exports, use a Confluence Markdown exporter app such as the free &lt;a href="https://dev.to/products/markdown-exporter-for-confluence"&gt;Markdown Exporter for Confluence&lt;/a&gt;, which keeps the hierarchy, attachments and links between pages.&lt;/p&gt;

&lt;p&gt;Teams want Markdown out of Confluence for a few reasons: moving docs into a Git repository, publishing with a static site generator, building an Obsidian vault, feeding documentation to AI tools, or keeping a plain-text backup that doesn't depend on any one vendor. Each method below gets you &lt;code&gt;.md&lt;/code&gt; files. They differ in how much of the page survives and how much work it takes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Confluence exports on its own
&lt;/h2&gt;

&lt;p&gt;Before reaching for a tool, it helps to know what Confluence Cloud gives you:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Export&lt;/th&gt;
&lt;th&gt;Where&lt;/th&gt;
&lt;th&gt;Formats&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;One page&lt;/td&gt;
&lt;td&gt;••• menu on the page, &lt;strong&gt;Export&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;PDF, Word&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A whole space&lt;/td&gt;
&lt;td&gt;Space settings, &lt;strong&gt;Export space&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;HTML, XML, CSV, PDF&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;None of these is Markdown. The space HTML export is the closest starting point, because HTML converts to Markdown reasonably well, but it is a space admin task, it exports everything in the space, and the conversion is still on you. If you are curious how Confluence's own markup relates to Markdown, see &lt;a href="https://dev.to/blogs/confluence-wiki-markup-vs-markdown"&gt;Confluence wiki markup vs Markdown&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 1: Copy and paste
&lt;/h2&gt;

&lt;p&gt;Open the page, select the content, and paste it into an editor that converts rich text to Markdown (many Markdown editors and note apps do this on paste).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keeps:&lt;/strong&gt; headings, bold and italic, simple lists, links.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Loses:&lt;/strong&gt; images (they paste as links to Confluence, which need a login), tables with merged cells, panels, code block languages, and the page hierarchy. Links to other Confluence pages still point at Confluence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use it for:&lt;/strong&gt; one or two short pages, once.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 2: The REST API and Pandoc
&lt;/h2&gt;

&lt;p&gt;For a scripted export without an app, fetch the page body with the Confluence REST API and convert it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create an API token for your Atlassian account.&lt;/li&gt;
&lt;li&gt;Fetch a page's rendered HTML:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; you@example.com:&lt;span class="nv"&gt;$API_TOKEN&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"https://your-site.atlassian.net/wiki/api/v2/pages/123456?body-format=export_view"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.body.export_view.value'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; page.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Convert it to GitHub-flavored Markdown:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pandoc &lt;span class="nt"&gt;-f&lt;/span&gt; html &lt;span class="nt"&gt;-t&lt;/span&gt; gfm page.html &lt;span class="nt"&gt;-o&lt;/span&gt; page.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To export a page tree, list the children with &lt;code&gt;/wiki/api/v2/pages/{id}/children&lt;/code&gt;, repeat for each page, and build the folders yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keeps:&lt;/strong&gt; text, headings, lists, simple tables, code blocks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Loses or needs extra code:&lt;/strong&gt; attachments and images (a separate download per file, then rewriting the image links), links between pages (they still point at Confluence URLs), panels and other macros (they come out as raw HTML or vanish), and any front matter you want.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use it for:&lt;/strong&gt; developers who want full control and don't mind maintaining a script. Budget time for the edge cases; they are most of the work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 3: Markdown Exporter for Confluence
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/products/markdown-exporter-for-confluence"&gt;Markdown Exporter for Confluence&lt;/a&gt; is a free app built only for export. It runs on Atlassian Forge, so your content never leaves Atlassian.&lt;/p&gt;

&lt;p&gt;Open it from any page's &lt;strong&gt;•••&lt;/strong&gt; menu with &lt;strong&gt;Export to Markdown&lt;/strong&gt;, or from &lt;strong&gt;Apps → Markdown Exporter&lt;/strong&gt; to start from a space. Tick the pages you want in the page tree (ticking a parent selects its children) and click &lt;strong&gt;Export Selected&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A ZIP that mirrors the page tree&lt;/strong&gt;, with one &lt;code&gt;.md&lt;/code&gt; file per page, or every page in &lt;strong&gt;one Markdown file&lt;/strong&gt; if you prefer a single document&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attachments&lt;/strong&gt; in an &lt;code&gt;attachments/&lt;/code&gt; folder, linked with relative paths so images still show after you unzip&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Links between pages rewritten&lt;/strong&gt; as relative &lt;code&gt;.md&lt;/code&gt; paths, or as &lt;code&gt;[[wikilinks]]&lt;/code&gt; in &lt;a href="https://dev.to/blogs/confluence-to-obsidian-export"&gt;Obsidian mode&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;YAML front matter&lt;/strong&gt; with title, author, date, space key and page ID, plus your own fields, ready for static site generators&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Panels as callouts&lt;/strong&gt; such as &lt;code&gt;&amp;gt; [!NOTE]&lt;/code&gt;, or as blockquotes or plain text&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filename patterns&lt;/strong&gt; with &lt;code&gt;{title}&lt;/code&gt;, &lt;code&gt;{date}&lt;/code&gt; and &lt;code&gt;{id}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A Markdown preview&lt;/strong&gt; of any page before you export&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For bigger jobs, released on 26 October 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Background exports.&lt;/strong&gt; Exports over 100 pages or 100 attachments run on Atlassian's servers, so you can close the page and download the result later from &lt;strong&gt;My exports&lt;/strong&gt;. One export can include up to 2,000 pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scheduled exports.&lt;/strong&gt; Export a space or page tree every week or every month. Each run attaches a dated ZIP or &lt;code&gt;.md&lt;/code&gt; file to an archive page, or keeps it in My exports, and can @mention people so Confluence emails them. That makes a regular Markdown backup of a space a one-time setup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export API.&lt;/strong&gt; Start an export from a CI pipeline or script with one HTTP request and an API token, and attach the result to a page. There is also an OAuth &lt;a href="https://dev.to/docs/markdown-exporter-for-confluence/rest-api/getting-started"&gt;REST API&lt;/a&gt; that returns Markdown directly, which suits &lt;a href="https://dev.to/blogs/confluence-markdown-export-docs-as-code"&gt;docs-as-code workflows&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use it for:&lt;/strong&gt; page trees and whole spaces, moving docs to Git or a static site, Obsidian, and any export you want to repeat.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 4: Markdown Importer's built-in export
&lt;/h2&gt;

&lt;p&gt;If your team also brings Markdown into Confluence, &lt;a href="https://dev.to/products/markdown-importer-for-confluence"&gt;Markdown Importer for Confluence&lt;/a&gt; does both directions in one app. Its &lt;strong&gt;Export to Markdown&lt;/strong&gt; action exports a single page, a page with its children, or a whole space as a ZIP, with the hierarchy kept as folders and attachments linked by relative paths.&lt;/p&gt;

&lt;p&gt;It doesn't have the front matter, Obsidian mode, filename patterns, schedules or APIs of the standalone exporter, so pick it when two-way sync matters more than export options. The &lt;a href="https://dev.to/blogs/how-to-export-confluence-to-markdown"&gt;step-by-step export guide&lt;/a&gt; walks through it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Side by side
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Copy and paste&lt;/th&gt;
&lt;th&gt;REST API + Pandoc&lt;/th&gt;
&lt;th&gt;Markdown Exporter&lt;/th&gt;
&lt;th&gt;Markdown Importer export&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Price&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Free, your time&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Paid, free up to 10 users&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Page trees and spaces&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;With your own script&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Images and attachments&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Extra code&lt;/td&gt;
&lt;td&gt;Yes, relative links&lt;/td&gt;
&lt;td&gt;Yes, relative links&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Links between pages&lt;/td&gt;
&lt;td&gt;Point at Confluence&lt;/td&gt;
&lt;td&gt;Point at Confluence&lt;/td&gt;
&lt;td&gt;Relative &lt;code&gt;.md&lt;/code&gt; or wikilinks&lt;/td&gt;
&lt;td&gt;Relative links&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Panels&lt;/td&gt;
&lt;td&gt;Lost&lt;/td&gt;
&lt;td&gt;Raw HTML&lt;/td&gt;
&lt;td&gt;Callouts, blockquotes or text&lt;/td&gt;
&lt;td&gt;GitHub callouts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YAML front matter&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Your own code&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One combined .md file&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Your own code&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schedules&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Your own cron job&lt;/td&gt;
&lt;td&gt;Weekly or monthly&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automation&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;REST API and Export API&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Choosing a Confluence Markdown exporter
&lt;/h2&gt;

&lt;p&gt;Whichever tool you pick, test it on one real page tree before a big move, and check:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Do images survive?&lt;/strong&gt; Unzip the export somewhere without a Confluence login and open a page with screenshots.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do links between pages work offline?&lt;/strong&gt; They should point at other &lt;code&gt;.md&lt;/code&gt; files, not at Confluence URLs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What happens to macros?&lt;/strong&gt; Panels, expand sections, status labels and code blocks are where exports differ most.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Does it scale?&lt;/strong&gt; Try your largest space, not your smallest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where does the content go?&lt;/strong&gt; An app that runs on Atlassian Forge keeps the export inside Atlassian; an externally hosted app sends your pages to its own servers. See our &lt;a href="https://dev.to/blogs/forge-native-vs-externally-hosted-apps-security-checklist"&gt;Forge security checklist&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Can Confluence export to Markdown natively?
&lt;/h3&gt;

&lt;p&gt;No. Confluence Cloud exports pages to PDF and Word, and spaces to HTML, XML, CSV or PDF. To get Markdown, convert one of those or use a Marketplace app.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the best way to export a whole Confluence space to Markdown?
&lt;/h3&gt;

&lt;p&gt;Use an exporter app that keeps the page tree. In Markdown Exporter, open &lt;strong&gt;Apps → Markdown Exporter&lt;/strong&gt;, pick the space and its top page, tick the pages and export. Large spaces run in the background and arrive in &lt;strong&gt;My exports&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I export Confluence to Markdown automatically?
&lt;/h3&gt;

&lt;p&gt;Yes. Markdown Exporter can export a space or page tree every week or month on a schedule, and its Export API lets a CI job start an export with one request. With your own script, you can do the same with the REST API, Pandoc and a cron job.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are images included when I export Confluence to Markdown?
&lt;/h3&gt;

&lt;p&gt;With copy-paste, no. With a script, only if you download each attachment and rewrite the links. Markdown Exporter puts attachments in an &lt;code&gt;attachments/&lt;/code&gt; folder in the ZIP and links them with relative paths.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is there a free Confluence Markdown exporter?
&lt;/h3&gt;

&lt;p&gt;Yes. Markdown Exporter for Confluence is free on the Atlassian Marketplace and works on Confluence Cloud.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I convert Markdown back into Confluence later?
&lt;/h3&gt;

&lt;p&gt;Yes. &lt;a href="https://dev.to/products/markdown-importer-for-confluence"&gt;Markdown Importer for Confluence&lt;/a&gt; imports &lt;code&gt;.md&lt;/code&gt; files, folders or a ZIP as a page tree. See &lt;a href="https://dev.to/blogs/how-to-import-markdown-into-confluence"&gt;how to import Markdown into Confluence&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Install &lt;a href="https://marketplace.atlassian.com/apps/102037374" rel="noopener noreferrer"&gt;Markdown Exporter for Confluence&lt;/a&gt; from the Atlassian Marketplace, open any page's &lt;strong&gt;•••&lt;/strong&gt; menu, choose &lt;strong&gt;Export to Markdown&lt;/strong&gt;, and export a small page tree to see what you get. The &lt;a href="https://dev.to/docs/markdown-exporter-for-confluence/getting-started/quick-start"&gt;quick start&lt;/a&gt; covers the rest.&lt;/p&gt;

</description>
      <category>documentation</category>
      <category>markdown</category>
      <category>tools</category>
    </item>
    <item>
      <title>How to Embed an iframe in Confluence Cloud</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Tue, 20 Oct 2026 13:24:09 +0000</pubDate>
      <link>https://dev.to/yamuno/how-to-embed-an-iframe-in-confluence-cloud-26b9</link>
      <guid>https://dev.to/yamuno/how-to-embed-an-iframe-in-confluence-cloud-26b9</guid>
      <description>&lt;h1&gt;
  
  
  How to Embed an iframe in Confluence Cloud
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; Confluence Cloud gives you two built-in ways to embed another web page: paste the link and switch it to the &lt;strong&gt;Embed&lt;/strong&gt; view, or insert the &lt;strong&gt;iFrame macro&lt;/strong&gt; and give it a URL. If you want a responsive frame, a caption or two embeds side by side, use an HTML macro app; HTML Macro+ can write the iframe code for you from a normal YouTube, Figma, Google Docs or Power BI link. None of these can show a site that refuses to be framed, which is the usual reason an embed comes up blank.&lt;/p&gt;

&lt;p&gt;This guide walks through all three options, shows working examples for YouTube, Google Sheets and dashboards, and ends with a checklist for blank embeds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three ways to embed in Confluence Cloud
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;How you add it&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;th&gt;Limits&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Smart Link embed&lt;/td&gt;
&lt;td&gt;Paste a link, select it, choose &lt;strong&gt;Embed&lt;/strong&gt; in the link toolbar&lt;/td&gt;
&lt;td&gt;Apps Atlassian already knows: videos, design files, Google files, Jira&lt;/td&gt;
&lt;td&gt;Only works for supported sources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iFrame macro&lt;/td&gt;
&lt;td&gt;Type &lt;code&gt;/iframe&lt;/code&gt;, set the URL and size&lt;/td&gt;
&lt;td&gt;Any page that allows framing, shown as is&lt;/td&gt;
&lt;td&gt;Fixed width and height, no layout or caption&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTML macro&lt;/td&gt;
&lt;td&gt;Type &lt;code&gt;/html&lt;/code&gt;, paste a link into an embed template or write your own &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Responsive frames, captions, several embeds, embeds inside your own layout&lt;/td&gt;
&lt;td&gt;Needs an app; admins decide which domains can load&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Start with the first one that works. Smart Links need no setup, the iFrame macro covers most other cases, and an HTML macro is for when you want control over how the embed looks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 1: Smart Link embed
&lt;/h2&gt;

&lt;p&gt;When you paste a URL into a Confluence page, it usually turns into a Smart Link. Smart Links have several views: &lt;strong&gt;Inline&lt;/strong&gt; shows just the title, &lt;strong&gt;Card&lt;/strong&gt; adds a preview with some context, and &lt;strong&gt;Embed&lt;/strong&gt; shows the content itself in the page so readers can use it without leaving Confluence.&lt;/p&gt;

&lt;p&gt;To switch a link to an embed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Paste the URL into the page, or type &lt;code&gt;/link&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Select the link.&lt;/li&gt;
&lt;li&gt;In the toolbar that appears, choose the embed view.&lt;/li&gt;
&lt;li&gt;Drag the edges to resize it, then publish.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the quickest option for YouTube videos, Figma files, Loom recordings, Google Docs and Sheets, and Jira work items. Content from apps that need a login, such as a Google Sheet, is shown according to each reader's own access, so a reader without permission sees a prompt instead of the data. If a link does not offer an embed view, Confluence does not recognise the source, and you need one of the next two options.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 2: the built-in iFrame macro
&lt;/h2&gt;

&lt;p&gt;The iFrame macro embeds any web page by URL. To add it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Edit the page and type &lt;code&gt;/iframe&lt;/code&gt;, then select &lt;strong&gt;iFrame&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter the address of the page you want to show. Use &lt;code&gt;https://&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set the other parameters in the macro panel. Changes save as you make them.&lt;/li&gt;
&lt;li&gt;Publish the page.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The parameters that still have an effect in Cloud, according to Atlassian's documentation:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Width&lt;/td&gt;
&lt;td&gt;Fixed width in pixels&lt;/td&gt;
&lt;td&gt;Not set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Height&lt;/td&gt;
&lt;td&gt;Fixed height in pixels&lt;/td&gt;
&lt;td&gt;Not set&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Align&lt;/td&gt;
&lt;td&gt;Left or right&lt;/td&gt;
&lt;td&gt;Left&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;frameborder&lt;/td&gt;
&lt;td&gt;Show or hide a border around the frame&lt;/td&gt;
&lt;td&gt;Show&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;scrolling&lt;/td&gt;
&lt;td&gt;Yes, No or Auto&lt;/td&gt;
&lt;td&gt;Auto&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Older parameters such as title, ID, class and margin are deprecated and do nothing. In practice you set the URL and a height that fits the content, for example 600 pixels for a form or 800 for a dashboard.&lt;/p&gt;

&lt;p&gt;The iFrame macro is the right choice when the embed only needs to appear on the page. It has no way to add a caption, keep a 16:9 ratio on narrow screens, or place two frames next to each other.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 3: your own iframe in an HTML macro
&lt;/h2&gt;

&lt;p&gt;Confluence Cloud has no HTML macro of its own, so this needs an app from the Atlassian Marketplace. The examples below use &lt;a href="https://dev.to/products/html-macro-for-confluence"&gt;HTML Macro+ for Confluence&lt;/a&gt;, which is free and runs on Atlassian Forge. Edit a page, type &lt;code&gt;/html&lt;/code&gt; and select &lt;strong&gt;HTML Macro+ for Confluence&lt;/strong&gt;. The editor has separate HTML, CSS and JavaScript tabs and a live preview.&lt;/p&gt;

&lt;p&gt;Two things to know before you start:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Admins choose which domains can load.&lt;/strong&gt; HTML Macro+ has three security modes: Block all, Whitelist only and Allow all. In Block all mode no iframes load. In Whitelist only mode, an iframe loads only if its domain is on the list; otherwise readers see a blocked content placeholder. An empty whitelist behaves like Block all. Admins set this under &lt;strong&gt;Confluence Administration &amp;gt; Manage apps &amp;gt; HTML Macro+ for Confluence &amp;gt; Configure&lt;/strong&gt;, as described in the &lt;a href="https://dev.to/docs/html-macro-for-confluence/configuration/security-settings"&gt;security settings guide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The macro sizes itself.&lt;/strong&gt; The macro's height follows its content, so you control the frame size with CSS instead of a height field.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Adding &lt;code&gt;youtube.com&lt;/code&gt; to the whitelist also covers &lt;code&gt;www.youtube.com&lt;/code&gt;, because an entry matches the domain and its subdomains. Use &lt;code&gt;*.example.com&lt;/code&gt; if you want subdomains only.&lt;/p&gt;

&lt;h3&gt;
  
  
  The quick way: embed templates
&lt;/h3&gt;

&lt;p&gt;You don't have to write the iframe yourself. In the HTML Macro+ editor, click &lt;strong&gt;Embed templates&lt;/strong&gt;, pick the service and paste the link you already have. The template converts it into the address the service expects inside a frame and writes responsive HTML and CSS into the editor, with a preview before you insert it.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Services&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Video&lt;/td&gt;
&lt;td&gt;YouTube, Vimeo, Loom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Design and whiteboards&lt;/td&gt;
&lt;td&gt;Figma, Miro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Documents&lt;/td&gt;
&lt;td&gt;Google Docs, Sheets, Slides, Forms and Drive files, Microsoft Forms, Word, Excel and PowerPoint on the web&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dashboards and data&lt;/td&gt;
&lt;td&gt;Power BI, Tableau Public, Airtable, Google Maps, Google Calendar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Other&lt;/td&gt;
&lt;td&gt;Any web page or PDF&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Choose &lt;strong&gt;Add below&lt;/strong&gt; to stack several embeds in one macro, or &lt;strong&gt;Replace content&lt;/strong&gt; to start fresh. If your admin's settings block the service's domain, the dialog tells you before you insert it. The generated code stays editable, so you can still add a caption or change the size. See the &lt;a href="https://dev.to/docs/html-macro-for-confluence/features/embed-templates"&gt;embed templates guide&lt;/a&gt; for which link to paste for each service.&lt;/p&gt;

&lt;p&gt;The examples below show the code by hand, for when you want a layout of your own.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: embed a YouTube video
&lt;/h2&gt;

&lt;p&gt;On YouTube, open the video, select &lt;strong&gt;Share &amp;gt; Embed&lt;/strong&gt; and copy the &lt;code&gt;src&lt;/code&gt; address. It looks like &lt;code&gt;https://www.youtube.com/embed/VIDEO_ID&lt;/code&gt;. A normal &lt;code&gt;watch?v=&lt;/code&gt; link will not play in a frame. (The YouTube embed template in HTML Macro+ accepts the normal link and converts it for you.)&lt;/p&gt;

&lt;p&gt;With the iFrame macro, paste that address and set the height to about 400 pixels. With HTML Macro+, you can make the frame keep its shape on any screen width:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTML&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;figure&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"video"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;iframe&lt;/span&gt;
    &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://www.youtube.com/embed/VIDEO_ID"&lt;/span&gt;
    &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;"Onboarding walkthrough"&lt;/span&gt;
    &lt;span class="na"&gt;allow=&lt;/span&gt;&lt;span class="s"&gt;"fullscreen; picture-in-picture"&lt;/span&gt;
    &lt;span class="na"&gt;allowfullscreen&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;figcaption&amp;gt;&lt;/span&gt;Onboarding walkthrough, 8 minutes&lt;span class="nt"&gt;&amp;lt;/figcaption&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/figure&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;CSS&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.video&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;-apple-system&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;"Segoe UI"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.video&lt;/span&gt; &lt;span class="nt"&gt;iframe&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;aspect-ratio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="m"&gt;9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.video&lt;/span&gt; &lt;span class="nt"&gt;figcaption&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;13px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#44546f&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For HTML Macro+, &lt;code&gt;youtube.com&lt;/code&gt; needs to be on the whitelist unless your admin allows all domains. If you prefer YouTube's privacy-enhanced mode, use &lt;code&gt;youtube-nocookie.com&lt;/code&gt; in the address and whitelist that domain instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: embed a Google Sheet
&lt;/h2&gt;

&lt;p&gt;There are two good ways to put a Google Sheet on a Confluence page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For a sheet your team already shares in Google,&lt;/strong&gt; paste the sheet's link and switch it to the embed view (Option 1). Readers see it with their own Google access, so permissions stay in Google.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For a read-only table anyone can see,&lt;/strong&gt; publish it from Google Sheets:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Google Sheets, open &lt;strong&gt;File &amp;gt; Share &amp;gt; Publish to web&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose the &lt;strong&gt;Embed&lt;/strong&gt; tab, pick the whole document or one sheet, and select &lt;strong&gt;Publish&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Copy the iframe code. Its &lt;code&gt;src&lt;/code&gt; starts with &lt;code&gt;https://docs.google.com/spreadsheets/d/e/&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Paste that address into the iFrame macro, or use the full iframe code in HTML Macro+ with &lt;code&gt;docs.google.com&lt;/code&gt; (or &lt;code&gt;google.com&lt;/code&gt;) on the whitelist. Two cautions: a published sheet is visible to anyone who has the address, so never publish sheets with private data, and edits reach the embed only while the sheet's &lt;strong&gt;Automatically republish when changes are made&lt;/strong&gt; option is on.&lt;/p&gt;

&lt;p&gt;HTML Macro+ also lets you place a sheet next to something else, such as a chart and the table it comes from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"pair"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;iframe&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://docs.google.com/spreadsheets/d/e/SHEET_ID/pubhtml?widget=true&amp;amp;headers=false"&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;"Q3 budget"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;iframe&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://docs.google.com/spreadsheets/d/e/SHEET_ID/pubchart?oid=CHART_ID&amp;amp;format=interactive"&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;"Q3 budget chart"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.pair&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="py"&gt;grid-template-columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auto-fit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;minmax&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;320px&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.pair&lt;/span&gt; &lt;span class="nt"&gt;iframe&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;420px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;#dfe1e6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you would rather draw the chart in Confluence from your own data, see &lt;a href="https://dev.to/blogs/how-to-embed-interactive-charts-confluence-html-macro"&gt;how to make a pie chart in Confluence&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: embed a dashboard or internal tool
&lt;/h2&gt;

&lt;p&gt;Status pages, BI dashboards and internal web tools are common things to embed on a team's home page. Most BI tools have an embed or share option that gives you a frame address meant for this. Use it rather than the address in your browser bar, because the normal page often blocks framing.&lt;/p&gt;

&lt;p&gt;A few notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Some tools need embedding turned on first. Grafana, for example, refuses to be framed until &lt;code&gt;allow_embedding&lt;/code&gt; is enabled in its server configuration.&lt;/li&gt;
&lt;li&gt;If the tool needs a login, readers sign in inside the frame, and some login pages refuse to load in a frame at all. Check with a colleague's account before you rely on it.&lt;/li&gt;
&lt;li&gt;If you only need a few numbers on the page, consider building the panel in Confluence instead. Our guide to &lt;a href="https://dev.to/blogs/how-to-build-custom-status-dashboard-confluence"&gt;building a status dashboard in Confluence&lt;/a&gt; shows how.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why an iframe shows blank
&lt;/h2&gt;

&lt;p&gt;When an embed shows an empty box, a grey page or a "refused to connect" message, check these in order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The site blocks framing.&lt;/strong&gt; Many sites send an &lt;code&gt;X-Frame-Options&lt;/code&gt; or &lt;code&gt;Content-Security-Policy: frame-ancestors&lt;/code&gt; header that tells browsers not to show them inside other pages. No Confluence setting or app can override this. Look for the site's own embed address, or use a link instead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The address uses &lt;code&gt;http://&lt;/code&gt;.&lt;/strong&gt; Confluence is served over HTTPS, and browsers block insecure frames on secure pages. Change the address to &lt;code&gt;https://&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You used the page address, not the embed address.&lt;/strong&gt; YouTube, Google Sheets, maps and BI tools all have a separate embed URL. In HTML Macro+, an embed template does this conversion for you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The domain is not whitelisted (HTML Macro+).&lt;/strong&gt; You will see a blocked content placeholder instead of a blank frame. Ask your admin to add the domain shown in the iframe's &lt;code&gt;src&lt;/code&gt;. The &lt;a href="https://dev.to/docs/html-macro-for-confluence/troubleshooting"&gt;troubleshooting guide&lt;/a&gt; lists the common ones.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The height is too small.&lt;/strong&gt; In the iFrame macro, set an explicit height. In an HTML macro, give the iframe a height or an aspect ratio in CSS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The browser blocked it.&lt;/strong&gt; Privacy extensions and strict browser settings can block third-party frames. Try another browser to rule this out.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you are moving from Confluence Data Center and your old pages used the HTML or HTML Include macro for embeds, see &lt;a href="https://dev.to/use-cases/confluence-cloud-migration-macros"&gt;keeping legacy macros working after a Cloud migration&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does Confluence Cloud support iframes?
&lt;/h3&gt;

&lt;p&gt;Yes. Confluence Cloud includes an iFrame macro that embeds a web page by URL, and Smart Links can show supported apps in an embed view. What it does not have is a built-in HTML macro for writing your own iframe code. For that you need a Marketplace app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why is my iframe blank in Confluence?
&lt;/h3&gt;

&lt;p&gt;Usually because the site you are embedding does not allow other sites to frame it. Other common causes are an &lt;code&gt;http://&lt;/code&gt; address, using the normal page address instead of the embed address, and a height that is too small. With an HTML macro app, the domain may also need to be allowed by your admin.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I embed a Google Sheet in Confluence?
&lt;/h3&gt;

&lt;p&gt;Paste the sheet's link and switch it to the embed view, which keeps Google's sharing permissions. For a public, read-only table, use &lt;strong&gt;File &amp;gt; Share &amp;gt; Publish to web&lt;/strong&gt; in Google Sheets and put the embed address in the iFrame macro or an HTML macro.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I make an iframe responsive in Confluence?
&lt;/h3&gt;

&lt;p&gt;Not with the iFrame macro, which uses a fixed width and height. In an HTML macro, set &lt;code&gt;width: 100%&lt;/code&gt; and an &lt;code&gt;aspect-ratio&lt;/code&gt; on the iframe in CSS, as in the YouTube example above. HTML Macro+ embed templates produce responsive code like this automatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I embed Power BI, Figma or Miro in Confluence?
&lt;/h3&gt;

&lt;p&gt;Try a Smart Link embed first, which works for many design tools. For Power BI, Tableau Public, Airtable and anything without an embed view, use an HTML macro. In HTML Macro+, open &lt;strong&gt;Embed templates&lt;/strong&gt;, choose the service and paste a "Publish to web" or share link. The file must be shared so that your readers can open it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is it safe to embed other sites in Confluence?
&lt;/h3&gt;

&lt;p&gt;The embedded site runs in its own frame and cannot read your Confluence page. The bigger risk is showing content you did not mean to share, such as a published sheet, or letting editors frame any site. HTML Macro+ lets admins limit framing to approved domains and limit who can edit the macro.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I still use the old HTML macro from Data Center?
&lt;/h3&gt;

&lt;p&gt;Not natively. Confluence Cloud does not include it, and migrated pages that used it show an error. An HTML macro app such as HTML Macro+ renders those legacy macros again; see our &lt;a href="https://dev.to/blogs/html-macro-for-confluence-launch"&gt;overview of the HTML macro for Cloud&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Try the built-in options first: paste a link and choose embed, or type &lt;code&gt;/iframe&lt;/code&gt;. When you need a responsive frame, a caption, several embeds in one layout or an embed built from a plain link, install &lt;a href="https://dev.to/products/html-macro-for-confluence"&gt;HTML Macro+ for Confluence&lt;/a&gt;, free on the Atlassian Marketplace, and follow the &lt;a href="https://dev.to/docs/html-macro-for-confluence/getting-started/installation"&gt;installation guide&lt;/a&gt;. For more ideas, see &lt;a href="https://dev.to/blogs/how-to-use-html-in-confluence-cloud"&gt;5 ways to use HTML in Confluence Cloud&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>confluence</category>
      <category>html</category>
      <category>atlassian</category>
    </item>
    <item>
      <title>Script Toolkit for Jira is live on the Marketplace</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Thu, 15 Oct 2026 06:44:44 +0000</pubDate>
      <link>https://dev.to/yamuno/script-toolkit-for-jira-is-live-on-the-marketplace-1fi</link>
      <guid>https://dev.to/yamuno/script-toolkit-for-jira-is-live-on-the-marketplace-1fi</guid>
      <description>&lt;h1&gt;
  
  
  Script Toolkit for Jira is live on the Marketplace
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; &lt;a href="https://dev.to/products/script-toolkit-for-jira"&gt;Script Toolkit for Jira&lt;/a&gt; is now on the &lt;a href="https://marketplace.atlassian.com/apps/1984972638/script-toolkit-for-jira" rel="noopener noreferrer"&gt;Atlassian Marketplace&lt;/a&gt;, and it's free. It lets Jira admins extend Jira Cloud with JavaScript: your own panels on work items, dashboard gadgets, web triggers for other systems, scheduled jobs, scripted fields and workflow validators. Everything runs on Atlassian Forge, inside your Jira site, and backend scripts are read only unless you allow writes.&lt;/p&gt;

&lt;p&gt;Most Jira teams have a short list of small things they wish Jira did. Show the linked deployment on every work item. Post a comment when CI finishes. Count overdue work every morning. Refuse a transition when a field is empty. Each one is a few lines of code, but until now each one meant building and hosting a whole app, or living without it. Script Toolkit gives those few lines a place to run.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can build
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Try code in the Script Console
&lt;/h3&gt;

&lt;p&gt;Open &lt;strong&gt;Jira settings → Apps → Script Toolkit → Script Console&lt;/strong&gt;, write JavaScript, and press &lt;strong&gt;⌘↵&lt;/strong&gt; (Ctrl+↵ on Windows). The console runs in your browser with your own Jira permissions and saves nothing, so it's a safe place to explore the Jira REST API before you turn code into a script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;requestJira&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/rest/api/3/search/approximate-count&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;jql&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;statusCategory != Done AND assignee = currentUser()&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; open work items assigned to you`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;await&lt;/code&gt; works at the top level, and whatever you return is shown under the editor. The &lt;a href="https://dev.to/docs/script-toolkit-for-jira/script-console"&gt;Script Console guide&lt;/a&gt; lists every global you can use.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fragments: your own panels inside Jira
&lt;/h3&gt;

&lt;p&gt;A fragment is HTML, CSS and JavaScript that Script Toolkit shows inside Jira. Put it in a panel on every work item, in a dialog opened from the work item's &lt;strong&gt;•••&lt;/strong&gt; menu, on a project page or in project settings. Several fragments in the same place appear as tabs.&lt;/p&gt;

&lt;p&gt;Fragments run in the viewer's browser and call Jira as the viewer, so people only ever see what they could already see. Use Atlassian design tokens and your panel follows Jira's light and dark themes. The &lt;a href="https://dev.to/docs/script-toolkit-for-jira/fragments"&gt;fragments guide&lt;/a&gt; has a minimal example you can paste and save.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dashboard gadgets
&lt;/h3&gt;

&lt;p&gt;Gadget scripts work like fragments, but on a dashboard. Add the &lt;strong&gt;Script Toolkit Gadget&lt;/strong&gt;, pick one of your gadget scripts, and each gadget on the dashboard can show a different one. Each viewer sees their own data. See &lt;a href="https://dev.to/docs/script-toolkit-for-jira/gadgets"&gt;Gadgets&lt;/a&gt; for the setup. If what you need is a standard chart rather than custom code, &lt;a href="https://dev.to/products/charts-for-jira-dashboard"&gt;Charts for Jira Dashboard&lt;/a&gt; is the quicker route.&lt;/p&gt;

&lt;h3&gt;
  
  
  Web triggers for other systems
&lt;/h3&gt;

&lt;p&gt;A web trigger gives a script a secure URL with its own secret. A CI pipeline, a monitoring alert or a form can call it, and whatever the script returns comes back as JSON. Calls without the right secret get a 401 before any script runs, and you can rotate the secret at any time. The &lt;a href="https://dev.to/docs/script-toolkit-for-jira/web-triggers"&gt;web triggers guide&lt;/a&gt; shows a full example that comments on a work item when a deploy finishes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scheduled jobs
&lt;/h3&gt;

&lt;p&gt;Run a backend script on a cron schedule in UTC: a morning count of overdue work, a weekly clean-up, a nightly sync with another tool. Jobs are checked every five minutes and can run for up to five minutes each. See &lt;a href="https://dev.to/docs/script-toolkit-for-jira/scheduled-jobs"&gt;Scheduled jobs&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scripted fields
&lt;/h3&gt;

&lt;p&gt;Create a custom field whose value a script computes when the work item is shown: text, number, user, date or date time. For example, the number of done subtasks, or a due date worked out from other fields. Field runs have their own daily limit, so heavy browsing can't use up the budget your jobs and triggers need. See &lt;a href="https://dev.to/docs/script-toolkit-for-jira/scripted-fields"&gt;Scripted fields&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow validators and post-functions
&lt;/h3&gt;

&lt;p&gt;Attach a script to a transition. A validator can block it and tell the user why, for example "Assign this work item first." A post-function runs after the transition, to add a comment or set a field. A validator that fails or times out allows the transition, so a broken script can never lock a workflow. See &lt;a href="https://dev.to/docs/script-toolkit-for-jira/workflow-extensions"&gt;Workflow extensions&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bulk tools for people who aren't admins
&lt;/h3&gt;

&lt;p&gt;Script Toolkit also includes seven ready-made bulk tools for work items: transition, set resolution, assign, add a comment, edit labels, set priority, and copy one custom field into another. You open each tool to admins, chosen groups or everyone. People run a tool on a JQL query, up to 5,000 work items at a time, and it uses their own Jira permissions, so access to a tool grants no new rights. The &lt;a href="https://dev.to/docs/script-toolkit-for-jira/tools"&gt;tools guide&lt;/a&gt; covers access and limits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safe by default
&lt;/h2&gt;

&lt;p&gt;Running code inside Jira should not mean giving up control, so the defaults are strict:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Only Jira admins write scripts.&lt;/strong&gt; Everyone else only sees the results, or runs the bulk tools you open to them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend scripts are read only&lt;/strong&gt; unless you set a script's Jira access to Read and write. Any request that would change data is refused before it is sent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outbound calls happen only if you allow them&lt;/strong&gt;, either to a list of hosts you choose or to any public https host. Private and internal addresses are always refused.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secrets stay secret.&lt;/strong&gt; API keys live in Forge's encrypted secret storage, can't be read back from the UI, and are masked in logs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Every run has limits&lt;/strong&gt;: a time limit per run and daily limits per site, which admins can adjust within set ranges.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Every run is logged&lt;/strong&gt;, grouped by run and filterable by script, with a retention you set.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Backend scripts run in an isolated JavaScript sandbox inside the app, on Atlassian's infrastructure. Yamuno runs no servers for Script Toolkit and receives none of your data. The &lt;a href="https://dev.to/docs/script-toolkit-for-jira/data-and-privacy"&gt;data and privacy page&lt;/a&gt; lists what the app stores and each permission it asks for, and our &lt;a href="https://dev.to/blogs/forge-native-vs-externally-hosted-apps-security-checklist"&gt;Forge security checklist&lt;/a&gt; explains what "runs on Atlassian" means when you compare apps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who it's for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Jira admins&lt;/strong&gt; who keep getting asked for "just one small panel" or "one more rule on this transition"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform and DevOps teams&lt;/strong&gt; connecting CI, deploys and monitoring to Jira through web triggers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team leads and support staff&lt;/strong&gt; who need bulk changes without becoming Jira admins&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anyone reporting from Jira&lt;/strong&gt; who wants a computed field or a scheduled count instead of a manual spreadsheet; our guide to &lt;a href="https://dev.to/blogs/jira-reporting-for-product-managers"&gt;Jira reporting for product managers&lt;/a&gt; covers where those numbers fit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you also need to see what changed on work items and how long they sat in each status, &lt;a href="https://dev.to/products/issue-history-for-jira"&gt;Issue History+ for Jira&lt;/a&gt; works well alongside it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Install &lt;a href="https://marketplace.atlassian.com/apps/1984972638/script-toolkit-for-jira" rel="noopener noreferrer"&gt;Script Toolkit for Jira&lt;/a&gt; from the Atlassian Marketplace.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Jira settings → Apps → Script Toolkit → Script Console&lt;/strong&gt; and click &lt;strong&gt;Run&lt;/strong&gt; on the starter script.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Scripts&lt;/strong&gt;, choose &lt;strong&gt;Fragment&lt;/strong&gt;, test it against a work item key in the &lt;strong&gt;Test&lt;/strong&gt; tab, and save it.&lt;/li&gt;
&lt;li&gt;Open that work item and find your fragment in the &lt;strong&gt;Script Toolkit&lt;/strong&gt; panel.&lt;/li&gt;
&lt;li&gt;Create a &lt;strong&gt;Web trigger&lt;/strong&gt; and call it with the example command under &lt;strong&gt;How to call it&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;a href="https://dev.to/docs/script-toolkit-for-jira/getting-started/quick-start"&gt;quick start&lt;/a&gt; walks through all of this in about fifteen minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How much does Script Toolkit cost?
&lt;/h3&gt;

&lt;p&gt;It's free on the Atlassian Marketplace.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which language are scripts written in?
&lt;/h3&gt;

&lt;p&gt;JavaScript. Fragments and gadgets are HTML with JavaScript that runs in the viewer's browser. Backend scripts are modern JavaScript with top-level &lt;code&gt;await&lt;/code&gt;, run in an isolated sandbox inside the app. There is no Node.js, so no &lt;code&gt;require&lt;/code&gt; or file system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who can write scripts?
&lt;/h3&gt;

&lt;p&gt;Only Jira admins. Fragments and gadgets then run for everyone who views them, with each viewer's own permissions, and bulk tools can be opened to chosen groups.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do scripts run on external servers?
&lt;/h3&gt;

&lt;p&gt;No. Everything runs on Atlassian Forge, inside your Jira site. Yamuno runs no servers for the app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can a backend script change Jira?
&lt;/h3&gt;

&lt;p&gt;Only if you allow it. Each backend script is read only by default; set its Jira access to Read and write when it needs to create or change data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I test a script before it goes live?
&lt;/h3&gt;

&lt;p&gt;Yes. The editor's &lt;strong&gt;Test&lt;/strong&gt; tab runs the unsaved code once, against a work item key or a request body, and fragments and gadgets can be previewed under the editor before you save.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/1984972638/script-toolkit-for-jira" rel="noopener noreferrer"&gt;Install Script Toolkit for Jira&lt;/a&gt; and run your first script in the console. Questions or feedback? Reach us through our &lt;a href="https://yamuno.atlassian.net/servicedesk/customer/portals" rel="noopener noreferrer"&gt;support portal&lt;/a&gt;. Your input shapes what we build next.&lt;/p&gt;

</description>
      <category>jira</category>
      <category>atlassian</category>
      <category>productlaunch</category>
      <category>automation</category>
    </item>
    <item>
      <title>Issue History+ for Jira is live on the Marketplace</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Tue, 13 Oct 2026 16:43:42 +0000</pubDate>
      <link>https://dev.to/yamuno/issue-history-for-jira-is-live-on-the-marketplace-1mbp</link>
      <guid>https://dev.to/yamuno/issue-history-for-jira-is-live-on-the-marketplace-1mbp</guid>
      <description>&lt;h1&gt;
  
  
  Issue History+ for Jira is live on the Marketplace
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; &lt;a href="https://dev.to/products/issue-history-for-jira"&gt;Issue History+ for Jira&lt;/a&gt; is now on the &lt;a href="https://marketplace.atlassian.com/apps/1031564177/issue-history-by-yamuno" rel="noopener noreferrer"&gt;Atlassian Marketplace&lt;/a&gt;, and it's free. It reads the change history Jira already records and lets you search it for a whole project, sprint or JQL query, see how long work spends in each status, and find stuck work, rework and SLA breaches. It runs on Atlassian Forge, so your issue data never leaves Atlassian.&lt;/p&gt;

&lt;p&gt;Jira writes down every change to every issue: who moved it, who reassigned it, who rewrote the description, and when. Reading that record is the hard part. The History tab shows one issue at a time, so answering "who moved these tickets back to In Progress last week?" means opening them one by one. We built Issue History+ to answer that kind of question in one search.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the app does
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Search the change history of many issues at once
&lt;/h3&gt;

&lt;p&gt;Open &lt;strong&gt;Apps → Issue History&lt;/strong&gt;, pick a project and a date range, and click &lt;strong&gt;Search&lt;/strong&gt;. You get every field change for the matching issues in one table. There are three ways to choose the issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Standard&lt;/strong&gt;: project, sprint, issue type, assignee, reporter, label, group and date range&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JQL&lt;/strong&gt;: paste a query you already use, with autocomplete and validation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bulk&lt;/strong&gt;: a list of issue keys, for example from a release note&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Group the results by issue, project, author or field, or read them as a feed. Summary and description edits show word-level differences, so you can see exactly which words changed instead of comparing two long paragraphs. &lt;strong&gt;Highlight&lt;/strong&gt; marks every change one person made. The &lt;a href="https://dev.to/docs/issue-history-for-jira/features/searching-history"&gt;searching history guide&lt;/a&gt; covers each option.&lt;/p&gt;

&lt;h3&gt;
  
  
  Time in status
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Time in Status&lt;/strong&gt; tab shows, for each status, the median time per visit and the time 85% of visits finish within. We chose those over averages on purpose: one issue forgotten in review for three months can drag an average far from what a typical issue experiences, while the median and the 85th percentile stay honest.&lt;/p&gt;

&lt;p&gt;Time runs from the moment an issue enters a status until it leaves, and repeat visits are added up. You can count calendar time or business hours, and set an SLA per status so breaching issues are marked. A per-issue table lets you sort by any status to find the issues that spent longest there. The &lt;a href="https://dev.to/docs/issue-history-for-jira/features/time-in-status"&gt;time in status guide&lt;/a&gt; explains how each number is calculated.&lt;/p&gt;

&lt;h3&gt;
  
  
  Status timeline
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Status Timeline&lt;/strong&gt; tab draws each issue's path through your workflow as one bar, coloured by status category. It makes ping-pong between In Progress and In Review easy to spot, which is hard to see in a list of changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Insights
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Insights&lt;/strong&gt; summarises the current search:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Completed and in-progress issues&lt;/li&gt;
&lt;li&gt;Median cycle time and the cycle time 85% of issues finish within&lt;/li&gt;
&lt;li&gt;Reopened issues: anything that left Done at least once&lt;/li&gt;
&lt;li&gt;Inactive work: issues that are not done and have had no status change for 7, 14 or 30 days&lt;/li&gt;
&lt;li&gt;Rework: the share of status moves that go backwards&lt;/li&gt;
&lt;li&gt;SLA breaches, worst first&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also shows issues completed per week, the most common status changes, when changes happen during the week, and who changes what. Every metric is defined in the &lt;a href="https://dev.to/docs/issue-history-for-jira/features/insights"&gt;Insights guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Because the app uses each status's Jira category (To Do, In Progress, Done), custom statuses such as Shipped or Won't Fix count correctly without any setup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Issue Insights on every issue
&lt;/h3&gt;

&lt;p&gt;Each issue gets an &lt;strong&gt;Issue Insights&lt;/strong&gt; tab in its Activity section. It shows that issue's total time in each status, its status timeline and every change, newest first. You don't need to leave the issue to see where it has been.&lt;/p&gt;

&lt;h3&gt;
  
  
  Restore
&lt;/h3&gt;

&lt;p&gt;For status, assignee, priority and summary, &lt;strong&gt;Restore&lt;/strong&gt; puts the field back to the value it had before a change. It uses Jira's normal edit and transition permissions, so it only works where you could make that change in Jira yourself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reports for people outside Jira
&lt;/h3&gt;

&lt;p&gt;Export the current search to CSV, Excel or a PDF report with your company name and logo. Excel and PDF exports include SLA thresholds and how many issues went over them. You can also save a search as a private bookmark, and your last ten searches are one click away.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your data stays in Atlassian
&lt;/h2&gt;

&lt;p&gt;Issue History+ runs entirely on Atlassian Forge and declares no egress, so issue data is never sent to an external server. Every request runs as the signed-in user, which means people only see history for issues they can already browse in Jira.&lt;/p&gt;

&lt;p&gt;The app stores only each user's saved searches, recent searches, settings and PDF branding, in Forge storage for your site. It doesn't store issue data, names or email addresses. The &lt;a href="https://dev.to/docs/issue-history-for-jira/data-and-privacy"&gt;data and privacy page&lt;/a&gt; lists everything it reads and stores, along with each permission it asks for. If you are comparing apps on this point, our &lt;a href="https://dev.to/blogs/forge-native-vs-externally-hosted-apps-security-checklist"&gt;Forge security checklist&lt;/a&gt; explains what "runs on Atlassian" means in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who it's for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scrum masters and team leads&lt;/strong&gt; who want to see where work waits and which issues have gone quiet, before stand-up&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jira admins&lt;/strong&gt; answering "who changed this field, and when?" for many issues at once&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support and service teams&lt;/strong&gt; tracking time in each status against an SLA&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product and delivery managers&lt;/strong&gt; who need cycle time and throughput without building a spreadsheet; our guide to &lt;a href="https://dev.to/blogs/jira-reporting-for-product-managers"&gt;Jira reporting for product managers&lt;/a&gt; shows where it fits alongside Jira's own reports&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anyone reporting to stakeholders&lt;/strong&gt; who don't use Jira, through PDF and Excel exports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a walkthrough of a full setup, from measuring time in status to setting SLAs, see the &lt;a href="https://dev.to/use-cases/jira-time-in-status-and-issue-history"&gt;time in status and issue history use case&lt;/a&gt;. If you also want charts on your Jira dashboard, &lt;a href="https://dev.to/products/charts-for-jira-dashboard"&gt;Charts for Jira Dashboard&lt;/a&gt; works well next to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Install &lt;a href="https://marketplace.atlassian.com/apps/1031564177/issue-history-by-yamuno" rel="noopener noreferrer"&gt;Issue History+ for Jira&lt;/a&gt; from the Atlassian Marketplace.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Apps → Issue History&lt;/strong&gt;, choose a project and keep the default last 30 days.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Search&lt;/strong&gt;, then open the &lt;strong&gt;Time in Status&lt;/strong&gt; and &lt;strong&gt;Insights&lt;/strong&gt; tabs.&lt;/li&gt;
&lt;li&gt;Open any issue and choose &lt;strong&gt;Issue Insights&lt;/strong&gt; under Activity.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Export&lt;/strong&gt; to share a report.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;a href="https://dev.to/docs/issue-history-for-jira/getting-started/quick-start"&gt;quick start&lt;/a&gt; takes about ten minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How much does Issue History+ cost?
&lt;/h3&gt;

&lt;p&gt;It's free on the Atlassian Marketplace.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where does the history come from?
&lt;/h3&gt;

&lt;p&gt;From Jira's own changelog, read through the Jira REST API as the signed-in user. The app fetches the complete history of each issue, not only the most recent changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can people see history for issues they can't access?
&lt;/h3&gt;

&lt;p&gt;No. Every request runs with the viewing user's Jira permissions, so people only see history for issues they can already browse.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it work with company-managed and team-managed projects?
&lt;/h3&gt;

&lt;p&gt;Yes. Both project types record the standard Jira changelog, which is what the app reads.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it change anything in Jira?
&lt;/h3&gt;

&lt;p&gt;Only when someone clicks &lt;strong&gt;Restore&lt;/strong&gt;, and only for status, assignee, priority or summary. Everything else is read only.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/1031564177/issue-history-by-yamuno" rel="noopener noreferrer"&gt;Install Issue History+ for Jira&lt;/a&gt; and run your first search. Questions or feedback? Reach us through our &lt;a href="https://yamuno.atlassian.net/servicedesk/customer/portals" rel="noopener noreferrer"&gt;support portal&lt;/a&gt;. Your input shapes what we build next.&lt;/p&gt;

</description>
      <category>jira</category>
      <category>atlassian</category>
      <category>productlaunch</category>
      <category>analytics</category>
    </item>
    <item>
      <title>PDF Exporter adds scheduled exports and a REST API</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Tue, 13 Oct 2026 07:58:10 +0000</pubDate>
      <link>https://dev.to/yamuno/pdf-exporter-adds-scheduled-exports-and-a-rest-api-78d</link>
      <guid>https://dev.to/yamuno/pdf-exporter-adds-scheduled-exports-and-a-rest-api-78d</guid>
      <description>&lt;h1&gt;
  
  
  PDF Exporter adds scheduled exports and a REST API
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; the 13 October 2026 release of &lt;a href="https://dev.to/products/pdf-exporter-for-confluence"&gt;PDF Exporter for Confluence&lt;/a&gt; is the biggest since launch. Large exports now run on Atlassian's servers in the background, so you can close the page while they finish. Schedules export a space or page tree every week or month and attach a dated PDF to an archive page. And a REST API lets scripts and CI/CD pipelines start exports with an API token.&lt;/p&gt;

&lt;p&gt;Until now, every export was built in your browser. That works well for a handful of pages, but a 400-page space export meant keeping a tab open, and a monthly compliance snapshot meant someone remembering to click Export on the first of the month. This release is about taking both of those jobs off people's hands.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8bel2ghlz2q20z447fu8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8bel2ghlz2q20z447fu8.jpg" alt="My exports with an export running, one waiting in line and finished files" width="799" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Background exports and My exports
&lt;/h2&gt;

&lt;p&gt;The exporter's sidebar has a new &lt;strong&gt;Where to generate&lt;/strong&gt; option:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto (recommended):&lt;/strong&gt; small exports are built in your browser, large ones go to the server. The exporter tells you which it picked and why.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This browser:&lt;/strong&gt; always build locally. Fastest for a few pages, but the page has to stay open.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server (background):&lt;/strong&gt; always build on the server, and leave whenever you like.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With Auto, an export moves to the server when it has more than 30 pages, more than 60 attachments, or more than 50 MB of attachments.&lt;/p&gt;

&lt;p&gt;A progress card shows each step (fetching pages, rendering, laying out the PDF). When it's done you can download from the card, or find the file later under &lt;strong&gt;My exports&lt;/strong&gt; in the sidebar. If you close the exporter mid-export, the card comes back the next time you open it.&lt;/p&gt;

&lt;p&gt;My exports keeps your server exports for 7 days by default. Large ZIP exports come in parts, download links are created when you click, and exports attached to a page have an &lt;strong&gt;Open on page&lt;/strong&gt; link. Site admins set the retention period (1 to 90 days) and a storage limit for the site under &lt;strong&gt;Confluence Settings → PDF Exporter → Exports &amp;amp; storage&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Background exports run on Atlassian Forge and the files sit in Atlassian's own storage. Nothing leaves Atlassian. The &lt;a href="https://dev.to/docs/pdf-exporter-for-confluence/features/background-exports"&gt;background exports docs&lt;/a&gt; cover the details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scheduled exports
&lt;/h2&gt;

&lt;p&gt;Schedules are for teams that keep audit or retention copies of their documentation, or anyone who needs a monthly "as it was" copy.&lt;/p&gt;

&lt;p&gt;Open &lt;strong&gt;Apps → PDF Exporter for Confluence&lt;/strong&gt;, choose &lt;strong&gt;Schedules&lt;/strong&gt; in the sidebar and click &lt;strong&gt;New schedule&lt;/strong&gt;. A schedule has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What to export:&lt;/strong&gt; a page and its children, or a whole space&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Style Template:&lt;/strong&gt; any saved template; template edits apply to the next run&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output:&lt;/strong&gt; one merged PDF or a ZIP of PDFs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How often:&lt;/strong&gt; weekly on a weekday, or monthly on a date from 1 to 28&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where it goes:&lt;/strong&gt; attached to an archive page you choose, or kept in My exports only&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notify by email:&lt;/strong&gt; every run, only failures, or off&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a run attaches its file to an archive page, the file is named with the schedule name and the run date, for example &lt;code&gt;Compliance snapshot 2026-11-01.pdf&lt;/code&gt;. The page's attachments then list every run in order, and those files stay until someone deletes them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fflrl7g24qfjn5w9dnyn3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fflrl7g24qfjn5w9dnyn3.jpg" alt="A weekly schedule with its run history, and the comment thread it keeps on the archive page" width="799" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Email notifications without noise
&lt;/h3&gt;

&lt;p&gt;Notifications use Confluence itself. After a run, the app comments on the archive page and @mentions the people you picked, and Confluence emails them as it does for any mention. Each schedule keeps one comment thread and adds every later run as a reply, so a weekly schedule doesn't bury the page in comments after a year. &lt;strong&gt;Only failures&lt;/strong&gt; keeps the thread quiet unless something goes wrong.&lt;/p&gt;

&lt;h3&gt;
  
  
  Failures you can act on
&lt;/h3&gt;

&lt;p&gt;A failed run shows its reason in plain words, such as "Archive page was deleted". Problems that can't fix themselves (a deleted archive page, a deleted space, an owner who left) pause the schedule straight away. Other failures pause it after three in a row. &lt;strong&gt;Run now&lt;/strong&gt; runs a schedule immediately without moving its regular dates, which is handy for a first test. Site admins see every schedule on the site, with its owner, status and next run.&lt;/p&gt;

&lt;p&gt;Each run uses the access of the person who created the schedule, so it only exports pages they can view. The &lt;a href="https://dev.to/docs/pdf-exporter-for-confluence/features/scheduled-exports"&gt;scheduled exports docs&lt;/a&gt; list every option. For the bigger picture on audit copies, see &lt;a href="https://dev.to/blogs/confluence-pdf-export-for-compliance-teams"&gt;Confluence PDF export for compliance teams&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A REST API for scripts and pipelines
&lt;/h2&gt;

&lt;p&gt;Some exports belong to a process rather than a person: release notes at the end of a deployment, a spec frozen when a project closes, a nightly copy of a runbook space. The new REST API covers those.&lt;/p&gt;

&lt;p&gt;A site admin creates a token under &lt;strong&gt;Confluence Settings → PDF Exporter → API&lt;/strong&gt;, choosing an expiry of 30 days, 90 days, 180 days or 1 year. Then one request starts an export:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s1"&gt;'YOUR_ENDPOINT_URL'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Authorization: Bearer YOUR_TOKEN'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"pageId": "123456", "name": "Release notes"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A &lt;code&gt;202&lt;/code&gt; response means the export started. The request can export a page, a page tree or a space, use any saved template, attach the file to a page and @mention up to 10 people. Send a &lt;code&gt;requestId&lt;/code&gt; and a retried request starts nothing new. Each token has a &lt;strong&gt;Recent calls&lt;/strong&gt; log of its last 25 requests, and only a hash of the token is stored.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdhhxjg5u4ezofus6vuqe.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdhhxjg5u4ezofus6vuqe.jpg" alt="A curl request from a release pipeline, the token's recent calls, and the PDF in My exports" width="799" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One design choice is worth knowing about. API responses are fixed messages and carry no page data, and no data is sent out of Atlassian. That keeps PDF Exporter eligible for Atlassian's Runs on Atlassian program. It also means the response tells you the export started, not where the file is: you pick it up in My exports, on the page you attached it to, or from the mention email. The &lt;a href="https://dev.to/docs/pdf-exporter-for-confluence/rest-api"&gt;REST API guide&lt;/a&gt; and &lt;a href="https://dev.to/docs/pdf-exporter-for-confluence/rest-api/examples"&gt;examples&lt;/a&gt; show common jobs.&lt;/p&gt;

&lt;p&gt;If you already automate Confluence content, the same token-based approach is used by the &lt;a href="https://dev.to/blogs/markdown-importer-rest-api-launch"&gt;Markdown Importer REST API&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fair use: one server export at a time
&lt;/h2&gt;

&lt;p&gt;Server exports run one at a time per site, and that includes scheduled runs and API calls. When another export is running, yours shows &lt;strong&gt;Waiting in Line&lt;/strong&gt; with its place in the queue and a &lt;strong&gt;Cancel&lt;/strong&gt; button, and starts on its own.&lt;/p&gt;

&lt;p&gt;Each site can render 10,000 pages a month on the server. Browser exports don't count toward that, and the allowance resets on the first of each month (UTC). Admins see this month's usage under &lt;strong&gt;Server exports this month&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Because server exports need new permissions, sites on an older version see a notice that an update is waiting, with a link to &lt;strong&gt;Manage apps&lt;/strong&gt; for admins.&lt;/p&gt;

&lt;h2&gt;
  
  
  Smaller changes and fixes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The exporter and the settings page now use a sidebar, and remember the open section in the page address&lt;/li&gt;
&lt;li&gt;Clicking &lt;strong&gt;Export&lt;/strong&gt; shows &lt;strong&gt;Preparing Export&lt;/strong&gt; straight away, and the button can't be clicked twice&lt;/li&gt;
&lt;li&gt;Custom emoji keep their image, panels keep their background colour and decision items keep their formatting&lt;/li&gt;
&lt;li&gt;Table of contents zone macros are no longer left out&lt;/li&gt;
&lt;li&gt;Long code lines without spaces wrap instead of running off the page&lt;/li&gt;
&lt;li&gt;Embeds without a source show a named "not included" note&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full list is in the &lt;a href="https://dev.to/docs/pdf-exporter-for-confluence/release-notes"&gt;release notes&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I need to do anything to get the new features?
&lt;/h3&gt;

&lt;p&gt;A site admin needs to approve the update in &lt;strong&gt;Manage apps&lt;/strong&gt;, because server exports use new permissions. Until then the exporter shows a notice with a link.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do small exports still happen in my browser?
&lt;/h3&gt;

&lt;p&gt;Yes. With &lt;strong&gt;Where to generate&lt;/strong&gt; set to Auto, exports of up to 30 pages (and within the attachment limits) are still built in your browser and download straight away. You can also force either option.&lt;/p&gt;

&lt;h3&gt;
  
  
  How long are background exports kept?
&lt;/h3&gt;

&lt;p&gt;Seven days by default. Admins can set anything from 1 to 90 days, plus a storage limit for the site. Files that a schedule or API call attached to a Confluence page stay on that page until someone deletes them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can a scheduled export run at a set time of day?
&lt;/h3&gt;

&lt;p&gt;No. Schedules run once on their day, and Confluence picks the time. Dates are in UTC, so a schedule says "every Monday", not "every Monday at 9:00".&lt;/p&gt;

&lt;h3&gt;
  
  
  What can the REST API export?
&lt;/h3&gt;

&lt;p&gt;A single page, a page tree or a whole space, with any saved template, as one merged PDF (up to 500 pages) or a ZIP of separate PDFs (up to 2,000 pages). Each token can start 30 exports an hour.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does any of this send data outside Atlassian?
&lt;/h3&gt;

&lt;p&gt;No. Background and scheduled exports run on Atlassian Forge and store files in Atlassian's storage, and API responses carry no page data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Install &lt;a href="https://marketplace.atlassian.com/apps/726790413" rel="noopener noreferrer"&gt;PDF Exporter for Confluence&lt;/a&gt; from the Atlassian Marketplace, or update it under &lt;strong&gt;Manage apps&lt;/strong&gt; if you already have it. New to the app? Start with &lt;a href="https://dev.to/blogs/how-to-export-confluence-to-pdf"&gt;how to export Confluence to PDF&lt;/a&gt; or the &lt;a href="https://dev.to/docs/pdf-exporter-for-confluence/getting-started"&gt;getting started guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Questions or feedback? Reach out via our &lt;a href="https://yamuno.atlassian.net/servicedesk/customer/portals" rel="noopener noreferrer"&gt;support portal&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Confluence Markup: Wiki Markup vs Markdown in Cloud</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Tue, 13 Oct 2026 07:57:58 +0000</pubDate>
      <link>https://dev.to/yamuno/confluence-markup-wiki-markup-vs-markdown-in-cloud-45l4</link>
      <guid>https://dev.to/yamuno/confluence-markup-wiki-markup-vs-markdown-in-cloud-45l4</guid>
      <description>&lt;h1&gt;
  
  
  Confluence Markup: Wiki Markup vs Markdown in Cloud
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; Confluence markup, also called Confluence wiki markup or the Confluence markup language, is Atlassian's own text syntax (&lt;code&gt;h1.&lt;/code&gt;, &lt;code&gt;*bold*&lt;/code&gt;, &lt;code&gt;{code}&lt;/code&gt;), and Markdown is the syntax most developers write everywhere else (&lt;code&gt;#&lt;/code&gt;, &lt;code&gt;**bold**&lt;/code&gt;, triple backticks). The Confluence Cloud editor no longer accepts wiki markup, but it does turn common Markdown shortcuts into formatting as you type. If you want to keep Markdown as the source of a page, you need a Markdown macro or an importer.&lt;/p&gt;

&lt;p&gt;If you have been using Confluence for a while, you probably learned wiki markup first. If you came from GitHub, GitLab or a docs-as-code setup, you think in Markdown. Both describe the same things, headings, lists, tables, code, but the symbols are different, and only one of them still has a place in the Cloud editor. This guide puts the two side by side and explains what to use today.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Confluence markup?
&lt;/h2&gt;

&lt;p&gt;Confluence markup is the plain-text format the original Confluence editor was built around. Atlassian calls it wiki markup, and Jira Data Center and Jira's version 2 REST API use the same syntax. Before the rich text editor took over, you wrote pages as text with markup and Confluence rendered them. A heading was &lt;code&gt;h2. Release notes&lt;/code&gt;, a table header row was &lt;code&gt;||Name||Owner||&lt;/code&gt;, and a code sample sat between &lt;code&gt;{code}&lt;/code&gt; tags.&lt;/p&gt;

&lt;p&gt;That syntax still exists in a few places:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Confluence Data Center&lt;/strong&gt; still documents and supports wiki markup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The legacy Confluence Cloud editor&lt;/strong&gt; has an &lt;strong&gt;Insert &amp;gt; Markup&lt;/strong&gt; dialog that accepts wiki markup or Markdown and converts it into rich text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Older pages and scripts.&lt;/strong&gt; Content written years ago, and tools built on Jira's version 2 REST API, which takes rich text fields as wiki markup, still use it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the current Confluence Cloud editor, Atlassian states plainly that markup insertion is not supported. You cannot open a page and edit its wiki markup source either; the page is stored in Confluence's own format and you work on it as rich text.&lt;/p&gt;

&lt;h2&gt;
  
  
  Markdown in the Confluence Cloud editor
&lt;/h2&gt;

&lt;p&gt;What the Cloud editor does have is autoformatting that follows Markdown conventions. Type these and Confluence converts them on the spot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;#&lt;/code&gt; followed by a space for Heading 1, up to &lt;code&gt;######&lt;/code&gt; for Heading 6&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;**bold**&lt;/code&gt;, &lt;code&gt;*italic*&lt;/code&gt; and &lt;code&gt;~~strikethrough~~&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;`code`&lt;/code&gt; for inline code, and three backticks followed by a space for a code block&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;*&lt;/code&gt; followed by a space for a bulleted list, &lt;code&gt;1.&lt;/code&gt; followed by a space for a numbered list&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[]&lt;/code&gt; followed by a space for an action item (a task)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;gt;&lt;/code&gt; followed by a space for a quote, and &lt;code&gt;---&lt;/code&gt; followed by a space for a divider&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[link text](https://example.com)&lt;/code&gt; for a link&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is handy when you write a page by hand. The catch is that it is a typing shortcut, not a Markdown mode. Once the text is formatted, the Markdown is gone. You cannot switch the page back to its Markdown source, and there is no table shortcut, so tables still come from the toolbar or the slash command. For more on code specifically, see &lt;a href="https://dev.to/blogs/confluence-inline-code-and-code-blocks"&gt;inline code and code blocks in Confluence&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wiki markup vs Markdown, side by side
&lt;/h2&gt;

&lt;p&gt;Here is how the same formatting is written in each syntax.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What you want&lt;/th&gt;
&lt;th&gt;Confluence wiki markup&lt;/th&gt;
&lt;th&gt;Markdown&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Heading 2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;h2. Title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;## Title&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bold&lt;/td&gt;
&lt;td&gt;&lt;code&gt;*bold*&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;**bold**&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Italic&lt;/td&gt;
&lt;td&gt;&lt;code&gt;_italic_&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;*italic*&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strikethrough&lt;/td&gt;
&lt;td&gt;&lt;code&gt;-deleted-&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;~~deleted~~&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inline code&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{{code}}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;`code`&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code block&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;{code:java}&lt;/code&gt; … &lt;code&gt;{code}&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;three backticks plus the language, then three backticks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bulleted list&lt;/td&gt;
&lt;td&gt;&lt;code&gt;* item&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;- item&lt;/code&gt; or &lt;code&gt;* item&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Numbered list&lt;/td&gt;
&lt;td&gt;&lt;code&gt;# item&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1. item&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Link&lt;/td&gt;
&lt;td&gt;`[title\&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://example.com%5D%60%7B%" rel="noopener noreferrer"&gt;https://example.com]`{%&lt;/a&gt; endraw %}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Table header&lt;/td&gt;
&lt;td&gt;{% raw %}`\&lt;/td&gt;
&lt;td&gt;\&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quote&lt;/td&gt;
&lt;td&gt;{% raw %}&lt;code&gt;bq. text&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;gt; text&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Horizontal rule&lt;/td&gt;
&lt;td&gt;&lt;code&gt;----&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;---&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three differences catch people out:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Asterisks mean different things.&lt;/strong&gt; In wiki markup &lt;code&gt;*text*&lt;/code&gt; is bold; in Markdown it is italic. Paste one into the other and the emphasis changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;#&lt;/code&gt; is a numbered list in wiki markup and a heading in Markdown.&lt;/strong&gt; A wiki-style numbered list pasted into a Markdown file turns into a stack of headings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Links put the title and URL in a different order and with a different separator.&lt;/strong&gt; Wiki markup uses &lt;code&gt;[title|url]&lt;/code&gt;, Markdown uses &lt;code&gt;[title](url)&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Confluence wiki markup cheat sheet
&lt;/h2&gt;

&lt;p&gt;Wiki markup also covers things standard Markdown has no syntax for, such as coloured text, panels and user mentions. These are the ones you are most likely to meet in older pages and Jira issue descriptions.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What you want&lt;/th&gt;
&lt;th&gt;Confluence wiki markup&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Underline&lt;/td&gt;
&lt;td&gt;&lt;code&gt;+underlined+&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Superscript and subscript&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;^super^&lt;/code&gt; and &lt;code&gt;~sub~&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coloured text&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{color:red}text{color}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Line break&lt;/td&gt;
&lt;td&gt;&lt;code&gt;\\&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image from an attachment&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;!diagram.png!&lt;/code&gt;, or `!diagram.png\&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Link to an attachment&lt;/td&gt;
&lt;td&gt;{% raw %}&lt;code&gt;[^report.pdf]&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Link to another page&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;[Page title]&lt;/code&gt; or &lt;code&gt;[SPACEKEY:Page title]&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mention a user&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[~username]&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anchor and link to it&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;{anchor:setup}&lt;/code&gt; and &lt;code&gt;[#setup]&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Table cell&lt;/td&gt;
&lt;td&gt;`\&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Info, note, tip, warning panels&lt;/td&gt;
&lt;td&gt;{% raw %}&lt;code&gt;{info}text{info}&lt;/code&gt;, &lt;code&gt;{note}&lt;/code&gt;, &lt;code&gt;{tip}&lt;/code&gt;, &lt;code&gt;{warning}&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Panel with a title&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{panel:title=Before you start}text{panel}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Preformatted text, no highlighting&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{noformat}text{noformat}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-line quote&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{quote}text{quote}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Table of contents&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{toc}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Anything in curly braces is a macro, which is why &lt;code&gt;{code}&lt;/code&gt;, &lt;code&gt;{info}&lt;/code&gt; and &lt;code&gt;{toc}&lt;/code&gt; look alike. Standard Markdown has no equivalent for most of them. In the Cloud editor you add the same things from the slash menu instead: type &lt;code&gt;/info&lt;/code&gt; for an Info panel or &lt;code&gt;/table of contents&lt;/code&gt; for a table of contents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which one should you use?
&lt;/h2&gt;

&lt;p&gt;For new content, Markdown. It is what developers already write in READMEs, pull requests, chat and issue trackers, it is supported by almost every docs tool, and the Confluence Cloud editor's shortcuts follow it.&lt;/p&gt;

&lt;p&gt;Wiki markup still makes sense in two situations: you run Confluence Data Center and your team already knows it, or you maintain scripts that write to Jira's version 2 API. Outside of those, learning wiki markup today mostly means learning a syntax that only Atlassian products read.&lt;/p&gt;

&lt;h2&gt;
  
  
  Converting between the two
&lt;/h2&gt;

&lt;p&gt;There is no built-in converter in Confluence Cloud, so most teams handle it one of three ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;By hand, for a few pages.&lt;/strong&gt; The table above covers nearly everything. Watch the three traps: asterisks, &lt;code&gt;#&lt;/code&gt; and link order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export existing pages to Markdown.&lt;/strong&gt; If the content already lives in Confluence, export it rather than converting text. &lt;a href="https://dev.to/products/markdown-exporter-for-confluence"&gt;Markdown Exporter for Confluence&lt;/a&gt; exports a page, a page tree or a whole space to Markdown files with front matter. See &lt;a href="https://dev.to/blogs/how-to-export-confluence-to-markdown"&gt;how to export Confluence to Markdown&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Import Markdown into pages.&lt;/strong&gt; Going the other way, &lt;a href="https://dev.to/products/markdown-importer-for-confluence"&gt;Markdown Importer for Confluence&lt;/a&gt; turns &lt;code&gt;.md&lt;/code&gt; files, folders or a ZIP into a Confluence page tree. The walkthrough is in &lt;a href="https://dev.to/blogs/how-to-import-markdown-into-confluence"&gt;how to import Markdown into Confluence&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Search-and-replace scripts between the two syntaxes look easy and rarely are. Nested lists, code blocks that contain asterisks, and tables with links all break simple patterns, so test a converted page before you trust a batch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping Markdown as Markdown in Confluence
&lt;/h2&gt;

&lt;p&gt;The editor's shortcuts and the Insert &amp;gt; Markup dialog both convert Markdown into rich text. That is fine for a one-off page. It is a problem when the Markdown is the real source, a README, an API reference or a runbook that also lives in Git, because the next edit has to be made twice.&lt;/p&gt;

&lt;p&gt;Two ways keep the Markdown intact:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Write Markdown inside the page.&lt;/strong&gt; &lt;a href="https://dev.to/products/markdown-renderer-for-confluence"&gt;Markdown Macro+ for Confluence&lt;/a&gt; adds a macro with a split editor and live preview. You write GitHub-flavoured Markdown, including tables, task lists, code with syntax highlighting and KaTeX math, and the source stays editable afterwards. The &lt;a href="https://dev.to/docs/markdown-renderer-for-confluence/getting-started/quick-start"&gt;quick start&lt;/a&gt; takes a couple of minutes, and &lt;a href="https://dev.to/blogs/how-to-write-markdown-in-confluence"&gt;how to write Markdown in Confluence&lt;/a&gt; covers it in depth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publish from your repository.&lt;/strong&gt; Keep the &lt;code&gt;.md&lt;/code&gt; files in Git and push them to Confluence with Markdown Importer, by hand or from CI. This is the docs-as-code setup described on the &lt;a href="https://dev.to/use-cases/confluence-technical-documentation"&gt;technical documentation use case&lt;/a&gt; page.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both apps are built on Atlassian Forge, so the content stays on your Atlassian site.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is the Confluence markup language?
&lt;/h3&gt;

&lt;p&gt;It is Confluence wiki markup, the plain-text syntax Atlassian created for Confluence and Jira. Headings are &lt;code&gt;h1.&lt;/code&gt; to &lt;code&gt;h6.&lt;/code&gt;, bold is &lt;code&gt;*text*&lt;/code&gt;, code blocks sit between &lt;code&gt;{code}&lt;/code&gt; tags and macros are written in curly braces. The current Confluence Cloud editor no longer accepts it; Data Center and the legacy Cloud editor do.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Confluence Cloud still support wiki markup?
&lt;/h3&gt;

&lt;p&gt;Not in the current editor. Atlassian's documentation says the new editor does not support markup insertion, and pages are not editable as wiki markup. The Insert &amp;gt; Markup dialog only exists in the legacy editor, and Confluence Data Center still supports wiki markup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I write Markdown in Confluence Cloud?
&lt;/h3&gt;

&lt;p&gt;You can type Markdown shortcuts such as &lt;code&gt;##&lt;/code&gt;, &lt;code&gt;**bold**&lt;/code&gt; and three backticks, and the editor formats them as you type. The Markdown itself is not kept. To keep editable Markdown on a page, use a Markdown macro such as Markdown Macro+.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between Confluence markup and Markdown?
&lt;/h3&gt;

&lt;p&gt;They describe the same formatting with different symbols. The biggest differences: &lt;code&gt;*text*&lt;/code&gt; is bold in wiki markup and italic in Markdown, &lt;code&gt;#&lt;/code&gt; starts a numbered list in wiki markup and a heading in Markdown, and links are &lt;code&gt;[title|url]&lt;/code&gt; versus &lt;code&gt;[title](url)&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I convert Confluence wiki markup to Markdown?
&lt;/h3&gt;

&lt;p&gt;For a few pages, convert by hand with a reference table like the one above. For content that is already in Confluence, export the pages to Markdown instead of converting text, for example with Markdown Exporter for Confluence.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I paste a README into Confluence and keep its formatting?
&lt;/h3&gt;

&lt;p&gt;Pasting raw Markdown into the Cloud editor does not reliably keep its formatting. Put it in a Markdown Macro+ macro on the page, or import the file with Markdown Importer so headings, tables and code blocks come through.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Write your next README-style page in Markdown and keep it that way: install &lt;a href="https://dev.to/products/markdown-renderer-for-confluence"&gt;Markdown Macro+ for Confluence&lt;/a&gt; from the Atlassian Marketplace, add the macro to a page and paste your Markdown in. If the docs live in Git, try &lt;a href="https://dev.to/products/markdown-importer-for-confluence"&gt;Markdown Importer&lt;/a&gt; on one folder first.&lt;/p&gt;

</description>
      <category>markdown</category>
      <category>confluence</category>
      <category>technicalwriting</category>
      <category>documentation</category>
    </item>
    <item>
      <title>LaTeX Inline Math: $...$, \\(...\\) and Display Math</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Thu, 08 Oct 2026 15:20:12 +0000</pubDate>
      <link>https://dev.to/yamuno/latex-inline-math-and-display-math-4al9</link>
      <guid>https://dev.to/yamuno/latex-inline-math-and-display-math-4al9</guid>
      <description>&lt;h1&gt;
  
  
  LaTeX Inline Math
&lt;/h1&gt;

&lt;p&gt;Inline math is an equation that sits inside a sentence, like "the roots are x = ±2" or "the loss is O(n log n)". LaTeX has two ways to write it, and a separate mode for equations that should stand on their own line. This guide covers both, what changes when math is inline, and how inline equations work outside a LaTeX document, in Markdown, Jupyter and Confluence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inline math:&lt;/strong&gt; wrap the expression in single dollar signs, &lt;code&gt;$E = mc^2$&lt;/code&gt;, or in &lt;code&gt;\(E = mc^2\)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Display math&lt;/strong&gt; (its own centered line): use &lt;code&gt;\[E = mc^2\]&lt;/code&gt;. Avoid &lt;code&gt;$$...$$&lt;/code&gt; in LaTeX documents.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  $...$ or \(...\)?
&lt;/h2&gt;

&lt;p&gt;Both produce exactly the same inline equation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;The area of a circle is &lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nb"&gt;A &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\pi&lt;/span&gt;&lt;span class="nb"&gt; r&lt;/span&gt;&lt;span class="p"&gt;^&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;.
The area of a circle is &lt;span class="p"&gt;\(&lt;/span&gt;&lt;span class="nb"&gt;A &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\pi&lt;/span&gt;&lt;span class="nb"&gt; r&lt;/span&gt;&lt;span class="p"&gt;^&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;\)&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;$...$&lt;/code&gt; is shorter and is what almost everyone types. &lt;code&gt;\(...\)&lt;/code&gt; is the LaTeX form: the opening and closing delimiters are different, so a missing one gives a clear error instead of silently swapping text and math for the rest of the paragraph. Pick one and use it consistently in a document.&lt;/p&gt;

&lt;p&gt;To print a literal dollar sign in text, escape it: &lt;code&gt;\$5&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Display math: \[...\], not $$...$$
&lt;/h2&gt;

&lt;p&gt;When an equation needs its own line, use display math:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;The solutions are
&lt;span class="p"&gt;\[&lt;/span&gt;&lt;span class="nb"&gt;
  x &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\frac&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;b &lt;/span&gt;&lt;span class="nv"&gt;\pm&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="nv"&gt;\sqrt&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;b&lt;/span&gt;&lt;span class="p"&gt;^&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt; &lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="nb"&gt;ac&lt;/span&gt;&lt;span class="p"&gt;}}{&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="nb"&gt;a&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="nb"&gt;
&lt;/span&gt;&lt;span class="p"&gt;\]&lt;/span&gt;
for any quadratic with a ≠ 0.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;$$...$$&lt;/code&gt; also produces display math, but it is plain TeX syntax. In a LaTeX document it can give inconsistent spacing above and below the equation and doesn't work with the &lt;code&gt;fleqn&lt;/code&gt; option, so &lt;code&gt;\[...\]&lt;/code&gt; (or an environment such as &lt;code&gt;equation&lt;/code&gt; or &lt;code&gt;align&lt;/code&gt; from amsmath) is the recommended form. Many Markdown renderers and web tools do accept &lt;code&gt;$$...$$&lt;/code&gt;, which is why you see it so often online.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes when math is inline
&lt;/h2&gt;

&lt;p&gt;LaTeX shrinks inline math so it doesn't push the lines of the paragraph apart:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sums, products and limits&lt;/strong&gt; put their limits to the side instead of above and below. &lt;code&gt;$\sum_{i=1}^{n} x_i$&lt;/code&gt; shows the i = 1 and n next to the sigma, not over and under it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fractions&lt;/strong&gt; are set smaller, with the numerator and denominator in a smaller font.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Big operators&lt;/strong&gt; such as integrals are smaller.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is usually what you want. When it isn't, you can override it:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;th&gt;Write&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Limits above and below a sum, inline&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$\sum\limits_{i=1}^{n} x_i$&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A full-size fraction inline&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;$\dfrac{a}{b}$&lt;/code&gt; (amsmath)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A small fraction in display math&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;\[\tfrac{1}{2}\]&lt;/code&gt; (amsmath)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Display-size everything in one inline expression&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$\displaystyle \sum_{i=1}^{n} \frac{1}{i}$&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Use these sparingly. A tall inline expression forces extra space between lines, and the paragraph looks uneven. If an inline equation needs &lt;code&gt;\displaystyle&lt;/code&gt; to be readable, it probably belongs on its own line.&lt;/p&gt;

&lt;h2&gt;
  
  
  Text and spacing inside inline math
&lt;/h2&gt;

&lt;p&gt;Inside math, letters are variables and spaces are ignored. So:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Words need &lt;code&gt;\text{}&lt;/code&gt;: &lt;code&gt;$x &amp;gt; 0 \text{ for all } x \in S$&lt;/code&gt;. Without it, "for all" prints as six italic variables with no spaces.&lt;/li&gt;
&lt;li&gt;Function names need their commands: &lt;code&gt;$\log n$&lt;/code&gt;, &lt;code&gt;$\sin x$&lt;/code&gt;, &lt;code&gt;$\max(a, b)$&lt;/code&gt;. See &lt;a href="https://dev.to/latex/symbols/log"&gt;log and ln in LaTeX&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Add space by hand when needed: &lt;code&gt;\,&lt;/code&gt; (thin), &lt;code&gt;\;&lt;/code&gt; (thick), &lt;code&gt;\quad&lt;/code&gt; (wide).&lt;/li&gt;
&lt;li&gt;Keep punctuation outside the math when it belongs to the sentence: &lt;code&gt;$x = 2$.&lt;/code&gt; rather than &lt;code&gt;$x = 2.$&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Inline math in Markdown, GitHub and Jupyter
&lt;/h2&gt;

&lt;p&gt;Most Markdown tools that support math use the same delimiters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt; renders &lt;code&gt;$...$&lt;/code&gt; inline and &lt;code&gt;$$...$$&lt;/code&gt; as a block in Markdown files, issues and pull requests. If a dollar sign gets misread, GitHub also accepts the form with backticks inside the dollars, a dollar sign then a backtick before the math and a backtick then a dollar sign after it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jupyter notebooks&lt;/strong&gt; render &lt;code&gt;$...$&lt;/code&gt; and &lt;code&gt;$$...$$&lt;/code&gt; in Markdown cells with MathJax.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Static site generators and docs tools&lt;/strong&gt; usually need a math plugin (KaTeX or MathJax) enabled before &lt;code&gt;$...$&lt;/code&gt; renders at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because &lt;code&gt;$&lt;/code&gt; also means money, some renderers only treat &lt;code&gt;$...$&lt;/code&gt; as math when there is no space just inside the dollar signs. &lt;code&gt;$x$&lt;/code&gt; works; &lt;code&gt;$ x $&lt;/code&gt; may not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inline math in Confluence
&lt;/h2&gt;

&lt;p&gt;Confluence Cloud has no built-in math, so you need an app. With &lt;a href="https://dev.to/products/latex-math-for-confluence"&gt;LaTeX Math for Confluence&lt;/a&gt;, type &lt;code&gt;/latex&lt;/code&gt; in the editor and choose &lt;strong&gt;LaTeX Math (Inline)&lt;/strong&gt; for an equation inside a sentence or &lt;strong&gt;LaTeX Math (Block)&lt;/strong&gt; for display math.&lt;/p&gt;

&lt;p&gt;Delimiters are optional in both macros. The inline macro accepts &lt;code&gt;E = mc^2&lt;/code&gt;, &lt;code&gt;$E = mc^2$&lt;/code&gt; or &lt;code&gt;\(E = mc^2\)&lt;/code&gt;, so you can paste LaTeX from a paper or a Markdown file as it is. If you paste display delimiters such as &lt;code&gt;$$...$$&lt;/code&gt; or &lt;code&gt;\[...\]&lt;/code&gt; into the inline macro, they are converted to inline math. Multi-line environments and large matrices belong in the block macro.&lt;/p&gt;

&lt;p&gt;The app renders with KaTeX, so the commands in our &lt;a href="https://dev.to/latex/symbols"&gt;LaTeX symbols reference&lt;/a&gt; that are marked as KaTeX-supported all work. For a full walkthrough, see &lt;a href="https://dev.to/blogs/how-to-add-math-equations-to-confluence"&gt;how to add math equations to Confluence&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Problem&lt;/th&gt;
&lt;th&gt;Cause&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The rest of the paragraph turns italic&lt;/td&gt;
&lt;td&gt;A missing closing &lt;code&gt;$&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Close the math, or switch to &lt;code&gt;\(...\)&lt;/code&gt; so the error is reported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Words inside an equation run together&lt;/td&gt;
&lt;td&gt;Text typed in math mode&lt;/td&gt;
&lt;td&gt;Wrap words in &lt;code&gt;\text{}&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;An inline fraction looks tiny&lt;/td&gt;
&lt;td&gt;Inline style is applied&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;\dfrac&lt;/code&gt; once, or move the equation to display math&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lines in the paragraph spread apart&lt;/td&gt;
&lt;td&gt;A tall inline expression&lt;/td&gt;
&lt;td&gt;Put the equation on its own line with &lt;code&gt;\[...\]&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A price prints as math&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;$&lt;/code&gt; read as a delimiter&lt;/td&gt;
&lt;td&gt;Escape it as &lt;code&gt;\$&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between $ and $$ in LaTeX?&lt;/strong&gt;&lt;br&gt;
Single dollars give inline math inside a sentence. Double dollars give display math on its own line, but in LaTeX documents &lt;code&gt;\[...\]&lt;/code&gt; is preferred.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I write inline math in LaTeX without dollar signs?&lt;/strong&gt;&lt;br&gt;
Use &lt;code&gt;\(&lt;/code&gt; and &lt;code&gt;\)&lt;/code&gt;. They behave exactly like &lt;code&gt;$...$&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I make a sum show its limits above and below inline?&lt;/strong&gt;&lt;br&gt;
Add &lt;code&gt;\limits&lt;/code&gt;: &lt;code&gt;$\sum\limits_{i=1}^{n}$&lt;/code&gt;. Or set the whole expression in display style with &lt;code&gt;\displaystyle&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use inline math in a heading?&lt;/strong&gt;&lt;br&gt;
Yes in LaTeX, but use it sparingly, because the math also appears in the table of contents and in PDF bookmarks, where it may not render. In Confluence, put the equation in the body text instead.&lt;/p&gt;

</description>
      <category>latex</category>
      <category>math</category>
      <category>technicaldocumentation</category>
      <category>confluence</category>
    </item>
  </channel>
</rss>
