<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ Yamuno — Atlassian Apps & Insights]]></title><description><![CDATA[Yamuno builds Atlassian Marketplace apps for Confluence and Jira teams. We publish practical guides, product launches, and documentation workflows for teams using the Atlassian ecosystem.
]]></description><link>https://blog.yamuno.com</link><image><url>https://cdn.hashnode.com/uploads/logos/69ea1d5ac0ce31e5bfdab128/ad229f67-43e3-4f85-a8b4-ed05157e2e35.png</url><title> Yamuno — Atlassian Apps &amp; Insights</title><link>https://blog.yamuno.com</link></image><generator>RSS for Node</generator><lastBuildDate>Thu, 23 Apr 2026 20:43:29 GMT</lastBuildDate><atom:link href="https://blog.yamuno.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Export Confluence Pages to Polished PDFs — Introducing PDF Exporter for Confluence]]></title><description><![CDATA[Introducing PDF Exporter for Confluence
We're excited to announce that PDF Exporter for Confluence is now live on the Atlassian Marketplace.
Confluence's built-in PDF export is minimal — no cover page, no custom headers, no watermarks, and certainly ...]]></description><link>https://blog.yamuno.com/export-confluence-pages-to-polished-pdfs-introducing-pdf-exporter-for-confluence</link><guid isPermaLink="true">https://blog.yamuno.com/export-confluence-pages-to-polished-pdfs-introducing-pdf-exporter-for-confluence</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:48:23 GMT</pubDate><enclosure url="https://assets.yamuno.com/images/blog/pdf-exporter-for-confluence-launch-v2.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introducing-pdf-exporter-for-confluence">Introducing PDF Exporter for Confluence</h1>
<p>We're excited to announce that <a target="_blank" href="https://marketplace.atlassian.com/apps/726790413"><strong>PDF Exporter for Confluence</strong></a> is now live on the Atlassian Marketplace.</p>
<p>Confluence's built-in PDF export is minimal — no cover page, no custom headers, no watermarks, and certainly no reusable templates. For teams sharing documentation with clients, stakeholders, or regulators, "minimal" doesn't cut it.</p>
<p>PDF Exporter fills that gap.</p>
<p><img src="https://assets.yamuno.com/pdf-exporter/highlight1.jpg" alt="PDF Exporter for Confluence" /></p>
<h2 id="heading-what-is-pdf-exporter-for-confluence">What Is PDF Exporter for Confluence?</h2>
<p>PDF Exporter is a Forge-native Confluence Cloud app that lets you export any page, page hierarchy, or entire space to a professionally formatted PDF — without leaving Confluence and without sending your data anywhere outside Atlassian's infrastructure.</p>
<h2 id="heading-key-features">Key Features</h2>
<h3 id="heading-single-page-hierarchy-or-full-space">Single Page, Hierarchy, or Full Space</h3>
<p>Export exactly what you need:</p>
<ul>
<li><strong>Single page</strong> — export any Confluence page to PDF in one click</li>
<li><strong>Page tree</strong> — select a parent page and include all child pages in one export</li>
<li><strong>Full space</strong> — export an entire Confluence space as a packaged ZIP of PDFs</li>
</ul>
<p>Multi-page exports are automatically bundled into a ZIP download.</p>
<h3 id="heading-reusable-templates">Reusable Templates</h3>
<p>Admins can define export templates from Confluence Settings → PDF Exporter. Each template controls fonts, layout, cover page style, header and footer content, watermarks, and page numbering.</p>
<p>Once a template is saved, every user on the instance can apply it — no more inconsistent formatting across teams.</p>
<h3 id="heading-six-cover-page-styles">Six Cover Page Styles</h3>
<p>Choose from six built-in cover page layouts and customise them with your accent color, company logo, author name, and subtitle. Every exported PDF looks like it came from your design team.</p>
<h3 id="heading-automatic-table-of-contents">Automatic Table of Contents</h3>
<p>Enable the TOC option and the exporter automatically generates a clickable table of contents from your page headings — with configurable depth so you control how detailed it gets.</p>
<h3 id="heading-headers-footers-amp-watermarks">Headers, Footers &amp; Watermarks</h3>
<p>Add custom text, page numbers, or a watermark to every page of the exported PDF. Useful for draft reviews, confidential documents, or any output where you need persistent labelling.</p>
<h3 id="heading-runs-entirely-on-atlassian-forge">Runs Entirely on Atlassian Forge</h3>
<p>PDF Exporter is 100% Forge-native. All processing happens inside Atlassian's infrastructure — exported PDFs are delivered directly to your browser and never stored on external servers.</p>
<h2 id="heading-who-is-it-for">Who Is It For?</h2>
<p>PDF Exporter is built for teams that share documentation beyond Confluence:</p>
<ul>
<li><strong>Technical writers</strong> producing release notes, product specs, or user guides for external distribution</li>
<li><strong>Solutions engineers</strong> creating polished client-facing proposals or handover documents</li>
<li><strong>Compliance and legal teams</strong> archiving Confluence content with consistent formatting and watermarks</li>
<li><strong>Project managers</strong> sharing status reports and project documentation with stakeholders who don't have Confluence access</li>
</ul>
<h2 id="heading-getting-started">Getting Started</h2>
<ol>
<li><strong>Install the app</strong> from the <a target="_blank" href="https://marketplace.atlassian.com/apps/726790413">Atlassian Marketplace</a></li>
<li>Open any Confluence page and click <strong>•••</strong> (More actions) → <strong>Export to PDF</strong></li>
<li>Choose a template (or use the default)</li>
<li>Select the scope — single page, page tree, or space</li>
<li>Click <strong>Export</strong> and download your PDF</li>
</ol>
<p>Admins can create and manage templates from <strong>Confluence Settings → PDF Exporter</strong>.</p>
<p>👉 <a target="_blank" href="https://marketplace.atlassian.com/apps/726790413">Install PDF Exporter for Confluence</a></p>
<p>👉 <a target="_blank" href="/docs/pdf-exporter-for-confluence">Read the Documentation</a></p>
<hr />
<p><em>Questions or feedback? Reach out via our <a target="_blank" href="https://yamuno.atlassian.net/servicedesk/customer/portals">support portal</a> — we'd love to hear how your team is using it.</em></p>
]]></content:encoded></item><item><title><![CDATA[How to Migrate Your GitHub or GitLab Docs to Confluence (Step-by-Step)]]></title><description><![CDATA[How to Migrate Your GitHub or GitLab Docs to Confluence
Engineering teams often end up with documentation scattered across two places: a docs/ folder in the repo, and a Confluence space that slowly falls behind. This guide shows you how to close that...]]></description><link>https://blog.yamuno.com/how-to-migrate-your-github-or-gitlab-docs-to-confluence-step-by-step</link><guid isPermaLink="true">https://blog.yamuno.com/how-to-migrate-your-github-or-gitlab-docs-to-confluence-step-by-step</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:48:21 GMT</pubDate><enclosure url="https://assets.yamuno.com/images/blog/migrate-github-gitlab-confluence.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-how-to-migrate-your-github-or-gitlab-docs-to-confluence">How to Migrate Your GitHub or GitLab Docs to Confluence</h1>
<p>Engineering teams often end up with documentation scattered across two places: a <code>docs/</code> folder in the repo, and a Confluence space that slowly falls behind. This guide shows you how to close that gap — whether you want a one-time migration, a bulk import, or a fully automated sync that keeps Confluence updated on every push.</p>
<h2 id="heading-why-teams-move-docs-to-confluence">Why Teams Move Docs to Confluence</h2>
<p>Keeping docs in Git is great for developers, but it creates friction for everyone else. Product managers, support teams, and stakeholders usually live in Confluence — not in GitHub. When your README and architecture docs live in a repo, they become invisible to half the company.</p>
<p>At the same time, manually copy-pasting markdown into Confluence is tedious and breaks formatting. The goal is to do this once, correctly, and then keep it in sync automatically.</p>
<hr />
<h2 id="heading-what-you-need">What You Need</h2>
<ul>
<li>Confluence Cloud (any plan)</li>
<li><a target="_blank" href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence?hosting=cloud&amp;tab=overview">Markdown Exporter &amp; Importer for Confluence</a> installed</li>
<li>Your markdown files from GitHub or GitLab (as a ZIP or local clone)</li>
</ul>
<hr />
<h2 id="heading-option-1-import-a-single-file">Option 1 — Import a Single File</h2>
<p>Best for: migrating a single README, architecture doc, or changelog.</p>
<ol>
<li>Open the target Confluence page where you want the content to live</li>
<li>Click the <strong>•••</strong> (More actions) menu → <strong>Markdown Importer &amp; Exporter</strong></li>
<li>Select <strong>Import</strong> and choose your <code>.md</code> or <code>.mdx</code> file</li>
<li>Preview the output, then click <strong>Import</strong></li>
</ol>
<p>Your markdown — including headers, tables, code blocks, and images — is converted to native Confluence content.</p>
<hr />
<h2 id="heading-option-2-bulk-import-from-a-zip-archive">Option 2 — Bulk Import from a ZIP Archive</h2>
<p>Best for: migrating an entire <code>docs/</code> folder from a repo in one shot.</p>
<h3 id="heading-step-1-clone-and-zip-your-docs-folder">Step 1 — Clone and zip your docs folder</h3>
<pre><code class="lang-bash">git <span class="hljs-built_in">clone</span> https://github.com/your-org/your-repo.git
<span class="hljs-built_in">cd</span> your-repo
zip -r docs-export.zip docs/
</code></pre>
<p>For GitLab, it's the same process — or use the GitLab UI: <strong>Repository → Files → docs/ → Download this directory</strong>.</p>
<h3 id="heading-step-2-import-the-zip-into-confluence">Step 2 — Import the ZIP into Confluence</h3>
<ol>
<li>In Confluence, navigate to the space or page where you want the docs imported</li>
<li>Open the <strong>•••</strong> menu → <strong>Markdown Importer &amp; Exporter</strong></li>
<li>Select <strong>Import</strong> and upload your <code>docs-export.zip</code></li>
<li>Review the file tree — the importer shows all files and their resolved hierarchy before importing</li>
</ol>
<h3 id="heading-step-3-confirm-hierarchy">Step 3 — Confirm hierarchy</h3>
<p>The importer converts your folder structure into a Confluence page tree. A structure like:</p>
<pre><code>docs/
  getting-started/
    installation.md
    quick-start.md
  api/
    overview.md
    authentication.md
</code></pre><p>…becomes parent/child pages in Confluence exactly as you'd expect — no manual reorganisation needed.</p>
<h3 id="heading-step-4-handle-images-and-attachments">Step 4 — Handle images and attachments</h3>
<p>If your markdown references local images (e.g. <code>![diagram](./assets/arch.png)</code>), include the assets folder in the ZIP. The importer uploads them as Confluence attachments and rewires the image references automatically.</p>
<hr />
<h2 id="heading-option-3-automate-with-cicd-github-actions-gitlab-ci">Option 3 — Automate with CI/CD (GitHub Actions / GitLab CI)</h2>
<p>Best for: keeping Confluence permanently in sync with your repo. Every push updates the docs without anyone touching Confluence manually.</p>
<h3 id="heading-prerequisites">Prerequisites</h3>
<p>You'll need two things from the Markdown Importer app:</p>
<ol>
<li>In Confluence, go to <strong>Settings → Apps → Markdown Importer for Confluence → API tab</strong></li>
<li>Click <strong>Create New Token</strong>, give it a label (e.g. <code>ci-cd-pipeline</code>), set an expiration, and copy it immediately</li>
<li>On the same page, copy your unique <strong>API endpoint URL</strong> — it looks like:<pre><code>https:<span class="hljs-comment">//your-site.atlassian.net/wiki/apps/&lt;app-id&gt;/&lt;env-id&gt;/webtrigger</span>
</code></pre></li>
<li>Store both as secrets in your repo:<ul>
<li>GitHub: <code>Settings → Secrets</code> → <code>CONFLUENCE_API_ENDPOINT</code> + <code>CONFLUENCE_API_TOKEN</code></li>
<li>GitLab: <code>Settings → CI/CD → Variables</code> → same two variables</li>
</ul>
</li>
</ol>
<p>You'll also need your Confluence <strong>space ID</strong> and <strong>parent page ID</strong> — both are visible in the app's space and page selectors.</p>
<hr />
<h3 id="heading-github-actions-workflow">GitHub Actions Workflow</h3>
<p>Create <code>.github/workflows/sync-docs.yml</code>:</p>
<pre><code class="lang-yaml"><span class="hljs-attr">name:</span> <span class="hljs-string">Sync</span> <span class="hljs-string">docs</span> <span class="hljs-string">to</span> <span class="hljs-string">Confluence</span>

<span class="hljs-attr">on:</span>
  <span class="hljs-attr">push:</span>
    <span class="hljs-attr">branches:</span> [<span class="hljs-string">main</span>]
    <span class="hljs-attr">paths:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">"docs/**"</span>

<span class="hljs-attr">jobs:</span>
  <span class="hljs-attr">sync:</span>
    <span class="hljs-attr">runs-on:</span> <span class="hljs-string">ubuntu-latest</span>
    <span class="hljs-attr">steps:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/checkout@v4</span>

      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Import</span> <span class="hljs-string">README</span> <span class="hljs-string">to</span> <span class="hljs-string">Confluence</span>
        <span class="hljs-attr">run:</span> <span class="hljs-string">|
          CONTENT=$(cat docs/README.md | jq -Rs .)
          curl -X POST "${{ secrets.CONFLUENCE_API_ENDPOINT }}" \
            -H "Authorization: Bearer ${{ secrets.CONFLUENCE_API_TOKEN }}" \
            -H "Content-Type: application/json" \
            -d "{\"spaceId\":\"DOCS\",\"parentId\":\"123456789\",\"pageTitle\":\"README\",\"content\":$CONTENT,\"overwrite\":true}"
</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Import</span> <span class="hljs-string">API</span> <span class="hljs-string">docs</span>
        <span class="hljs-attr">run:</span> <span class="hljs-string">|
          CONTENT=$(cat docs/api.md | jq -Rs .)
          curl -X POST "${{ secrets.CONFLUENCE_API_ENDPOINT }}" \
            -H "Authorization: Bearer ${{ secrets.CONFLUENCE_API_TOKEN }}" \
            -H "Content-Type: application/json" \
            -d "{\"spaceId\":\"DOCS\",\"parentId\":\"123456789\",\"pageTitle\":\"API Reference\",\"content\":$CONTENT,\"overwrite\":true}"</span>
</code></pre>
<p>The API sends one page per request as JSON — add a step per file you want to keep in sync. The workflow only triggers when files under <code>docs/</code> change.</p>
<hr />
<h3 id="heading-gitlab-ci-pipeline">GitLab CI Pipeline</h3>
<p>Add to <code>.gitlab-ci.yml</code>:</p>
<pre><code class="lang-yaml"><span class="hljs-attr">stages:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">deploy-docs</span>

<span class="hljs-attr">deploy-confluence:</span>
  <span class="hljs-attr">stage:</span> <span class="hljs-string">deploy-docs</span>
  <span class="hljs-attr">only:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-string">main</span>
  <span class="hljs-attr">script:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-string">|
      curl -X POST "$CONFLUENCE_API_ENDPOINT" \
        -H "Authorization: Bearer $CONFLUENCE_API_TOKEN" \
        -H "Content-Type: application/json" \
        -d "{
          \"spaceId\": \"DOCS\",
          \"parentId\": \"123456789\",
          \"pageTitle\": \"API Documentation\",
          \"content\": $(cat docs/api.md | jq -Rs .),
          \"overwrite\": true
        }"</span>
</code></pre>
<p>Store <code>CONFLUENCE_API_ENDPOINT</code>, <code>CONFLUENCE_API_TOKEN</code> as masked CI/CD variables in GitLab.</p>
<hr />
<h2 id="heading-tips-for-a-clean-migration">Tips for a Clean Migration</h2>
<p><strong>Organise before you import.</strong> Rename files with a numeric prefix if you care about order (<code>01-overview.md</code>, <code>02-installation.md</code>). The importer preserves file order when importing via the UI.</p>
<p><strong>Handle frontmatter.</strong> If your docs use YAML frontmatter (like many Docusaurus or MkDocs setups), the importer reads <code>title</code> from frontmatter and uses it as the Confluence page title. No need to strip it out.</p>
<p><strong>Check internal links.</strong> Links between pages (e.g. <code>[see here](../api/overview.md)</code>) are resolved relative to the page hierarchy during import. Cross-check a few after importing to confirm they resolve correctly.</p>
<p><strong>Run a test import first.</strong> Pick a small subfolder, import it into a sandbox space, and confirm the output looks right before running the full migration.</p>
<hr />
<h2 id="heading-getting-started">Getting Started</h2>
<p>Install <a target="_blank" href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence?hosting=cloud&amp;tab=overview">Markdown Exporter &amp; Importer for Confluence</a> from the Atlassian Marketplace — it's free to try.</p>
<p>For the CI/CD approach, check out the <a target="_blank" href="/docs/markdown-importer-for-confluence/rest-api">REST API documentation</a> for the full list of parameters, authentication details, and code examples in Node.js, Python, and Go.</p>
<hr />
<p><em>Questions or edge cases? Reach out via our <a target="_blank" href="https://yamuno.atlassian.net/servicedesk/customer/portals">support portal</a> — we're happy to help with migration planning.</em></p>
]]></content:encoded></item><item><title><![CDATA[Markdown Importer v6.0.0 is Here – Early Conflict Detection, Performance Updates & UI Enhancements!]]></title><description><![CDATA[Markdown Importer v6.0.0 is Here 🚀
We're excited to announce the release of Markdown Importer for Confluence v6.0.0! This update brings powerful new features, performance improvements, and a refreshed interface to make importing Markdown files into ...]]></description><link>https://blog.yamuno.com/markdown-importer-v600-is-here-early-conflict-detection-performance-updates-ui-enhancements</link><guid isPermaLink="true">https://blog.yamuno.com/markdown-importer-v600-is-here-early-conflict-detection-performance-updates-ui-enhancements</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:48:19 GMT</pubDate><enclosure url="https://marketplace.atlassian.com/product-listing/files/06a1e19e-8602-4cd3-9c0b-5fc2bbc9538b?width=1840&amp;height=900" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-markdown-importer-v600-is-here">Markdown Importer v6.0.0 is Here 🚀</h1>
<p>We're excited to announce the release of <a target="_blank" href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence?hosting=cloud&amp;tab=overview"><strong>Markdown Importer for Confluence v6.0.0</strong></a>! This update brings powerful new features, performance improvements, and a refreshed interface to make importing Markdown files into <a target="_blank" href="https://www.atlassian.com/software/confluence">Confluence</a> easier and more reliable than ever.</p>
<h2 id="heading-whats-new-in-v600">🌟 What's New in v6.0.0</h2>
<h3 id="heading-early-conflict-detection">🔍 Early Conflict Detection</h3>
<p>One of the biggest challenges when importing files into Confluence is dealing with duplicate names for pages and folders. With v6.0.0, we've introduced <strong>early conflict detection</strong> to identify these issues before they cause problems. You'll now be able to:</p>
<ul>
<li>Detect conflicting files and folders before importing</li>
<li>Choose whether to skip, or resolve conflicts directly</li>
<li>Save time and avoid messy post-import cleanups</li>
</ul>
<p><img src="https://marketplace.atlassian.com/product-listing/files/06a1e19e-8602-4cd3-9c0b-5fc2bbc9538b?width=1840&amp;height=900" alt="Folder Hierarchy Import" /></p>
<h3 id="heading-performance-updates">⚡ Performance Updates</h3>
<p>Large imports can now be processed faster and more efficiently. We've optimized our backend logic to handle heavy workloads, so whether you're importing a small set of documents or an entire knowledge base, you'll experience smoother and quicker performance.</p>
<h3 id="heading-ui-enhancements">🎨 UI Enhancements</h3>
<p>We've refreshed the user interface to make the importing process more intuitive. Cleaner layouts, improved navigation, and a more modern look ensure that you can focus on your content without friction.</p>
<p><img src="https://marketplace.atlassian.com/product-listing/files/26d83e5c-2493-4603-bba6-52cf7bef5f79?width=1840&amp;height=900" alt="Preview Interface" /></p>
<h2 id="heading-why-this-matters">💡 Why This Matters</h2>
<p><a target="_blank" href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence?hosting=cloud&amp;tab=overview">Markdown Importer</a> is designed to help teams seamlessly bring their existing documentation into Confluence. With these improvements, you'll spend less time fixing issues and more time collaborating on what matters most. Check out our <a target="_blank" href="/docs/markdown-importer-for-confluence">documentation</a> to learn more about all the features.</p>
<h2 id="heading-try-it-now">🔗 Try It Now</h2>
<p>Upgrade to the latest version and experience the improvements yourself:</p>
<p>👉 <a target="_blank" href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence?hosting=cloud&amp;tab=overview">Markdown Importer for Confluence on Atlassian Marketplace</a></p>
<p>We'd love to hear your feedback! Reach out via our <a target="_blank" href="https://yamuno.atlassian.net/servicedesk/customer/portals">support channel</a>. Your input helps us continue improving the app to better fit your workflows.</p>
<p>Want to see the full changelog? Visit our <a target="_blank" href="/docs/markdown-importer-for-confluence/release-notes">release notes</a> page.</p>
<p>✅ Ready to import smarter, faster, and more reliably?</p>
<p><strong><a target="_blank" href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence?hosting=cloud&amp;tab=overview">Update to Markdown Importer v6.0.0 today!</a></strong></p>
]]></content:encoded></item><item><title><![CDATA[New Features in Markdown Importer for Confluence – Unlimited Bulk Import, Hierarchy Support, and More!]]></title><description><![CDATA[🚀 Big Update for Markdown Importer for Confluence!
We’ve just rolled out a major upgrade to make importing your Markdown content into Confluence faster, smarter, and more powerful than ever.
✨ What’s New
✅ Unlimited Bulk Import
Bring in as many file...]]></description><link>https://blog.yamuno.com/new-features-in-markdown-importer-for-confluence-unlimited-bulk-import-hierarchy-support-and-more</link><guid isPermaLink="true">https://blog.yamuno.com/new-features-in-markdown-importer-for-confluence-unlimited-bulk-import-hierarchy-support-and-more</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:48:17 GMT</pubDate><enclosure url="https://assets.yamuno.com/images/blog/markdown-importer/update-5.2.0.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-big-update-for-markdown-importer-for-confluence">🚀 Big Update for Markdown Importer for Confluence!</h2>
<p>We’ve just rolled out a major upgrade to make importing your Markdown content into Confluence faster, smarter, and more powerful than ever.</p>
<h3 id="heading-whats-new">✨ What’s New</h3>
<h4 id="heading-unlimited-bulk-import">✅ Unlimited Bulk Import</h4>
<p>Bring in as many files as you need — all at once.</p>
<h4 id="heading-folder-amp-file-hierarchy-support">✅ Folder &amp; File Hierarchy Support</h4>
<p>Upload ZIP files while preserving your original folder and file structure.</p>
<h4 id="heading-attachment-upload-support">✅ Attachment Upload Support</h4>
<p>Automatically include all attachments referenced in your files.</p>
<h4 id="heading-multiple-access-modes">✅ Multiple Access Modes</h4>
<p>Choose between <strong>global</strong> or <strong>per-page</strong> access controls for better security and collaboration.</p>
<p>Whether you’re migrating projects, organizing documentation, or collaborating at scale, this update makes it seamless.</p>
<p>🔗 <strong>Check it out here:</strong>
<a target="_blank" href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence?hosting=cloud&amp;tab=overview">Markdown Importer for Confluence – Atlassian Marketplace</a></p>
<p>📚 Read the docs: <a target="_blank" href="/docs/markdown-importer-for-confluence">Markdown Importer for Confluence Documentation</a></p>
<hr />
]]></content:encoded></item><item><title><![CDATA[Introducing REST API for Markdown Importer – Automate Your Documentation Workflow!]]></title><description><![CDATA[Introducing REST API for Markdown Importer 🚀
We're thrilled to announce a game-changing addition to Markdown Importer for Confluence – a powerful REST API that unlocks automation and integration possibilities for your documentation workflow!
Say goo...]]></description><link>https://blog.yamuno.com/introducing-rest-api-for-markdown-importer-automate-your-documentation-workflow</link><guid isPermaLink="true">https://blog.yamuno.com/introducing-rest-api-for-markdown-importer-automate-your-documentation-workflow</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:48:15 GMT</pubDate><enclosure url="https://marketplace.atlassian.com/product-listing/files/cbfd51ed-8e6a-468b-96ed-86aa4b949dee?width=1840&amp;height=900" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introducing-rest-api-for-markdown-importer">Introducing REST API for Markdown Importer 🚀</h1>
<p>We're thrilled to announce a game-changing addition to <a target="_blank" href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence?hosting=cloud&amp;tab=overview"><strong>Markdown Importer for Confluence</strong></a> – a powerful <strong>REST API</strong> that unlocks automation and integration possibilities for your documentation workflow!</p>
<p>Say goodbye to manual imports and hello to seamless, programmatic documentation updates directly from your CI/CD pipeline, external applications, or custom automation scripts.</p>
<p><img src="https://marketplace.atlassian.com/product-listing/files/cbfd51ed-8e6a-468b-96ed-86aa4b949dee?width=1840&amp;height=900" alt="API Token Management" /></p>
<h2 id="heading-whats-new-in-v640">🌟 What's New in v6.4.0</h2>
<p>The new REST API transforms how you manage Confluence documentation by enabling <strong>programmatic markdown imports</strong> from anywhere. Whether you're syncing docs from GitHub, deploying from GitLab CI/CD, or building custom integrations, the API makes it effortless.</p>
<h3 id="heading-key-features">Key Features</h3>
<p><strong>🔐 Secure Token Management</strong>
Generate and manage API tokens with JWT-based authentication, fine-grained expiration control (1-30 days), and the ability to create up to 50 tokens for different environments.</p>
<p><strong>🚀 Simple HTTP Requests</strong>
Import markdown content with a straightforward POST request – no complex setup required.</p>
<p><strong>🔄 Smart Conflict Handling</strong>
Choose to create new pages or update existing ones with built-in overwrite support and clear error handling.</p>
<p><strong>📚 Comprehensive Documentation</strong>
From getting started guides to production best practices, we've got you covered with complete API documentation, code examples in multiple languages, and CI/CD workflow templates.</p>
<h2 id="heading-perfect-for">💡 Perfect For</h2>
<p><strong>CI/CD Pipelines</strong>
Automatically sync documentation with every code push. Keep your Confluence pages updated alongside your codebase without manual intervention.</p>
<p><strong>Documentation Migration</strong>
Moving from another platform? Script your migration and import hundreds of markdown files programmatically with consistent formatting.</p>
<p><strong>Automated Updates</strong>
Trigger documentation updates from external systems, webhooks, or scheduled jobs. Perfect for keeping release notes, changelogs, and API docs fresh.</p>
<p><strong>Custom Workflows</strong>
Build exactly the integration you need – whether it's generating docs from code comments, syncing from multiple sources, or creating dynamic content.</p>
<h2 id="heading-why-it-matters">🎯 Why It Matters</h2>
<p>Documentation should evolve with your product, not lag behind it. The REST API eliminates the manual bottleneck, letting you:</p>
<p>✅ <strong>Automate</strong> repetitive import tasks
✅ <strong>Synchronize</strong> docs with code changes automatically
✅ <strong>Scale</strong> from single files to enterprise-wide migrations
✅ <strong>Integrate</strong> with your existing tools and workflows</p>
<h2 id="heading-ready-to-get-started">📖 Ready to Get Started?</h2>
<p>We've prepared comprehensive documentation to help you integrate the API into your workflow:</p>
<p>👉 <strong><a target="_blank" href="/docs/markdown-importer-for-confluence/rest-api">View Complete API Documentation</a></strong></p>
<p>Our documentation includes:</p>
<ul>
<li>Quick start guide with step-by-step token setup</li>
<li>Complete API reference with all endpoints and parameters</li>
<li>Ready-to-use code examples in cURL, Node.js, Python, Go, and more</li>
<li>CI/CD workflow templates for GitHub Actions and GitLab</li>
<li>Production-ready best practices and troubleshooting tips</li>
</ul>
<h2 id="heading-try-it-now">🎉 Try It Now</h2>
<p>The REST API is available now for all <a target="_blank" href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence?hosting=cloud&amp;tab=overview">Markdown Importer for Confluence</a> users!</p>
<p>✅ <strong>Included with your license</strong> – No additional cost
✅ <strong>Available during trial</strong> – Test it before you buy
✅ <strong>Production-ready</strong> – Built for scale and reliability</p>
<h2 id="heading-we-want-your-feedback">💬 We Want Your Feedback</h2>
<p>We'd love to hear how you're using the REST API! Share your use cases, integrations, or feedback:</p>
<ul>
<li>📧 <a target="_blank" href="https://yamuno.atlassian.net/servicedesk/customer/portals">Contact Support</a></li>
<li>📝 <a target="_blank" href="/docs/markdown-importer-for-confluence/release-notes">View Full Changelog</a></li>
</ul>
<p><strong><a target="_blank" href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence?hosting=cloud&amp;tab=overview">Get Markdown Importer for Confluence</a></strong> and start automating your documentation workflow today!</p>
<hr />
<p><em>Ready to automate your documentation? The REST API is waiting for you!</em> 🚀</p>
]]></content:encoded></item><item><title><![CDATA[Introducing Markdown Exporter – Now Part of Markdown Importer for Confluence (v7.0.0)]]></title><description><![CDATA[🚀 Introducing Markdown Exporter – Now Part of Markdown Importer for Confluence (v7.0.0)
We’re excited to announce v7.0.0 of Markdown Importer for Confluence, now featuring the all-new Markdown Exporter! 🎉
With this update, the app transitions from ...]]></description><link>https://blog.yamuno.com/introducing-markdown-exporter-now-part-of-markdown-importer-for-confluence-v700</link><guid isPermaLink="true">https://blog.yamuno.com/introducing-markdown-exporter-now-part-of-markdown-importer-for-confluence-v700</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:48:13 GMT</pubDate><enclosure url="https://marketplace.atlassian.com/product-listing/files/9a1904d6-deb4-47e4-8e0e-9125f5ebcae3?width=1840&amp;height=900" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introducing-markdown-exporter-now-part-of-markdown-importer-for-confluence-v700">🚀 Introducing Markdown Exporter – Now Part of Markdown Importer for Confluence (v7.0.0)</h1>
<p>We’re excited to announce <strong>v7.0.0</strong> of <strong>Markdown Importer for Confluence</strong>, now featuring the <strong>all-new Markdown Exporter</strong>! 🎉</p>
<p>With this update, the app transitions from being <strong>Markdown Import-only</strong> to a full <strong>two-way Markdown solution</strong> — enabling teams to <strong>import Markdown files into Confluence</strong> and <strong>export Confluence pages back to clean Markdown</strong>. 💪</p>
<p>This addition makes documentation workflows <strong>more flexible, efficient, and automation-friendly</strong>, whether you’re syncing content with external tools, managing backups, or integrating with CI/CD pipelines.</p>
<h2 id="heading-key-features-of-the-exporter">✨ Key Features of the Exporter</h2>
<h3 id="heading-export-confluence-pages-to-markdown">📤 Export Confluence Pages to Markdown</h3>
<p>Easily export Confluence pages to <strong>structured Markdown files</strong>, preserving <strong>page hierarchy, attachments, and formatting</strong> for smooth version control and external documentation workflows. 🗂️</p>
<h3 id="heading-import-markdown-files-existing-feature">📥 Import Markdown Files (Existing Feature)</h3>
<p>Continue to import Markdown files with <strong>seamless bulk support</strong>, <strong>preserved folder structures</strong>, and <strong>accurate formatting</strong>. ⚡</p>
<h3 id="heading-automation-amp-rest-api-support">🔗 Automation &amp; REST API Support</h3>
<p>Use <strong>REST API</strong> with <strong>JWT authentication</strong> and <strong>expiring API tokens</strong> to automate imports and exports. Built-in conflict detection ensures your workflows remain smooth. 🤖</p>
<h3 id="heading-user-friendly-interface">🌙 User-Friendly Interface</h3>
<p>Bulk operations are simple with <strong>dark mode</strong> and an <strong>intuitive UI</strong>, ideal for large-scale documentation projects. 🖥️</p>
<h2 id="heading-why-teams-love-it">💡 Why Teams Love It</h2>
<ul>
<li><strong>⏱ Save Time:</strong> No manual copy-paste between Markdown and Confluence</li>
<li><strong>✅ Maintain Accuracy:</strong> Formatting, attachments, and hierarchy remain intact</li>
<li><strong>🚀 Boost Productivity:</strong> Integrate with automated workflows, CI/CD, and external tools</li>
<li><strong>⚡ Designed for Fast-Moving Teams:</strong> Lightweight, efficient, and reliable</li>
</ul>
<h2 id="heading-get-started-today">🎯 Get Started Today</h2>
<p>Experience the power of <strong>Markdown Exporter &amp; Importer for Confluence (v7.0.0)</strong>. Import Markdown, export Confluence pages, and automate your documentation workflows with ease.</p>
<p><a target="_blank" href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence?hosting=cloud&amp;tab=overview">👉 Get it on the Atlassian Marketplace</a></p>
]]></content:encoded></item><item><title><![CDATA[Switching LaTeX Math Apps in Confluence? We Made It Painless.]]></title><description><![CDATA[Switching LaTeX Math Apps in Confluence? We Made It Painless.
If you've ever tried to switch from one LaTeX math app to another in Confluence, you know the pain. Hundreds of pages, thousands of equations, all locked into a vendor-specific format. Man...]]></description><link>https://blog.yamuno.com/switching-latex-math-apps-in-confluence-we-made-it-painless</link><guid isPermaLink="true">https://blog.yamuno.com/switching-latex-math-apps-in-confluence-we-made-it-painless</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:48:11 GMT</pubDate><enclosure url="https://assets.yamuno.com/latex/latex/highlights/Migration%20Support.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-switching-latex-math-apps-in-confluence-we-made-it-painless">Switching LaTeX Math Apps in Confluence? We Made It Painless.</h1>
<p>If you've ever tried to switch from one LaTeX math app to another in Confluence, you know the pain. Hundreds of pages, thousands of equations, all locked into a vendor-specific format. Manually re-entering every formula is not an option.</p>
<p>That's why we built <strong>Migration Support</strong> directly into <a target="_blank" href="https://marketplace.atlassian.com/apps/1602849193/latex-math-for-confluence-formulas-equations?hosting=cloud&amp;tab=overview">LaTeX Math for Confluence</a>.</p>
<h2 id="heading-the-problem">The Problem</h2>
<p>Teams across engineering, academia, and finance rely on LaTeX equations in their Confluence documentation. But what happens when your current math app doesn't cut it anymore? Maybe the rendering is slow. Maybe it lacks features you need. Maybe the pricing changed.</p>
<p>Whatever the reason, you're stuck. Your formulas are embedded in a proprietary macro format, scattered across dozens of spaces and hundreds of pages. Moving to a new app means either:</p>
<ol>
<li>Manually finding and re-entering every single equation, or</li>
<li>Living with an app that no longer meets your needs.</li>
</ol>
<p>Neither is acceptable.</p>
<h2 id="heading-the-solution-one-click-migration">The Solution: One-Click Migration</h2>
<p>LaTeX Math for Confluence now includes a built-in migration tool that automatically finds, converts, and replaces equations from other LaTeX math apps across your entire Confluence instance.</p>
<p>Here's how it works:</p>
<h3 id="heading-step-1-choose-your-source-app">Step 1: Choose Your Source App</h3>
<p>Open the migration tab in the app's configuration settings. Select the app you're migrating from. We currently support:</p>
<ul>
<li><strong>LaTeX and MathJax</strong> by The Plugin People</li>
<li><strong>LaTeX Math</strong> by Appfire</li>
<li><strong>LaTeX Math Lite</strong> by Appfire</li>
<li><strong>LaTeX Math (Easy Math)</strong> by Narva Software</li>
</ul>
<p>Need to migrate from an app not on the list? The <strong>Advanced tab</strong> lets you enter any macro name manually.</p>
<h3 id="heading-step-2-search-your-spaces">Step 2: Search Your Spaces</h3>
<p>Select a Confluence space to scan, or search across your entire instance. The tool uses Confluence's query language under the hood to find every page that contains equations from your source app.</p>
<p>Results are displayed in a clear table showing the page title, space, and last modified date so you know exactly what you're working with.</p>
<h3 id="heading-step-3-migrate">Step 3: Migrate</h3>
<p>Select the pages you want to migrate and hit the button. The tool handles the rest:</p>
<ul>
<li>Extracts the LaTeX formula from the old macro format</li>
<li>Converts it to the LaTeX Math for Confluence format</li>
<li>Preserves alignment settings (left, center, right)</li>
<li>Maps inline equations to inline macros and block equations to block macros</li>
<li>Updates the page with proper version tracking</li>
</ul>
<p>Every migration is recorded in the page's version history, so you always have a clear audit trail.</p>
<h2 id="heading-what-makes-this-different">What Makes This Different</h2>
<h3 id="heading-it-handles-the-format-chaos">It Handles the Format Chaos</h3>
<p>Different apps store LaTeX in wildly different ways. Some use XML parameters, others use rich text bodies, others use ADF extensions. Some wrap formulas in CDATA sections, others encode them as plain parameters.</p>
<p>Our migration engine understands all of these formats. It extracts your LaTeX from whatever structure the source app used and converts it cleanly.</p>
<h3 id="heading-its-safe">It's Safe</h3>
<p>Migration doesn't delete your original content. Confluence's version history means you can always roll back any page to its pre-migration state. The tool also reports success and failure counts for every batch, so you know immediately if something needs attention.</p>
<h3 id="heading-it-scales">It Scales</h3>
<p>Whether you have 10 pages or 10,000, the migration tool handles pagination and batch processing. It works through your pages methodically, updating each one and moving on, without overwhelming the Confluence API.</p>
<h3 id="heading-its-built-for-real-teams">It's Built for Real Teams</h3>
<p>We didn't build this for a demo. We built it because real users asked for it. Teams running thousands of equations across enterprise Confluence instances need a way to switch apps without losing a week of productivity.</p>
<h2 id="heading-advanced-mode">Advanced Mode</h2>
<p>For power users and admins dealing with custom or less common apps, the Advanced tab offers full control:</p>
<ul>
<li>Enter any macro name to search for</li>
<li>Filter by body content</li>
<li>Target specific spaces</li>
<li>Handle edge cases that the standard wizard might not cover</li>
</ul>
<h2 id="heading-get-started">Get Started</h2>
<p>Migration support is available now in <a target="_blank" href="https://marketplace.atlassian.com/apps/1602849193/latex-math-for-confluence-formulas-equations?hosting=cloud&amp;tab=overview">LaTeX Math for Confluence</a>. Open your app configuration, navigate to the <strong>"Migrate from other apps"</strong> tab, and run your first search. You'll see exactly how many equations you can migrate before committing to anything.</p>
<p>No manual work. No lost formulas. No downtime.</p>
<p><strong>Your equations deserve better. Move them in minutes, not months.</strong></p>
<hr />
<p><em>LaTeX Math for Confluence supports both KaTeX and MathJax rendering, inline and block equations, chemical formulas, physics notation, and more. Available on the <a target="_blank" href="https://marketplace.atlassian.com/apps/1602849193/latex-math-for-confluence-formulas-equations?hosting=cloud&amp;tab=overview">Atlassian Marketplace</a>.</em></p>
]]></content:encoded></item><item><title><![CDATA[Beautiful Mathematical Equations in Confluence – Introducing LaTeX Math for Confluence!]]></title><description><![CDATA[Introducing LaTeX Math for Confluence
We're excited to announce the launch of LaTeX Math for Confluence! Finally, you can create professional, publication-quality mathematical equations directly in your Confluence documentation with the power and pre...]]></description><link>https://blog.yamuno.com/beautiful-mathematical-equations-in-confluence-introducing-latex-math-for-confluence</link><guid isPermaLink="true">https://blog.yamuno.com/beautiful-mathematical-equations-in-confluence-introducing-latex-math-for-confluence</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:48:09 GMT</pubDate><enclosure url="https://assets.yamuno.com/latex/latex/highlights/highlgiht.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introducing-latex-math-for-confluence">Introducing LaTeX Math for Confluence</h1>
<p>We're excited to announce the launch of <a target="_blank" href="https://marketplace.atlassian.com/apps/1602849193/latex-math-for-confluence-formulas-equations?hosting=cloud&amp;tab=overview"><strong>LaTeX Math for Confluence</strong></a>! Finally, you can create professional, publication-quality mathematical equations directly in your <a target="_blank" href="https://www.atlassian.com/software/confluence">Confluence</a> documentation with the power and precision of LaTeX.</p>
<h2 id="heading-what-makes-latex-math-for-confluence-special">🌟 What Makes LaTeX Math for Confluence Special</h2>
<h3 id="heading-professional-math-rendering">🧮 Professional Math Rendering</h3>
<p>Create beautiful mathematical equations using the industry-standard LaTeX syntax, powered by KaTeX for fast, crisp rendering:</p>
<ul>
<li><strong>Comprehensive LaTeX Support</strong>: Fractions, matrices, integrals, summations, Greek symbols, and more</li>
<li><strong>Crystal-Clear Output</strong>: High-quality rendering that looks perfect at any size</li>
<li><strong>Publication-Ready</strong>: Professional typesetting suitable for technical documentation, research papers, and educational materials</li>
</ul>
<p><img src="https://assets.yamuno.com/latex/latex/highlights/highlgiht.jpg" alt="LaTeX Math Editor" /></p>
<h3 id="heading-live-preview-editor">⚡ Live Preview Editor</h3>
<p>See your equations come to life as you type:</p>
<ul>
<li><strong>Real-Time Rendering</strong>: Watch your LaTeX code transform into beautiful equations instantly</li>
<li><strong>Error Detection</strong>: Catch syntax errors before saving</li>
<li><strong>Instant Feedback</strong>: No more guessing how your equation will look</li>
</ul>
<p><img src="https://assets.yamuno.com/latex/latex/highlights/1.jpg" alt="Live Preview" /></p>
<h3 id="heading-flexible-macro-options">📝 Flexible Macro Options</h3>
<p>Choose the perfect format for your equations:</p>
<ul>
<li><strong>Inline Macros</strong>: Embed equations within text paragraphs (like (x^2 + y^2 = r^2))</li>
<li><strong>Block Macros</strong>: Display equations prominently on their own line with proper spacing</li>
<li><strong>Easy Insertion</strong>: Type <code>/latex</code> or <code>/math</code> to insert a macro anywhere on your page</li>
</ul>
<h3 id="heading-enterprise-grade-security">🔒 Enterprise-Grade Security</h3>
<p>Built on Atlassian Forge for maximum security and reliability:</p>
<ul>
<li><strong>Runs on Atlassian Infrastructure</strong>: No external dependencies or third-party servers</li>
<li><strong>Access Control</strong>: Configure who can view and edit equations</li>
<li><strong>User Whitelisting</strong>: Restrict equation editing to specific users or groups</li>
<li><strong>Permission Management</strong>: Granular control over macro usage</li>
</ul>
<h3 id="heading-dark-mode-support">🌗 Dark Mode Support</h3>
<p>Perfect viewing experience in any environment:</p>
<ul>
<li><strong>Automatic Theme Detection</strong>: Equations adapt to your Confluence theme</li>
<li><strong>Comfortable Viewing</strong>: Optimized contrast for both light and dark modes</li>
<li><strong>Consistent Experience</strong>: Professional appearance regardless of theme preference</li>
</ul>
<h3 id="heading-usage-analytics">📊 Usage Analytics</h3>
<p>Track and monitor equation usage across your instance:</p>
<ul>
<li><strong>Usage Statistics</strong>: See how many equations are being created</li>
<li><strong>Adoption Metrics</strong>: Track macro usage over time</li>
<li><strong>Administrative Insights</strong>: Understand how your team uses mathematical documentation</li>
</ul>
<h2 id="heading-why-your-team-needs-this">💡 Why Your Team Needs This</h2>
<p><a target="_blank" href="https://marketplace.atlassian.com/apps/1602849193/latex-math-for-confluence-formulas-equations?hosting=cloud&amp;tab=overview">LaTeX Math for Confluence</a> solves the challenge of documenting technical and mathematical concepts. Instead of using screenshots, external equation editors, or compromising with plain text, you get:</p>
<h3 id="heading-perfect-for-education">🎓 Perfect for Education</h3>
<ul>
<li><strong>Course Materials</strong>: Create lecture notes, problem sets, and study guides</li>
<li><strong>Research Documentation</strong>: Document mathematical proofs and research findings</li>
<li><strong>Student Collaboration</strong>: Enable students to contribute mathematical content</li>
<li><strong>Assignment Templates</strong>: Build reusable templates for mathematical coursework</li>
</ul>
<h3 id="heading-ideal-for-technical-teams">🔬 Ideal for Technical Teams</h3>
<ul>
<li><strong>Engineering Documentation</strong>: Document algorithms, formulas, and technical specifications</li>
<li><strong>Data Science</strong>: Share statistical models, machine learning equations, and data analysis</li>
<li><strong>Physics &amp; Chemistry</strong>: Create scientific documentation with complex equations</li>
<li><strong>Architecture Diagrams</strong>: Include mathematical specifications in design documents</li>
</ul>
<h3 id="heading-enhanced-knowledge-sharing">📚 Enhanced Knowledge Sharing</h3>
<ul>
<li><strong>Searchable Content</strong>: Unlike images, LaTeX equations remain searchable and accessible</li>
<li><strong>Easy Updates</strong>: Edit equations directly without recreating images</li>
<li><strong>Version Control</strong>: Track changes to equations just like any other Confluence content</li>
<li><strong>Copy &amp; Paste</strong>: Users can copy LaTeX code for reuse in other documents</li>
</ul>
<h2 id="heading-common-use-cases">🚀 Common Use Cases</h2>
<h3 id="heading-research-amp-development">Research &amp; Development</h3>
<ul>
<li><strong>Technical Specifications</strong>: Document mathematical models and algorithms</li>
<li><strong>Research Papers</strong>: Collaborate on technical documentation before publication</li>
<li><strong>Patent Documentation</strong>: Include precise mathematical descriptions</li>
<li><strong>Scientific Reports</strong>: Create comprehensive technical reports with proper notation</li>
</ul>
<h3 id="heading-education-amp-training">Education &amp; Training</h3>
<ul>
<li><strong>Course Materials</strong>: Build complete courses with integrated mathematical content</li>
<li><strong>Tutorial Documentation</strong>: Create step-by-step mathematical tutorials</li>
<li><strong>Reference Guides</strong>: Maintain equation libraries and formula sheets</li>
<li><strong>Practice Problems</strong>: Share problem sets with solutions</li>
</ul>
<h3 id="heading-engineering-amp-data-science">Engineering &amp; Data Science</h3>
<ul>
<li><strong>Algorithm Documentation</strong>: Explain complex algorithms with mathematical precision</li>
<li><strong>Statistical Analysis</strong>: Document statistical methods and data models</li>
<li><strong>Machine Learning</strong>: Share model architectures and optimization functions</li>
<li><strong>Performance Metrics</strong>: Define KPIs and measurement formulas</li>
</ul>
<h3 id="heading-finance-amp-quantitative-analysis">Finance &amp; Quantitative Analysis</h3>
<ul>
<li><strong>Financial Models</strong>: Document pricing models and risk calculations</li>
<li><strong>Investment Strategies</strong>: Share quantitative trading algorithms</li>
<li><strong>Economic Analysis</strong>: Present economic models and forecasts</li>
<li><strong>Actuarial Documentation</strong>: Create actuarial tables and calculations</li>
</ul>
<h2 id="heading-get-started-today">🔗 Get Started Today</h2>
<p>Ready to bring professional mathematical notation to your Confluence workspace?</p>
<p>👉 <a target="_blank" href="https://marketplace.atlassian.com/apps/1602849193/latex-math-for-confluence-formulas-equations?hosting=cloud&amp;tab=overview">Install LaTeX Math for Confluence</a></p>
<h3 id="heading-quick-start-guide">Quick Start Guide</h3>
<ol>
<li><strong>Install the App</strong>: Add LaTeX Math from the Atlassian Marketplace</li>
<li><strong>Insert a Macro</strong>: Type <code>/latex</code> or <code>/math</code> on any Confluence page</li>
<li><strong>Choose Your Style</strong>: Select inline (within text) or block (standalone) macro</li>
<li><strong>Write LaTeX</strong>: Enter your LaTeX equation code</li>
<li><strong>See It Live</strong>: Watch the real-time preview as you type</li>
<li><strong>Save &amp; Share</strong>: Publish your page with beautiful mathematical equations</li>
</ol>
<h3 id="heading-example-latex-snippets-to-try">Example LaTeX Snippets to Try</h3>
<p><strong>Quadratic Formula:</strong></p>
<pre><code class="lang-latex">x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
</code></pre>
<p><strong>Pythagorean Theorem:</strong></p>
<pre><code class="lang-latex">a^2 + b^2 = c^2
</code></pre>
<p><strong>Integral:</strong></p>
<pre><code class="lang-latex">\int_{a}^{b} f(x) \, dx
</code></pre>
<p><strong>Matrix:</strong></p>
<pre><code class="lang-latex">\begin{bmatrix}
a &amp; b \\
c &amp; d
\end{bmatrix}
</code></pre>
<h2 id="heading-learn-more">📚 Learn More</h2>
<p>Explore our comprehensive documentation to master all features:</p>
<p>👉 <a target="_blank" href="/docs/latex-math-for-confluence">LaTeX Math for Confluence Documentation</a></p>
<h3 id="heading-need-help">Need Help?</h3>
<ul>
<li><strong>Quick Reference</strong>: Browse our LaTeX syntax guide in the documentation</li>
<li><strong>Support Team</strong>: Reach out via our <a target="_blank" href="https://yamuno.atlassian.net/servicedesk/customer/portals">support portal</a></li>
<li><strong>FAQs</strong>: Check our documentation for common questions and solutions</li>
</ul>
<h2 id="heading-transform-your-technical-documentation">✨ Transform Your Technical Documentation</h2>
<p>Whether you're documenting complex algorithms, teaching advanced mathematics, or sharing scientific research, LaTeX Math for Confluence gives you the tools to communicate with precision and clarity.</p>
<p><strong><a target="_blank" href="https://marketplace.atlassian.com/apps/1602849193/latex-math-for-confluence-formulas-equations?hosting=cloud&amp;tab=overview">Start creating beautiful equations today!</a></strong></p>
<hr />
<p><em>Have questions or feedback? We'd love to hear from you via our <a target="_blank" href="https://yamuno.atlassian.net/servicedesk/customer/portals">support portal</a>. Your input helps us continue improving our apps to better serve your team's needs.</em></p>
]]></content:encoded></item><item><title><![CDATA[How Data Science Teams Document ML Models in Confluence]]></title><description><![CDATA[How Data Science Teams Document ML Models in Confluence
Most data science teams have the same documentation problem: the math lives somewhere else.
Loss functions in a Jupyter notebook. Model architecture equations in a Google Doc. Evaluation metrics...]]></description><link>https://blog.yamuno.com/how-data-science-teams-document-ml-models-in-confluence</link><guid isPermaLink="true">https://blog.yamuno.com/how-data-science-teams-document-ml-models-in-confluence</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:48:07 GMT</pubDate><enclosure url="https://assets.yamuno.com/images/blog/latex-ml-docs.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-how-data-science-teams-document-ml-models-in-confluence">How Data Science Teams Document ML Models in Confluence</h1>
<p>Most data science teams have the same documentation problem: the math lives somewhere else.</p>
<p>Loss functions in a Jupyter notebook. Model architecture equations in a Google Doc. Evaluation metrics in a Slack thread. Confluence ends up as a project tracker rather than a real knowledge base — because there was no good way to write math in it.</p>
<p><a target="_blank" href="https://marketplace.atlassian.com/apps/1602849193/latex-math-for-confluence-formulas-equations?hosting=cloud&amp;tab=overview">LaTeX Math for Confluence</a> changes that. Here's how teams are using it to actually document their models.</p>
<hr />
<h2 id="heading-the-problem-with-screenshots-and-plain-text">The Problem with Screenshots and Plain Text</h2>
<p>The two common workarounds both have obvious failure modes.</p>
<p><strong>Screenshots</strong> look fine on day one. Then the model changes, the screenshot is wrong, and nobody updates it because re-exporting from LaTeX or Overleaf and re-uploading feels like too much work. Six months later, the page has equations that don't match the code.</p>
<p><strong>Plain text approximations</strong> (<code>loss = -sum(y * log(y_hat))</code>) are readable to the author but lose precision fast. No Greek letters, no proper fractions, no summation notation. Anyone reading the doc has to mentally parse notation that doesn't match what they'd write on a whiteboard.</p>
<hr />
<h2 id="heading-documenting-models-with-latex-in-confluence">Documenting Models with LaTeX in Confluence</h2>
<p>With LaTeX Math, you type <code>/latex</code> or <code>/math</code> on any Confluence page and get a live editor. Equations render in real time as you type, and you can choose inline (within a sentence) or block (standalone, centered) layout.</p>
<p>Here's how it maps to the kinds of things data science teams actually write.</p>
<hr />
<h3 id="heading-loss-functions">Loss Functions</h3>
<p>The cross-entropy loss for a classification model:</p>
<pre><code class="lang-latex">\mathcal{L} = -\frac{1}{N} \sum_{i=1}^{N} \sum_{c=1}^{C} y_{ic} \log(\hat{y}_{ic})
</code></pre>
<p>Mean squared error:</p>
<pre><code class="lang-latex">\mathcal{L}_{MSE} = \frac{1}{N} \sum_{i=1}^{N} (y_i - \hat{y}_i)^2
</code></pre>
<p>Binary cross-entropy:</p>
<pre><code class="lang-latex">\mathcal{L} = -\frac{1}{N} \sum_{i=1}^{N} \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right]
</code></pre>
<p>These go inline in a model card, in a section right next to the architecture description and training configuration — all in one Confluence page that anyone on the team can find.</p>
<hr />
<h3 id="heading-activation-functions">Activation Functions</h3>
<p>Documenting why you chose a particular activation is easier when you can show it properly.</p>
<p>ReLU:</p>
<pre><code class="lang-latex">f(x) = \max(0, x)
</code></pre>
<p>Sigmoid:</p>
<pre><code class="lang-latex">\sigma(x) = \frac{1}{1 + e^{-x}}
</code></pre>
<p>Softmax (for a vector <strong>z</strong> of length <em>K</em>):</p>
<pre><code class="lang-latex">\text{softmax}(z_j) = \frac{e^{z_j}}{\sum_{k=1}^{K} e^{z_k}}
</code></pre>
<p>GELU (common in transformer models):</p>
<pre><code class="lang-latex">\text{GELU}(x) = x \cdot \Phi(x)
</code></pre>
<hr />
<h3 id="heading-evaluation-metrics">Evaluation Metrics</h3>
<p>Precision and recall written in plain text are fine. Written as equations they're unambiguous:</p>
<pre><code class="lang-latex">\text{Precision} = \frac{TP}{TP + FP}
\qquad
\text{Recall} = \frac{TP}{TP + FN}
</code></pre>
<p>F1 score:</p>
<pre><code class="lang-latex">F_1 = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}
</code></pre>
<p>AUROC is harder to describe in words than in math:</p>
<pre><code class="lang-latex">\text{AUROC} = \int_0^1 \text{TPR}(t) \, d(\text{FPR}(t))
</code></pre>
<hr />
<h3 id="heading-regularisation-and-optimisers">Regularisation and Optimisers</h3>
<p>L2 regularisation added to a loss term:</p>
<pre><code class="lang-latex">\mathcal{L}_{reg} = \mathcal{L} + \lambda \sum_{j} w_j^2
</code></pre>
<p>Adam update rule — the kind of thing that should live in your training runbook:</p>
<pre><code class="lang-latex">m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t
\qquad
v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2
</code></pre>
<pre><code class="lang-latex">\hat{m}_t = \frac{m_t}{1 - \beta_1^t}
\qquad
\hat{v}_t = \frac{v_t}{1 - \beta_2^t}
</code></pre>
<pre><code class="lang-latex">\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t
</code></pre>
<hr />
<h3 id="heading-bayesian-and-probabilistic-models">Bayesian and Probabilistic Models</h3>
<p>Teams doing probabilistic modelling or Bayesian inference often have the worst documentation problem — Bayes' theorem in a Slack message is a disaster. In Confluence it's clean:</p>
<pre><code class="lang-latex">P(\theta \mid X) = \frac{P(X \mid \theta) \, P(\theta)}{P(X)}
</code></pre>
<p>KL divergence between two distributions:</p>
<pre><code class="lang-latex">D_{KL}(P \| Q) = \sum_{x} P(x) \log \frac{P(x)}{Q(x)}
</code></pre>
<p>ELBO for variational inference:</p>
<pre><code class="lang-latex">\mathcal{L}(\phi, \theta) = \mathbb{E}_{q_\phi(z|x)} \left[ \log p_\theta(x|z) \right] - D_{KL}\left( q_\phi(z|x) \| p(z) \right)
</code></pre>
<hr />
<h2 id="heading-what-a-model-card-looks-like-in-practice">What a Model Card Looks Like in Practice</h2>
<p>A typical model card in Confluence might be structured like this:</p>
<ul>
<li><strong>Overview</strong> — what the model does, who it's for</li>
<li><strong>Architecture</strong> — layer counts, attention heads, embedding dimensions (inline equations for shapes)</li>
<li><strong>Training objective</strong> — loss function as a block equation</li>
<li><strong>Optimiser</strong> — learning rate, weight decay, scheduler (formulas inline in a table)</li>
<li><strong>Evaluation</strong> — metrics defined as equations, results as a table</li>
<li><strong>Known limitations</strong> — plain text</li>
</ul>
<p>With LaTeX Math, the equations in that document are live, editable, and match the actual implementation. When a team member updates the model and changes the loss function, they update the equation directly — no re-exporting, no new screenshots, no broken images.</p>
<hr />
<h2 id="heading-getting-started">Getting Started</h2>
<p>Install <a target="_blank" href="https://marketplace.atlassian.com/apps/1602849193/latex-math-for-confluence-formulas-equations?hosting=cloud&amp;tab=overview">LaTeX Math for Confluence</a> from the Atlassian Marketplace. On any Confluence page, type <code>/latex</code> to insert a block equation or <code>/math</code> for an inline equation.</p>
<p>Full documentation is at <a target="_blank" href="/docs/latex-math-for-confluence">LaTeX Math for Confluence docs</a>.</p>
<hr />
<p><em>Questions? Reach out via our <a target="_blank" href="https://yamuno.atlassian.net/servicedesk/customer/portals">support portal</a>.</em></p>
]]></content:encoded></item><item><title><![CDATA[5 Things You Can Build with HTML Macro for Confluence]]></title><description><![CDATA[5 Things You Can Build with HTML Macro for Confluence
Confluence is a solid documentation platform. But the moment you need a colored status badge, a countdown to your launch date, or a table that users can actually sort — you hit a wall. Native macr...]]></description><link>https://blog.yamuno.com/5-things-you-can-build-with-html-macro-for-confluence</link><guid isPermaLink="true">https://blog.yamuno.com/5-things-you-can-build-with-html-macro-for-confluence</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:48:05 GMT</pubDate><enclosure url="https://assets.yamuno.com/images/blog/html-macro-for-confluence-use-cases.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-5-things-you-can-build-with-html-macro-for-confluence">5 Things You Can Build with HTML Macro for Confluence</h1>
<p>Confluence is a solid documentation platform. But the moment you need a colored status badge, a countdown to your launch date, or a table that users can actually sort — you hit a wall. Native macros only go so far.</p>
<p><a target="_blank" href="https://marketplace.atlassian.com/apps/1670180315/html-macro-for-confluence-free?hosting=cloud&amp;tab=overview">HTML Macro for Confluence</a> fills that gap. It lets you drop a full HTML/CSS/JS editor directly into any Confluence page. Live preview, CSP security controls, granular access permissions — and it runs entirely on Atlassian Forge with nothing sent to external servers.</p>
<p>Here are five concrete things teams are building with it right now.</p>
<hr />
<h2 id="heading-1-custom-status-badge-traffic-light-indicator">1. Custom Status Badge / Traffic Light Indicator</h2>
<p><strong>The problem:</strong> Your project status page needs a RAG (Red/Amber/Green) indicator that's quick to read and easy for editors to update. The native Confluence status macro is limited, and color-coded text doesn't stand out enough for at-a-glance checks.</p>
<p><strong>The solution:</strong> A simple HTML/CSS badge with a colored circle and a label. Editors change one word to flip the status.</p>
<pre><code class="lang-html"><span class="hljs-comment">&lt;!-- HTML --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"rag-badge"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"dot green"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"label"</span>&gt;</span>On Track<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<pre><code class="lang-css"><span class="hljs-comment">/* CSS */</span>
<span class="hljs-selector-class">.rag-badge</span> {
  <span class="hljs-attribute">display</span>: flex;
  <span class="hljs-attribute">align-items</span>: center;
  <span class="hljs-attribute">gap</span>: <span class="hljs-number">10px</span>;
  <span class="hljs-attribute">font-family</span>: sans-serif;
  <span class="hljs-attribute">font-size</span>: <span class="hljs-number">16px</span>;
  <span class="hljs-attribute">font-weight</span>: <span class="hljs-number">600</span>;
}

<span class="hljs-selector-class">.dot</span> {
  <span class="hljs-attribute">width</span>: <span class="hljs-number">18px</span>;
  <span class="hljs-attribute">height</span>: <span class="hljs-number">18px</span>;
  <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">50%</span>;
  <span class="hljs-attribute">display</span>: inline-block;
  <span class="hljs-attribute">flex-shrink</span>: <span class="hljs-number">0</span>;
}

<span class="hljs-selector-class">.dot</span><span class="hljs-selector-class">.green</span>  { <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#22c55e</span>; <span class="hljs-attribute">box-shadow</span>: <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">8px</span> <span class="hljs-number">#22c55e88</span>; }
<span class="hljs-selector-class">.dot</span><span class="hljs-selector-class">.amber</span>  { <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#f59e0b</span>; <span class="hljs-attribute">box-shadow</span>: <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">8px</span> <span class="hljs-number">#f59e0b88</span>; }
<span class="hljs-selector-class">.dot</span><span class="hljs-selector-class">.red</span>    { <span class="hljs-attribute">background-color</span>: <span class="hljs-number">#ef4444</span>; <span class="hljs-attribute">box-shadow</span>: <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">8px</span> <span class="hljs-number">#ef444488</span>; }

<span class="hljs-selector-class">.label</span> { <span class="hljs-attribute">color</span>: <span class="hljs-number">#1e293b</span>; }
</code></pre>
<p><strong>Why it's useful:</strong> Swap <code>green</code> → <code>amber</code> → <code>red</code> on the dot class and update the label text. That's the entire update. No Confluence macros to reconfigure, no separate status apps to install. Engineers, PMs, and project leads can glance at a page and immediately know where things stand.</p>
<hr />
<h2 id="heading-2-embedded-countdown-timer">2. Embedded Countdown Timer</h2>
<p><strong>The problem:</strong> Your team has a product launch date, a sprint end, or a compliance deadline coming up. A static date in the page body gets ignored. Teams want something that actively reminds them how much runway is left.</p>
<p><strong>The solution:</strong> A JavaScript countdown that calculates days, hours, and minutes remaining from a target date, updating every second.</p>
<pre><code class="lang-html"><span class="hljs-comment">&lt;!-- HTML --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"countdown-wrapper"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"countdown-title"</span>&gt;</span>Launch Countdown<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"countdown-timer"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"unit"</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"days"</span>&gt;</span>--<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">label</span>&gt;</span>Days<span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"unit"</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"hours"</span>&gt;</span>--<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">label</span>&gt;</span>Hours<span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"unit"</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"minutes"</span>&gt;</span>--<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">label</span>&gt;</span>Minutes<span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<pre><code class="lang-css"><span class="hljs-comment">/* CSS */</span>
<span class="hljs-selector-class">.countdown-wrapper</span> { <span class="hljs-attribute">font-family</span>: sans-serif; <span class="hljs-attribute">text-align</span>: center; <span class="hljs-attribute">padding</span>: <span class="hljs-number">24px</span>; <span class="hljs-attribute">background</span>: <span class="hljs-number">#f8fafc</span>; <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">12px</span>; }
<span class="hljs-selector-class">.countdown-title</span> { <span class="hljs-attribute">font-size</span>: <span class="hljs-number">14px</span>; <span class="hljs-attribute">font-weight</span>: <span class="hljs-number">600</span>; <span class="hljs-attribute">text-transform</span>: uppercase; <span class="hljs-attribute">letter-spacing</span>: <span class="hljs-number">0.08em</span>; <span class="hljs-attribute">color</span>: <span class="hljs-number">#64748b</span>; <span class="hljs-attribute">margin-bottom</span>: <span class="hljs-number">16px</span>; }
<span class="hljs-selector-class">.countdown-timer</span> { <span class="hljs-attribute">display</span>: flex; <span class="hljs-attribute">justify-content</span>: center; <span class="hljs-attribute">gap</span>: <span class="hljs-number">24px</span>; }
<span class="hljs-selector-class">.unit</span> { <span class="hljs-attribute">display</span>: flex; <span class="hljs-attribute">flex-direction</span>: column; <span class="hljs-attribute">align-items</span>: center; }
<span class="hljs-selector-class">.unit</span> <span class="hljs-selector-tag">span</span> { <span class="hljs-attribute">font-size</span>: <span class="hljs-number">48px</span>; <span class="hljs-attribute">font-weight</span>: <span class="hljs-number">700</span>; <span class="hljs-attribute">color</span>: <span class="hljs-number">#1e293b</span>; <span class="hljs-attribute">line-height</span>: <span class="hljs-number">1</span>; }
<span class="hljs-selector-class">.unit</span> <span class="hljs-selector-tag">label</span> { <span class="hljs-attribute">font-size</span>: <span class="hljs-number">12px</span>; <span class="hljs-attribute">color</span>: <span class="hljs-number">#94a3b8</span>; <span class="hljs-attribute">margin-top</span>: <span class="hljs-number">4px</span>; <span class="hljs-attribute">text-transform</span>: uppercase; <span class="hljs-attribute">letter-spacing</span>: <span class="hljs-number">0.06em</span>; }
</code></pre>
<pre><code class="lang-js"><span class="hljs-comment">// JavaScript — set your target date here</span>
<span class="hljs-keyword">const</span> target = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>(<span class="hljs-string">"2026-05-01T09:00:00"</span>);

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">tick</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> diff = target - <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>();
  <span class="hljs-keyword">if</span> (diff &lt;= <span class="hljs-number">0</span>) {
    <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">".countdown-timer"</span>).innerHTML = <span class="hljs-string">"&lt;p&gt;We're live!&lt;/p&gt;"</span>;
    <span class="hljs-keyword">return</span>;
  }
  <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"days"</span>).textContent    = <span class="hljs-built_in">Math</span>.floor(diff / <span class="hljs-number">86400000</span>);
  <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"hours"</span>).textContent   = <span class="hljs-built_in">Math</span>.floor((diff % <span class="hljs-number">86400000</span>) / <span class="hljs-number">3600000</span>);
  <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"minutes"</span>).textContent = <span class="hljs-built_in">Math</span>.floor((diff % <span class="hljs-number">3600000</span>) / <span class="hljs-number">60000</span>);
}

tick();
<span class="hljs-built_in">setInterval</span>(tick, <span class="hljs-number">1000</span>);
</code></pre>
<p><strong>Why it's useful:</strong> Change one date string and you have a live countdown that works for any milestone. Sprint reviews, feature freezes, go-live dates — it's a passive but effective nudge every time someone opens the page.</p>
<hr />
<h2 id="heading-3-interactive-decision-tree-for-runbooks">3. Interactive Decision Tree for Runbooks</h2>
<p><strong>The problem:</strong> Runbooks and incident response guides are often long, linear documents. Engineers in the middle of an incident don't want to read paragraphs — they want to answer a question and be told exactly what to do next.</p>
<p><strong>The solution:</strong> A clickable HTML/CSS decision tree that walks users through branching logic step by step. No external charting library required.</p>
<pre><code class="lang-html"><span class="hljs-comment">&lt;!-- HTML --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"tree"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"tree"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"node active"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"q1"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Is the service returning errors?<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"choices"</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">"show('q1-yes')"</span>&gt;</span>Yes<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">"show('q1-no')"</span>&gt;</span>No<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"node"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"q1-yes"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Are errors 5xx (server-side)?<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"choices"</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">"show('check-logs')"</span>&gt;</span>Yes<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">"show('check-upstream')"</span>&gt;</span>No<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"node answer"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"check-logs"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Check application logs in Datadog. Look for OOM errors or unhandled exceptions. Page the on-call engineer if needed.<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">"reset()"</span>&gt;</span>Start over<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"node answer"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"check-upstream"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Likely a 4xx or gateway issue. Check upstream dependencies and API gateway logs.<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">"reset()"</span>&gt;</span>Start over<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"node answer"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"q1-no"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Service appears healthy. Check monitoring dashboards for latency spikes or queue depth issues.<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">"reset()"</span>&gt;</span>Start over<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<pre><code class="lang-css"><span class="hljs-comment">/* CSS */</span>
<span class="hljs-selector-class">.tree</span> { <span class="hljs-attribute">font-family</span>: sans-serif; <span class="hljs-attribute">max-width</span>: <span class="hljs-number">480px</span>; }
<span class="hljs-selector-class">.node</span> { <span class="hljs-attribute">display</span>: none; <span class="hljs-attribute">padding</span>: <span class="hljs-number">20px</span>; <span class="hljs-attribute">border</span>: <span class="hljs-number">1px</span> solid <span class="hljs-number">#e2e8f0</span>; <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">10px</span>; <span class="hljs-attribute">margin-bottom</span>: <span class="hljs-number">12px</span>; <span class="hljs-attribute">background</span>: <span class="hljs-number">#fff</span>; }
<span class="hljs-selector-class">.node</span><span class="hljs-selector-class">.active</span> { <span class="hljs-attribute">display</span>: block; }
<span class="hljs-selector-class">.node</span> <span class="hljs-selector-tag">p</span> { <span class="hljs-attribute">margin</span>: <span class="hljs-number">0</span> <span class="hljs-number">0</span> <span class="hljs-number">14px</span>; <span class="hljs-attribute">font-size</span>: <span class="hljs-number">15px</span>; <span class="hljs-attribute">color</span>: <span class="hljs-number">#1e293b</span>; <span class="hljs-attribute">font-weight</span>: <span class="hljs-number">500</span>; }
<span class="hljs-selector-class">.choices</span> { <span class="hljs-attribute">display</span>: flex; <span class="hljs-attribute">gap</span>: <span class="hljs-number">10px</span>; }
<span class="hljs-selector-tag">button</span> { <span class="hljs-attribute">padding</span>: <span class="hljs-number">8px</span> <span class="hljs-number">18px</span>; <span class="hljs-attribute">border</span>: none; <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">6px</span>; <span class="hljs-attribute">background</span>: <span class="hljs-number">#6366f1</span>; <span class="hljs-attribute">color</span>: <span class="hljs-number">#fff</span>; <span class="hljs-attribute">font-size</span>: <span class="hljs-number">14px</span>; <span class="hljs-attribute">cursor</span>: pointer; }
<span class="hljs-selector-tag">button</span><span class="hljs-selector-pseudo">:hover</span> { <span class="hljs-attribute">background</span>: <span class="hljs-number">#4f46e5</span>; }
<span class="hljs-selector-class">.answer</span> { <span class="hljs-attribute">background</span>: <span class="hljs-number">#f0fdf4</span>; <span class="hljs-attribute">border-color</span>: <span class="hljs-number">#86efac</span>; }
<span class="hljs-selector-class">.answer</span> <span class="hljs-selector-tag">p</span> { <span class="hljs-attribute">color</span>: <span class="hljs-number">#166534</span>; <span class="hljs-attribute">font-weight</span>: <span class="hljs-number">400</span>; }
<span class="hljs-selector-class">.answer</span> <span class="hljs-selector-tag">button</span> { <span class="hljs-attribute">background</span>: <span class="hljs-number">#64748b</span>; }
</code></pre>
<pre><code class="lang-js"><span class="hljs-comment">// JavaScript</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">show</span>(<span class="hljs-params">id</span>) </span>{
  <span class="hljs-built_in">document</span>.querySelectorAll(<span class="hljs-string">".node"</span>).forEach(<span class="hljs-function"><span class="hljs-params">n</span> =&gt;</span> n.classList.remove(<span class="hljs-string">"active"</span>));
  <span class="hljs-built_in">document</span>.getElementById(id).classList.add(<span class="hljs-string">"active"</span>);
}
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">reset</span>(<span class="hljs-params"></span>) </span>{ show(<span class="hljs-string">"q1"</span>); }
</code></pre>
<p><strong>Why it's useful:</strong> Runbook authors can build arbitrarily deep trees using just HTML — no Mermaid, no Lucidchart license needed. The tree lives inside the Confluence page, is searchable, and can be updated by anyone with access to the macro editor.</p>
<hr />
<h2 id="heading-4-custom-data-table-with-sort-and-filter">4. Custom Data Table with Sort and Filter</h2>
<p><strong>The problem:</strong> Confluence tables are static. You can't click a column header to sort, and there's no filter input. For any table with more than a dozen rows — vendor lists, feature matrices, environment configs — this is a real usability problem.</p>
<p><strong>The solution:</strong> A vanilla JavaScript snippet that adds click-to-sort to any HTML table, plus a live filter input.</p>
<pre><code class="lang-html"><span class="hljs-comment">&lt;!-- HTML --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"table-wrapper"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"filter"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">placeholder</span>=<span class="hljs-string">"Filter rows..."</span> /&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">table</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"data-table"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">thead</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">tr</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">th</span>&gt;</span>Service<span class="hljs-tag">&lt;/<span class="hljs-name">th</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">th</span>&gt;</span>Owner<span class="hljs-tag">&lt;/<span class="hljs-name">th</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">th</span>&gt;</span>Status<span class="hljs-tag">&lt;/<span class="hljs-name">th</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">th</span>&gt;</span>SLA<span class="hljs-tag">&lt;/<span class="hljs-name">th</span>&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">tr</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">thead</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">tbody</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">tr</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>Auth API<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>Platform<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>Healthy<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>99.9%<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">tr</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">tr</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>Billing<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>Payments<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>Degraded<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>99.5%<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">tr</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">tr</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>Notifications<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>Growth<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>Healthy<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>99.0%<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">tr</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">tr</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>Search<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>Platform<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>Healthy<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>99.9%<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">tr</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">tr</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>Analytics<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>Data<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>Maintenance<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">td</span>&gt;</span>98.0%<span class="hljs-tag">&lt;/<span class="hljs-name">td</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">tr</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">tbody</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">table</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<pre><code class="lang-css"><span class="hljs-comment">/* CSS */</span>
<span class="hljs-selector-class">.table-wrapper</span> { <span class="hljs-attribute">font-family</span>: sans-serif; }
<span class="hljs-selector-id">#filter</span> { <span class="hljs-attribute">width</span>: <span class="hljs-number">100%</span>; <span class="hljs-attribute">padding</span>: <span class="hljs-number">8px</span> <span class="hljs-number">12px</span>; <span class="hljs-attribute">margin-bottom</span>: <span class="hljs-number">12px</span>; <span class="hljs-attribute">border</span>: <span class="hljs-number">1px</span> solid <span class="hljs-number">#cbd5e1</span>; <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">6px</span>; <span class="hljs-attribute">font-size</span>: <span class="hljs-number">14px</span>; <span class="hljs-attribute">box-sizing</span>: border-box; }
<span class="hljs-selector-tag">table</span> { <span class="hljs-attribute">width</span>: <span class="hljs-number">100%</span>; <span class="hljs-attribute">border-collapse</span>: collapse; <span class="hljs-attribute">font-size</span>: <span class="hljs-number">14px</span>; }
<span class="hljs-selector-tag">th</span> { <span class="hljs-attribute">background</span>: <span class="hljs-number">#f1f5f9</span>; <span class="hljs-attribute">padding</span>: <span class="hljs-number">10px</span> <span class="hljs-number">14px</span>; <span class="hljs-attribute">text-align</span>: left; <span class="hljs-attribute">cursor</span>: pointer; <span class="hljs-attribute">user-select</span>: none; <span class="hljs-attribute">border-bottom</span>: <span class="hljs-number">2px</span> solid <span class="hljs-number">#e2e8f0</span>; <span class="hljs-attribute">color</span>: <span class="hljs-number">#475569</span>; }
<span class="hljs-selector-tag">th</span><span class="hljs-selector-pseudo">:hover</span> { <span class="hljs-attribute">background</span>: <span class="hljs-number">#e2e8f0</span>; }
<span class="hljs-selector-tag">td</span> { <span class="hljs-attribute">padding</span>: <span class="hljs-number">10px</span> <span class="hljs-number">14px</span>; <span class="hljs-attribute">border-bottom</span>: <span class="hljs-number">1px</span> solid <span class="hljs-number">#f1f5f9</span>; <span class="hljs-attribute">color</span>: <span class="hljs-number">#1e293b</span>; }
<span class="hljs-selector-tag">tr</span><span class="hljs-selector-pseudo">:hover</span> <span class="hljs-selector-tag">td</span> { <span class="hljs-attribute">background</span>: <span class="hljs-number">#f8fafc</span>; }
<span class="hljs-selector-tag">th</span><span class="hljs-selector-class">.asc</span><span class="hljs-selector-pseudo">::after</span>  { <span class="hljs-attribute">content</span>: <span class="hljs-string">" ▲"</span>; <span class="hljs-attribute">font-size</span>: <span class="hljs-number">11px</span>; }
<span class="hljs-selector-tag">th</span><span class="hljs-selector-class">.desc</span><span class="hljs-selector-pseudo">::after</span> { <span class="hljs-attribute">content</span>: <span class="hljs-string">" ▼"</span>; <span class="hljs-attribute">font-size</span>: <span class="hljs-number">11px</span>; }
</code></pre>
<pre><code class="lang-js"><span class="hljs-comment">// JavaScript</span>
<span class="hljs-keyword">const</span> table = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"data-table"</span>);
<span class="hljs-keyword">const</span> tbody = table.querySelector(<span class="hljs-string">"tbody"</span>);
<span class="hljs-keyword">const</span> headers = table.querySelectorAll(<span class="hljs-string">"th"</span>);
<span class="hljs-keyword">let</span> sortCol = <span class="hljs-number">-1</span>, sortAsc = <span class="hljs-literal">true</span>;

headers.forEach(<span class="hljs-function">(<span class="hljs-params">th, i</span>) =&gt;</span> {
  th.addEventListener(<span class="hljs-string">"click"</span>, <span class="hljs-function">() =&gt;</span> {
    <span class="hljs-keyword">if</span> (sortCol === i) { sortAsc = !sortAsc; } <span class="hljs-keyword">else</span> { sortCol = i; sortAsc = <span class="hljs-literal">true</span>; }
    headers.forEach(<span class="hljs-function"><span class="hljs-params">h</span> =&gt;</span> h.classList.remove(<span class="hljs-string">"asc"</span>, <span class="hljs-string">"desc"</span>));
    th.classList.add(sortAsc ? <span class="hljs-string">"asc"</span> : <span class="hljs-string">"desc"</span>);
    <span class="hljs-keyword">const</span> rows = <span class="hljs-built_in">Array</span>.from(tbody.querySelectorAll(<span class="hljs-string">"tr"</span>));
    rows.sort(<span class="hljs-function">(<span class="hljs-params">a, b</span>) =&gt;</span> {
      <span class="hljs-keyword">const</span> av = a.cells[i].textContent.trim();
      <span class="hljs-keyword">const</span> bv = b.cells[i].textContent.trim();
      <span class="hljs-keyword">return</span> sortAsc ? av.localeCompare(bv) : bv.localeCompare(av);
    });
    rows.forEach(<span class="hljs-function"><span class="hljs-params">r</span> =&gt;</span> tbody.appendChild(r));
  });
});

<span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"filter"</span>).addEventListener(<span class="hljs-string">"input"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> q = <span class="hljs-built_in">this</span>.value.toLowerCase();
  tbody.querySelectorAll(<span class="hljs-string">"tr"</span>).forEach(<span class="hljs-function"><span class="hljs-params">row</span> =&gt;</span> {
    row.style.display = row.textContent.toLowerCase().includes(q) ? <span class="hljs-string">""</span> : <span class="hljs-string">"none"</span>;
  });
});
</code></pre>
<p><strong>Why it's useful:</strong> Replace the <code>&lt;tbody&gt;</code> rows with your actual data and you have a fully sortable, filterable table with zero dependencies. Works for service registries, on-call rosters, feature flags, release checklists — anything that lives in a Confluence table but deserves better UX.</p>
<hr />
<h2 id="heading-5-branded-announcement-banner">5. Branded Announcement Banner</h2>
<p><strong>The problem:</strong> HR needs to announce open enrollment. Marketing wants to flag a product launch to all readers of a space. The built-in Confluence info panel is functional but bland — it doesn't match company branding and blends into the page noise.</p>
<p><strong>The solution:</strong> A CSS-styled announcement banner with a company-colored left border, an icon, a headline, and body text. Completely customizable.</p>
<pre><code class="lang-html"><span class="hljs-comment">&lt;!-- HTML --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"announcement"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"announcement-icon"</span>&gt;</span>📣<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"announcement-body"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"announcement-title"</span>&gt;</span>Open Enrollment — Action Required<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"announcement-message"</span>&gt;</span>
      Benefits enrollment is open until <span class="hljs-tag">&lt;<span class="hljs-name">strong</span>&gt;</span>April 30, 2026<span class="hljs-tag">&lt;/<span class="hljs-name">strong</span>&gt;</span>.
      Log in to Workday and complete your selections before the deadline.
      Contact <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"mailto:hr@company.com"</span>&gt;</span>hr@company.com<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span> with questions.
    <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<pre><code class="lang-css"><span class="hljs-comment">/* CSS */</span>
<span class="hljs-selector-class">.announcement</span> {
  <span class="hljs-attribute">display</span>: flex;
  <span class="hljs-attribute">align-items</span>: flex-start;
  <span class="hljs-attribute">gap</span>: <span class="hljs-number">16px</span>;
  <span class="hljs-attribute">padding</span>: <span class="hljs-number">18px</span> <span class="hljs-number">20px</span>;
  <span class="hljs-attribute">border-left</span>: <span class="hljs-number">5px</span> solid <span class="hljs-number">#6366f1</span>;
  <span class="hljs-attribute">background</span>: <span class="hljs-number">#eef2ff</span>;
  <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">0</span> <span class="hljs-number">10px</span> <span class="hljs-number">10px</span> <span class="hljs-number">0</span>;
  <span class="hljs-attribute">font-family</span>: sans-serif;
  <span class="hljs-attribute">max-width</span>: <span class="hljs-number">680px</span>;
}

<span class="hljs-selector-class">.announcement-icon</span> {
  <span class="hljs-attribute">font-size</span>: <span class="hljs-number">24px</span>;
  <span class="hljs-attribute">flex-shrink</span>: <span class="hljs-number">0</span>;
  <span class="hljs-attribute">margin-top</span>: <span class="hljs-number">2px</span>;
}

<span class="hljs-selector-class">.announcement-title</span> {
  <span class="hljs-attribute">font-size</span>: <span class="hljs-number">15px</span>;
  <span class="hljs-attribute">font-weight</span>: <span class="hljs-number">700</span>;
  <span class="hljs-attribute">color</span>: <span class="hljs-number">#3730a3</span>;
  <span class="hljs-attribute">margin-bottom</span>: <span class="hljs-number">6px</span>;
}

<span class="hljs-selector-class">.announcement-message</span> {
  <span class="hljs-attribute">font-size</span>: <span class="hljs-number">14px</span>;
  <span class="hljs-attribute">color</span>: <span class="hljs-number">#1e293b</span>;
  <span class="hljs-attribute">line-height</span>: <span class="hljs-number">1.6</span>;
}

<span class="hljs-selector-class">.announcement-message</span> <span class="hljs-selector-tag">a</span> {
  <span class="hljs-attribute">color</span>: <span class="hljs-number">#6366f1</span>;
  <span class="hljs-attribute">text-decoration</span>: none;
  <span class="hljs-attribute">font-weight</span>: <span class="hljs-number">500</span>;
}

<span class="hljs-selector-class">.announcement-message</span> <span class="hljs-selector-tag">a</span><span class="hljs-selector-pseudo">:hover</span> { <span class="hljs-attribute">text-decoration</span>: underline; }
</code></pre>
<p><strong>Why it's useful:</strong> Change the border color and background tint to match your brand palette, swap in your own headline and message, and you have a polished callout that actually gets noticed. No graphic design skills needed, and the same template works for IT alerts, policy updates, and event announcements.</p>
<hr />
<h2 id="heading-a-note-on-security">A Note on Security</h2>
<p>Embedding HTML and JavaScript in a documentation platform is a responsibility that admins need to control. HTML Macro for Confluence gives you three Content Security Policy modes:</p>
<ul>
<li><strong>Block All</strong> — the strictest setting. No external resources (scripts, fonts, images) can load. This is the right default for pure HTML/CSS snippets like the badge and banner examples above.</li>
<li><strong>Whitelist</strong> — you specify exactly which external domains are permitted. If your team uses Chart.js from a CDN or embeds a Google Map, you add those domains to the allowlist and nothing else gets through.</li>
<li><strong>Allow All</strong> — fully permissive. Appropriate for tightly controlled internal environments where you trust every editor.</li>
</ul>
<p>Combined with editor access control — which limits who can open the code editor in the first place — you can let most teams use the rendered output without ever exposing the source code.</p>
<hr />
<h2 id="heading-try-it-free">Try It Free</h2>
<p>All five of the examples above work today, without any paid tier, without any external server, and without leaving Confluence.</p>
<p>HTML Macro for Confluence is free on the Atlassian Marketplace. Install it, drop it into a page, and paste in one of the snippets above to see the live preview update as you type.</p>
<p><a target="_blank" href="https://marketplace.atlassian.com/apps/1670180315/html-macro-for-confluence-free?hosting=cloud&amp;tab=overview">Install HTML Macro for Confluence — free on the Atlassian Marketplace</a></p>
<hr />
<p><em>Have a use case we didn't cover? We'd love to hear what your team builds. Reach out through our <a target="_blank" href="https://yamuno.atlassian.net/servicedesk/customer/portals">support portal</a>.</em></p>
]]></content:encoded></item><item><title><![CDATA[Embed Custom HTML, CSS & JavaScript in Confluence — Introducing HTML Macro for Confluence]]></title><description><![CDATA[Introducing HTML Macro for Confluence
We're thrilled to announce that HTML Macro for Confluence is now live on the Atlassian Marketplace — and it's free!
Confluence is great for documentation, but sometimes you need more than what native macros can o...]]></description><link>https://blog.yamuno.com/embed-custom-html-css-javascript-in-confluence-introducing-html-macro-for-confluence</link><guid isPermaLink="true">https://blog.yamuno.com/embed-custom-html-css-javascript-in-confluence-introducing-html-macro-for-confluence</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:48:03 GMT</pubDate><enclosure url="https://assets.yamuno.com/html-macro/banner.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introducing-html-macro-for-confluence">Introducing HTML Macro for Confluence</h1>
<p>We're thrilled to announce that <a target="_blank" href="https://marketplace.atlassian.com/apps/1670180315/html-macro-for-confluence-free?hosting=cloud&amp;tab=overview"><strong>HTML Macro for Confluence</strong></a> is now live on the Atlassian Marketplace — and it's free!</p>
<p>Confluence is great for documentation, but sometimes you need more than what native macros can offer. Now you can embed fully custom HTML, CSS, and JavaScript directly inside any Confluence page — interactive charts, branded sections, custom embeds, you name it.</p>
<p><img src="https://assets.yamuno.com/html-macro/banner.png" alt="HTML Macro for Confluence Banner" /></p>
<h2 id="heading-what-is-html-macro-for-confluence">What Is HTML Macro for Confluence?</h2>
<p>HTML Macro for Confluence is a Forge-native Confluence Cloud app that lets you insert a rich code editor directly into any page. Write HTML, CSS, and JavaScript with syntax highlighting, see a live preview as you type, and publish polished interactive content — all without leaving Confluence.</p>
<h2 id="heading-key-features">Key Features</h2>
<h3 id="heading-code-editor-with-live-preview">Code Editor with Live Preview</h3>
<p>The macro opens a three-tab editor (HTML, CSS, JS) with syntax highlighting. A resizable split panel shows the rendered output in real time as you type — no more guessing how your code will look once saved.</p>
<p><img src="https://assets.yamuno.com/html-macro/highlight1.png" alt="Live Preview Editor" /></p>
<h3 id="heading-enterprise-grade-csp-security">Enterprise-Grade CSP Security</h3>
<p>Security is built in, not bolted on. Admins choose from three Content Security Policy modes:</p>
<ul>
<li><strong>Block All</strong> — no external resources allowed (strictest, default)</li>
<li><strong>Whitelist</strong> — only domains you explicitly approve can load resources</li>
<li><strong>Allow All</strong> — unrestricted, for trusted internal environments</li>
</ul>
<p>This means you can let teams use Chart.js, Google Maps, or YouTube embeds safely — by whitelisting only the domains you trust.</p>
<h3 id="heading-editor-access-control">Editor Access Control</h3>
<p>Not everyone on a page should be able to edit embedded code. HTML Macro lets admins whitelist specific users who can open the code editor. Everyone else sees only the rendered output — source code stays private.</p>
<h3 id="heading-automatic-iframe-height">Automatic iframe Height</h3>
<p>The macro auto-adjusts its iframe height to match the content — no fixed heights to set, no awkward blank space below your widget.</p>
<h3 id="heading-macro-usage-analytics">Macro Usage Analytics</h3>
<p>Admins get a dashboard showing every Confluence page using the HTML Macro across the entire instance, with space breakdowns and direct page links. Understand adoption and audit usage in seconds.</p>
<h3 id="heading-runs-entirely-on-atlassian-forge">Runs Entirely on Atlassian Forge</h3>
<p>HTML Macro for Confluence is 100% Forge-native. All content is stored inside Atlassian's infrastructure. Nothing is sent to external servers — ever.</p>
<h2 id="heading-what-can-you-build">What Can You Build?</h2>
<p>Here are a few things teams are already building with HTML Macro for Confluence:</p>
<ul>
<li><strong>Interactive dashboards</strong> using Chart.js or D3.js</li>
<li><strong>Branded internal landing pages</strong> with custom CSS layouts</li>
<li><strong>Embedded maps</strong> via Google Maps or Leaflet</li>
<li><strong>Video embeds</strong> (YouTube, Vimeo) with custom styling</li>
<li><strong>Custom tables and data grids</strong> with sorting and filtering</li>
<li><strong>Onboarding checklists</strong> and interactive forms</li>
<li><strong>Countdown timers</strong> and status banners</li>
</ul>
<p>If you can build it with HTML, CSS, and JavaScript — you can put it in Confluence.</p>
<h2 id="heading-getting-started">Getting Started</h2>
<ol>
<li><strong>Install the app</strong> from the <a target="_blank" href="https://marketplace.atlassian.com/apps/1670180315/html-macro-for-confluence-free?hosting=cloud&amp;tab=overview">Atlassian Marketplace</a></li>
<li>Open any Confluence page and type <code>/HTML Macro</code></li>
<li>Write your HTML, CSS, and JavaScript in the editor</li>
<li>See the live preview update as you type</li>
<li>Save and publish — your content is live</li>
</ol>
<h2 id="heading-free-on-the-marketplace">Free on the Marketplace</h2>
<p>HTML Macro for Confluence is available for free. Install it today and start building richer Confluence pages in minutes.</p>
<p>👉 <a target="_blank" href="https://marketplace.atlassian.com/apps/1670180315/html-macro-for-confluence-free?hosting=cloud&amp;tab=overview">Install HTML Macro for Confluence</a></p>
<p>👉 <a target="_blank" href="/docs/html-macro-for-confluence">Read the Documentation</a></p>
<hr />
<p><em>Questions or feedback? Reach out via our <a target="_blank" href="https://yamuno.atlassian.net/servicedesk/customer/portals">support portal</a> — we'd love to hear what you build with it.</em></p>
]]></content:encoded></item><item><title><![CDATA[How to Import Markdown Files into Confluence (Step-by-Step Guide)]]></title><description><![CDATA[How to Import Markdown Files into Confluence
Confluence is where your team documents things. Markdown is where developers write things. The problem is they don't naturally talk to each other — pasting markdown into Confluence turns your beautiful for...]]></description><link>https://blog.yamuno.com/how-to-import-markdown-files-into-confluence-step-by-step-guide</link><guid isPermaLink="true">https://blog.yamuno.com/how-to-import-markdown-files-into-confluence-step-by-step-guide</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:48:01 GMT</pubDate><enclosure url="https://assets.yamuno.com/images/blog/how-to-import-markdown-into-confluence.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-how-to-import-markdown-files-into-confluence">How to Import Markdown Files into Confluence</h1>
<p>Confluence is where your team documents things. Markdown is where developers write things. The problem is they don't naturally talk to each other — pasting markdown into Confluence turns your beautiful formatting into a wall of symbols.</p>
<p><a target="_blank" href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence-markdown-exporter?hosting=cloud&amp;tab=overview">Markdown Importer for Confluence &amp; Markdown Exporter</a> bridges that gap. Here's exactly how to use it to get markdown into Confluence — whether that's a single file, a folder of docs, or an entire GitHub repository.</p>
<hr />
<h2 id="heading-option-1-import-a-single-markdown-file">Option 1 — Import a Single Markdown File</h2>
<p>Best for: a single README, a runbook, an architecture decision record, or any standalone document.</p>
<ol>
<li>Open any Confluence space and navigate to where you want the page</li>
<li>Click <strong>Apps</strong> → <strong>Markdown Importer</strong></li>
<li>Click <strong>Import Files</strong> and upload your <code>.md</code> or <code>.mdx</code> file</li>
<li>Preview the rendered output</li>
<li>Select the parent page (or leave it at the space root)</li>
<li>Click <strong>Import</strong></li>
</ol>
<p>Your page is created with all formatting intact — headings, tables, code blocks, images, and lists all convert cleanly.</p>
<hr />
<h2 id="heading-option-2-import-a-folder-of-markdown-files">Option 2 — Import a Folder of Markdown Files</h2>
<p>Best for: importing a docs folder from a project, a wiki from GitHub/GitLab, or any set of related documents that form a hierarchy.</p>
<ol>
<li>Zip your markdown folder (preserving the folder structure)</li>
<li>Open <strong>Markdown Importer</strong> from the Apps menu</li>
<li>Click <strong>Import Files</strong> and upload the ZIP</li>
<li>The importer reads your folder structure and maps it to a Confluence page hierarchy</li>
<li>Preview the page tree — reorder or exclude pages as needed</li>
<li>Select the parent page in Confluence</li>
<li>Click <strong>Import</strong></li>
</ol>
<p>The folder hierarchy becomes your Confluence page tree:</p>
<pre><code>docs/
├── getting-started/
│   ├── index.md        → Getting Started (parent)
│   ├── installation.md → Installation (child)
│   └── quick-start.md  → Quick Start (child)
└── features/
    ├── index.md        → Features (parent)
    └── api.md          → API Reference (child)
</code></pre><p>Internal links between files are automatically converted to Confluence page links — cross-references stay intact.</p>
<hr />
<h2 id="heading-option-3-import-from-a-github-or-gitlab-repository">Option 3 — Import from a GitHub or GitLab Repository</h2>
<p>Best for: syncing developer documentation directly from source control into Confluence — keeping your <code>/docs</code> folder and your Confluence space in sync.</p>
<ol>
<li>Open <strong>Markdown Importer</strong> from the Apps menu</li>
<li>Click <strong>Import from URL</strong></li>
<li>Paste your GitHub or GitLab repository URL (or a specific folder URL)</li>
<li>The importer fetches your markdown files directly from the repo</li>
<li>Preview the page tree</li>
<li>Select the destination in Confluence</li>
<li>Click <strong>Import</strong></li>
</ol>
<p>This is the fastest path from a Git repo to Confluence — no need to clone locally, zip files, or manually copy content.</p>
<hr />
<h2 id="heading-option-4-import-via-rest-api-automated-pipelines">Option 4 — Import via REST API (Automated Pipelines)</h2>
<p>Best for: CI/CD pipelines, documentation-as-code workflows, and teams that want to automatically sync docs on every commit.</p>
<p>The Markdown Importer exposes a REST API that lets you trigger imports programmatically. Add it to your CI pipeline and your Confluence pages update automatically whenever your docs change.</p>
<p>See the <a target="_blank" href="/docs/markdown-importer-for-confluence/rest-api">REST API documentation</a> for full details.</p>
<hr />
<h2 id="heading-what-gets-preserved">What Gets Preserved</h2>
<p>The importer handles the full range of standard markdown formatting:</p>
<ul>
<li><strong>Headings</strong> — H1–H6 map to Confluence heading levels</li>
<li><strong>Text formatting</strong> — bold, italic, strikethrough, inline code</li>
<li><strong>Tables</strong> — including alignment and header rows</li>
<li><strong>Code blocks</strong> — with language and syntax highlighting</li>
<li><strong>Lists</strong> — ordered, unordered, nested, and task lists with checkboxes</li>
<li><strong>Images</strong> — uploaded as Confluence attachments and linked inline</li>
<li><strong>Blockquotes</strong> — converted to Confluence info/note panels</li>
<li><strong>Links</strong> — external URLs preserved; internal <code>.md</code> links converted to Confluence page links</li>
<li><strong>Frontmatter</strong> — YAML frontmatter is parsed (title, date, author, tags can map to page properties)</li>
</ul>
<hr />
<h2 id="heading-tips">Tips</h2>
<p><strong>Check your image paths.</strong> If your markdown references images with relative paths, make sure the images are included in your ZIP or accessible at the URL before importing.</p>
<p><strong>Use frontmatter for page titles.</strong> If your files have <code>title:</code> in the YAML frontmatter, the importer uses that as the Confluence page title instead of the filename.</p>
<p><strong>Import into a staging space first.</strong> For large imports, run it in a test space before hitting production. It's easy to re-import if anything looks off.</p>
<p><strong>Bulk import is unlimited.</strong> There's no cap on how many pages you can import in one go — import an entire repository if you need to.</p>
<hr />
<h2 id="heading-getting-started">Getting Started</h2>
<p>Install <a target="_blank" href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence-markdown-exporter?hosting=cloud&amp;tab=overview">Markdown Importer for Confluence &amp; Markdown Exporter</a> from the Atlassian Marketplace — free to try.</p>
<p>Full documentation is at <a target="_blank" href="/docs/markdown-importer-for-confluence">/docs/markdown-importer-for-confluence</a>.</p>
<hr />
<p><em>Questions? Reach out via our <a target="_blank" href="https://yamuno.atlassian.net/servicedesk/customer/portals">support portal</a>.</em></p>
]]></content:encoded></item><item><title><![CDATA[How to Export Confluence Pages to PDF (With Custom Formatting)]]></title><description><![CDATA[How to Export Confluence Pages to PDF
Confluence's native PDF export exists, but it's hard to love. No cover page. No custom headers or footers. No watermarks. No way to save a template so your next export looks like the last one. For internal drafts...]]></description><link>https://blog.yamuno.com/how-to-export-confluence-pages-to-pdf-with-custom-formatting</link><guid isPermaLink="true">https://blog.yamuno.com/how-to-export-confluence-pages-to-pdf-with-custom-formatting</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:47:59 GMT</pubDate><enclosure url="https://assets.yamuno.com/images/blog/how-to-export-confluence-to-pdf-v2.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-how-to-export-confluence-pages-to-pdf">How to Export Confluence Pages to PDF</h1>
<p>Confluence's native PDF export exists, but it's hard to love. No cover page. No custom headers or footers. No watermarks. No way to save a template so your next export looks like the last one. For internal drafts that's fine — but for anything going to a client, executive, or auditor, you need something better.</p>
<p>This guide walks through how to export Confluence pages to polished, consistently formatted PDFs using <a target="_blank" href="https://marketplace.atlassian.com/apps/726790413"><strong>PDF Exporter for Confluence</strong></a>.</p>
<hr />
<h2 id="heading-before-you-start">Before You Start</h2>
<p>Install <a target="_blank" href="https://marketplace.atlassian.com/apps/726790413">PDF Exporter for Confluence</a> from the Atlassian Marketplace. It runs on Atlassian Forge, so no external servers and no data leaving your Atlassian environment.</p>
<p>If your team has a standard export format, ask your Confluence admin to set up a template first (covered below) — then everyone gets consistent output without any manual configuration.</p>
<hr />
<h2 id="heading-option-1-export-a-single-page">Option 1 — Export a Single Page</h2>
<p>Best for: a spec, a runbook, a proposal, a one-page summary.</p>
<ol>
<li>Navigate to the Confluence page you want to export</li>
<li>Click <strong>•••</strong> (More actions) in the top-right toolbar</li>
<li>Select <strong>Export to PDF</strong></li>
<li>Choose a template, or leave it as default</li>
<li>Click <strong>Export</strong> and download the PDF</li>
</ol>
<p>That's it. The page content, images, tables, and code blocks are all rendered cleanly into the PDF.</p>
<hr />
<h2 id="heading-option-2-export-a-page-tree">Option 2 — Export a Page Tree</h2>
<p>Best for: product documentation, a project wiki, a client handover package, or any multi-page document with a logical hierarchy.</p>
<ol>
<li>Navigate to the parent page of the section you want to export</li>
<li>Click <strong>•••</strong> → <strong>Export to PDF</strong></li>
<li>Select <strong>Include Child Pages</strong></li>
<li>Review the page tree — uncheck any pages to exclude</li>
<li>Choose your template</li>
<li>Click <strong>Export</strong></li>
</ol>
<p>The exporter processes all selected pages and bundles them into a single ZIP archive. Each page becomes its own PDF, organized to match your Confluence page hierarchy.</p>
<p>If you've enabled the <strong>Table of Contents</strong> option in your template, each PDF will include an auto-generated TOC built from the page headings.</p>
<hr />
<h2 id="heading-option-3-export-an-entire-space">Option 3 — Export an Entire Space</h2>
<p>Best for: compliance archives, full project handovers, or regular documentation backups.</p>
<ol>
<li>Open the <strong>Apps</strong> menu in the Confluence global navigation</li>
<li>Select <strong>PDF Exporter</strong></li>
<li>Choose <strong>Export Space</strong></li>
<li>Select the space you want to export</li>
<li>Choose a template and configure options</li>
<li>Click <strong>Export Space</strong></li>
</ol>
<p>Large spaces may take a few minutes to process. Keep the tab open. When complete, download the ZIP containing all your exported PDFs.</p>
<hr />
<h2 id="heading-setting-up-export-templates-admins">Setting Up Export Templates (Admins)</h2>
<p>Templates are the most powerful feature in PDF Exporter. They let admins define a standard format once — and every user on the instance applies it with one click.</p>
<p>To create a template:</p>
<ol>
<li>Go to <strong>Confluence Settings</strong> → <strong>PDF Exporter</strong></li>
<li>Click <strong>New Template</strong></li>
<li>Configure the template options:</li>
</ol>
<p><strong>Cover Page</strong></p>
<ul>
<li>Toggle the cover page on or off</li>
<li>Choose from six built-in cover styles</li>
<li>Set your accent color, upload your company logo, and add a default subtitle</li>
</ul>
<p><strong>Headers &amp; Footers</strong></p>
<ul>
<li>Add custom text, page numbers, or the export date to headers and footers</li>
<li>Set different content for left, center, and right positions</li>
</ul>
<p><strong>Watermark</strong></p>
<ul>
<li>Add a watermark text (e.g. "CONFIDENTIAL", "DRAFT", "FOR REVIEW") that appears on every page</li>
</ul>
<p><strong>Table of Contents</strong></p>
<ul>
<li>Enable auto-generated TOC from page headings</li>
<li>Set heading depth (H1 only, H1–H2, H1–H3, etc.)</li>
</ul>
<p><strong>Fonts &amp; Layout</strong></p>
<ul>
<li><p>Set font size, line height, and page margins</p>
</li>
<li><p>Save the template — it's now available to all users on the instance</p>
</li>
</ul>
<hr />
<h2 id="heading-what-gets-preserved-in-the-export">What Gets Preserved in the Export</h2>
<p>PDF Exporter handles all standard Confluence content:</p>
<ul>
<li><strong>Text formatting</strong> — bold, italic, headings H1–H6, strikethrough</li>
<li><strong>Tables</strong> — including headers and column alignment</li>
<li><strong>Code blocks</strong> — with syntax highlighting preserved</li>
<li><strong>Lists</strong> — ordered, unordered, nested</li>
<li><strong>Images and attachments</strong> — rendered inline in the PDF</li>
<li><strong>Info, warning, and note panels</strong> — styled appropriately</li>
<li><strong>Page titles</strong> — used as the PDF section title</li>
</ul>
<hr />
<h2 id="heading-common-use-cases">Common Use Cases</h2>
<h3 id="heading-client-facing-documentation">Client-Facing Documentation</h3>
<p>Export a product spec or integration guide with your company logo on the cover, your accent color, and a clean header on every page. Looks like a designed document, not a Confluence printout.</p>
<h3 id="heading-compliance-archiving">Compliance Archiving</h3>
<p>Export your security policies, SOPs, or audit trails to PDF with a "CONFIDENTIAL" watermark and page numbers. Maintain consistent formatting across every export with a locked-down admin template.</p>
<h3 id="heading-stakeholder-reports">Stakeholder Reports</h3>
<p>Export sprint retrospectives, project status pages, or roadmap docs to a clean PDF that stakeholders can read without needing access to Confluence.</p>
<h3 id="heading-documentation-handovers">Documentation Handovers</h3>
<p>When handing off a project, export the full page tree as a ZIP of PDFs. The client gets a complete, structured documentation package they can archive or share internally.</p>
<hr />
<h2 id="heading-tips">Tips</h2>
<p><strong>Use templates consistently.</strong> Set up one template per document type (e.g. "Client Docs", "Internal Reports", "Compliance Archive") and your team will never have to configure formatting manually.</p>
<p><strong>Preview before exporting large trees.</strong> For big hierarchies, check a single page first to confirm the template output looks right before running the full export.</p>
<p><strong>Combine with Markdown Exporter.</strong> Need both PDF and Markdown versions? Use PDF Exporter for shareable documents and <a target="_blank" href="/docs/markdown-exporter-for-confluence">Markdown Exporter</a> for Git-friendly backups — both run from the same ••• menu.</p>
<hr />
<h2 id="heading-getting-started">Getting Started</h2>
<p>Install <a target="_blank" href="https://marketplace.atlassian.com/apps/726790413">PDF Exporter for Confluence</a> from the Atlassian Marketplace.</p>
<p>Full documentation is at <a target="_blank" href="/docs/pdf-exporter-for-confluence">/docs/pdf-exporter-for-confluence</a>.</p>
<hr />
<p><em>Questions? Reach out via our <a target="_blank" href="https://yamuno.atlassian.net/servicedesk/customer/portals">support portal</a>.</em></p>
]]></content:encoded></item><item><title><![CDATA[How to Export Confluence to Markdown (Complete Guide)]]></title><description><![CDATA[How to Export Confluence to Markdown
There are plenty of reasons you might need your Confluence docs in markdown — migrating to another platform, publishing to a static site, syncing with a Git repo, or just keeping an offline backup. Whatever the re...]]></description><link>https://blog.yamuno.com/how-to-export-confluence-to-markdown-complete-guide</link><guid isPermaLink="true">https://blog.yamuno.com/how-to-export-confluence-to-markdown-complete-guide</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:47:57 GMT</pubDate><enclosure url="https://assets.yamuno.com/images/blog/export-confluence-markdown.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-how-to-export-confluence-to-markdown">How to Export Confluence to Markdown</h1>
<p>There are plenty of reasons you might need your Confluence docs in markdown — migrating to another platform, publishing to a static site, syncing with a Git repo, or just keeping an offline backup. Whatever the reason, Confluence's built-in export doesn't give you clean markdown. It gives you HTML or PDF.</p>
<p><a target="_blank" href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence?hosting=cloud&amp;tab=overview">Markdown Exporter &amp; Importer for Confluence</a> fills that gap. Here's exactly how to use it.</p>
<hr />
<h2 id="heading-option-1-export-a-single-page">Option 1 — Export a Single Page</h2>
<p>Best for: grabbing one page quickly — a README, an architecture doc, a runbook.</p>
<ol>
<li>Navigate to the Confluence page you want to export</li>
<li>Click <strong>•••</strong> (More actions) in the top-right</li>
<li>Select <strong>Export to Markdown</strong></li>
<li>Choose <strong>Single Page Only</strong></li>
<li>Click <strong>Export</strong> and download the <code>.md</code> file</li>
</ol>
<p>The exported file includes all inline images and attachments (downloaded locally), code blocks with syntax highlighting, tables, lists, and formatting. Images are referenced with relative paths so they stay linked correctly.</p>
<hr />
<h2 id="heading-option-2-export-a-page-tree">Option 2 — Export a Page Tree</h2>
<p>Best for: exporting a section of your docs — e.g. a product's documentation, a project wiki, or an onboarding guide.</p>
<ol>
<li>Navigate to the parent page</li>
<li>Click <strong>•••</strong> → <strong>Export to Markdown</strong></li>
<li>Choose <strong>Include Child Pages</strong></li>
<li>Review the page tree preview — uncheck any pages you want to skip</li>
<li>Click <strong>Export</strong> and download the ZIP</li>
</ol>
<p>The ZIP preserves your page hierarchy as folders:</p>
<pre><code>confluence-<span class="hljs-keyword">export</span>/
├── Getting Started/
│   ├── index.md
│   ├── Installation.md
│   └── Quick Start.md
├── Features/
│   ├── index.md
│   └── API Reference.md
└── attachments/
    ├── Getting Started/
    │   └── screenshot.png
    └── Features/
        └── diagram.png
</code></pre><p>Internal links between pages are converted to relative markdown links, so cross-references stay intact.</p>
<hr />
<h2 id="heading-option-3-export-an-entire-space">Option 3 — Export an Entire Space</h2>
<p>Best for: full space backups, platform migrations, or archiving completed projects.</p>
<ol>
<li>Open the app from the <strong>Apps</strong> menu in Confluence</li>
<li>Switch to <strong>Export</strong> mode</li>
<li>Select the space you want to export</li>
<li>Review the summary (page count, size estimate)</li>
<li>Click <strong>Export Space</strong></li>
<li>Wait for processing — large spaces can take a few minutes</li>
<li>Download the complete ZIP archive</li>
</ol>
<p>The output structure mirrors your Confluence space, with all pages, child pages, and attachments organized in folders matching the page tree.</p>
<hr />
<h2 id="heading-what-gets-preserved">What Gets Preserved</h2>
<p>The exporter converts all standard Confluence content to clean markdown:</p>
<ul>
<li><strong>Text formatting</strong> — bold, italic, strikethrough, headings H1–H6</li>
<li><strong>Tables</strong> — including column alignment and header rows</li>
<li><strong>Code blocks</strong> — with language and syntax highlighting preserved</li>
<li><strong>Lists</strong> — ordered, unordered, nested, task lists with checkboxes</li>
<li><strong>Images &amp; attachments</strong> — downloaded and referenced with relative paths</li>
<li><strong>Info/warning/note panels</strong> — converted to blockquotes</li>
<li><strong>Internal links</strong> — converted to relative markdown links</li>
<li><strong>Page metadata</strong> — optionally exported as YAML frontmatter</li>
</ul>
<hr />
<h2 id="heading-common-use-cases">Common Use Cases</h2>
<h3 id="heading-publish-to-a-static-site">Publish to a Static Site</h3>
<p>Export your Confluence space and drop it straight into <a target="_blank" href="https://www.mkdocs.org/">MkDocs</a>, <a target="_blank" href="https://docusaurus.io/">Docusaurus</a>, or <a target="_blank" href="https://jekyllrb.com/">Jekyll</a>. The folder structure and relative links work out of the box with most static site generators.</p>
<h3 id="heading-sync-with-a-git-repository">Sync with a Git Repository</h3>
<p>Export your docs, push them to a <code>docs/</code> folder in your repo, and your Confluence content is now version-controlled. You can reverse the flow too — edit in Git, import back to Confluence with the same app.</p>
<h3 id="heading-migrate-to-another-platform">Migrate to Another Platform</h3>
<p>Markdown is the closest thing to a universal documentation format. Export from Confluence, then import into Notion, GitHub Wiki, GitLab Wiki, or wherever you're moving.</p>
<h3 id="heading-backup">Backup</h3>
<p>Run a space export regularly and store the ZIP in S3, Google Drive, or a Git repo. It's a lightweight, readable backup you can actually open without special software.</p>
<hr />
<h2 id="heading-tips">Tips</h2>
<p><strong>Start small.</strong> Export a single page or a small section first to check the output before running a full space export.</p>
<p><strong>Large spaces take time.</strong> Keep the browser tab open during export — closing it can interrupt the process.</p>
<p><strong>Check complex macros.</strong> Most Confluence macros convert cleanly, but heavily customised layouts may need a manual review after export.</p>
<p><strong>Use frontmatter for tracking.</strong> Enable the metadata option to include page titles, IDs, and dates as YAML frontmatter — useful if you're building a pipeline that needs to track which pages have changed.</p>
<hr />
<h2 id="heading-getting-started">Getting Started</h2>
<p>Install <a target="_blank" href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence?hosting=cloud&amp;tab=overview">Markdown Exporter &amp; Importer for Confluence</a> from the Atlassian Marketplace — free to try, no credit card required.</p>
<p>Full export documentation is at <a target="_blank" href="/docs/markdown-importer-for-confluence">/docs/markdown-importer-for-confluence</a>.</p>
<hr />
<p><em>Questions? Reach out via our <a target="_blank" href="https://yamuno.atlassian.net/servicedesk/customer/portals">support portal</a>.</em></p>
]]></content:encoded></item><item><title><![CDATA[How to Add Math Equations to Confluence (LaTeX Guide)]]></title><description><![CDATA[How to Add Math Equations to Confluence
Confluence is excellent for documentation — but if you try to write a mathematical equation natively, you'll quickly discover it has no support for it. No LaTeX renderer, no equation editor, no formula blocks. ...]]></description><link>https://blog.yamuno.com/how-to-add-math-equations-to-confluence-latex-guide</link><guid isPermaLink="true">https://blog.yamuno.com/how-to-add-math-equations-to-confluence-latex-guide</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:47:55 GMT</pubDate><enclosure url="https://assets.yamuno.com/images/blog/how-to-add-math-equations-to-confluence.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-how-to-add-math-equations-to-confluence">How to Add Math Equations to Confluence</h1>
<p>Confluence is excellent for documentation — but if you try to write a mathematical equation natively, you'll quickly discover it has no support for it. No LaTeX renderer, no equation editor, no formula blocks. Just plain text.</p>
<p>For engineers, data scientists, researchers, and educators, this is a real problem. <a target="_blank" href="https://marketplace.atlassian.com/apps/1231896/latex-math-for-confluence?hosting=cloud&amp;tab=overview">LaTeX Math for Confluence</a> solves it — adding full LaTeX rendering powered by MathJax directly inside Confluence Cloud.</p>
<hr />
<h2 id="heading-what-is-latex">What Is LaTeX?</h2>
<p>LaTeX is the standard notation system for mathematical, scientific, and engineering formulas. It's used in academic papers, research docs, and technical specifications worldwide.</p>
<p>A simple example — the quadratic formula written in LaTeX:</p>
<pre><code>x = \frac{-b \pm \sqrt{b^<span class="hljs-number">2</span> - <span class="hljs-number">4</span>ac}}{<span class="hljs-number">2</span>a}
</code></pre><p>Which renders as the familiar formula you learned in school. LaTeX Math for Confluence turns that syntax into a properly rendered equation inside your Confluence page.</p>
<hr />
<h2 id="heading-adding-an-inline-equation">Adding an Inline Equation</h2>
<p>Inline equations appear within a line of text — perfect for referencing variables or simple expressions mid-sentence.</p>
<ol>
<li>Open a Confluence page in edit mode</li>
<li>Type <code>/LaTeX Inline</code> to insert the inline macro</li>
<li>Type your LaTeX expression inside the macro</li>
<li>The equation renders inline with your text</li>
</ol>
<p><strong>Example:</strong> Writing <code>E = mc^2</code> inline renders Einstein's mass-energy equivalence right inside your sentence.</p>
<hr />
<h2 id="heading-adding-a-block-equation">Adding a Block Equation</h2>
<p>Block equations display on their own line, centred — ideal for key formulas, derivations, or anything you want to stand out.</p>
<ol>
<li>Open a Confluence page in edit mode</li>
<li>Type <code>/LaTeX Block</code> to insert the block macro</li>
<li>Write your LaTeX inside the macro</li>
<li>The equation renders as a centred display formula</li>
</ol>
<p><strong>Example:</strong> A block equation for the normal distribution probability density function:</p>
<pre><code>f(x) = \frac{<span class="hljs-number">1</span>}{\sigma\sqrt{<span class="hljs-number">2</span>\pi}} e^{-\frac{<span class="hljs-number">1</span>}{<span class="hljs-number">2</span>}\left(\frac{x-\mu}{\sigma}\right)^<span class="hljs-number">2</span>}
</code></pre><hr />
<h2 id="heading-live-preview-as-you-type">Live Preview as You Type</h2>
<p>You don't have to save the page to see how your formula looks. The LaTeX macro includes a <strong>live preview panel</strong> that renders your equation in real time as you type. If you make a syntax error, it flags it immediately — no more saving, checking, editing, saving again.</p>
<hr />
<h2 id="heading-common-latex-expressions-for-confluence">Common LaTeX Expressions for Confluence</h2>
<p>Here are a few frequently used formulas to get started:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>What you want</td><td>LaTeX</td></tr>
</thead>
<tbody>
<tr>
<td>Fraction</td><td><code>\frac{a}{b}</code></td></tr>
<tr>
<td>Square root</td><td><code>\sqrt{x}</code></td></tr>
<tr>
<td>Summation</td><td><code>\sum_{i=1}^{n} x_i</code></td></tr>
<tr>
<td>Integral</td><td><code>\int_{a}^{b} f(x)\,dx</code></td></tr>
<tr>
<td>Greek letters</td><td><code>\alpha</code>, <code>\beta</code>, <code>\gamma</code>, <code>\sigma</code></td></tr>
<tr>
<td>Subscript / superscript</td><td><code>x_i</code>, <code>x^2</code></td></tr>
<tr>
<td>Matrix</td><td><code>\begin{bmatrix} a &amp; b \\ c &amp; d \end{bmatrix}</code></td></tr>
<tr>
<td>Limit</td><td><code>\lim_{x \to \infty} f(x)</code></td></tr>
<tr>
<td>Partial derivative</td><td><code>\frac{\partial f}{\partial x}</code></td></tr>
<tr>
<td>Infinity</td><td><code>\infty</code></td></tr>
</tbody>
</table>
</div><hr />
<h2 id="heading-who-uses-latex-math-for-confluence">Who Uses LaTeX Math for Confluence?</h2>
<p><strong>Data science and ML teams</strong> — document model architectures, loss functions, and statistical methods alongside their methodology notes.</p>
<p><strong>Engineering teams</strong> — write technical specs with signal processing formulas, control system equations, or physics derivations.</p>
<p><strong>Finance teams</strong> — document quantitative models, pricing formulas, and risk calculations.</p>
<p><strong>Educators and researchers</strong> — publish course materials, research summaries, and academic content directly in Confluence.</p>
<p><strong>Academic institutions</strong> — use Confluence as a shared knowledge base where equations are first-class content.</p>
<hr />
<h2 id="heading-access-control-for-admins">Access Control for Admins</h2>
<p>Not every team needs LaTeX editing rights. LaTeX Math for Confluence lets admins control who can insert and edit macros — so you can restrict formula editing to specific users while everyone else reads the rendered output.</p>
<hr />
<h2 id="heading-runs-on-atlassian-forge">Runs on Atlassian Forge</h2>
<p>LaTeX Math for Confluence is built on Atlassian Forge — all rendering happens within Atlassian's infrastructure. No data is sent to external servers.</p>
<hr />
<h2 id="heading-getting-started">Getting Started</h2>
<ol>
<li>Install <a target="_blank" href="https://marketplace.atlassian.com/apps/1231896/latex-math-for-confluence?hosting=cloud&amp;tab=overview">LaTeX Math for Confluence</a> from the Atlassian Marketplace</li>
<li>Open any Confluence page in edit mode</li>
<li>Type <code>/LaTeX Inline</code> or <code>/LaTeX Block</code></li>
<li>Start writing equations</li>
</ol>
<p>Full documentation: <a target="_blank" href="/docs/latex-math-for-confluence">/docs/latex-math-for-confluence</a></p>
<hr />
<p><em>Questions? Reach out via our <a target="_blank" href="https://yamuno.atlassian.net/servicedesk/customer/portals">support portal</a>.</em></p>
]]></content:encoded></item><item><title><![CDATA[Forge-native vs Externally Hosted Atlassian Apps: A Practical Security Checklist]]></title><description><![CDATA[A Practical Security Checklist for Atlassian Marketplace Apps
When teams evaluate Atlassian Marketplace apps, most conversations start with features.
In reality, adoption often depends on a different question:
How and where does this app handle our d...]]></description><link>https://blog.yamuno.com/forge-native-vs-externally-hosted-atlassian-apps-a-practical-security-checklist</link><guid isPermaLink="true">https://blog.yamuno.com/forge-native-vs-externally-hosted-atlassian-apps-a-practical-security-checklist</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:47:53 GMT</pubDate><enclosure url="https://assets.yamuno.com/images/blog/forge-native-security-checklist-hero.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-a-practical-security-checklist-for-atlassian-marketplace-apps">A Practical Security Checklist for Atlassian Marketplace Apps</h1>
<p>When teams evaluate Atlassian Marketplace apps, most conversations start with features.</p>
<p>In reality, adoption often depends on a different question:</p>
<p><strong>How and where does this app handle our data?</strong></p>
<p>If you're a Jira admin, Confluence admin, or part of an IT/security team, this guide gives you a practical way to evaluate app architecture before rollout.</p>
<h2 id="heading-why-architecture-should-be-reviewed-first">🏗️ Why architecture should be reviewed first</h2>
<p>A powerful app is still a bad fit if it creates friction with security review, procurement, or compliance requirements.</p>
<p>Architecture decisions directly affect:</p>
<ul>
<li>how quickly your app gets approved</li>
<li>how easily your team can justify risk posture</li>
<li>how confidently stakeholders can scale usage</li>
</ul>
<p>That's why it helps to assess hosting model first, then compare feature depth.</p>
<h2 id="heading-forge-native-vs-externally-hosted-in-plain-language">⚖️ Forge-native vs externally hosted (in plain language)</h2>
<h3 id="heading-forge-native-apps">Forge-native apps</h3>
<p>Forge-native apps run on Atlassian's platform and use Atlassian-managed infrastructure patterns.</p>
<p>For many teams, that means security review conversations are often simpler because the model aligns closely with existing Atlassian trust expectations.</p>
<h3 id="heading-externally-hosted-apps">Externally hosted apps</h3>
<p>Externally hosted apps may process data outside Atlassian-managed infrastructure.</p>
<p>This can still be valid depending on your policy — but usually requires deeper review around data flow, storage location, access controls, incident handling, and vendor operations.</p>
<h2 id="heading-10-point-security-checklist-for-marketplace-app-evaluation">✅ 10-point security checklist for Marketplace app evaluation</h2>
<p>Use this as a quick internal review template:</p>
<ol>
<li><strong>Data location:</strong> Where is data processed and stored?</li>
<li><strong>Data flow clarity:</strong> Is there a clear diagram or explanation of what leaves Atlassian?</li>
<li><strong>Access model:</strong> Who can access stored data (vendor staff, support, automation)?</li>
<li><strong>Authentication controls:</strong> How are API keys/tokens handled and rotated?</li>
<li><strong>Encryption:</strong> Is data encrypted in transit and at rest?</li>
<li><strong>Residency/compliance fit:</strong> Does the architecture align with your data residency and policy needs?</li>
<li><strong>Retention &amp; deletion:</strong> Are retention and deletion mechanisms explicit?</li>
<li><strong>Auditability:</strong> Can you trace key actions/events for investigation?</li>
<li><strong>Incident response:</strong> Is there a documented process and communication path?</li>
<li><strong>Operational maturity:</strong> Are support SLAs and escalation paths clear?</li>
</ol>
<h2 id="heading-a-practical-rollout-model-for-it-and-admins">🚀 A practical rollout model for IT and admins</h2>
<p>A simple rollout sequence keeps teams moving without skipping diligence:</p>
<ol>
<li><strong>Shortlist by architecture fit</strong> (not by features alone)</li>
<li><strong>Run the 10-point checklist</strong></li>
<li><strong>Pilot with one team/project</strong></li>
<li><strong>Collect operational feedback</strong> (performance, support responsiveness, admin friction)</li>
<li><strong>Scale with a documented approval path</strong></li>
</ol>
<p>This approach helps avoid expensive rework after procurement or security feedback.</p>
<h2 id="heading-final-takeaway">💡 Final takeaway</h2>
<p>The best Marketplace app isn't just feature-rich — it's the one your organization can adopt with confidence.</p>
<p>When architecture is aligned from day one, teams spend less time in approval loops and more time creating value inside Jira and Confluence.</p>
<hr />
<p>If your team is reviewing Atlassian apps this quarter, start with one question:</p>
<p><strong>Where does our data live, and what is the operational risk model?</strong></p>
<p>That single question often saves weeks of back-and-forth later.</p>
<h2 id="heading-our-forge-native-apps">🔗 Our Forge-native apps</h2>
<p>All Yamuno apps run on Atlassian Forge — no external servers, no data leaving Atlassian infrastructure.</p>
<p>👉 <a target="_blank" href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence?hosting=cloud&amp;tab=overview">Markdown Exporter &amp; Importer for Confluence</a></p>
<p>👉 <a target="_blank" href="https://marketplace.atlassian.com/apps/1238017/markdown-renderer-for-confluence?hosting=cloud&amp;tab=overview">Markdown Renderer for Confluence</a></p>
<p>👉 <a target="_blank" href="https://marketplace.atlassian.com/apps/1602849193/latex-math-for-confluence-formulas-equations?hosting=cloud&amp;tab=overview">LaTeX Math for Confluence</a></p>
<p>👉 <a target="_blank" href="https://marketplace.atlassian.com/apps/1238147/advanced-attachment-manager-for-confluence?hosting=cloud&amp;tab=overview">Advanced Attachment Manager for Confluence</a></p>
<p>👉 <a target="_blank" href="https://marketplace.atlassian.com/apps/842672747/charts-reports-and-graphs-for-jira-dashboard?hosting=cloud&amp;tab=overview">Charts, Reports and Graphs for Jira Dashboard</a></p>
<hr />
<p><em>Have questions about our security model or app architecture? Reach out via our <a target="_blank" href="https://yamuno.atlassian.net/servicedesk/customer/portals">support portal</a> — we're happy to answer any review questions your team has.</em></p>
]]></content:encoded></item><item><title><![CDATA[Confluence vs Notion for Engineering Teams: An Honest Comparison]]></title><description><![CDATA[Confluence vs Notion for Engineering Teams
Every engineering team ends up having this conversation. Notion looks great, feels fast, and your product team is already using it. Confluence is what the rest of the company uses and it connects to Jira. Wh...]]></description><link>https://blog.yamuno.com/confluence-vs-notion-for-engineering-teams-an-honest-comparison</link><guid isPermaLink="true">https://blog.yamuno.com/confluence-vs-notion-for-engineering-teams-an-honest-comparison</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:47:51 GMT</pubDate><enclosure url="https://assets.yamuno.com/images/blog/confluence-vs-notion-engineering.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-confluence-vs-notion-for-engineering-teams">Confluence vs Notion for Engineering Teams</h1>
<p>Every engineering team ends up having this conversation. Notion looks great, feels fast, and your product team is already using it. Confluence is what the rest of the company uses and it connects to Jira. Which one do you actually choose for your engineering docs?</p>
<p>This isn't a feature checklist. It's a practical breakdown of where each tool wins and loses for the specific things engineering teams care about.</p>
<hr />
<h2 id="heading-where-notion-wins">Where Notion Wins</h2>
<h3 id="heading-cleaner-editing-experience">Cleaner editing experience</h3>
<p>Notion's editor is genuinely better to write in. Slash commands, drag-and-drop blocks, inline databases — it's fast and intuitive. New team members pick it up in minutes without any training.</p>
<p>Confluence's editor has improved significantly but still feels heavier. Formatting can behave unpredictably, especially with tables and code blocks.</p>
<h3 id="heading-flexible-databases">Flexible databases</h3>
<p>Notion's database feature is genuinely powerful for tracking things like project status, interview notes, incident logs, or sprint retrospectives. You get table, kanban, gallery, and calendar views on the same data.</p>
<p>Confluence doesn't have an equivalent. You can build tables manually, but they're static — no filtering, no views, no relations.</p>
<h3 id="heading-lighter-setup">Lighter setup</h3>
<p>Notion has no infrastructure to manage. You sign up, create a workspace, and start writing. No spaces, no permission schemes, no schemes at all — just pages and databases.</p>
<hr />
<h2 id="heading-where-confluence-wins">Where Confluence Wins</h2>
<h3 id="heading-jira-integration">Jira integration</h3>
<p>If your team uses Jira, Confluence is the clear choice. You can embed live Jira issue lists, link pages to Jira epics, create requirements docs that stay connected to the tickets implementing them, and reference sprints directly from meeting notes.</p>
<p>Notion has a Jira integration but it's surface-level — you can embed issue links, not live filtered views.</p>
<h3 id="heading-code-documentation">Code documentation</h3>
<p>Confluence has a proper code macro with syntax highlighting for virtually every language. Code blocks are first-class citizens. For teams writing RFCs, architecture decision records, API docs, or runbooks with embedded scripts, this matters.</p>
<p>Notion's code blocks work but feel like an afterthought — no line numbers, limited language support, no copy-to-clipboard in some views.</p>
<h3 id="heading-permissions-and-access-control">Permissions and access control</h3>
<p>Confluence has granular space-level and page-level permissions. You can restrict a page to a specific group, make a space public to specific users, and manage access at every level. This matters when your engineering org shares a Confluence instance with legal, HR, or finance.</p>
<p>Notion's permissions are simpler — which is also its weakness. Team plans give you workspace-level controls but page-level restrictions require careful setup and can be easy to misconfigure.</p>
<h3 id="heading-scale">Scale</h3>
<p>Confluence handles very large documentation sets better. A 10,000-page knowledge base in Notion becomes slow and hard to navigate. Confluence's space structure, hierarchical pages, and search all hold up at enterprise scale.</p>
<h3 id="heading-compliance-and-data-residency">Compliance and data residency</h3>
<p>For teams in regulated industries, Confluence Cloud offers data residency options and SOC 2 / ISO 27001 certifications. Atlassian's Forge platform means apps built on top of it run on Atlassian's own infrastructure — no data leaving the platform.</p>
<p>Notion has made progress here but is still playing catch-up for enterprise compliance requirements.</p>
<hr />
<h2 id="heading-the-honest-take">The Honest Take</h2>
<p><strong>Choose Notion if:</strong></p>
<ul>
<li>Your team is small (under 20 engineers)</li>
<li>You're not using Jira</li>
<li>You want a lightweight tool with minimal setup</li>
<li>Your docs are mostly project notes, meeting notes, and knowledge bases — not technical specs</li>
</ul>
<p><strong>Choose Confluence if:</strong></p>
<ul>
<li>You're already on Jira — the integration alone justifies it</li>
<li>You have a large engineering org with complex permission needs</li>
<li>You write a lot of code-heavy docs (RFCs, runbooks, API references)</li>
<li>You're in a regulated industry or need enterprise compliance</li>
<li>You need your docs to scale to hundreds of pages across many teams</li>
</ul>
<hr />
<h2 id="heading-making-confluence-better-for-engineers">Making Confluence Better for Engineers</h2>
<p>Confluence's biggest gap for engineering teams is markdown support. Developers think in markdown — it's what they use in Git, in READMEs, in pull requests. Writing in Confluence's rich text editor feels foreign.</p>
<p>A few apps close this gap significantly:</p>
<p><strong><a target="_blank" href="https://marketplace.atlassian.com/apps/1238017/markdown-renderer-for-confluence?hosting=cloud&amp;tab=overview">Markdown Renderer for Confluence</a></strong> — Write pages in raw markdown inside Confluence. Real-time preview, GitHub-flavoured markdown, math support, code highlighting.</p>
<p><strong><a target="_blank" href="https://marketplace.atlassian.com/apps/1231894/markdown-importer-for-confluence?hosting=cloud&amp;tab=overview">Markdown Exporter &amp; Importer</a></strong> — Import your existing markdown files from GitHub or GitLab directly into Confluence. Export pages back to markdown for Git sync.</p>
<p><strong><a target="_blank" href="https://marketplace.atlassian.com/apps/1602849193/latex-math-for-confluence-formulas-equations?hosting=cloud&amp;tab=overview">LaTeX Math for Confluence</a></strong> — For teams doing any kind of mathematical documentation — algorithms, ML models, data science — native LaTeX rendering in Confluence pages.</p>
<p>These don't turn Confluence into Notion. But they do make Confluence feel much more natural for developers who live in markdown and code.</p>
<hr />
<h2 id="heading-bottom-line">Bottom Line</h2>
<p>Notion is the better writing tool. Confluence is the better engineering platform. If you're choosing for a team that already uses Jira and needs to document systems at scale, Confluence is the stronger foundation — especially once you add the right apps to fill in the gaps.</p>
<hr />
<p><em>Building on Confluence and want to make it more developer-friendly? Check out our <a target="_blank" href="/products">apps for Confluence</a> built specifically for technical teams.</em></p>
]]></content:encoded></item><item><title><![CDATA[Transform Your Jira Data Into Beautiful, Interactive Charts – Introducing Charts - Reports and Graphs for Jira Dashboard!]]></title><description><![CDATA[Introducing Charts - Reports and Graphs for Jira Dashboard 📊
We're thrilled to announce the launch of Charts - Reports and Graphs for Jira Dashboard! This powerful new app transforms your Jira data into beautiful, interactive visualizations that bri...]]></description><link>https://blog.yamuno.com/transform-your-jira-data-into-beautiful-interactive-charts-introducing-charts-reports-and-graphs-for-jira-dashboard</link><guid isPermaLink="true">https://blog.yamuno.com/transform-your-jira-data-into-beautiful-interactive-charts-introducing-charts-reports-and-graphs-for-jira-dashboard</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:47:49 GMT</pubDate><enclosure url="https://marketplace.atlassian.com/product-listing/files/d1c08532-6394-4fb9-a59c-45b78094ad67?width=1840&amp;height=900" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introducing-charts-reports-and-graphs-for-jira-dashboard">Introducing Charts - Reports and Graphs for Jira Dashboard 📊</h1>
<p>We're thrilled to announce the launch of <a target="_blank" href="https://marketplace.atlassian.com/apps/842672747/charts-reports-and-graphs-for-jira-dashboard?hosting=cloud&amp;tab=overview"><strong>Charts - Reports and Graphs for Jira Dashboard</strong></a>! This powerful new app transforms your <a target="_blank" href="https://www.atlassian.com/software/jira">Jira</a> data into beautiful, interactive visualizations that bring clarity to your project insights and team performance.</p>
<h2 id="heading-what-makes-charts-reports-and-graphs-for-jira-dashboard-special">🌟 What Makes Charts - Reports and Graphs for Jira Dashboard Special</h2>
<h3 id="heading-interactive-charts-and-table-views">📈 Interactive Charts and Table Views</h3>
<p>Visualize your Jira issues with stunning chart types including:</p>
<ul>
<li><strong>Bar Charts</strong>: Perfect for comparing quantities across categories</li>
<li><strong>Line Charts</strong>: Ideal for tracking trends over time</li>
<li><strong>Pie Charts</strong>: Great for showing proportions and distributions</li>
<li><strong>Area Charts</strong>: Excellent for cumulative data visualization</li>
<li><strong>Scatter Charts</strong>: Useful for correlation analysis</li>
<li><strong>Dynamic Tables</strong>: Detailed data in organized, sortable formats</li>
</ul>
<p><img src="https://marketplace.atlassian.com/product-listing/files/d1c08532-6394-4fb9-a59c-45b78094ad67?width=1840&amp;height=900" alt="Charts Dashboard Overview" /></p>
<h3 id="heading-advanced-customization-and-branding">🎨 Advanced Customization and Branding</h3>
<p>Make your charts truly yours with comprehensive branding options:</p>
<ul>
<li><strong>Custom Logos</strong>: Add your company logo to every chart</li>
<li><strong>Color Schemes</strong>: Choose from preset palettes or create custom colors</li>
<li><strong>Chart Styling</strong>: Adjust opacity, segment order, and axis labels</li>
<li><strong>Layout Control</strong>: Position legends, hide elements, and fine-tune appearance</li>
</ul>
<p><img src="https://marketplace.atlassian.com/product-listing/files/89ae804d-98c6-4d55-90f1-f819bede128b?width=1840&amp;height=900" alt="Custom Branding and Customization" /></p>
<h3 id="heading-flexible-data-selection">🔍 Flexible Data Selection</h3>
<p>Choose exactly what data to visualize:</p>
<ul>
<li><strong>Project Selection</strong>: Pick single or multiple projects</li>
<li><strong>Field Filtering</strong>: Focus on specific custom or system fields</li>
<li><strong>Label Targeting</strong>: Include only issues with certain labels</li>
<li><strong>JQL Queries</strong>: Use advanced JQL for precise data filtering</li>
</ul>
<p><img src="https://marketplace.atlassian.com/product-listing/files/fa0bb0af-59ec-4f4d-81a3-f506a5330d4a?width=1840&amp;height=900" alt="Data Visualization Example" /></p>
<h3 id="heading-powerful-grouping-and-analysis">📊 Powerful Grouping and Analysis</h3>
<p>Gain deeper insights with flexible grouping options:</p>
<ul>
<li><strong>Status Grouping</strong>: See issue distribution across workflow states</li>
<li><strong>Assignee Analysis</strong>: Track team member workloads</li>
<li><strong>Issue Type Breakdown</strong>: Analyze task, bug, and feature distributions</li>
<li><strong>Project Comparison</strong>: Compare metrics across multiple projects</li>
<li><strong>Label Analysis</strong>: Group by custom labels for specialized insights</li>
</ul>
<h2 id="heading-why-your-team-needs-this">💡 Why Your Team Needs This</h2>
<p><a target="_blank" href="https://marketplace.atlassian.com/apps/842672747/charts-reports-and-graphs-for-jira-dashboard?hosting=cloud&amp;tab=overview">Charts for Jira Dashboard</a> solves the challenge of making sense of complex Jira data. Instead of struggling with spreadsheets or static reports, you get:</p>
<h3 id="heading-real-time-insights">⚡ Real-Time Insights</h3>
<ul>
<li>Live data updates directly from your Jira projects</li>
<li>Interactive dashboards that refresh automatically</li>
<li>Instant visualization of project changes</li>
</ul>
<h3 id="heading-better-decision-making">🎯 Better Decision Making</h3>
<ul>
<li>Clear visual patterns in your data</li>
<li>Quick identification of bottlenecks and trends</li>
<li>Data-driven insights for sprint planning and resource allocation</li>
</ul>
<h3 id="heading-enhanced-team-communication">👥 Enhanced Team Communication</h3>
<ul>
<li>Visual reports that everyone can understand</li>
<li>Branded charts for client presentations</li>
<li>Shareable dashboards across your organization</li>
</ul>
<h2 id="heading-common-use-cases">🚀 Common Use Cases</h2>
<h3 id="heading-sprint-management">Sprint Management</h3>
<ul>
<li><strong>Sprint Burndown</strong>: Track remaining work in current sprints</li>
<li><strong>Velocity Charts</strong>: Monitor team performance over time</li>
<li><strong>Sprint Health</strong>: Identify blockers and risks early</li>
</ul>
<h3 id="heading-project-monitoring">Project Monitoring</h3>
<ul>
<li><strong>Project Status</strong>: Overall health dashboards</li>
<li><strong>Issue Distribution</strong>: Types, priorities, and assignments</li>
<li><strong>Progress Tracking</strong>: Completion rates and timelines</li>
</ul>
<h3 id="heading-team-analytics">Team Analytics</h3>
<ul>
<li><strong>Workload Distribution</strong>: Balance assignments across team members</li>
<li><strong>Performance Metrics</strong>: Individual and team productivity insights</li>
<li><strong>Capacity Planning</strong>: Resource allocation and sprint planning</li>
</ul>
<h2 id="heading-get-started-today">🔗 Get Started Today</h2>
<p>Ready to transform your Jira data into actionable insights?</p>
<p>👉 <a target="_blank" href="https://marketplace.atlassian.com/apps/842672747/charts-reports-and-graphs-for-jira-dashboard?hosting=cloud&amp;tab=overview">Install Charts for Jira Dashboard</a></p>
<h3 id="heading-quick-start-guide">Quick Start Guide</h3>
<ol>
<li><strong>Install the App</strong>: Add Charts gadget to your Jira dashboard</li>
<li><strong>Select Data</strong>: Choose projects, fields, or labels to visualize</li>
<li><strong>Pick Chart Type</strong>: Select the visualization that fits your data story</li>
<li><strong>Customize</strong>: Add your branding and adjust styling</li>
<li><strong>Share</strong>: Add to dashboards and share with your team</li>
</ol>
<h2 id="heading-learn-more">📚 Learn More</h2>
<p>Explore our comprehensive documentation to master all features:</p>
<p>👉 <a target="_blank" href="/docs/charts-for-jira-dashboard">Charts for Jira Dashboard Documentation</a></p>
<p>Need help getting started? Our <a target="_blank" href="https://yamuno.atlassian.net/servicedesk/customer/portals">support team</a> is here to assist you with setup and best practices.</p>
<h2 id="heading-ready-to-visualize-your-success">✨ Ready to Visualize Your Success?</h2>
<p>Transform scattered Jira data into clear, actionable insights. Whether you're tracking sprint progress, analyzing team performance, or presenting to stakeholders, Charts for Jira Dashboard gives you the tools to tell your data's story.</p>
<p><strong><a target="_blank" href="https://marketplace.atlassian.com/apps/842672747/charts-reports-and-graphs-for-jira-dashboard?hosting=cloud&amp;tab=overview">Start creating beautiful charts today!</a></strong></p>
<hr />
<p><em>Have questions or feedback? We'd love to hear from you via our <a target="_blank" href="https://yamuno.atlassian.net/servicedesk/customer/portals">support portal</a>. Your input helps us continue improving our apps to better serve your team's needs.</em></p>
]]></content:encoded></item><item><title><![CDATA[Confluence Clutter? How Advanced Attachment Manager Cleans Up Your Confluence spaces]]></title><description><![CDATA[🚀 Meet Advanced Attachment Manager
Bring order to your Confluence spaces with fast search, powerful filters, and time‑saving bulk actions — all in one place.
✨ Highlights

🔍 Advanced filtering: space, page, hierarchy, usage (used/orphaned), type, u...]]></description><link>https://blog.yamuno.com/confluence-clutter-how-advanced-attachment-manager-cleans-up-your-confluence-spaces</link><guid isPermaLink="true">https://blog.yamuno.com/confluence-clutter-how-advanced-attachment-manager-cleans-up-your-confluence-spaces</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:47:47 GMT</pubDate><enclosure url="https://assets.yamuno.com/images/blog/attachment-manager/post1.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-meet-advanced-attachment-manager">🚀 Meet Advanced Attachment Manager</h2>
<p>Bring order to your Confluence spaces with fast search, powerful filters, and time‑saving bulk actions — all in one place.</p>
<h3 id="heading-highlights">✨ Highlights</h3>
<ul>
<li>🔍 <strong>Advanced filtering</strong>: space, page, hierarchy, usage (used/orphaned), type, uploader, date</li>
<li>🧹 <strong>Bulk actions</strong>: delete, download — with safeguards and audit trail</li>
<li>🧭 <strong>Global dashboard</strong>: see and act across spaces from one screen</li>
<li>📝 <strong>Audit logs</strong>: full history of actions for accountability</li>
<li>🧷 <strong>Orphan detection</strong>: find unused attachments instantly</li>
<li>🔒 <strong>Permission controls</strong>: respect Confluence permissions</li>
</ul>
<p><img src="https://marketplace.atlassian.com/product-listing/files/b2eb0db0-cf66-4726-800b-10e4e147bc05?width=1840&amp;height=900" alt="Filtering" /></p>
<h3 id="heading-how-it-helps">⚡ How it helps</h3>
<ul>
<li>Reclaim storage and speed up Confluence</li>
<li>Save hours otherwise spent searching and cleaning</li>
<li>Strengthen compliance with clear visibility and logs</li>
</ul>
<h3 id="heading-see-it-in-action">👀 See it in action</h3>
<p><img src="https://marketplace.atlassian.com/product-listing/files/45f70994-e4cc-4481-8c60-27c306b34deb?width=1840&amp;height=900" alt="Bulk Actions" /></p>
<h3 id="heading-try-it-now">✅ Try it now</h3>
<ul>
<li>Marketplace: <a target="_blank" href="https://marketplace.atlassian.com/apps/1238147/advanced-attachment-manager-for-confluence?hosting=cloud&amp;tab=overview">Advanced Attachment Manager for Confluence</a></li>
<li>Docs: <a target="_blank" href="/docs/advanced-attachment-manager">Advanced Attachment Manager Documentation</a></li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Export Confluence Pages to Clean Markdown — Introducing Markdown Exporter for Confluence]]></title><description><![CDATA[Introducing Markdown Exporter for Confluence
We're excited to announce that Markdown Exporter for Confluence is now live on the Atlassian Marketplace.
Confluence's built-in export gives you HTML or PDF. Neither is portable. Neither fits a docs-as-cod...]]></description><link>https://blog.yamuno.com/export-confluence-pages-to-clean-markdown-introducing-markdown-exporter-for-confluence</link><guid isPermaLink="true">https://blog.yamuno.com/export-confluence-pages-to-clean-markdown-introducing-markdown-exporter-for-confluence</guid><dc:creator><![CDATA[Yamuno Software]]></dc:creator><pubDate>Thu, 23 Apr 2026 13:47:42 GMT</pubDate><enclosure url="https://assets.yamuno.com/images/blog/markdown-exporter-launch.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introducing-markdown-exporter-for-confluence">Introducing Markdown Exporter for Confluence</h1>
<p>We're excited to announce that <a target="_blank" href="https://marketplace.atlassian.com/apps/102037374"><strong>Markdown Exporter for Confluence</strong></a> is now live on the Atlassian Marketplace.</p>
<p>Confluence's built-in export gives you HTML or PDF. Neither is portable. Neither fits a docs-as-code workflow. Neither works with Obsidian or a static site generator. For teams that live in both Confluence and Markdown — developers, technical writers, and DevOps teams — that gap has been a constant friction point.</p>
<p>Markdown Exporter for Confluence closes it.</p>
<p><img src="https://assets.yamuno.com/markdown-exporter/highlight1.png" alt="Markdown Exporter for Confluence" /></p>
<h2 id="heading-what-is-markdown-exporter-for-confluence">What Is Markdown Exporter for Confluence?</h2>
<p>Markdown Exporter is a Forge-native Confluence Cloud app that exports any page, page hierarchy, or entire space to clean, well-structured Markdown — without leaving Confluence and without sending data outside Atlassian's infrastructure.</p>
<p>The output is readable, portable Markdown that works immediately with MkDocs, Docusaurus, Obsidian, GitHub, GitLab, and any tool that understands the format.</p>
<h2 id="heading-key-features">Key Features</h2>
<h3 id="heading-single-page-tree-or-full-space">Single Page, Tree, or Full Space</h3>
<p>Export exactly the scope you need:</p>
<ul>
<li><strong>Single page</strong> — export any Confluence page to a <code>.md</code> file in one click</li>
<li><strong>Page tree</strong> — select a parent page, choose which child pages to include, and download a structured ZIP</li>
<li><strong>Full space</strong> — export an entire Confluence space with the full page hierarchy preserved as folders</li>
</ul>
<p>Multi-page exports are bundled into a ZIP that mirrors your Confluence structure.</p>
<h3 id="heading-yaml-front-matter">YAML Front Matter</h3>
<p><img src="https://assets.yamuno.com/markdown-exporter/highlight2.png" alt="YAML Front Matter" /></p>
<p>Optionally include YAML front matter at the top of every exported file. Built-in fields include <code>title</code>, <code>author</code>, <code>date</code>, <code>space</code>, and <code>confluence_id</code> — each individually toggleable. You can also define your own custom key-value fields to tag exports for downstream pipelines or static site generators.</p>
<h3 id="heading-obsidian-wikilinks-mode">Obsidian Wikilinks Mode</h3>
<p>Enable Obsidian mode and all internal Confluence page links are automatically converted to <code>[[Page Title]]</code> wikilink format. Drop the export into your Obsidian vault and the links resolve as if they were native notes.</p>
<h3 id="heading-custom-filename-patterns">Custom Filename Patterns</h3>
<p><img src="https://assets.yamuno.com/markdown-exporter/highlight3.png" alt="Custom Filename Patterns" /></p>
<p>Define how your exported files are named using <code>{title}</code>, <code>{date}</code>, and <code>{id}</code> tokens. Useful for building archives where filenames need to be predictable, sortable, or unique.</p>
<h3 id="heading-live-markdown-preview">Live Markdown Preview</h3>
<p>Before downloading, preview the rendered Markdown of any page. What you see in the preview is exactly what ends up in the file — no surprises.</p>
<h3 id="heading-in-tree-search">In-Tree Search</h3>
<p>Search pages by title directly in the export tree with live highlighting. Useful when you're working with large spaces and only need a specific subset of pages.</p>
<h3 id="heading-runs-entirely-on-atlassian-forge">Runs Entirely on Atlassian Forge</h3>
<p>Markdown Exporter is 100% Forge-native. All processing happens inside Atlassian's infrastructure. Exported files are delivered directly to your browser — nothing is stored on external servers.</p>
<h2 id="heading-who-is-it-for">Who Is It For?</h2>
<p>Markdown Exporter is built for teams that need their Confluence content outside Confluence:</p>
<ul>
<li><strong>Developers</strong> syncing documentation with Git repositories or publishing to static sites</li>
<li><strong>Technical writers</strong> migrating content between platforms or maintaining a backup in a readable format</li>
<li><strong>DevOps and platform teams</strong> building docs-as-code pipelines where Confluence is the editing surface and Git is the source of truth</li>
<li><strong>Obsidian users</strong> who want their team's Confluence knowledge base available as a local, searchable vault</li>
<li><strong>Anyone running a Confluence migration</strong> who needs clean Markdown output as the intermediate format</li>
</ul>
<h2 id="heading-getting-started">Getting Started</h2>
<ol>
<li><strong>Install the app</strong> from the <a target="_blank" href="https://marketplace.atlassian.com/apps/102037374">Atlassian Marketplace</a></li>
<li>Open any Confluence page and click <strong>•••</strong> (More actions) → <strong>Export to Markdown</strong></li>
<li>Choose your scope — single page, page tree, or full space</li>
<li>Configure options — front matter, filename pattern, Obsidian mode</li>
<li>Preview, then export and download your Markdown files</li>
</ol>
<p>👉 <a target="_blank" href="https://marketplace.atlassian.com/apps/102037374">Install Markdown Exporter for Confluence</a></p>
<p>👉 <a target="_blank" href="/docs/markdown-exporter-for-confluence">Read the Documentation</a></p>
<hr />
<p><em>Questions or feedback? Reach out via our <a target="_blank" href="https://yamuno.atlassian.net/servicedesk/customer/portals">support portal</a> — we'd love to hear how your team is using it.</em></p>
]]></content:encoded></item></channel></rss>