<?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.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>Best Jira Dashboard Widgets and Charts in 2026</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Tue, 02 Jun 2026 12:06:39 +0000</pubDate>
      <link>https://dev.to/yamuno-software/best-jira-dashboard-widgets-and-charts-in-2026-1cap</link>
      <guid>https://dev.to/yamuno-software/best-jira-dashboard-widgets-and-charts-in-2026-1cap</guid>
      <description>&lt;h1&gt;
  
  
  Best Jira Dashboard Widgets and Charts in 2026
&lt;/h1&gt;

&lt;p&gt;Most Jira dashboards fail the same way: too many gadgets, none of them useful. A pie chart of issue types nobody asked for. A filter results table showing 200 tickets. A sprint burndown that's three sprints out of date.&lt;/p&gt;

&lt;p&gt;The best dashboards answer one or two specific questions for a specific audience. This guide covers the widgets and chart types that consistently deliver value — and the setups that make them useful in practice.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Right Frame Before You Start
&lt;/h2&gt;

&lt;p&gt;Before picking any widget, decide who the dashboard is for and what decision it needs to support.&lt;/p&gt;

&lt;p&gt;A dashboard for a sprint team answers: "Are we on track this week?" It needs velocity, blocked issues, and scope change.&lt;/p&gt;

&lt;p&gt;A dashboard for an engineering manager answers: "Where are the bottlenecks?" It needs cycle time, work in progress by assignee, and escalated bugs.&lt;/p&gt;

&lt;p&gt;A dashboard for a product stakeholder answers: "What shipped and what's coming?" It needs release status, feature progress, and open defects.&lt;/p&gt;

&lt;p&gt;If you try to serve all three audiences on one dashboard, you serve none of them.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bar Chart — Issue Distribution by Status or Assignee
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Sprint planning, workload reviews, standup summaries.&lt;/p&gt;

&lt;p&gt;A bar chart with issues grouped by status (To Do / In Progress / In Review / Done) gives you the distribution at a glance. When combined with a sprint or fix version filter, it answers "where is everything right now?" in one view.&lt;/p&gt;

&lt;p&gt;Grouped by assignee, the same chart becomes a workload visualization. If one person has 18 open issues and another has 3, that's visible immediately — no one needs to pull a report.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup in Charts for Jira Dashboard:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chart type: Bar&lt;/li&gt;
&lt;li&gt;Group by: Status or Assignee&lt;/li&gt;
&lt;li&gt;Filter: Current sprint or active fix version&lt;/li&gt;
&lt;li&gt;Orientation: Horizontal for assignee view (names read better)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Line Chart — Velocity Trend Over Time
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Sprint retrospectives, capacity planning, stakeholder updates.&lt;/p&gt;

&lt;p&gt;A single sprint's velocity is nearly meaningless. A six-sprint trend tells you whether the team is improving, declining, or stable. That context is what makes capacity planning possible.&lt;/p&gt;

&lt;p&gt;Set the X-axis to sprint and the Y-axis to story points completed. Add a trend line. The slope tells you more than any individual data point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What to avoid:&lt;/strong&gt; Reporting velocity in isolation without noting team size changes. A jump in velocity after two people joined isn't an improvement — it's headcount. Track points per person if you want a clean signal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chart type: Line&lt;/li&gt;
&lt;li&gt;X-axis: Sprint&lt;/li&gt;
&lt;li&gt;Y-axis: Story points (completed)&lt;/li&gt;
&lt;li&gt;Enable: Trend line&lt;/li&gt;
&lt;li&gt;Filter: Last 6–8 sprints&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Pie Chart — Issue Type or Priority Breakdown
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Bug triage, backlog health checks, executive summaries.&lt;/p&gt;

&lt;p&gt;Pie charts are often overused but have a legitimate place for proportion data. The question "what percentage of open work is bugs vs. features vs. tech debt?" is a proportion question — a pie chart answers it directly.&lt;/p&gt;

&lt;p&gt;Keep it to five slices or fewer. Beyond that, the chart becomes a color matching exercise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chart type: Pie&lt;/li&gt;
&lt;li&gt;Group by: Issue type or Priority&lt;/li&gt;
&lt;li&gt;Filter: Open issues in the relevant project&lt;/li&gt;
&lt;li&gt;Labels: Show percentages&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Area Chart — Cumulative Flow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Identifying bottlenecks, WIP limit enforcement, kanban teams.&lt;/p&gt;

&lt;p&gt;A cumulative flow diagram shows how issues accumulate and drain through each status over time. When one band (say "In Review") grows noticeably wider, it means work is piling up there — a bottleneck you can address before it delays the sprint.&lt;/p&gt;

&lt;p&gt;This is the most analytically powerful chart on this list and the one teams are most likely to underuse.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chart type: Area (stacked)&lt;/li&gt;
&lt;li&gt;X-axis: Date&lt;/li&gt;
&lt;li&gt;Y-axis: Issue count&lt;/li&gt;
&lt;li&gt;Group by: Status&lt;/li&gt;
&lt;li&gt;Filter: Active sprint or last 30 days&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Scatter Chart — Effort vs. Completion Time
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Estimation calibration, cycle time analysis.&lt;/p&gt;

&lt;p&gt;Plot story points on the X-axis and actual days to complete on the Y-axis. Each issue is a dot. What you're looking for: are small-point issues actually completing faster? Are there outliers — high-point issues that took surprisingly little time, or vice versa?&lt;/p&gt;

&lt;p&gt;This chart is most useful for teams trying to improve their estimation accuracy. After a few sprints, the pattern (or lack of one) tells you whether your point scale correlates with actual effort.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chart type: Scatter&lt;/li&gt;
&lt;li&gt;X-axis: Story points&lt;/li&gt;
&lt;li&gt;Y-axis: Cycle time (days)&lt;/li&gt;
&lt;li&gt;Filter: Completed issues, last 3 months&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Table View — Blocked Issues and Escalations
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Daily standup, impediment tracking, management escalation.&lt;/p&gt;

&lt;p&gt;Sometimes you don't need a visualization — you need a list. A table filtered to "Blocked" issues with columns for assignee, block reason, and days blocked is more actionable in a standup than any chart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;View type: Table&lt;/li&gt;
&lt;li&gt;Filter: Status = Blocked, or Label = "escalated"&lt;/li&gt;
&lt;li&gt;Columns: Issue key, Summary, Assignee, Days open&lt;/li&gt;
&lt;li&gt;Sort: Days open (descending)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  One Dashboard, One Audience
&lt;/h2&gt;

&lt;p&gt;The practical setup that works: one dashboard per team type, pinned as the default for that team's Jira project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sprint team:&lt;/strong&gt; Velocity line + status bar + blocked table&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engineering manager:&lt;/strong&gt; Workload bar + cumulative flow area + cycle time scatter&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product stakeholder:&lt;/strong&gt; Release progress bar + priority pie + escalation table&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each dashboard has three gadgets. Three is usually enough. If you need a fourth, something on the existing board isn't earning its space.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/842672747/charts-reports-and-graphs-for-jira-dashboard?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Charts - Reports and Graphs for Jira Dashboard&lt;/a&gt; is available on the Atlassian Marketplace. Add it to any Jira dashboard gadget, choose your chart type, connect it to a project or JQL filter, and it renders immediately from your live Jira data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/842672747/charts-reports-and-graphs-for-jira-dashboard?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Install Charts for Jira Dashboard →&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How Finance Teams Document Quantitative Models in Confluence</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Fri, 29 May 2026 11:32:11 +0000</pubDate>
      <link>https://dev.to/yamuno-software/how-finance-teams-document-quantitative-models-in-confluence-33g0</link>
      <guid>https://dev.to/yamuno-software/how-finance-teams-document-quantitative-models-in-confluence-33g0</guid>
      <description>&lt;h1&gt;
  
  
  How Finance Teams Document Quantitative Models in Confluence
&lt;/h1&gt;

&lt;p&gt;Most quantitative model documentation is a mess — not because quants don't care about documentation, but because the tools for writing math and the tools for sharing knowledge with a team don't overlap.&lt;/p&gt;

&lt;p&gt;The model lives in Python or R. The derivations live in a LaTeX PDF that took three days to write and is now orphaned in a shared drive folder nobody navigates. The assumptions are in a Word document last edited in 2023. The backtesting results are in Excel. A new analyst joining the team has to reconstruct the model's intent by reading code comments and asking questions.&lt;/p&gt;

&lt;p&gt;Confluence is where team knowledge should live. But until recently, Confluence had no good way to write actual math — which meant quant teams had the choice between prose approximations that lose precision, or screenshots of equations that become wrong the moment the model changes.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Quantitative Model Documentation Should Include
&lt;/h2&gt;

&lt;p&gt;Good model documentation isn't just the formula. It's the context that makes the formula meaningful to someone who didn't build it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model purpose and scope&lt;/strong&gt; — what decision this model informs, what asset class or portfolio it applies to, and what it explicitly does not cover. This section is often skipped and is often the most important.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Assumptions&lt;/strong&gt; — every model has them. Write them down explicitly. Which distributional assumptions are you making? What market conditions does the model assume? Where does it break down?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Formula derivation&lt;/strong&gt; — the derivation from first principles, or a clear reference to where that derivation lives. Not just the final formula, but why it takes that form.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input and output specification&lt;/strong&gt; — what goes in, what comes out, what units, what frequency, what data sources. A table is cleaner than prose here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backtesting and validation results&lt;/strong&gt; — summary statistics, time period, benchmark comparison. These change as you re-run validation; note the date.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitations and known failure modes&lt;/strong&gt; — where the model underperforms, what conditions make it unreliable, what it should not be used for. This is the section that protects the team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Version and change history&lt;/strong&gt; — when the model was last updated, what changed, and why.&lt;/p&gt;




&lt;h2&gt;
  
  
  Writing Formulas in Confluence with LaTeX
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/1602849193/latex-math-for-confluence-formulas-equations?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;LaTeX Math for Confluence&lt;/a&gt; adds a &lt;code&gt;/latex&lt;/code&gt; macro to Confluence that renders LaTeX equations live on the page. Type the macro, write the LaTeX source, and the rendered equation appears — inline or as a block. No screenshots, no external editors, no export-and-upload cycle.&lt;/p&gt;

&lt;p&gt;Here's what real quant model documentation looks like with it.&lt;/p&gt;




&lt;h3&gt;
  
  
  Option Pricing: Black-Scholes
&lt;/h3&gt;

&lt;p&gt;The Black-Scholes formula for a European call option:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;C = S&lt;span class="p"&gt;_&lt;/span&gt;0 &lt;span class="k"&gt;\,&lt;/span&gt; N(d&lt;span class="p"&gt;_&lt;/span&gt;1) - K e&lt;span class="p"&gt;^{&lt;/span&gt;-rT&lt;span class="p"&gt;}&lt;/span&gt; N(d&lt;span class="p"&gt;_&lt;/span&gt;2)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;d&lt;span class="p"&gt;_&lt;/span&gt;1 = &lt;span class="k"&gt;\frac&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\ln&lt;/span&gt;(S&lt;span class="p"&gt;_&lt;/span&gt;0 / K) + (r + &lt;span class="k"&gt;\tfrac&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;1&lt;span class="p"&gt;}{&lt;/span&gt;2&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;\sigma&lt;/span&gt;&lt;span class="p"&gt;^&lt;/span&gt;2)T&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="k"&gt;\sigma\sqrt&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;T&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;span class="k"&gt;\qquad&lt;/span&gt;
d&lt;span class="p"&gt;_&lt;/span&gt;2 = d&lt;span class="p"&gt;_&lt;/span&gt;1 - &lt;span class="k"&gt;\sigma\sqrt&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;T&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And $N(\cdot)$ is the standard normal CDF. Documenting the variable definitions inline is straightforward — you can mix inline LaTeX like $S_0$ (current price), $K$ (strike), $r$ (risk-free rate), $\sigma$ (volatility), $T$ (time to expiry) into a paragraph without switching formats.&lt;/p&gt;




&lt;h3&gt;
  
  
  Portfolio Risk: Variance and Volatility
&lt;/h3&gt;

&lt;p&gt;Portfolio variance for a two-asset portfolio:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="k"&gt;\sigma&lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;p&lt;span class="p"&gt;^&lt;/span&gt;2 = w&lt;span class="p"&gt;_&lt;/span&gt;1&lt;span class="p"&gt;^&lt;/span&gt;2 &lt;span class="k"&gt;\sigma&lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;1&lt;span class="p"&gt;^&lt;/span&gt;2 + w&lt;span class="p"&gt;_&lt;/span&gt;2&lt;span class="p"&gt;^&lt;/span&gt;2 &lt;span class="k"&gt;\sigma&lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;2&lt;span class="p"&gt;^&lt;/span&gt;2 + 2 w&lt;span class="p"&gt;_&lt;/span&gt;1 w&lt;span class="p"&gt;_&lt;/span&gt;2 &lt;span class="k"&gt;\sigma&lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;1 &lt;span class="k"&gt;\sigma&lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;2 &lt;span class="k"&gt;\rho&lt;/span&gt;&lt;span class="p"&gt;_{&lt;/span&gt;12&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Generalised to $n$ assets using the covariance matrix $\Sigma$:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="k"&gt;\sigma&lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;p&lt;span class="p"&gt;^&lt;/span&gt;2 = &lt;span class="k"&gt;\mathbf&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;w&lt;span class="p"&gt;}^&lt;/span&gt;&lt;span class="k"&gt;\top&lt;/span&gt; &lt;span class="k"&gt;\Sigma&lt;/span&gt; &lt;span class="k"&gt;\,&lt;/span&gt; &lt;span class="k"&gt;\mathbf&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;w&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where $\mathbf{w}$ is the vector of portfolio weights. This is the kind of expression that, written in plain text, requires three sentences to explain what a single line of math conveys unambiguously.&lt;/p&gt;




&lt;h3&gt;
  
  
  Performance Metrics: Sharpe and Sortino Ratios
&lt;/h3&gt;

&lt;p&gt;Sharpe ratio:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;S = &lt;span class="k"&gt;\frac&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\mathbb&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;E&lt;span class="p"&gt;}&lt;/span&gt;[R&lt;span class="p"&gt;_&lt;/span&gt;p - R&lt;span class="p"&gt;_&lt;/span&gt;f]&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="k"&gt;\sigma&lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;p&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sortino ratio, which penalises only downside volatility:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="k"&gt;\text&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;Sortino&lt;span class="p"&gt;}&lt;/span&gt; = &lt;span class="k"&gt;\frac&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\mathbb&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;E&lt;span class="p"&gt;}&lt;/span&gt;[R&lt;span class="p"&gt;_&lt;/span&gt;p - R&lt;span class="p"&gt;_&lt;/span&gt;f]&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="k"&gt;\sigma&lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;d&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;\qquad&lt;/span&gt;
&lt;span class="k"&gt;\sigma&lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;d = &lt;span class="k"&gt;\sqrt&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\mathbb&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;E&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;\left&lt;/span&gt;&lt;span class="na"&gt;[\min(R_p - R_f,\, 0)^2\right]&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Documenting both on the same page with their formulas makes clear why you might prefer one over the other for a strategy with asymmetric return distributions — which is precisely the kind of reasoning that should be captured in model documentation.&lt;/p&gt;




&lt;h3&gt;
  
  
  Risk Models: Value at Risk
&lt;/h3&gt;

&lt;p&gt;Parametric VaR at confidence level $\alpha$:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="k"&gt;\text&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;VaR&lt;span class="p"&gt;}_&lt;/span&gt;&lt;span class="k"&gt;\alpha&lt;/span&gt; = &lt;span class="k"&gt;\mu&lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;p - z&lt;span class="p"&gt;_&lt;/span&gt;&lt;span class="k"&gt;\alpha&lt;/span&gt; &lt;span class="k"&gt;\,&lt;/span&gt; &lt;span class="k"&gt;\sigma&lt;/span&gt;&lt;span class="p"&gt;_&lt;/span&gt;p
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Historical simulation VaR — defined as the $(1-\alpha)$ quantile of the empirical return distribution ${r_t}_{t=1}^T$:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="k"&gt;\text&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;VaR&lt;span class="p"&gt;}_&lt;/span&gt;&lt;span class="k"&gt;\alpha&lt;/span&gt; = -Q&lt;span class="p"&gt;_{&lt;/span&gt;1-&lt;span class="k"&gt;\alpha&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;\left&lt;/span&gt;(&lt;span class="k"&gt;\{&lt;/span&gt;r&lt;span class="p"&gt;_&lt;/span&gt;t&lt;span class="k"&gt;\}\right&lt;/span&gt;)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conditional VaR (Expected Shortfall):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="k"&gt;\text&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;CVaR&lt;span class="p"&gt;}_&lt;/span&gt;&lt;span class="k"&gt;\alpha&lt;/span&gt; = -&lt;span class="k"&gt;\mathbb&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;E&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;\left&lt;/span&gt;&lt;span class="na"&gt;[R \mid R \leq -\text{VaR}_\alpha\right]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These three measures are often discussed together but have meaningfully different properties in tail events. Having all three on one page with their exact definitions eliminates the ambiguity that shows up in verbal descriptions.&lt;/p&gt;




&lt;h3&gt;
  
  
  Fixed Income: Duration and Convexity
&lt;/h3&gt;

&lt;p&gt;Modified duration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;D&lt;span class="p"&gt;_{&lt;/span&gt;mod&lt;span class="p"&gt;}&lt;/span&gt; = -&lt;span class="k"&gt;\frac&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;1&lt;span class="p"&gt;}{&lt;/span&gt;P&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;\frac&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;dP&lt;span class="p"&gt;}{&lt;/span&gt;dy&lt;span class="p"&gt;}&lt;/span&gt; = &lt;span class="k"&gt;\frac&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;D&lt;span class="p"&gt;_{&lt;/span&gt;mac&lt;span class="p"&gt;}}{&lt;/span&gt;1 + y/m&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where $D_{mac}$ is Macaulay duration, $y$ is yield to maturity, and $m$ is the number of coupon periods per year.&lt;/p&gt;

&lt;p&gt;Convexity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;C = &lt;span class="k"&gt;\frac&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;1&lt;span class="p"&gt;}{&lt;/span&gt;P&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;\frac&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;d&lt;span class="p"&gt;^&lt;/span&gt;2P&lt;span class="p"&gt;}{&lt;/span&gt;dy&lt;span class="p"&gt;^&lt;/span&gt;2&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Price change approximation incorporating both:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="k"&gt;\frac&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\Delta&lt;/span&gt; P&lt;span class="p"&gt;}{&lt;/span&gt;P&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;\approx&lt;/span&gt; -D&lt;span class="p"&gt;_{&lt;/span&gt;mod&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;\cdot&lt;/span&gt; &lt;span class="k"&gt;\Delta&lt;/span&gt; y + &lt;span class="k"&gt;\frac&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;1&lt;span class="p"&gt;}{&lt;/span&gt;2&lt;span class="p"&gt;}&lt;/span&gt; C &lt;span class="k"&gt;\cdot&lt;/span&gt; (&lt;span class="k"&gt;\Delta&lt;/span&gt; y)&lt;span class="p"&gt;^&lt;/span&gt;2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Structuring a Model Documentation Page in Confluence
&lt;/h2&gt;

&lt;p&gt;A consistent page template makes model docs easier to write and easier to audit. Here's a structure that works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Model: [Model Name]
├── 1. Overview
│   ├── Purpose
│   ├── Scope and applicable instruments
│   └── Owner and last review date
├── 2. Assumptions
│   └── Numbered list — be specific
├── 3. Model Specification
│   ├── Notation table (define every symbol)
│   ├── Derivation (or reference)
│   └── Final formula(s) as block equations
├── 4. Inputs and Outputs
│   └── Table: variable, type, source, frequency
├── 5. Implementation Notes
│   ├── Code reference (link to repo/file)
│   └── Numerical considerations (overflow, precision)
├── 6. Validation and Backtesting
│   ├── Methodology
│   ├── Time period
│   └── Results summary (table)
├── 7. Limitations
│   └── Explicit failure modes
└── 8. Change Log
    └── Date | Change | Author
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;strong&gt;notation table&lt;/strong&gt; in section 3 is often skipped and almost always needed. Every symbol used in the formulas should appear in a table with its definition, units, and typical range. A reader who wasn't in the original modelling sessions shouldn't have to guess what $\lambda$ refers to.&lt;/p&gt;




&lt;h2&gt;
  
  
  Keeping Model Documentation Up to Date
&lt;/h2&gt;

&lt;p&gt;Model documentation drifts for the same reason all documentation drifts: updating it is a separate step from updating the model.&lt;/p&gt;

&lt;p&gt;A few practices that help:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Treat the Confluence page as part of the model.&lt;/strong&gt; Link to it from the code repository — a comment in the main model file pointing to the Confluence page URL. When a developer opens the file to make changes, the docs link is visible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add a documentation review step to your model validation process.&lt;/strong&gt; Most quant teams already have a formal model validation workflow. Add a checkpoint: has the Confluence page been updated to match the current implementation?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use the change log section.&lt;/strong&gt; It doesn't need to be exhaustive — a one-line entry per model update (date, what changed, who changed it) is enough to give future readers context. This is much cheaper to maintain than reconstructing history from git blame.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep equations as LaTeX source, not images.&lt;/strong&gt; The point of using &lt;a href="https://marketplace.atlassian.com/apps/1602849193/latex-math-for-confluence-formulas-equations?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;LaTeX Math for Confluence&lt;/a&gt; is that the source is editable in place. When a formula changes, you edit the LaTeX directly on the Confluence page — two minutes of work, not an export-and-upload cycle. That lower friction is what makes it realistic to keep docs in sync.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Install &lt;a href="https://marketplace.atlassian.com/apps/1602849193/latex-math-for-confluence-formulas-equations?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;LaTeX Math for Confluence&lt;/a&gt; from the Atlassian Marketplace. On any Confluence page, type &lt;code&gt;/latex&lt;/code&gt; to insert a block equation or use the inline variant for in-paragraph math.&lt;/p&gt;

&lt;p&gt;Full documentation is at &lt;a href="https://dev.to/docs/latex-math-for-confluence"&gt;LaTeX Math for Confluence docs&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Questions? 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>How to Use Confluence as a Developer Wiki</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Sat, 23 May 2026 09:56:30 +0000</pubDate>
      <link>https://dev.to/yamuno-software/how-to-use-confluence-as-a-developer-wiki-1bc2</link>
      <guid>https://dev.to/yamuno-software/how-to-use-confluence-as-a-developer-wiki-1bc2</guid>
      <description>&lt;h1&gt;
  
  
  How to Use Confluence as a Developer Wiki
&lt;/h1&gt;

&lt;p&gt;Confluence has a reputation problem with developers. It's slow. The editor is clunky. Markdown support used to be nonexistent. Half the team wants to write docs in GitHub, the other half uses Notion, and Confluence ends up as a graveyard of stale meeting notes and quarterly plans nobody reads.&lt;/p&gt;

&lt;p&gt;That reputation is partially deserved and partially outdated. There are cases where Confluence is genuinely the right choice for a developer wiki — and when it is, there's a right way to set it up so developers will actually use it.&lt;/p&gt;




&lt;h2&gt;
  
  
  When Confluence Makes Sense for Developers
&lt;/h2&gt;

&lt;p&gt;Don't reach for Confluence just because your company already has a license. Use it when these conditions are true:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your team already uses Jira.&lt;/strong&gt; The Jira ↔ Confluence integration is genuinely useful — linking a runbook to an incident, embedding a sprint's Jira issues in a planning page, referencing an ADR from a ticket. If your team lives in Jira, having docs one click away is real value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You need docs linked to project history.&lt;/strong&gt; GitHub wikis are disconnected from non-code work. Notion has no Jira integration worth mentioning. Confluence lets you tie documentation to the projects, releases, and sprints that produced it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compliance or audit requirements exist.&lt;/strong&gt; If your team needs documented approval workflows, page history with authors and timestamps, or access controls on specific documentation, Confluence handles this natively. Most alternatives don't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your organization is large enough that discoverability matters.&lt;/strong&gt; In a 10-person team, everyone knows where docs live. In a 200-person engineering organization, cross-team search across a unified Confluence instance is worth a lot. Fragmented Notion workspaces and GitHub wikis across dozens of repos don't have that.&lt;/p&gt;

&lt;p&gt;If none of these apply, Notion or a docs-as-code approach (MDX files in a repo, rendered with a tool like Docusaurus) is probably the better call. Confluence is not the right tool for every team.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Structure a Developer Wiki in Confluence
&lt;/h2&gt;

&lt;p&gt;The most common failure mode is dumping everything into one space with no structure. Within a year it's unsearchable. The second failure mode is over-structuring — five levels of nesting that nobody can navigate.&lt;/p&gt;

&lt;p&gt;A practical structure for an engineering team's Confluence space:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Engineering (space root)
├── Onboarding
│   ├── New Engineer Setup
│   ├── Development Environment
│   ├── Access &amp;amp; Permissions Request
│   └── First Week Checklist
├── Architecture
│   ├── System Overview
│   ├── Architecture Decision Records (ADRs)
│   │   ├── ADR-001: Use PostgreSQL for primary storage
│   │   ├── ADR-002: Adopt event-driven architecture
│   │   └── ADR-003: ...
│   └── Data Flow Diagrams
├── Services
│   ├── auth-service
│   │   ├── Overview &amp;amp; Runbook
│   │   ├── API Reference
│   │   └── Known Issues
│   └── payments-service
│       └── ...
├── Runbooks
│   ├── Incident Response
│   ├── Database Failover
│   ├── Deployment Rollback
│   └── On-Call Handoff Template
├── Incident Postmortems
│   ├── 2026-04-12 Payment Processing Outage
│   └── 2026-03-07 Auth Service Latency Spike
└── Release Notes
    └── (one page per release or sprint)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few principles behind this structure:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Runbooks get their own section&lt;/strong&gt; — not buried under individual services. When something is on fire at 2am, you want fast access without knowing which service owns the runbook.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ADRs live in Architecture&lt;/strong&gt; and follow a consistent template (context, decision, consequences). They're written once and rarely updated — that's fine, they're meant to capture a decision at a point in time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Incident Postmortems are first-class content.&lt;/strong&gt; Don't hide them or let them expire. They're the most valuable institutional knowledge a team produces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Services have a lightweight, consistent structure&lt;/strong&gt; — not every possible sub-page, just overview, runbook, and API reference at minimum.&lt;/p&gt;




&lt;h2&gt;
  
  
  Making Confluence Actually Dev-Friendly
&lt;/h2&gt;

&lt;p&gt;The editor is where most developers tap out. The default Confluence editor is fine for business users writing prose, but it's friction for developers who think in markdown.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Markdown support.&lt;/strong&gt; &lt;a href="https://marketplace.atlassian.com/apps/1238017/markdown-renderer-for-confluence?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Markdown Renderer for Confluence&lt;/a&gt; lets you write and maintain Confluence pages in pure markdown — including fenced code blocks with syntax highlighting, tables written as markdown tables, and inline formatting that looks exactly like it does in a README. No dealing with the visual editor for technical content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Importing existing docs.&lt;/strong&gt; If your team already has markdown documentation in a GitHub repo or a folder of &lt;code&gt;.md&lt;/code&gt; files, &lt;a href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence-markdown-exporter?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Markdown Importer for Confluence&lt;/a&gt; can pull those in directly — preserving heading hierarchy, code blocks, internal links, and images — without a manual copy-paste operation for each file. For teams migrating from a GitHub wiki or a docs folder, this is the fastest path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code blocks.&lt;/strong&gt; Confluence has native code block macros. Use them. Always specify the language. Unformatted terminal output and code snippets in regular text boxes are unusable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Labels and page properties.&lt;/strong&gt; Use labels consistently (e.g., &lt;code&gt;runbook&lt;/code&gt;, &lt;code&gt;adr&lt;/code&gt;, &lt;code&gt;postmortem&lt;/code&gt;, &lt;code&gt;service:auth&lt;/code&gt;) and you get free filtering. The Confluence built-in page properties macro lets you build tables that auto-populate from child pages — useful for a service catalog or ADR index.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Not to Do
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Don't put everything in Confluence.&lt;/strong&gt; Real-time communication belongs in Slack. Code review discussion belongs in GitHub. Work-in-progress thinking belongs in personal notes. Confluence is for stable, findable reference material — runbooks, specs, decisions, and onboarding docs. If it's likely to change daily, it probably shouldn't be in Confluence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't create pages without linking them to Jira.&lt;/strong&gt; The Jira integration is the main reason to choose Confluence over alternatives. If you're writing an ADR for a significant architecture decision, link it to the epic. If you're writing a runbook for a service, link the relevant Confluence page from the Jira project. Orphaned documentation gets stale because nobody finds it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't make pages too long.&lt;/strong&gt; Confluence has no natural incentive to keep pages short. A 10,000-word page that should be five linked pages is common and terrible. If you're scrolling for more than two screens to find what you need, split the page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't treat Confluence as a ticket system.&lt;/strong&gt; Action items and tasks go in Jira. Using Confluence pages to track work that should be in a Jira board is how you end up with two half-maintained systems instead of one.&lt;/p&gt;




&lt;h2&gt;
  
  
  An Honest Assessment
&lt;/h2&gt;

&lt;p&gt;Confluence is a real tradeoff. The editor is slower than a markdown file in VS Code. Search is good but not great for code snippets. Free-tier teams will find the cost steep. And it requires active maintenance — without someone periodically reviewing and archiving stale pages, it degrades into a documentation graveyard.&lt;/p&gt;

&lt;p&gt;What it's genuinely better at: stable, findable reference documentation for teams inside larger organizations that already run Jira. If that describes your situation, invest in a clear structure from day one, get markdown support in place so developers don't fight the editor, and keep the scope tight. A small, well-maintained Confluence space beats a large, neglected one every time.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Questions? 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>How to Document APIs in Confluence</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Wed, 20 May 2026 10:53:44 +0000</pubDate>
      <link>https://dev.to/yamuno-software/how-to-document-apis-in-confluence-4kja</link>
      <guid>https://dev.to/yamuno-software/how-to-document-apis-in-confluence-4kja</guid>
      <description>&lt;h1&gt;
  
  
  How to Document APIs in Confluence
&lt;/h1&gt;

&lt;p&gt;API docs fail for the same reasons every time: they live in too many places, nobody owns them, and updating them feels optional.&lt;/p&gt;

&lt;p&gt;The Postman collection is the real reference. The Swagger file is six months behind the code. The Confluence page was accurate once. The README has a curl example that stopped working in v2. Developers new to the codebase have to triangulate between all of them and ask a colleague anyway.&lt;/p&gt;

&lt;p&gt;Centralizing API documentation in Confluence doesn't fix all of this automatically — but it gives you a single place to link from everywhere else, and the right structure makes it far easier to keep up to date.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why API Documentation Gets Stale
&lt;/h2&gt;

&lt;p&gt;The core problem isn't that people are lazy. It's that documentation lives in a different tool than the code, so every change requires two actions: update the code, then update the docs. That second step gets skipped when deadlines are tight, and it never catches up.&lt;/p&gt;

&lt;p&gt;Secondary problems layer on top:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No clear owner.&lt;/strong&gt; The developer who built it moves on. Nobody else knows enough to update it confidently.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wrong format.&lt;/strong&gt; Prose descriptions of request bodies are ambiguous. Code examples with no explanation assume too much. A mix of both with no consistent structure is the worst of both worlds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swagger/OpenAPI as the only source.&lt;/strong&gt; Auto-generated docs show you what the API does, not why, what the gotchas are, or what the actual production behavior looks like in edge cases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good API documentation combines auto-generated spec output with hand-written context. Confluence is where the hand-written context should live.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Good API Documentation Includes
&lt;/h2&gt;

&lt;p&gt;For each API (or logical group of endpoints), your documentation should cover:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication and authorization&lt;/strong&gt; — how to get credentials, token lifetime, scope requirements, which endpoints need which permissions. This is the most-asked question from new integrators and the hardest to find in auto-generated docs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Base URL and versioning&lt;/strong&gt; — current version, how versioning works, deprecation policy. A table showing v1/v2 differences is worth more than a paragraph.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Endpoint reference&lt;/strong&gt; — for each endpoint: method, path, description, request parameters (path, query, header, body), example request, example response, error codes. See the template at the bottom of this post.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Error codes&lt;/strong&gt; — a dedicated table of all error codes, what they mean, and what the caller should do about them. &lt;code&gt;400 Bad Request&lt;/code&gt; is not useful documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Changelog&lt;/strong&gt; — what changed between versions and when. The changelog is the first thing an existing integrator checks when something breaks after a release.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rate limits and quotas&lt;/strong&gt; — numbers, what triggers throttling, what the response looks like, how to handle retry.&lt;/p&gt;




&lt;h2&gt;
  
  
  Structuring API Docs in Confluence
&lt;/h2&gt;

&lt;p&gt;A Confluence space structure that works well for a team maintaining one or more APIs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;API Documentation (space root)
├── Getting Started
│   ├── Authentication
│   ├── Rate Limits &amp;amp; Quotas
│   └── SDKs &amp;amp; Client Libraries
├── API Reference
│   ├── Users API
│   │   ├── GET /users
│   │   ├── POST /users
│   │   ├── GET /users/{id}
│   │   └── DELETE /users/{id}
│   └── Orders API
│       └── ...
├── Changelog
│   ├── v3.0.0 (2026-04-01)
│   ├── v2.5.0 (2025-12-10)
│   └── ...
└── Guides
    ├── Handling Pagination
    ├── Webhook Setup
    └── Error Handling Patterns
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep the API Reference section flat within each API group — one page per endpoint. Deep nesting makes the sidebar useless. The Changelog and Guides sections are where you write prose; the Reference section is where you write specs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Writing Request and Response Examples in Confluence
&lt;/h2&gt;

&lt;p&gt;This is where most Confluence API docs fall apart. People write prose descriptions of JSON fields, or paste unformatted request examples that are impossible to scan.&lt;/p&gt;

&lt;p&gt;The right approach is structured code blocks with clear labels. &lt;a href="https://marketplace.atlassian.com/apps/1238017/markdown-renderer-for-confluence?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Markdown Renderer for Confluence&lt;/a&gt; lets you write these directly in markdown on any Confluence page — including fenced code blocks with language hints that render with syntax highlighting.&lt;/p&gt;

&lt;p&gt;A request example written in markdown on a Confluence page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gs"&gt;**Request**&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
http&lt;br&gt;
POST /v3/orders&lt;br&gt;
Authorization: Bearer {token}&lt;br&gt;
Content-Type: application/json&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "customer_id": "cus_8f3k2",&lt;br&gt;
  "items": [&lt;br&gt;
    { "sku": "WIDGET-001", "quantity": 2 },&lt;br&gt;
    { "sku": "GADGET-042", "quantity": 1 }&lt;br&gt;
  ],&lt;br&gt;
  "shipping_address": {&lt;br&gt;
    "line1": "123 Main St",&lt;br&gt;
    "city": "Austin",&lt;br&gt;
    "state": "TX",&lt;br&gt;
    "zip": "78701"&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Response — 201 Created&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;json&lt;br&gt;
{&lt;br&gt;
  "order_id": "ord_9g4m1",&lt;br&gt;
  "status": "pending",&lt;br&gt;
  "created_at": "2026-05-20T14:32:00Z",&lt;br&gt;
  "total_cents": 4799&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt; ``&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
This renders cleanly in Confluence via Markdown Renderer, and it's easy to edit. No Confluence macro hunting, no storage format XML — just write markdown.

---

## Keeping Docs in Sync with Code

The documentation drift problem doesn't go away with better structure — it needs a process fix too.

**Link the Confluence page from the code.** Add a comment in the route handler or controller pointing to the Confluence page. When a developer changes the endpoint, the link is right there.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
python&lt;/p&gt;
&lt;h1&gt;
  
  
  POST /v3/orders
&lt;/h1&gt;
&lt;h1&gt;
  
  
  Docs: &lt;a href="https://yourspace.atlassian.net/wiki/x/AbCdEf" rel="noopener noreferrer"&gt;https://yourspace.atlassian.net/wiki/x/AbCdEf&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;@app.route("/v3/orders", methods=["POST"])&lt;br&gt;
def create_order():&lt;br&gt;
    ...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
**Add the docs update to your PR checklist.** If your team uses a PR template, add a checkbox: "Updated API docs in Confluence if endpoints changed." It sounds obvious but it works.

**Use the Confluence REST API for automated updates.** For teams with documentation-as-code workflows, the Confluence REST API lets you push page updates from CI. Your OpenAPI spec can be auto-rendered into a Confluence page on every merge to main, and the hand-written context pages stay separate and stable.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
bash&lt;/p&gt;

&lt;h1&gt;
  
  
  Update a Confluence page via REST API
&lt;/h1&gt;

&lt;p&gt;curl -X PUT \&lt;br&gt;
  "&lt;a href="https://yoursite.atlassian.net/wiki/rest/api/content/%7BpageId%7D" rel="noopener noreferrer"&gt;https://yoursite.atlassian.net/wiki/rest/api/content/{pageId}&lt;/a&gt;" \&lt;br&gt;
  -H "Authorization: Bearer $CONFLUENCE_TOKEN" \&lt;br&gt;
  -H "Content-Type: application/json" \&lt;br&gt;
  -d '{&lt;br&gt;
    "version": { "number": 12 },&lt;br&gt;
    "title": "GET /users/{id}",&lt;br&gt;
    "type": "page",&lt;br&gt;
    "body": {&lt;br&gt;
      "storage": {&lt;br&gt;
        "value": "&lt;/p&gt;
&lt;p&gt;Updated content here&lt;/p&gt;",&lt;br&gt;
        "representation": "storage"&lt;br&gt;
      }&lt;br&gt;
    }&lt;br&gt;
  }'&lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
---

## Page Template: API Endpoint Reference

Here's a practical template for a single endpoint page. Copy it, fill it in, repeat per endpoint.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;br&gt;
markdown&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;Brief description of what this endpoint does and when to use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Request
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Method &amp;amp; Path:&lt;/strong&gt; &lt;code&gt;POST /v3/users&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication:&lt;/strong&gt; Bearer token required. Scope: &lt;code&gt;users:write&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Headers
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Header&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Authorization&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Bearer {token}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Content-Type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;&lt;code&gt;application/json&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Body Parameters
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;email&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;User's email address&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Display name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;role&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;One of: &lt;code&gt;admin&lt;/code&gt;, &lt;code&gt;member&lt;/code&gt;, &lt;code&gt;viewer&lt;/code&gt;. Default: &lt;code&gt;member&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Example Request
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /v3/users
Authorization: Bearer eyJhb...
Content-Type: application/json

{
  "email": "alex@example.com",
  "name": "Alex Kim",
  "role": "member"
}
` ``

## Response

### 201 Created

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
json&lt;br&gt;
{&lt;br&gt;
  "user_id": "usr_7c2p9",&lt;br&gt;
  "email": "&lt;a href="mailto:alex@example.com"&gt;alex@example.com&lt;/a&gt;",&lt;br&gt;
  "name": "Alex Kim",&lt;br&gt;
  "role": "member",&lt;br&gt;
  "created_at": "2026-05-20T10:00:00Z"&lt;br&gt;
}&lt;br&gt;
&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;

&lt;h2&gt;
  
  
  Error Codes
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;400&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Missing required field&lt;/td&gt;
&lt;td&gt;Check request body against schema&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;409&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Email already registered&lt;/td&gt;
&lt;td&gt;Use existing account or change email&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;422&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Invalid role value&lt;/td&gt;
&lt;td&gt;Use one of: admin, member, viewer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;429&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Rate limit exceeded&lt;/td&gt;
&lt;td&gt;Back off and retry after &lt;code&gt;Retry-After&lt;/code&gt; header&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Notes
&lt;/h2&gt;

&lt;p&gt;Any gotchas, rate limit specifics, or behavior that differs from the general rules.&lt;br&gt;
&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Install &lt;a href="https://marketplace.atlassian.com/apps/1238017/markdown-renderer-for-confluence?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Markdown Renderer for Confluence&lt;/a&gt; from the Atlassian Marketplace to write and edit API docs in markdown directly on Confluence pages — code blocks, tables, and all.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Questions? 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>
      <category>api</category>
      <category>productivity</category>
      <category>tooling</category>
      <category>writing</category>
    </item>
    <item>
      <title>How Engineering Teams Use Confluence Effectively</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Fri, 15 May 2026 10:27:11 +0000</pubDate>
      <link>https://dev.to/yamuno-software/how-engineering-teams-use-confluence-effectively-d80</link>
      <guid>https://dev.to/yamuno-software/how-engineering-teams-use-confluence-effectively-d80</guid>
      <description>&lt;h1&gt;
  
  
  How Engineering Teams Use Confluence Effectively
&lt;/h1&gt;

&lt;p&gt;Most engineering teams have a love-hate relationship with Confluence. They hate writing in it, but they rely on it when they need to find something — architecture decisions, onboarding docs, incident runbooks. The problem is that the content is usually out of date, hard to find, or both.&lt;/p&gt;

&lt;p&gt;This post is about the structural and cultural patterns that make Confluence actually work for engineering teams — not just as a place to store things, but as a resource people actively use.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Engineering Documentation Fails
&lt;/h2&gt;

&lt;p&gt;Before talking about what works, it's worth being honest about why it usually doesn't.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docs Written Once, Never Touched Again
&lt;/h3&gt;

&lt;p&gt;The most common failure mode: documentation is written at project kick-off or system launch, never updated, and goes stale within a quarter. Engineers stop trusting it. When they stop trusting it, they stop reading it. When they stop reading it, nobody updates it because nobody's reading it.&lt;/p&gt;

&lt;p&gt;Stale documentation is worse than no documentation in one specific way: it creates false confidence. A runbook that worked 18 months ago and has been superseded by infrastructure changes will mislead the on-call engineer who follows it.&lt;/p&gt;

&lt;h3&gt;
  
  
  No Structure, Everything in Tickets
&lt;/h3&gt;

&lt;p&gt;Jira tickets are not documentation. They capture decisions in the context of a sprint, not in a form that's navigable six months later. Teams that default to "it's all in the tickets" are actually defaulting to "we have no documentation."&lt;/p&gt;

&lt;p&gt;Tickets are ephemeral by design. Documentation needs to be durable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Flat Spaces With No Hierarchy
&lt;/h3&gt;

&lt;p&gt;A Confluence space with 300 pages at the root level is a search problem disguised as a documentation problem. If the only way to find something is to know its exact title and search for it, your information architecture has failed.&lt;/p&gt;




&lt;h2&gt;
  
  
  What High-Performing Teams Do Differently
&lt;/h2&gt;

&lt;h3&gt;
  
  
  One Space Per Team or Service
&lt;/h3&gt;

&lt;p&gt;The clearest organizing principle that works at scale: one Confluence space per team or service domain, not per project or initiative.&lt;/p&gt;

&lt;p&gt;Projects come and go. Teams and services are durable. If your documentation is organized around projects, it fragments and orphans over time. If it's organized around teams, there's always a clear owner and a natural home for new content.&lt;/p&gt;

&lt;p&gt;A backend services team might have one space. Inside that space: onboarding, system architecture, runbooks, ADRs, deployment guides. Every page has a clear home because every page belongs to the team, not to a project that ended.&lt;/p&gt;

&lt;h3&gt;
  
  
  Clear Page Templates
&lt;/h3&gt;

&lt;p&gt;Consistency reduces the activation energy for writing documentation. When engineers have to invent the structure from scratch, many just don't. When there's a template, the blank page is already half-filled.&lt;/p&gt;

&lt;p&gt;Useful templates for engineering teams:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RFC (Request for Comments)&lt;/strong&gt; — for proposing significant changes before implementation. Sections: Background, Proposal, Alternatives Considered, Open Questions, Decision. The goal is to force structured thinking before anyone writes code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ADR (Architecture Decision Record)&lt;/strong&gt; — for recording decisions after they're made. Shorter than an RFC. Sections: Context, Decision, Status, Consequences. ADRs are valuable specifically because they capture the &lt;em&gt;why&lt;/em&gt;, not just the &lt;em&gt;what&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Runbook&lt;/strong&gt; — for operational procedures. Sections: Purpose, When to Use This, Prerequisites, Steps, Rollback, Escalation. A runbook that doesn't have a rollback section isn't complete.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Incident Post-Mortem&lt;/strong&gt; — for documenting what went wrong, why, and what changes. Sections: Timeline, Root Cause, Contributing Factors, Action Items. No blame, lots of specificity.&lt;/p&gt;

&lt;p&gt;Create these as Confluence templates in your space. When someone creates a new page and selects the template, the structure is there immediately.&lt;/p&gt;

&lt;h3&gt;
  
  
  Linking Jira and Confluence Intentionally
&lt;/h3&gt;

&lt;p&gt;Confluence and Jira are designed to interoperate, but most teams use them in parallel rather than together. The patterns that work:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link Jira epics to Confluence specs.&lt;/strong&gt; When you start planning a significant feature, create the Confluence RFC or spec first, then link it from the Jira epic. Every engineer who opens that epic can navigate to the detailed context without searching.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link Confluence runbooks to Jira service requests.&lt;/strong&gt; If your team uses Jira Service Management, link the relevant runbooks to request types. On-call engineers get the runbook in context, not as a bookmark to remember.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reference ADRs from Jira epics that implement them.&lt;/strong&gt; When a decision is made and recorded as an ADR, link it from every Jira epic that implements or is affected by it. This gives future engineers the context for why things are built the way they are.&lt;/p&gt;

&lt;p&gt;These links don't take long to add and pay significant dividends when someone is debugging or onboarding six months later.&lt;/p&gt;




&lt;h2&gt;
  
  
  Writing Docs Engineers Will Actually Read
&lt;/h2&gt;

&lt;p&gt;The content matters as much as the structure. Documentation that engineers actually read shares a few traits:&lt;/p&gt;

&lt;h3&gt;
  
  
  Short and Specific
&lt;/h3&gt;

&lt;p&gt;Documentation that tries to cover everything is documentation nobody reads. A runbook should cover exactly what it says it covers. An ADR should explain the decision, not the entire history of the system.&lt;/p&gt;

&lt;p&gt;Write for the person who has a specific question, not the person who's reading from the beginning.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code-First Where Relevant
&lt;/h3&gt;

&lt;p&gt;For engineering documentation, showing beats telling. If you're documenting how to configure a service, show the config file. If you're documenting an API, show the request and response. If you're documenting a deployment process, show the commands.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Deploy to staging&lt;/span&gt;
git tag &lt;span class="nt"&gt;-a&lt;/span&gt; v1.4.2 &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Release v1.4.2"&lt;/span&gt;
git push origin v1.4.2
&lt;span class="c"&gt;# CI picks up the tag and deploys automatically&lt;/span&gt;
&lt;span class="c"&gt;# Monitor at: https://grafana.internal/d/deploy-status&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is clearer and more useful than three paragraphs describing the same process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Acknowledge When Things Are Outdated
&lt;/h3&gt;

&lt;p&gt;Teams that add a "Last verified: [date]" note to runbooks and architecture docs create a signal that helps readers calibrate. A runbook last verified six months ago warrants more skepticism than one verified last week. It also creates a natural trigger for review — if you see a last-verified date that's too old, update it when you next use the doc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Markdown-Friendly
&lt;/h3&gt;

&lt;p&gt;Engineers are comfortable with markdown. They use it in pull requests, READMEs, and issue comments. Forcing them into the Confluence rich text editor creates friction that compounds over time — small enough to ignore, large enough to matter.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/1238017/markdown-renderer-for-confluence?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Markdown Renderer for Confluence&lt;/a&gt; lets engineers write documentation in markdown syntax directly inside Confluence pages. The macro renders it properly — tables, code blocks, task lists — without requiring them to change their writing workflow.&lt;/p&gt;

&lt;p&gt;For teams migrating existing documentation from GitHub wikis, Notion, or internal docs sites, &lt;a href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence-markdown-exporter?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Markdown Importer for Confluence&lt;/a&gt; handles bulk imports — preserving hierarchy, converting links, and pulling content directly from a repository URL.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Onboarding Test
&lt;/h2&gt;

&lt;p&gt;Here's a practical way to evaluate whether your Confluence space is working: give a new engineer exactly 30 minutes to find the answers to these questions using only Confluence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How do I set up my local development environment?&lt;/li&gt;
&lt;li&gt;Where does service X store its data, and what's the schema?&lt;/li&gt;
&lt;li&gt;Who do I contact if the payment pipeline is down?&lt;/li&gt;
&lt;li&gt;What was the reasoning behind the message queue architecture choice?&lt;/li&gt;
&lt;li&gt;How do I deploy to staging?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If a new engineer can't answer these questions from your documentation in 30 minutes, the structure isn't working — regardless of whether the information technically exists somewhere.&lt;/p&gt;

&lt;p&gt;Run this test every six months. Use the results to drive documentation sprints, not individual blame.&lt;/p&gt;




&lt;h2&gt;
  
  
  Keeping It Current
&lt;/h2&gt;

&lt;p&gt;Documentation maintenance isn't glamorous, but it's the actual hard part. A few practices that help:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Assign page ownership.&lt;/strong&gt; Every page in a team space should have an owner — the person responsible for keeping it current. Confluence's page properties feature can track this. Without clear ownership, pages decay by default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Review runbooks during incidents.&lt;/strong&gt; If you follow a runbook during an incident, update it immediately after. You have fresh context on what worked, what didn't, and what's missing. Incident reviews are the best documentation maintenance sessions you'll ever have.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation as part of definition of done.&lt;/strong&gt; If your team has a Definition of Done for Jira tickets, add "relevant documentation updated" as a criterion for anything that changes system behavior, configuration, or process. This is cultural, not technical — it requires enforcement through code review and sprint retrospectives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quarterly cleanup sprints.&lt;/strong&gt; Once a quarter, allocate a half-day for the team to review and update documentation. Not create new docs — review and update existing ones. Archive pages that are no longer relevant. Fix links that are broken. Update last-verified dates.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Confluence works for engineering teams when the structure is clear (one space per team, templates for common doc types), when it's connected to Jira intentionally, and when the documentation is written the way engineers think — short, specific, code-first.&lt;/p&gt;

&lt;p&gt;The tooling helps. Markdown support removes friction for engineers who'd rather write in a text editor. Structured import handles migrations. But the structure and discipline are the foundation. Get those right and the rest follows.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Questions? 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>Best Atlassian Marketplace Apps for Technical Documentation in 2026</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Tue, 12 May 2026 10:34:21 +0000</pubDate>
      <link>https://dev.to/yamuno-software/best-atlassian-marketplace-apps-for-technical-documentation-in-2026-3cc9</link>
      <guid>https://dev.to/yamuno-software/best-atlassian-marketplace-apps-for-technical-documentation-in-2026-3cc9</guid>
      <description>&lt;h1&gt;
  
  
  Best Atlassian Marketplace Apps for Technical Documentation in 2026
&lt;/h1&gt;

&lt;p&gt;Confluence out of the box is solid for general team documentation. For technical documentation specifically — API references, runbooks, architecture records, data science notebooks, engineering wikis — it has gaps. The native editor isn't built for developers, math rendering doesn't exist, and moving content in and out requires manual reformatting.&lt;/p&gt;

&lt;p&gt;The Marketplace fills most of these gaps. This is a category-by-category look at which apps are worth installing for technical teams, covering markdown support, math/equations, HTML embeds, and attachment management.&lt;/p&gt;




&lt;h2&gt;
  
  
  Category 1: Markdown Support
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Problem
&lt;/h3&gt;

&lt;p&gt;Developers write in markdown. Confluence doesn't speak markdown natively. This creates a translation tax — content written in a repo, a README, or a docs-as-code workflow has to be manually reformatted when it enters Confluence.&lt;/p&gt;

&lt;p&gt;The inverse is also true: documentation written in Confluence can't easily leave it. Export options produce mediocre HTML or PDFs, not clean markdown that can live in a Git repo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Markdown Renderer for Confluence
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/1238017/markdown-renderer-for-confluence?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Markdown Renderer for Confluence&lt;/a&gt; adds a macro to the Confluence editor that renders markdown inline. Paste markdown into the macro body, save the page, and it renders — tables, code blocks, math, task lists, all of it. No conversion step.&lt;/p&gt;

&lt;p&gt;This is the right tool when you want to write and maintain markdown directly inside Confluence without migrating your workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good for:&lt;/strong&gt; developers who prefer writing in markdown, teams embedding markdown content from other sources, documentation where the source needs to stay readable as plain text.&lt;/p&gt;

&lt;h3&gt;
  
  
  Markdown Importer &amp;amp; Exporter for Confluence
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence-markdown-exporter?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Markdown Importer for Confluence &amp;amp; Markdown Exporter&lt;/a&gt; handles bulk movement of content: import a ZIP of markdown files, a GitHub repository, or a single file — and export Confluence pages back to markdown.&lt;/p&gt;

&lt;p&gt;It preserves hierarchy (folder structure becomes page tree), converts internal links, handles frontmatter, and exposes a REST API for CI/CD pipeline integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good for:&lt;/strong&gt; migrating documentation from GitHub, GitLab, Notion, or any markdown-native source into Confluence; maintaining docs-as-code workflows where Confluence is the published output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Other options:&lt;/strong&gt; There are a few other markdown import tools on the Marketplace. Most are Connect-based (externally hosted), which introduces data routing concerns for teams with strict data residency requirements. Markdown Importer is Forge-native — all processing happens inside Atlassian infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Category 2: Math and Equations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Problem
&lt;/h3&gt;

&lt;p&gt;Technical documentation for engineering, data science, and academic teams frequently needs equations. Confluence has no native math rendering. Your options without an app are: screenshots (bad for accessibility and editability), plain text approximations, or external image generators with manual embed.&lt;/p&gt;

&lt;h3&gt;
  
  
  LaTeX Math for Confluence
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/1238016/latex-math-for-confluence?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;LaTeX Math for Confluence&lt;/a&gt; adds a Forge-native LaTeX macro that renders equations server-side. Write standard LaTeX syntax, get rendered math on the page — both inline and display (block) modes supported.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tex"&gt;&lt;code&gt;&lt;span class="k"&gt;\int&lt;/span&gt;&lt;span class="p"&gt;_{&lt;/span&gt;0&lt;span class="p"&gt;}^{&lt;/span&gt;&lt;span class="k"&gt;\infty&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; e&lt;span class="p"&gt;^{&lt;/span&gt;-x&lt;span class="p"&gt;^&lt;/span&gt;2&lt;span class="p"&gt;}&lt;/span&gt; dx = &lt;span class="k"&gt;\frac&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\sqrt&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;\pi&lt;/span&gt;&lt;span class="p"&gt;}}{&lt;/span&gt;2&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The macro handles the full LaTeX math environment: fractions, summations, integrals, matrices, Greek letters, operator names — anything in the standard math mode command set.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good for:&lt;/strong&gt; machine learning documentation, engineering specifications, scientific research, academic writing published to Confluence, or any technical content where equations need to be editable (not screenshots).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Other options:&lt;/strong&gt; MathJax-based browser-side renderers exist on the Marketplace. They work, but rendering happens client-side — which can produce flash-of-unstyled-content issues and inconsistency across exported PDFs. Server-side rendering (Forge) is more reliable for documentation that needs to be exported or printed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Category 3: Diagrams and Visuals
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Problem
&lt;/h3&gt;

&lt;p&gt;Architecture diagrams, flow charts, and sequence diagrams are core to technical documentation. They need to be editable by team members, not just the original author who exported a PNG from their laptop.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's Available
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;draw.io / Diagrams.net for Confluence&lt;/strong&gt; is the dominant tool here. It's widely used, has good Confluence integration, and supports UML, BPMN, network diagrams, and general flowcharts. It's a Connect app (externally hosted by JGraph), which is worth knowing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gliffy&lt;/strong&gt; is the other major option — similar capabilities, longer history in the Confluence ecosystem. Also Connect-based.&lt;/p&gt;

&lt;p&gt;For code-based diagrams (Mermaid, PlantUML, Graphviz), there are several Forge-native apps emerging that let you write diagram definitions as text and render them inline. This fits well with docs-as-code workflows where diagrams should be version-controllable.&lt;/p&gt;

&lt;p&gt;Yamuno doesn't currently publish a diagram app. The draw.io and Gliffy integrations are solid choices for general diagram needs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Category 4: HTML and Code Embeds
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Problem
&lt;/h3&gt;

&lt;p&gt;Some technical documentation needs custom HTML — embedded interactive demos, styled tables that go beyond Confluence's native capabilities, custom callout boxes, or content migrated from an HTML-based documentation system.&lt;/p&gt;

&lt;p&gt;Confluence strips raw HTML by default for security reasons. The native editor provides no HTML passthrough.&lt;/p&gt;

&lt;h3&gt;
  
  
  HTML Macro for Confluence
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/1238018/html-macro-for-confluence?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;HTML Macro for Confluence&lt;/a&gt; adds a Forge-native macro that renders raw HTML on Confluence pages. Write or paste HTML into the macro body and it renders in-page.&lt;/p&gt;

&lt;p&gt;This is useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interactive embeds&lt;/strong&gt; — API sandbox widgets, embedded iframes, interactive demos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom styled tables&lt;/strong&gt; — when the native Confluence table editor isn't flexible enough&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Migrated content&lt;/strong&gt; — documentation originally written in HTML that needs to land in Confluence without losing formatting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom callout layouts&lt;/strong&gt; — info boxes, warning panels, or custom visual elements not available natively&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security note: HTML rendering is controlled by Confluence admins. The macro respects Confluence's content security policies — scripts and external resource loading are subject to the same controls as the rest of the instance.&lt;/p&gt;




&lt;h2&gt;
  
  
  Category 5: Attachment Management
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Problem
&lt;/h3&gt;

&lt;p&gt;Technical documentation accumulates attachments — build artifacts, design files, exported reports, architecture diagrams, release packages. Over time, Confluence spaces fill with orphaned attachments, duplicate files, and files nobody can find because there's no organization layer.&lt;/p&gt;

&lt;p&gt;The native Confluence attachment experience is minimal: files attached to pages, a basic list view, no folder structure, no bulk operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Advanced Attachment Manager for Confluence
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/1238019/advanced-attachment-manager-for-confluence?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Advanced Attachment Manager for Confluence&lt;/a&gt; adds structured attachment management to Confluence pages — folder organization, version tracking, bulk upload/download, and better search across attachments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good for:&lt;/strong&gt; teams that use Confluence pages to distribute files (release packages, build artifacts, design assets), engineering teams running design review or release management in Confluence, documentation spaces where attachments are first-class content.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Evaluate Marketplace Apps
&lt;/h2&gt;

&lt;p&gt;Two things worth checking before installing any Marketplace app:&lt;/p&gt;

&lt;h3&gt;
  
  
  Forge vs Connect
&lt;/h3&gt;

&lt;p&gt;Forge apps run inside Atlassian's infrastructure. Your data never routes through an external server. This matters for teams with data residency requirements, SOC 2 compliance obligations, or strict network policies.&lt;/p&gt;

&lt;p&gt;Connect apps (labeled "server" or with an external vendor hosting model) route data through the vendor's servers. This is fine for many teams but is worth understanding upfront — especially for apps that process documentation content.&lt;/p&gt;

&lt;p&gt;All Yamuno apps are Forge-native. On any app's Marketplace listing, the hosting model is listed under the app details.&lt;/p&gt;

&lt;h3&gt;
  
  
  Permissions and Scopes
&lt;/h3&gt;

&lt;p&gt;Check what Confluence and Jira permissions an app requests at install time. A diagram app that requests write access to your entire Confluence space should prompt questions. Most legitimate apps request narrow, sensible scopes — if something seems excessive, read the privacy policy and check the vendor's security documentation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Need&lt;/th&gt;
&lt;th&gt;App&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Write markdown in Confluence&lt;/td&gt;
&lt;td&gt;Markdown Renderer for Confluence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Import/export markdown in bulk&lt;/td&gt;
&lt;td&gt;Markdown Importer &amp;amp; Exporter for Confluence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LaTeX equations&lt;/td&gt;
&lt;td&gt;LaTeX Math for Confluence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diagrams&lt;/td&gt;
&lt;td&gt;draw.io or Gliffy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raw HTML embeds&lt;/td&gt;
&lt;td&gt;HTML Macro for Confluence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attachment organization&lt;/td&gt;
&lt;td&gt;Advanced Attachment Manager for Confluence&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All Yamuno apps are available on the &lt;a href="https://marketplace.atlassian.com/vendors/1225473" rel="noopener noreferrer"&gt;Atlassian Marketplace&lt;/a&gt; — free to try, Forge-native.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Questions? 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>Building a Jira Dashboard That Actually Tells You Something</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Thu, 07 May 2026 10:26:51 +0000</pubDate>
      <link>https://dev.to/yamuno-software/building-a-jira-dashboard-that-actually-tells-you-something-43m0</link>
      <guid>https://dev.to/yamuno-software/building-a-jira-dashboard-that-actually-tells-you-something-43m0</guid>
      <description>&lt;h1&gt;
  
  
  Building a Jira Dashboard That Actually Tells You Something
&lt;/h1&gt;

&lt;p&gt;Most Jira dashboards are abandoned within a month of being created. They start with good intentions — someone sets up a few gadgets, shares the link in Slack, and declares victory. Two sprints later, nobody opens it because the numbers don't mean anything or the widgets are always stale.&lt;/p&gt;

&lt;p&gt;The problem isn't Jira. It's that dashboards get built around what's easy to surface rather than what decisions they're supposed to support.&lt;/p&gt;

&lt;p&gt;This post covers how to think about Jira dashboards, what metrics actually matter, and how to set up charts that a real team will check daily.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Makes a Dashboard Useless
&lt;/h2&gt;

&lt;p&gt;Before getting into what works, it's worth naming the failure modes. Most bad Jira dashboards share a few characteristics:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Too many widgets.&lt;/strong&gt; A dashboard with 12 gadgets isn't 4x as useful as one with 3 — it's less useful because nothing stands out. If everything is visible, nothing is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrong time horizon.&lt;/strong&gt; A sprint burndown chart that resets every two weeks doesn't help you plan the quarter. A velocity trend over one sprint isn't a trend. Match the widget to the time horizon of the question you're asking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Metrics that measure activity, not outcomes.&lt;/strong&gt; "Issues created this week" tells you your team is logging tickets. It doesn't tell you whether the project is on track. Issues closed vs committed is a more honest number.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No audience.&lt;/strong&gt; A dashboard built for standup looks completely different from one built for an exec review. Mixing those purposes produces something that's mediocre for both.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Metrics That Actually Matter
&lt;/h2&gt;

&lt;p&gt;Here are the five metrics worth tracking for most software teams, and why:&lt;/p&gt;

&lt;h3&gt;
  
  
  Sprint Burndown
&lt;/h3&gt;

&lt;p&gt;The most immediate signal. Are you on track to complete your sprint commitment? A healthy burndown slopes steadily toward zero. A flat line mid-sprint means work isn't getting closed. A cliff at the end means scope wasn't broken down properly.&lt;/p&gt;

&lt;p&gt;Track it per sprint. The shape matters as much as the final number.&lt;/p&gt;

&lt;h3&gt;
  
  
  Velocity (Rolling Average)
&lt;/h3&gt;

&lt;p&gt;Sprint velocity — story points or issue count completed per sprint — is useful when you look at it over 4–8 sprints. A single sprint's velocity is noise. A rolling average is a planning input.&lt;/p&gt;

&lt;p&gt;Watch for velocity swings greater than ±30% — those usually point to estimation drift, unplanned work, or sprint scope changes worth discussing in retrospectives.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cycle Time
&lt;/h3&gt;

&lt;p&gt;How long does an issue take from "In Progress" to "Done"? Cycle time is one of the most diagnostic metrics in software delivery. High cycle times for small issues usually indicate blockers, review bottlenecks, or unclear acceptance criteria. High variance means your process is inconsistent.&lt;/p&gt;

&lt;p&gt;This is the metric most teams skip and then wonder why estimates are always wrong.&lt;/p&gt;

&lt;h3&gt;
  
  
  Blockers by Assignee
&lt;/h3&gt;

&lt;p&gt;How many blocked issues does each person have? This is a team health metric disguised as a workload metric. If one person has 5 blocked issues and everyone else has zero, that's a structural problem — not an individual one.&lt;/p&gt;

&lt;p&gt;Surface this in your standup dashboard so blockers get visibility before they become incidents.&lt;/p&gt;

&lt;h3&gt;
  
  
  Issues Without Assignees
&lt;/h3&gt;

&lt;p&gt;Work that's been created but not picked up. In a healthy sprint this number should be low. In a backlog it's expected. When it climbs during a sprint, it usually means scope crept in through the side door.&lt;/p&gt;




&lt;h2&gt;
  
  
  Setting Up Charts with Charts for Jira Dashboard
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/842672747/charts-reports-and-graphs-for-jira-dashboard?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Charts - Reports and Graphs for Jira Dashboard&lt;/a&gt; is a Forge-native gadget that adds a proper charting layer to Jira dashboards. It supports bar charts, line charts, pie charts, and burndown-style visualizations — all configured directly in the dashboard without needing external tools or BI integrations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding a Chart Gadget
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open your Jira dashboard (or create a new one)&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Add gadget&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;Charts&lt;/strong&gt; — select the Charts gadget&lt;/li&gt;
&lt;li&gt;Configure the data source: choose your project, board, or a saved JQL filter&lt;/li&gt;
&lt;li&gt;Select the chart type&lt;/li&gt;
&lt;li&gt;Set your grouping dimension — status, assignee, priority, sprint, label, component&lt;/li&gt;
&lt;li&gt;Set the time range&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The gadget renders immediately and stays live — data updates automatically as issues change.&lt;/p&gt;

&lt;h3&gt;
  
  
  Grouping Options Worth Knowing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Group by status&lt;/strong&gt; gives you a distribution view — how many issues are in each workflow state. Useful for spotting pileups (10 issues in "In Review," 2 in "Done" — something's blocking review).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Group by assignee&lt;/strong&gt; shows workload distribution. Combine with a filter for a specific sprint and you can see at a glance if load is balanced.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Group by label or component&lt;/strong&gt; is useful for teams that run mixed-project sprints — you can see how effort is distributed across workstreams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Group by sprint&lt;/strong&gt; over multiple sprints gives you the velocity trend you need for planning conversations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Three Dashboard Layouts for Different Audiences
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Standup Dashboard
&lt;/h3&gt;

&lt;p&gt;Audience: the team. Time horizon: current sprint.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Widget&lt;/th&gt;
&lt;th&gt;What It Shows&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sprint burndown&lt;/td&gt;
&lt;td&gt;Are we on track?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blocked issues by assignee&lt;/td&gt;
&lt;td&gt;What needs unblocking?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Issues in each status&lt;/td&gt;
&lt;td&gt;Where is work piling up?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Issues without assignees&lt;/td&gt;
&lt;td&gt;What hasn't been picked up?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Keep this to 4 widgets maximum. The goal is a 60-second read at 9am.&lt;/p&gt;

&lt;h3&gt;
  
  
  Exec / Stakeholder Dashboard
&lt;/h3&gt;

&lt;p&gt;Audience: non-engineering leadership. Time horizon: current quarter.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Widget&lt;/th&gt;
&lt;th&gt;What It Shows&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Velocity trend (rolling 6 sprints)&lt;/td&gt;
&lt;td&gt;Is the team's throughput stable?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Epic progress (% complete)&lt;/td&gt;
&lt;td&gt;Are we hitting roadmap milestones?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Issues by priority (open)&lt;/td&gt;
&lt;td&gt;What's the risk surface?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Releases completed this quarter&lt;/td&gt;
&lt;td&gt;Shipping cadence&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Avoid sprint-level detail here. Execs want quarter-level signal, not sprint noise.&lt;/p&gt;

&lt;h3&gt;
  
  
  Retrospective Dashboard
&lt;/h3&gt;

&lt;p&gt;Audience: the team. Time horizon: completed sprint.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Widget&lt;/th&gt;
&lt;th&gt;What It Shows&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sprint burndown (completed sprint)&lt;/td&gt;
&lt;td&gt;Did we hit the commitment?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cycle time distribution&lt;/td&gt;
&lt;td&gt;Were estimates accurate?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unresolved issues carried over&lt;/td&gt;
&lt;td&gt;What spilled?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Velocity vs previous sprint&lt;/td&gt;
&lt;td&gt;Did throughput improve?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This dashboard exists to feed the retro conversation, not to survive past it. Create it, run the retro, archive it.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Note on JQL Filters
&lt;/h2&gt;

&lt;p&gt;Every chart in Charts for Jira is backed by a JQL filter. Learning a few patterns makes dashboard configuration much faster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-- Current sprint, this project
project = MYPROJ AND sprint in openSprints()

-- Blocked issues
project = MYPROJ AND status = "Blocked"

-- Issues completed in last 30 days
project = MYPROJ AND status = Done AND resolutiondate &amp;gt;= -30d

-- High priority, unassigned
project = MYPROJ AND priority = High AND assignee is EMPTY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save your most-used filters in Jira's filter management — then reference them by name when configuring gadgets rather than re-entering JQL each time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Install &lt;a href="https://marketplace.atlassian.com/apps/842672747/charts-reports-and-graphs-for-jira-dashboard?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Charts - Reports and Graphs for Jira Dashboard&lt;/a&gt; from the Atlassian Marketplace. It's Forge-native and works on Jira Cloud.&lt;/p&gt;

&lt;p&gt;Full documentation is at &lt;a href="https://dev.to/docs/charts-for-jira-dashboard"&gt;/docs/charts-for-jira-dashboard&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Questions? 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>Docs as Code: How to Export Confluence to Git-Ready Markdown</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Sun, 03 May 2026 09:23:26 +0000</pubDate>
      <link>https://dev.to/yamuno-software/docs-as-code-how-to-export-confluence-to-git-ready-markdown-2clg</link>
      <guid>https://dev.to/yamuno-software/docs-as-code-how-to-export-confluence-to-git-ready-markdown-2clg</guid>
      <description>&lt;h1&gt;
  
  
  Docs as Code: How to Export Confluence to Git-Ready Markdown
&lt;/h1&gt;

&lt;p&gt;Docs-as-code treats documentation like source code: written in plain text, versioned in Git, reviewed in pull requests, and deployed through a CI/CD pipeline. The format is almost always Markdown.&lt;/p&gt;

&lt;p&gt;Confluence doesn't fit this model natively. Its export produces HTML or PDF — neither of which belongs in a Git repository. But for many teams, Confluence is where the documentation actually gets written and reviewed. Replacing it isn't always an option.&lt;/p&gt;

&lt;p&gt;The practical solution: use Confluence as the editing surface and Git as the source of truth. Export Confluence to Markdown on a cadence, commit the output, and let your pipeline handle the rest.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/102037374" rel="noopener noreferrer"&gt;Markdown Exporter for Confluence&lt;/a&gt; is built for exactly this workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You Need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Confluence Cloud&lt;/strong&gt; (the app requires Forge and runs on Cloud only)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://marketplace.atlassian.com/apps/102037374" rel="noopener noreferrer"&gt;Markdown Exporter for Confluence&lt;/a&gt;&lt;/strong&gt; installed on your Confluence instance&lt;/li&gt;
&lt;li&gt;A Git repository with a &lt;code&gt;docs/&lt;/code&gt; folder (or equivalent)&lt;/li&gt;
&lt;li&gt;Optionally: a static site generator like MkDocs or Docusaurus&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 1 — Structure Your Confluence Space for Export
&lt;/h2&gt;

&lt;p&gt;The exporter preserves your Confluence page hierarchy as a folder structure. If your pages are organised logically in Confluence, the output will be organised logically on disk.&lt;/p&gt;

&lt;p&gt;A Confluence structure like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Documentation (space root)
├── Getting Started
│   ├── Installation
│   └── Quick Start
├── Architecture
│   ├── Overview
│   └── API Reference
└── Operations
    └── Runbooks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Becomes this folder structure in the exported ZIP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/
├── Getting Started/
│   ├── Installation.md
│   └── Quick Start.md
├── Architecture/
│   ├── Overview.md
│   └── API Reference.md
└── Operations/
    └── Runbooks.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Most static site generators — MkDocs, Docusaurus, Jekyll, Eleventy — can work directly with this structure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2 — Configure Filename Patterns
&lt;/h2&gt;

&lt;p&gt;Consistent filenames matter in a Git repo. If file names change between exports, Git treats the old file as deleted and the new one as added — losing commit history.&lt;/p&gt;

&lt;p&gt;Markdown Exporter lets you define a filename pattern using tokens:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Token&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;{title}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The Confluence page title&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;{date}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Export date in &lt;code&gt;YYYY-MM-DD&lt;/code&gt; format&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;{id}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The Confluence page ID&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For a stable docs-as-code workflow, use &lt;code&gt;{title}&lt;/code&gt; only — so filenames stay consistent across exports as long as page titles don't change. If you need uniqueness guarantees even when titles change, add &lt;code&gt;{id}&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3 — Enable YAML Front Matter
&lt;/h2&gt;

&lt;p&gt;Most static site generators read metadata from YAML front matter at the top of Markdown files. Enable it in the exporter and configure which fields to include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;API Reference&lt;/span&gt;
&lt;span class="na"&gt;author&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Platform Team&lt;/span&gt;
&lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2026-04-23&lt;/span&gt;
&lt;span class="na"&gt;space&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DOCS&lt;/span&gt;
&lt;span class="na"&gt;confluence_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;789012"&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also add &lt;strong&gt;custom key-value fields&lt;/strong&gt; — useful for tagging pages with a &lt;code&gt;category&lt;/code&gt;, &lt;code&gt;product&lt;/code&gt;, or &lt;code&gt;version&lt;/code&gt; that your site generator uses to build navigation or filter content.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4 — Export and Commit
&lt;/h2&gt;

&lt;p&gt;Run the export from the Confluence space or page tree you want to publish:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;•••&lt;/strong&gt; → &lt;strong&gt;Export to Markdown&lt;/strong&gt; on the root page, or open from the Apps menu&lt;/li&gt;
&lt;li&gt;Set scope to &lt;strong&gt;Include Child Pages&lt;/strong&gt; or &lt;strong&gt;Full Space&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enable YAML front matter and set your filename pattern&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Export&lt;/strong&gt; and download the ZIP&lt;/li&gt;
&lt;li&gt;Extract the ZIP over your &lt;code&gt;docs/&lt;/code&gt; folder in the repository&lt;/li&gt;
&lt;li&gt;Commit: &lt;code&gt;git add docs/ &amp;amp;&amp;amp; git commit -m "docs: sync from Confluence 2026-04-23"&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On the next CI run, your pipeline picks up the updated Markdown and publishes the new docs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Works With MkDocs and Docusaurus
&lt;/h2&gt;

&lt;h3&gt;
  
  
  MkDocs
&lt;/h3&gt;

&lt;p&gt;The exported folder structure maps directly to MkDocs nav. A minimal &lt;code&gt;mkdocs.yml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;site_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Platform Docs&lt;/span&gt;
&lt;span class="na"&gt;docs_dir&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docs&lt;/span&gt;
&lt;span class="na"&gt;nav&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;Getting Started&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;docs/Getting Started/Installation.md&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;docs/Getting Started/Quick Start.md&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;Architecture&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;docs/Architecture/Overview.md&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;docs/Architecture/API Reference.md&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or let MkDocs auto-generate nav from the folder structure with the &lt;code&gt;awesome-pages&lt;/code&gt; plugin.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docusaurus
&lt;/h3&gt;

&lt;p&gt;Place the extracted folder under &lt;code&gt;docs/&lt;/code&gt; in your Docusaurus repo. Docusaurus reads YAML front matter natively — the &lt;code&gt;title&lt;/code&gt; and &lt;code&gt;date&lt;/code&gt; fields will be picked up automatically. Enable autogenerated sidebars and the folder hierarchy becomes the sidebar structure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Keeping Content in Sync
&lt;/h2&gt;

&lt;p&gt;For a lightweight sync loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Export on a schedule&lt;/strong&gt; — run a full space export weekly, or per-section after each sprint&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review the diff&lt;/strong&gt; — &lt;code&gt;git diff docs/&lt;/code&gt; shows exactly what changed since the last export&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commit and push&lt;/strong&gt; — let CI build and deploy the updated site&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For more frequent syncs, you can automate around the export step using browser automation or Confluence webhooks that trigger a reminder to re-export. The exporter itself is UI-driven and doesn't currently expose a REST API — so fully automated pipelines work best when paired with a scheduler that prompts the export step.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the Export Handles
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Text formatting&lt;/strong&gt; — headings, bold, italic, strikethrough, inline code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tables&lt;/strong&gt; — column alignment and header rows preserved&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code blocks&lt;/strong&gt; — fenced with language tag for syntax highlighting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lists&lt;/strong&gt; — ordered, unordered, nested, task lists&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Images and attachments&lt;/strong&gt; — downloaded and referenced with relative paths&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internal links&lt;/strong&gt; — converted to relative Markdown links between files&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Info / note panels&lt;/strong&gt; — converted to blockquotes&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Getting Started
&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; free from the Atlassian Marketplace.&lt;/p&gt;

&lt;p&gt;Full documentation at &lt;a href="https://dev.to/docs/markdown-exporter-for-confluence"&gt;/docs/markdown-exporter-for-confluence&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>How to Write Markdown in Confluence Without Losing Formatting</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Sat, 02 May 2026 09:10:19 +0000</pubDate>
      <link>https://dev.to/yamuno-software/how-to-write-markdown-in-confluence-without-losing-formatting-4la1</link>
      <guid>https://dev.to/yamuno-software/how-to-write-markdown-in-confluence-without-losing-formatting-4la1</guid>
      <description>&lt;h1&gt;
  
  
  How to Write Markdown in Confluence Without Losing Formatting
&lt;/h1&gt;

&lt;p&gt;If you've ever pasted markdown into a Confluence page, you know what happens: the formatting disappears and you're left with raw asterisks, backticks, and pound signs. Confluence has its own editor — it doesn't interpret markdown syntax natively.&lt;/p&gt;

&lt;p&gt;That's a real problem for technical writers and engineers who write in markdown by default. You end up maintaining two versions of everything, or spending time manually reformatting content every time it moves.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/1238017/markdown-renderer-for-confluence?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Markdown Renderer for Confluence&lt;/a&gt; solves this directly: add the macro to a page, write markdown inside it, and it renders live. No conversion, no reformatting, no copy-paste friction.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Confluence Doesn't Support Markdown Natively
&lt;/h2&gt;

&lt;p&gt;Confluence uses a proprietary storage format called Confluence Storage Format (XHTML-based). The editor works at that level — not at the markdown level. When you type in the editor, you're generating structured XML under the hood, not markdown.&lt;/p&gt;

&lt;p&gt;There's no built-in way to write &lt;code&gt;**bold**&lt;/code&gt; and have it render as &lt;strong&gt;bold&lt;/strong&gt;. You'd have to use the editor's toolbar, keyboard shortcuts, or Confluence macros. That workflow doesn't fit teams who live in markdown — documentation-as-code practitioners, developers writing runbooks, or technical writers migrating content from GitHub or Notion.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Markdown Renderer Does
&lt;/h2&gt;

&lt;p&gt;Markdown Renderer for Confluence is a Forge-native macro that renders markdown inline on a Confluence page. You insert the macro, paste or write your markdown inside it, and the page displays the rendered output — headings, tables, code blocks, math, and all.&lt;/p&gt;

&lt;p&gt;The key behaviors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live rendering&lt;/strong&gt; — what you write in the macro body renders as formatted content on save&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GFM support&lt;/strong&gt; — GitHub Flavored Markdown is fully supported, including tables, task lists, and strikethrough&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code blocks with syntax highlighting&lt;/strong&gt; — fenced code blocks with language identifiers render with proper highlighting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Math support&lt;/strong&gt; — inline and block LaTeX expressions via &lt;code&gt;$...$&lt;/code&gt; and &lt;code&gt;$$...$$&lt;/code&gt; syntax&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No external requests&lt;/strong&gt; — everything runs inside Confluence via Forge; your content never leaves Atlassian infrastructure&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How to Insert the Macro
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open or create a Confluence page&lt;/li&gt;
&lt;li&gt;In the editor, type &lt;code&gt;/&lt;/code&gt; to open the macro browser&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;Markdown Renderer&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Select it — a macro placeholder appears on the page&lt;/li&gt;
&lt;li&gt;Click into the macro body and write or paste your markdown&lt;/li&gt;
&lt;li&gt;Save the page&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. The macro renders on save, and any editor who opens the page for editing sees the raw markdown in the macro body — editable as plain text.&lt;/p&gt;




&lt;h2&gt;
  
  
  Markdown Features Supported
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Headings and Text
&lt;/h3&gt;

&lt;p&gt;Standard ATX-style headings (&lt;code&gt;#&lt;/code&gt;, &lt;code&gt;##&lt;/code&gt;, &lt;code&gt;###&lt;/code&gt;) render as Confluence heading levels. Emphasis (&lt;code&gt;*italic*&lt;/code&gt;, &lt;code&gt;**bold**&lt;/code&gt;), strikethrough (&lt;code&gt;~~text~~&lt;/code&gt;), and inline code (&lt;code&gt;`code`&lt;/code&gt;) all work as expected.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tables
&lt;/h3&gt;

&lt;p&gt;GFM pipe tables render correctly, including column alignment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;| Method | Endpoint         | Auth     |
| ------ | ---------------- | -------- |
| GET    | /api/v1/users    | Required |
| POST   | /api/v1/sessions | None     |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is particularly useful for API documentation and reference tables — content types that are painful to build in the Confluence native editor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code Blocks
&lt;/h3&gt;

&lt;p&gt;Fenced code blocks with language identifiers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;
python
def parse_webhook(payload: dict) -&amp;gt; Event:
    return Event(
        type=payload["type"],
        data=payload.get("data", {}),
    )


&lt;span class="p"&gt;```&lt;/span&gt;
&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;
&lt;/span&gt;
`

Syntax highlighting is applied automatically based on the language tag.

### Math

If you're writing technical documentation that includes equations, the macro supports LaTeX math syntax:

```markdown
The time complexity is $O(n \log n)$.

$$
\sum_{i=1}^{n} x_i = \frac{n(n+1)}{2}
$$
```

This uses the same rendering pipeline as [LaTeX Math for Confluence](https://marketplace.atlassian.com/apps/1238016/latex-math-for-confluence?hosting=cloud&amp;amp;tab=overview) — equations render cleanly without needing a separate macro for simple cases.

### Task Lists

```markdown
- [x] Write the API spec
- [x] Review with backend team
- [ ] Update the runbook
- [ ] Notify stakeholders
```

These render as visual checkboxes, making them useful for runbooks, checklists, and release notes embedded in Confluence pages.

---

## Practical Tips for Technical Writers

**Keep your source in markdown.** If you're maintaining documentation in a Git repo, the Markdown Renderer macro lets you paste the current content into Confluence without reformatting it. When the source changes, you update the macro body. It's not automated sync (for that, use Markdown Importer's REST API), but it's fast enough for most workflows.

**Use one macro per logical section.** You don't have to put an entire page inside a single macro. Mix native Confluence content with markdown macro blocks — use the native editor for page layouts, comments, or Confluence-specific macros, and drop into the markdown macro for content-heavy sections.

**Watch your frontmatter.** If you paste markdown from a file that has YAML frontmatter (`---` block at the top), strip it before pasting — the renderer will display it as text. Frontmatter is handled at import time by Markdown Importer, not at render time.

**Tables with many columns.** Confluence pages have a fixed width. Very wide markdown tables can overflow the macro boundary. Either reduce the column count or apply a full-width page layout before inserting the macro.

---

## When to Use Markdown Renderer vs Markdown Importer

These are different tools for different problems:

| Scenario | Tool |
| -------- | ---- |
| Write markdown inline on a Confluence page | Markdown Renderer |
| Bring in a file, folder, or GitHub repo as Confluence pages | Markdown Importer |
| Automate doc sync via CI/CD | Markdown Importer (REST API) |
| Live markdown editing in Confluence | Markdown Renderer |

If your workflow is "write in markdown, publish to Confluence," you likely want both.

---

## Getting Started

Install [Markdown Renderer for Confluence](https://marketplace.atlassian.com/apps/1238017/markdown-renderer-for-confluence?hosting=cloud&amp;amp;tab=overview) from the Atlassian Marketplace. It's Forge-native, so no external server connections, no CSP exceptions, and no admin firewall approvals needed.

Full documentation is at [/docs/markdown-renderer-for-confluence](/docs/markdown-renderer-for-confluence).

---

_Questions? Reach out via our [support portal](https://yamuno.atlassian.net/servicedesk/customer/portals)._
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>Yamuno is a Finalist for Atlassian Partner of the Year 2026: Marketplace Rising Star</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Thu, 30 Apr 2026 17:32:49 +0000</pubDate>
      <link>https://dev.to/yamuno-software/yamuno-is-a-finalist-for-atlassian-partner-of-the-year-2026-marketplace-rising-star-332c</link>
      <guid>https://dev.to/yamuno-software/yamuno-is-a-finalist-for-atlassian-partner-of-the-year-2026-marketplace-rising-star-332c</guid>
      <description>&lt;h1&gt;
  
  
  Yamuno is a Finalist for Atlassian Partner of the Year 2026: Marketplace Rising Star
&lt;/h1&gt;

&lt;p&gt;We have some exciting news to share: &lt;strong&gt;Yamuno has been named a finalist for the Atlassian Partner of the Year 2026: Marketplace Rising Star Award.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This recognition means a great deal to our team. The Atlassian Marketplace is home to thousands of apps, and being recognized as a Marketplace Rising Star is a reflection of the trust that Confluence and Jira users have placed in our products. We don't take that lightly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the Atlassian Partner of the Year 2026: Marketplace Rising Star Award?
&lt;/h2&gt;

&lt;p&gt;The Atlassian Partner Awards are given annually to recognize partners who demonstrate exceptional commitment to customer success, product quality, and growth within the Atlassian ecosystem. The &lt;strong&gt;Marketplace Rising Star&lt;/strong&gt; category specifically honors vendors who have shown outstanding momentum, adoption, and customer impact over the past year.&lt;/p&gt;

&lt;p&gt;Being named a finalist means Atlassian has recognized Yamuno among the top performers in this category — and that is something we are genuinely proud of.&lt;/p&gt;

&lt;h2&gt;
  
  
  Our Journey on the Atlassian Marketplace
&lt;/h2&gt;

&lt;p&gt;Yamuno started with a single mission: build Forge-native apps that teams can actually trust. No external servers. No data leaving Atlassian infrastructure. Just reliable tools that do exactly what they promise.&lt;/p&gt;

&lt;p&gt;Over the past year, we've grown our portfolio to eight apps — all built on &lt;a href="https://developer.atlassian.com/platform/forge/" rel="noopener noreferrer"&gt;Atlassian Forge&lt;/a&gt; and focused on making Confluence and Jira more powerful for the people who use them every day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://marketplace.atlassian.com/apps/1231894" rel="noopener noreferrer"&gt;Markdown Importer for Confluence Cloud&lt;/a&gt;&lt;/strong&gt; — import and export markdown files, page trees, and entire spaces with full formatting support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://marketplace.atlassian.com/apps/102037374" rel="noopener noreferrer"&gt;Markdown Exporter for Confluence&lt;/a&gt;&lt;/strong&gt; — export pages to clean, portable Markdown with YAML front matter, Obsidian wikilinks, and custom filename patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://marketplace.atlassian.com/apps/1670180315" rel="noopener noreferrer"&gt;HTML Macro for Confluence&lt;/a&gt;&lt;/strong&gt; — embed custom HTML, CSS, and JavaScript inside Confluence pages with enterprise CSP controls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://marketplace.atlassian.com/apps/1602849193" rel="noopener noreferrer"&gt;LaTeX Math for Confluence&lt;/a&gt;&lt;/strong&gt; — professional LaTeX equation rendering with live preview and access controls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://marketplace.atlassian.com/apps/842672747" rel="noopener noreferrer"&gt;Charts for Jira Dashboard&lt;/a&gt;&lt;/strong&gt; — interactive, customizable charts and tables built directly into your Jira dashboard&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://marketplace.atlassian.com/apps/1238017" rel="noopener noreferrer"&gt;Markdown Macro for Confluence&lt;/a&gt;&lt;/strong&gt; — write, preview, and publish rich Markdown content natively in Confluence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://marketplace.atlassian.com/apps/1238147" rel="noopener noreferrer"&gt;Advanced Attachment Manager for Confluence&lt;/a&gt;&lt;/strong&gt; — find, filter, and clean up attachments across your entire Confluence instance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://marketplace.atlassian.com/apps/726790413" rel="noopener noreferrer"&gt;PDF Exporter for Confluence&lt;/a&gt;&lt;/strong&gt; — export pages, hierarchies, or spaces to professionally formatted PDFs with custom templates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each app was built in response to real pain points we heard from the community — things teams needed but couldn't find a reliable solution for.&lt;/p&gt;

&lt;h2&gt;
  
  
  This Wouldn't Exist Without You
&lt;/h2&gt;

&lt;p&gt;Recognition like this isn't built in a vacuum. Every review left on the Marketplace, every support ticket that pushed us to make something better, every user who suggested a feature or reported an edge case — that community feedback is what shaped these products into what they are today.&lt;/p&gt;

&lt;p&gt;If you've been a Yamuno customer, this nomination belongs to you as much as it does to us. Thank you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;We're continuing to build. The same principles that got us here — Forge-native security, focus on real workflows, and responsiveness to user feedback — are what will drive everything we ship next.&lt;/p&gt;




&lt;p&gt;Explore our full app portfolio on the &lt;a href="https://marketplace.atlassian.com/vendors/1224569/yamuno" rel="noopener noreferrer"&gt;Atlassian Marketplace&lt;/a&gt; or reach out at &lt;a href="mailto:support@yamuno.com"&gt;support@yamuno.com&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Export Confluence to Obsidian (With Wikilinks)</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Tue, 28 Apr 2026 10:17:28 +0000</pubDate>
      <link>https://dev.to/yamuno-software/how-to-export-confluence-to-obsidian-with-wikilinks-4i5a</link>
      <guid>https://dev.to/yamuno-software/how-to-export-confluence-to-obsidian-with-wikilinks-4i5a</guid>
      <description>&lt;h1&gt;
  
  
  How to Export Confluence to Obsidian (With Wikilinks)
&lt;/h1&gt;

&lt;p&gt;Confluence and Obsidian serve different needs. Confluence is where teams collaborate on documentation. Obsidian is where individuals build a personal knowledge base, connect ideas, and think in networks of linked notes.&lt;/p&gt;

&lt;p&gt;If you use both, you've probably felt the friction: Confluence content doesn't transfer cleanly to Obsidian. Copy-pasting loses formatting. Downloading HTML is useless. Internal links between pages become broken references.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/102037374" rel="noopener noreferrer"&gt;Markdown Exporter for Confluence&lt;/a&gt; solves this with a dedicated &lt;strong&gt;Obsidian mode&lt;/strong&gt; that converts Confluence page links to &lt;code&gt;[[wikilinks]]&lt;/code&gt; automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem With Standard Confluence Export
&lt;/h2&gt;

&lt;p&gt;Confluence's built-in export options are HTML and PDF. Neither works with Obsidian:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTML&lt;/strong&gt; — Obsidian doesn't render HTML as notes. You'd need to strip tags manually.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PDF&lt;/strong&gt; — read-only, not searchable in Obsidian's graph, and not linkable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even if you extract text, internal links (&lt;code&gt;[See also: Architecture Overview](/wiki/spaces/PROJ/pages/...&lt;/code&gt;) become long URLs that Obsidian doesn't recognise as note links. Your knowledge graph breaks.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Obsidian Mode Does
&lt;/h2&gt;

&lt;p&gt;When you enable Obsidian mode in Markdown Exporter, every internal Confluence page link is converted to &lt;code&gt;[[Page Title]]&lt;/code&gt; format:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before (standard export):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;See the &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Architecture Overview&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://yoursite.atlassian.net/wiki/spaces/PROJ/pages/123456/Architecture+Overview&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; for context.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;After (Obsidian mode):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;See the [[Architecture Overview]] for context.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Obsidian resolves wikilinks by note title, so as long as the referenced page is in your vault, the link works — and shows up in the graph view.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step-by-Step: Export Confluence to Obsidian
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1 — Install Markdown Exporter
&lt;/h3&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. It requires Confluence Cloud and takes about 30 seconds to install.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2 — Open the Exporter
&lt;/h3&gt;

&lt;p&gt;Navigate to the Confluence page or space you want to export. Click &lt;strong&gt;•••&lt;/strong&gt; (More actions) → &lt;strong&gt;Export to Markdown&lt;/strong&gt;. For a full space, open it from the &lt;strong&gt;Apps&lt;/strong&gt; menu in global navigation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3 — Enable Obsidian Mode
&lt;/h3&gt;

&lt;p&gt;In the export options panel, toggle &lt;strong&gt;Obsidian Wikilinks&lt;/strong&gt; on. This switches internal link output from standard Markdown links to &lt;code&gt;[[Page Title]]&lt;/code&gt; format.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4 — Configure YAML Front Matter (Optional)
&lt;/h3&gt;

&lt;p&gt;Enable &lt;strong&gt;YAML front matter&lt;/strong&gt; to include metadata at the top of each exported note:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Architecture Overview&lt;/span&gt;
&lt;span class="na"&gt;author&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Jane Smith&lt;/span&gt;
&lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2026-04-23&lt;/span&gt;
&lt;span class="na"&gt;space&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;PROJ&lt;/span&gt;
&lt;span class="na"&gt;confluence_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;123456"&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is useful if you use Obsidian plugins like Dataview to query note properties, or if you want to track which Confluence page each note came from.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5 — Select Scope and Export
&lt;/h3&gt;

&lt;p&gt;Choose your scope:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Single page&lt;/strong&gt; — exports one &lt;code&gt;.md&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Page tree&lt;/strong&gt; — exports a parent page and its children as a structured ZIP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full space&lt;/strong&gt; — exports everything in the space as a ZIP with folder hierarchy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use the in-tree search to find specific pages if you only need a subset.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6 — Add to Your Obsidian Vault
&lt;/h3&gt;

&lt;p&gt;Extract the ZIP into a folder inside your Obsidian vault. Obsidian will immediately index the notes. If you enabled wikilinks mode, the internal links between pages will resolve — and they'll appear in the graph view.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the Export Preserves
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Content Type&lt;/th&gt;
&lt;th&gt;Obsidian Output&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Headings&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;#&lt;/code&gt;, &lt;code&gt;##&lt;/code&gt;, &lt;code&gt;###&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bold / Italic&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;**bold**&lt;/code&gt;, &lt;code&gt;*italic*&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tables&lt;/td&gt;
&lt;td&gt;Standard Markdown tables&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code blocks&lt;/td&gt;
&lt;td&gt;Fenced with language tag&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lists&lt;/td&gt;
&lt;td&gt;Ordered and unordered&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Images &amp;amp; attachments&lt;/td&gt;
&lt;td&gt;Downloaded, referenced with relative paths&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Internal page links&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;[[Page Title]]&lt;/code&gt; wikilinks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External links&lt;/td&gt;
&lt;td&gt;Standard &lt;code&gt;[text](url)&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Info / warning panels&lt;/td&gt;
&lt;td&gt;Blockquotes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Tips for Obsidian Users
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use a dedicated folder.&lt;/strong&gt; Keep your Confluence imports in a subfolder like &lt;code&gt;confluence/&lt;/code&gt; so they don't mix with your personal notes. You can still link across folders.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sync regularly with a script.&lt;/strong&gt; If your team's Confluence content changes often, set up a regular export and overwrite the vault folder. Links won't break as long as page titles stay the same.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Combine with Dataview.&lt;/strong&gt; If you include YAML front matter, you can build Dataview queries over your Confluence notes — e.g. all pages in a specific space, or notes modified after a certain date.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check complex macros.&lt;/strong&gt; Most Confluence content converts cleanly. Heavily customised layouts or third-party macros may need a quick review after export.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&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; free from the Atlassian Marketplace.&lt;/p&gt;

&lt;p&gt;Full documentation is at &lt;a href="https://dev.to/docs/markdown-exporter-for-confluence"&gt;/docs/markdown-exporter-for-confluence&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Questions? 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>5 Ways to Clean Up Confluence Storage Without Breaking Anything</title>
      <dc:creator>Yamuno</dc:creator>
      <pubDate>Fri, 24 Apr 2026 09:47:34 +0000</pubDate>
      <link>https://dev.to/yamuno-software/5-ways-to-clean-up-confluence-storage-without-breaking-anything-3e0f</link>
      <guid>https://dev.to/yamuno-software/5-ways-to-clean-up-confluence-storage-without-breaking-anything-3e0f</guid>
      <description>&lt;h1&gt;
  
  
  5 Ways to Clean Up Confluence Storage Without Breaking Anything
&lt;/h1&gt;

&lt;p&gt;Confluence storage has a way of quietly filling up. Old attachments accumulate, duplicate files get uploaded, outdated page versions pile up — and suddenly your admins are getting storage warnings.&lt;/p&gt;

&lt;p&gt;The tricky part is cleaning it up safely. Delete the wrong file and you break a page that someone still relies on. Here are five practical approaches to reclaim storage without causing collateral damage.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Audit Attachments Before You Delete Anything
&lt;/h2&gt;

&lt;p&gt;The first mistake most admins make is deleting files before understanding what's actually taking up space. Start with an audit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/1231895/advanced-attachment-manager-for-confluence?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Advanced Attachment Manager for Confluence&lt;/a&gt; gives you a searchable, filterable view of every attachment across your entire Confluence instance — sorted by file size, type, space, or date. You can instantly see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which spaces are consuming the most storage&lt;/li&gt;
&lt;li&gt;Which file types are taking up the most space (PDFs? Videos? Zip files?)&lt;/li&gt;
&lt;li&gt;Which attachments are oldest and most likely outdated&lt;/li&gt;
&lt;li&gt;Which pages have the most attachments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This takes the guesswork out of cleanup. You know exactly what to target before you touch anything.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Delete Old Attachment Versions
&lt;/h2&gt;

&lt;p&gt;Every time someone re-uploads a file with the same name, Confluence keeps the previous version. Over time, old attachment versions accumulate invisibly — they don't show up in search but they count against your storage quota.&lt;/p&gt;

&lt;p&gt;To clean up attachment versions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In standard Confluence: go to a page → Attachments → select an attachment → view history → delete old versions&lt;/li&gt;
&lt;li&gt;With Advanced Attachment Manager: identify pages with many attachment versions across the whole instance and bulk-delete old versions in one operation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is often one of the biggest wins in a storage cleanup — old file versions can account for a surprising percentage of total usage.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Find and Remove Duplicate Files
&lt;/h2&gt;

&lt;p&gt;Teams frequently upload the same file multiple times — the same logo across ten different spaces, the same template ZIP uploaded by multiple people, the same diagram in slightly different versions.&lt;/p&gt;

&lt;p&gt;To find duplicates:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use Advanced Attachment Manager's filter by file type and size to spot files of identical size&lt;/li&gt;
&lt;li&gt;Search by filename to find the same file uploaded across multiple spaces&lt;/li&gt;
&lt;li&gt;Consolidate duplicates — keep one canonical version, update page references, delete the rest&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For images specifically, bulk-replacing references and consolidating to a single version can reclaim significant space.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Clean Up Orphaned Attachments
&lt;/h2&gt;

&lt;p&gt;Orphaned attachments are files that were uploaded to a page and then the page content changed — the file is still there but no longer referenced in the page body. It shows in the attachments list but isn't embedded anywhere.&lt;/p&gt;

&lt;p&gt;These are almost always safe to delete, but confirming manually across thousands of pages is impractical. Advanced Attachment Manager lets you filter for unreferenced attachments and review them in bulk — so you can clean them up with confidence rather than blindly deleting.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Archive Old Spaces Instead of Letting Them Rot
&lt;/h2&gt;

&lt;p&gt;One of the biggest contributors to storage bloat is spaces that are no longer active but never archived or cleaned up. Old project spaces, deprecated product docs, completed initiative wikis — they accumulate attachments and page versions indefinitely.&lt;/p&gt;

&lt;p&gt;The right approach:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Identify inactive spaces&lt;/strong&gt; — no edits in the last 6–12 months&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export the space&lt;/strong&gt; to markdown or PDF if you want a permanent record (Markdown Exporter handles this)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Archive the space&lt;/strong&gt; in Confluence — it becomes read-only and stops accumulating versions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delete the space&lt;/strong&gt; if you're confident nothing in it is needed&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Archiving before deleting gives you a safety net. Export first if there's any doubt.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bulk Actions Save Hours
&lt;/h2&gt;

&lt;p&gt;The reason storage cleanups get neglected is that the manual process is slow. Click into each page, open attachments, check each file, decide, delete. Multiply that by thousands of pages and it becomes a multi-day project.&lt;/p&gt;

&lt;p&gt;Advanced Attachment Manager's bulk actions let you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select multiple attachments across pages and spaces&lt;/li&gt;
&lt;li&gt;Delete, move, or download them in one operation&lt;/li&gt;
&lt;li&gt;Filter by type, size, date, or space to scope your cleanup precisely&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What would take days manually takes an hour with the right tooling.&lt;/p&gt;




&lt;h2&gt;
  
  
  Before You Delete Anything
&lt;/h2&gt;

&lt;p&gt;A few rules of thumb:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check if the file is referenced in a page body.&lt;/strong&gt; Deleting an attachment that's embedded in a page will break the embed. Advanced Attachment Manager shows you where each attachment is used.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start with the obvious.&lt;/strong&gt; Target large files first — videos, zips, PDFs. A single 500MB video file does more damage to your quota than a thousand small images.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use spaces to scope your cleanup.&lt;/strong&gt; Don't try to clean the entire instance at once. Pick one or two high-storage spaces and clean those first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't delete page versions from active pages.&lt;/strong&gt; Version history is there for a reason. Focus on old attachment versions, not page versions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://marketplace.atlassian.com/apps/1231895/advanced-attachment-manager-for-confluence?hosting=cloud&amp;amp;tab=overview" rel="noopener noreferrer"&gt;Advanced Attachment Manager for Confluence&lt;/a&gt; is available on the Atlassian Marketplace.&lt;/p&gt;

&lt;p&gt;Full documentation at &lt;a href="https://dev.to/docs/advanced-attachment-manager"&gt;/docs/advanced-attachment-manager&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Questions? 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>
  </channel>
</rss>
