<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DiagramaHub Blog</title>
    <link>https://www.diagramahub.com/blog</link>
    <atom:link href="https://www.diagramahub.com/blog/rss-en.xml" rel="self" type="application/rss+xml" />
    <description>Notes and news from DiagramaHub</description>
    <language>en</language>
    <lastBuildDate>Sun, 04 Oct 2026 12:00:00 GMT</lastBuildDate>
    <item>
      <title>A more reliable AI chat: 99% valid diagrams on the first try</title>
      <link>https://www.diagramahub.com/blog/a-more-reliable-ai-chat</link>
      <guid isPermaLink="true">https://www.diagramahub.com/blog/a-more-reliable-ai-chat</guid>
      <pubDate>Sun, 04 Oct 2026 12:00:00 GMT</pubDate>
      <dc:creator>DiagramaHub Team</dc:creator>
      <description>With 0.8.1 and 0.8.2, the AI chat goes from 88% to 99% valid diagrams, the diagram always reaches the preview, and provider errors finally explain themselves.</description>
      <category>ai</category>
      <category>release</category>
      <category>security</category>
      <content:encoded><![CDATA[<p>Asking an AI for a diagram only helps if what comes back actually renders. If you have to fix the syntax by hand or copy code out of the chat into the editor, the shortcut isn&#39;t one anymore. In <strong>0.8.1</strong> and <strong>0.8.2</strong> we went after exactly that: measure why the chat failed, then fix every cause.</p>
<h2 id="from-88-to-99-valid-diagrams">From 88% to 99% valid diagrams</h2>
<p>We built a benchmark with <strong>160 cases across 4 models</strong>. The chat produced a valid diagram on the first try <strong>88%</strong> of the time; with 0.8.1 it reaches <strong>99%</strong>. What we fixed:</p>
<ul>
<li><strong>The streaming chat — the one the app uses — sent a minimal prompt</strong>, without the expected format or any syntax rules.</li>
<li><strong>Replies were getting cut off</strong> at the token limit, because reasoning models spend part of it thinking. A code request now gets 8,192 tokens.</li>
<li>&quot;Create a flow… (does it need surgery?)&quot; was treated as a question because of the question mark.</li>
<li><strong>Syntax rules were checked against the real renderers</strong>: ASCII identifiers in DBML, valid D2 shapes, PlantUML activity syntax…</li>
</ul>
<p>The API&#39;s <code>/ai/generate-diagram</code> endpoint improves as well: from 72% to 98% valid diagrams.</p>
<h2 id="the-diagram-always-reaches-the-preview">The diagram always reaches the preview</h2>
<p>0.8.2 fixes a really annoying one. The chat guessed from keywords whether your message asked for a diagram or asked a question, and only looked for code in the first case. Requests like &quot;Can you make…?&quot;, &quot;I need…&quot; or &quot;Add to it…&quot; were taken as questions: the model did answer with the diagram, but it showed up as text broken into fragments, with no preview and no accept button.</p>
<p>Now <strong>the model&#39;s reply decides</strong>: if it carries a diagram, it&#39;s shown with a preview, validated, and you can accept or reject it. Measured with real Gemini calls, 7 out of 7 requests of that kind used to leave the code in the chat; now it&#39;s 0 out of 7, across the 4 diagram types. Questions are still answered with text.</p>
<pre class="mermaid">flowchart TD
    A[Model reply] --&gt; B{Cut at the limit?}
    B --&gt;|Yes| C[Notice, not applied]
    B --&gt;|No| D{Carries a diagram?}
    D --&gt;|No| E[Text answer]
    D --&gt;|Yes| F{Does it render?}
    F --&gt;|Yes| G[Preview: accept or reject]
    F --&gt;|&quot;No (Mermaid or D2)&quot;| H[Automatic fix, once]
    H --&gt; G</pre>
<h2 id="cut-replies-and-automatic-fixes">Cut replies and automatic fixes</h2>
<p>Every chat reply now gets the 8,192-token cap, and <strong>a cut reply is never applied</strong>: you see a notice instead of a broken fragment.</p>
<p>There&#39;s also an optional <strong>automatic fix</strong> (Settings → AI, on by default): if generated Mermaid or D2 code doesn&#39;t render, the model is asked to fix it, once. It never runs for PlantUML or DBML.</p>
<h2 id="clear-errors-and-current-models">Clear errors and current models</h2>
<p>Any provider failure used to look like a &quot;rate limit&quot;. DiagramaHub now tells apart <strong>invalid key, no credits, model unavailable and rate limit</strong>, and <strong>&quot;Test connection&quot;</strong> makes a real call with the model you picked.</p>
<p>The model catalog is up to date, checked against each provider&#39;s docs and with live calls: Claude Sonnet 5.5 / Opus 5.5 / Fable 5.1, OpenAI gpt-6-luna / gpt-6.1-sol / gpt-6-astra, DeepSeek deepseek-flash, Gemini 3.8-flash and MiniMax M3. If you had saved a model that&#39;s no longer listed, it keeps working and is marked &quot;retired&quot;.</p>
<h2 id="the-whole-chat-in-your-language">The whole chat in your language</h2>
<p>The backend now receives the real interface language (it was always Spanish before). With 0.8.2 the chat is fully available in English — messages, preview card, session selector, phases and errors — and chat and provider errors arrive in the user&#39;s language.</p>
<h2 id="security">Security</h2>
<p>0.8.1 also ships security fixes:</p>
<ul>
<li><strong>A user could file diagrams under someone else&#39;s folder</strong>, where they showed up in that folder&#39;s explorer tree and export. The folder must now belong to the same project. If you self-host, run <code>scripts.fix_misfiled_diagrams</code> once (it only reports; <code>--apply</code> repairs, without deleting anything).</li>
<li><strong>Duplicating a diagram</strong> respects the plan limit.</li>
<li><strong>axios 1.20</strong> fixes 12 security advisories (7 high), and the production audit is back to zero.</li>
<li>Import limits apply to the whole request, not per ZIP.</li>
</ul>
<h2 id="try-it">Try it</h2>
<p>Open the chat on any diagram in <a href="https://app.diagramahub.com" target="_blank" rel="noopener noreferrer">DiagramaHub Cloud</a> with your own key, or upgrade your instance from the <a href="https://github.com/diagramahub/diagramahub" target="_blank" rel="noopener noreferrer">repository</a>. The full details are in the <a href="https://github.com/diagramahub/diagramahub/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">changelog</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Export your whole project as context for ChatGPT or Claude</title>
      <link>https://www.diagramahub.com/blog/export-your-project-as-ai-context</link>
      <guid isPermaLink="true">https://www.diagramahub.com/blog/export-your-project-as-ai-context</guid>
      <pubDate>Fri, 02 Oct 2026 12:00:00 GMT</pubDate>
      <dc:creator>DiagramaHub Team</dc:creator>
      <description>Version 0.8.0 exports whole projects as AI-ready Markdown or ZIP, imports Excalidraw drawings and gives the whiteboard a hand-drawn look.</description>
      <category>export</category>
      <category>ai</category>
      <category>whiteboard</category>
      <content:encoded><![CDATA[<p>Your diagrams describe how your system works: authentication flows, the database schema, the sequence between services. That&#39;s exactly the context an AI assistant is missing when you ask about your architecture. Until now you had to copy them one by one. Since <strong>version 0.8.0</strong> you export the whole project in one step.</p>
<h2 id="two-formats-two-uses">Two formats, two uses</h2>
<p>When you export a project (or a single folder) you choose between:</p>
<ul>
<li><strong>ZIP</strong>: one subfolder per project folder, one file per diagram with its language&#39;s extension (<code>.mmd</code>, <code>.puml</code>, <code>.d2</code>, <code>.dbml</code>, or <code>.freehand.json</code> for whiteboards), its description in a <code>.md</code> next to it, a <code>README.md</code> index and a <code>manifest.json</code> to import it again.</li>
<li><strong>A single Markdown file</strong>, in two variants:<ul>
<li><strong>AI context</strong>: starts with a preamble that explains the file to the model, and includes an index with paths, each diagram&#39;s metadata and a token estimate. Ready to paste into ChatGPT or Claude.</li>
<li><strong>Standard</strong>: a clean document for your wiki or repository.</li>
</ul>
</li>
</ul>
<p>Either way, diagrams go in code blocks tagged with their language (<code>mermaid</code>, <code>plantuml</code>, <code>d2</code>, <code>dbml</code>), so any Markdown-aware tool recognizes them.</p>
<h2 id="what-the-flow-looks-like">What the flow looks like</h2>
<pre class="mermaid">flowchart LR
    A[Project in DiagramaHub] --&gt; B{What do you need it for?}
    B --&gt;|Give an AI context| C[AI-context Markdown]
    B --&gt;|Documentation| D[Standard Markdown]
    B --&gt;|Backup or migration| E[ZIP]
    C --&gt; F[ChatGPT / Claude]
    D --&gt; G[Wiki or README]
    E --&gt; H[Import into another instance]</pre>
<p>Before downloading, DiagramaHub shows what will be exported: number of diagrams and folders, size and, for the AI variant, the approximate tokens. You know whether it fits your model&#39;s context window before you paste it.</p>
<h2 id="where-to-find-it">Where to find it</h2>
<ul>
<li>In the editor&#39;s <strong>explorer</strong>, with the download icon (whole project) or from a folder&#39;s menu → <strong>Export folder</strong>.</li>
<li>In the <strong>projects list</strong>.</li>
</ul>
<h2 id="and-back-in-import">And back in: import</h2>
<p>The other half of the story is bringing diagrams in. From the explorer&#39;s upload icon, a folder&#39;s menu (<strong>Import here</strong>) or by <strong>dragging files from your computer</strong> onto the explorer, you can import:</p>
<ul>
<li>Single <code>.mmd</code>, <code>.puml</code>, <code>.d2</code>, <code>.dbml</code> files, Markdown with a code block, and <code>.freehand.json</code> whiteboards.</li>
<li><strong>ZIPs</strong>: DiagramaHub exports restore folders and colors; any other ZIP creates folders from its paths.</li>
<li><strong>Excalidraw drawings</strong> (<code>.excalidraw</code>): shapes, labels, bound arrows, strokes and text become a whiteboard.</li>
</ul>
<p>Before anything is created you get a <strong>preview</strong> with the folders and diagrams to be created, skipped files and why, and your plan&#39;s quota. Import is <strong>all or nothing</strong>: if something fails halfway, what was created is rolled back.</p>
<h2 id="the-whiteboard-now-looks-hand-drawn">The whiteboard now looks hand-drawn</h2>
<p>0.8.0 is also the biggest whiteboard update since it arrived:</p>
<ul>
<li><strong>Hand-drawn look</strong> for shapes, lines and arrows, with stroke styles (Clean, Architect, Artist, Cartoonist) and fills (solid, hachure, cross-hatch).</li>
<li><strong>Smooth freehand strokes</strong> with variable width and <strong>pen pressure</strong>.</li>
<li><strong>Handwriting font</strong> for new text, with a Handwritten / Regular / Code selector.</li>
<li><strong>Lock elements</strong> (Ctrl/Cmd+Shift+L) so they can&#39;t be moved, resized or deleted by accident.</li>
<li><strong>Export to PNG</strong> at 1x, 2x or 3x with an optional transparent background, and download the source as <code>.freehand.json</code>.</li>
<li><strong>Sketch → Mermaid</strong>: shapes with text become nodes and bound arrows become edges of a new flowchart. No AI involved, so the result is exact and repeatable.</li>
</ul>
<p>Existing drawings keep their clean look; only new elements use the hand-drawn style, switchable per element.</p>
<h2 id="no-lock-in">No lock-in</h2>
<p>Your diagrams are text, and now they move in and out of DiagramaHub freely. Take a project to your repository, share it with someone on another instance, or give your AI the full map of your system.</p>
<p>Available now on <a href="https://app.diagramahub.com" target="_blank" rel="noopener noreferrer">DiagramaHub Cloud</a> and in the <a href="https://github.com/diagramahub/diagramahub" target="_blank" rel="noopener noreferrer">self-hosted version</a>. Technical details are in the <a href="https://github.com/diagramahub/diagramahub/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">changelog</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Zero known vulnerabilities and up to 71% less JavaScript</title>
      <link>https://www.diagramahub.com/blog/security-and-a-lighter-load</link>
      <guid isPermaLink="true">https://www.diagramahub.com/blog/security-and-a-lighter-load</guid>
      <pubDate>Wed, 30 Sep 2026 12:00:00 GMT</pubDate>
      <dc:creator>DiagramaHub Team</dc:creator>
      <description>DiagramaHub 0.7.1 clears every known frontend vulnerability, runs the backend as non-root, caps request sizes, makes autosave reliable and lightens the load.</description>
      <category>security</category>
      <category>performance</category>
      <category>release</category>
      <content:encoded><![CDATA[<p>Some releases stand out for a new feature; others stand out because everything just works better. <strong>0.7.1</strong> is the second kind: we focused on security, on never losing an edit, and on making the app download far less JavaScript. There are no new screens, but if you self-host DiagramaHub or use it every day, here&#39;s what changed.</p>
<h2 id="zero-known-vulnerabilities-in-the-frontend">Zero known vulnerabilities in the frontend</h2>
<p>The frontend&#39;s production dependencies had <strong>25 security advisories, one of them high severity</strong>. They&#39;re now at <strong>zero</strong>. We upgraded DOMPurify to 3.4.16 (the library that sanitizes your diagram SVGs), Mermaid to 11.17.2 and react-router to 7.18.4.</p>
<p>We also found something uncomfortable: since the move to pnpm in 0.6.0, the 6 security overrides we force on dependencies were written in npm&#39;s format, and pnpm silently ignored them. They now live in <code>pnpm.overrides</code> and apply again.</p>
<h2 id="a-non-root-backend-and-capped-requests">A non-root backend and capped requests</h2>
<p>Two changes for anyone running their own instance:</p>
<ul>
<li><strong>The backend container runs as an unprivileged user</strong> (<code>app</code>, uid/gid 1000), and the image uses <strong>Poetry 2.5.1</strong> (1.8.3 and its <code>dulwich</code> dependency had security advisories).</li>
<li><strong>A global request size limit</strong>: requests with a body larger than <code>MAX_REQUEST_BODY_BYTES</code> (5 MB by default) get a <code>413</code>, whether the client declares the size or streams the body in chunks.</li>
</ul>
<p>To upgrade, rebuild the image with <code>docker compose up -d --build</code>. In the development scenario (<code>deploy/local-full</code>), if your Linux user isn&#39;t uid 1000, Python won&#39;t be able to write its caches to the mounted folder; that&#39;s harmless, and the production image isn&#39;t affected. If you install dependencies outside Docker, use Poetry 2.</p>
<h2 id="autosave-you-can-rely-on">Autosave you can rely on</h2>
<p>Two problems weren&#39;t obvious at first glance:</p>
<ul>
<li><strong>Opening a diagram marked it as modified.</strong> The autosave and the zoom/position save fired on load, changing the modification date and reshuffling &quot;Recent&quot;. Now it only saves on a real change; panning, zooming or resizing a panel no longer counts as a modification.</li>
<li><strong>Edits could be lost</strong> if you made them right before switching diagrams or leaving the editor, within autosave&#39;s 1.5-second wait.</li>
</ul>
<pre class="mermaid">flowchart LR
    A[You edit a diagram] --&gt; B{What happens next?}
    B --&gt;|You wait| C[Autosave]
    B --&gt;|You switch diagrams| D[Saved on switch]
    B --&gt;|You leave or hide the tab| E[Saved on leave]
    B --&gt;|You close with pending changes| F[The browser warns you]</pre>
<p>Saves are also sent one at a time, so a slow one can&#39;t overwrite a newer edit. And the top bar title no longer shows the previous diagram while the next one loads.</p>
<h2 id="up-to-71-less-javascript">Up to 71% less JavaScript</h2>
<p>The whole app used to ship as a single file. Now <strong>each page is downloaded on its own</strong>:</p>
<ul>
<li>Login and the dashboard download <strong>193 KB of JavaScript instead of 668 KB</strong>, and show up in ~105 ms and ~130 ms (previously ~165 ms and ~190 ms).</li>
<li>The editor paints the diagram in <strong>~180 ms</strong> (previously ~300 ms).</li>
<li><strong>The editor is preloaded</strong> in the background once you&#39;re signed in, so going from the dashboard to a diagram doesn&#39;t wait on a download.</li>
<li><strong>Export loads its libraries only when you export</strong>, which keeps the editor lighter.</li>
</ul>
<p>On the server, the dashboard&#39;s <strong>&quot;Recent&quot;</strong> list now comes from a single indexed query instead of reading every diagram of every project along with its content. The new MongoDB index is created automatically when the backend starts.</p>
<h2 id="small-things-that-matter">Small things that matter</h2>
<p>Native browser alerts in AI generation and provider settings were replaced with in-app notices you can dismiss and that follow dark mode. Dates follow the interface language everywhere (PDF/PNG exports, billing, profile, editor), and more strings that were stuck in Spanish are now translated into English.</p>
<h2 id="upgrade">Upgrade</h2>
<p>It&#39;s already live on <a href="https://app.diagramahub.com" target="_blank" rel="noopener noreferrer">DiagramaHub Cloud</a>. If you self-host, grab the release from the <a href="https://github.com/diagramahub/diagramahub" target="_blank" rel="noopener noreferrer">repository</a> and check the upgrade notes in the <a href="https://github.com/diagramahub/diagramahub/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">changelog</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A renewed explorer and a production image for self-hosting</title>
      <link>https://www.diagramahub.com/blog/renewed-explorer-and-production-image</link>
      <guid isPermaLink="true">https://www.diagramahub.com/blog/renewed-explorer-and-production-image</guid>
      <pubDate>Tue, 29 Sep 2026 12:00:00 GMT</pubDate>
      <dc:creator>DiagramaHub Team</dc:creator>
      <description>DiagramaHub 0.7.0 redesigns the file and folder explorer, smooths out switching between diagrams and ships a 68 MB production image for the frontend.</description>
      <category>release</category>
      <category>editor</category>
      <category>organization</category>
      <content:encoded><![CDATA[<p>Once a project grows from ten diagrams to fifty, the explorer stops being a detail and becomes how you work. Until now the file tree only let you delete; everything else meant dragging things around or going to another screen. In <strong>version 0.7.0</strong> we rebuilt it from the ground up, along with how you switch between diagrams and how the frontend gets deployed.</p>
<h2 id="an-explorer-that-works-with-mouse-and-keyboard">An explorer that works with mouse and keyboard</h2>
<p>Every diagram now has an <strong>action menu</strong> (the <code>⋯</code> button or right-click): rename, duplicate, move to a folder, move to another project and delete. Folders get their own: new diagram inside, rename and delete. Empty folders offer a &quot;New diagram here&quot; shortcut.</p>
<p>What you&#39;ll notice day to day:</p>
<ul>
<li><strong>Inline rename</strong> with <code>F2</code> or double-click, for diagrams and folders.</li>
<li><strong>Move to a folder without dragging</strong>, straight from the menu. It works on mobile too.</li>
<li><strong><code>Ctrl/Cmd+B</code></strong> toggles the explorer (inside the description editor it&#39;s still bold).</li>
<li><strong>Pin the panel</strong> with the pushpin: it stays open when you click elsewhere and across reloads.</li>
<li><strong>Keyboard navigation</strong>: arrows to move and to open or close folders, <code>Home</code>/<code>End</code>, a single Tab stop, and <code>Shift+F10</code> to open the row menu.</li>
</ul>
<p>The explorer also <strong>pushes the content</strong> instead of covering it, so your code, the preview and the status bar always stay visible. You can resize it between 200 and 480 px (double-click resets it), and DiagramaHub remembers that width and which folders you left open in each project.</p>
<p>It&#39;s easier to scan, too: folders first, a badge per diagram type (MMD, PUML, D2, DBML, DRAW), the full title on hover and a result counter while searching (&quot;3 of 24 diagrams&quot;). And search no longer hides matches sitting inside collapsed folders.</p>
<h2 id="switching-diagrams-without-the-flicker">Switching diagrams without the flicker</h2>
<p>Opening another diagram from the explorer used to make the whole editor vanish while its parts loaded out of step. Now the workspace is covered with a &quot;Loading diagram…&quot; indicator and revealed all at once, with a fade, once the new diagram is drawn.</p>
<p>Along the same lines, creating, moving, renaming or deleting from the explorer no longer reloads the entire editor: the change shows up instantly and, if it fails, it&#39;s rolled back with a notice. We also stopped the editor from re-rendering every second because of the status bar clock, and the preview no longer goes blank for a moment on each render.</p>
<h2 id="a-production-image-for-the-frontend">A production image for the frontend</h2>
<p>If you run DiagramaHub on your own infrastructure, this part is for you. The frontend now has a <strong>production image</strong>: a static site served by Nginx as a <strong>non-root user</strong>, with security headers, gzip, asset caching and a healthcheck. It weighs <strong>68 MB versus 951 MB</strong> for the development image.</p>
<p>The API URL and Sentry settings are injected <strong>when the container starts</strong>, not when the image is built. One image serves every environment, and it works with DigitalOcean App Platform (Static Site).</p>
<pre class="mermaid">flowchart LR
    A[One frontend image] --&gt; B[Container start]
    V[&quot;VITE_API_URL, VITE_SENTRY_DSN, VITE_APP_ENV&quot;] --&gt; B
    B --&gt; C[Staging]
    B --&gt; D[Production]</pre>
<p>If you use the <code>deploy/external-mongodb</code> scenario, the frontend moves from the Vite dev server to this image. It still listens on port <code>5173</code> with the same variables; to change them, just recreate the container. To upgrade, rebuild with <code>docker compose up -d --build</code>. The <code>deploy/local-full</code> scenario is unchanged. There&#39;s also a Content-Security-Policy example (<code>csp.conf.example</code>), disabled by default, for you to enable per deployment.</p>
<h2 id="security-what-landed-in-0-6-2">Security: what landed in 0.6.2</h2>
<p>A few days earlier we shipped <strong>0.6.2</strong>, a hardening release for the API:</p>
<ul>
<li><strong>Changing your password requires the current one.</strong> A stolen token is no longer enough to take over an account. If you call the API directly, send <code>current_password</code>; if you deploy frontend and backend separately, ship the frontend first.</li>
<li><strong>CORS restricted</strong> to explicit methods and headers, plus a restrictive <strong>Content-Security-Policy</strong> in production.</li>
<li><strong>Per-IP limits</strong> on registration (20/hour), password reset requests (10/hour), MFA verification (10 per 5 minutes) and the public render endpoint (60/minute), answering <code>429</code> with <code>Retry-After</code>.</li>
<li><strong>A 100,000-character cap</strong> on the source accepted by the public render endpoint.</li>
<li><strong>A complete audit trail</strong>: password reset requests, MFA enabled and disabled, and account deletion are now recorded.</li>
</ul>
<p>On top of that, 0.7.0 makes the AI diagram fixer check that the diagram is yours, and a token from a deleted account now gets a <code>401</code> instead of a 500 error.</p>
<h2 id="try-it">Try it</h2>
<p>Open a project on <a href="https://app.diagramahub.com" target="_blank" rel="noopener noreferrer">DiagramaHub Cloud</a> and hit <code>Ctrl/Cmd+B</code>. If you self-host, upgrade from the <a href="https://github.com/diagramahub/diagramahub" target="_blank" rel="noopener noreferrer">repository</a>; the full details are in the <a href="https://github.com/diagramahub/diagramahub/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">changelog</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Move and duplicate diagrams, and export lighter files</title>
      <link>https://www.diagramahub.com/blog/move-duplicate-and-better-exports</link>
      <guid isPermaLink="true">https://www.diagramahub.com/blog/move-duplicate-and-better-exports</guid>
      <pubDate>Sun, 30 Aug 2026 12:00:00 GMT</pubDate>
      <dc:creator>DiagramaHub Team</dc:creator>
      <description>DiagramaHub v0.6.1 lets you move diagrams between projects, duplicate them, pick a PNG resolution and export PDFs that are 5-15x lighter.</description>
      <category>release</category>
      <category>export</category>
      <category>organization</category>
      <content:encoded><![CDATA[<p>Some changes never make the launch headline, but you use them every day. <strong>Version 0.6.1</strong> is one of those releases: fewer steps to reorganize your work, faster exports, and files that no longer clog your inbox.</p>
<h2 id="move-a-diagram-to-another-project">Move a diagram to another project</h2>
<p>Sometimes a diagram starts life in the wrong project, or a prototype ends up belonging to a different system. There&#39;s now a <strong>Move</strong> action in the editor toolbar: pick the target project from a picker and you&#39;re done.</p>
<p>A couple of details so you know what to expect:</p>
<ul>
<li>The diagram lands at the <strong>root</strong> of the target project. If it was inside a folder, that folder assignment is cleared, and you can file it wherever you like from there.</li>
<li>The server runs ownership checks before moving anything.</li>
</ul>
<h2 id="duplicate-in-one-click">Duplicate in one click</h2>
<p>To try a variation without touching the original, use <strong>Duplicate</strong> from the editor toolbar. The confirmation modal suggests a name based on your language (<code>&lt;name&gt;-copy</code> in English, <code>&lt;name&gt;-copia</code> in Spanish) that you can edit before confirming. The copy opens automatically, already fit to screen and ready to edit.</p>
<pre class="mermaid">flowchart LR
    A[Original diagram] --&gt;|Duplicate| B[&quot;name-copy&quot;]
    A --&gt;|Move| C[Root of another project]
    B --&gt; D[Opens fit to screen]</pre>
<h2 id="a-two-step-export-modal">A two-step export modal</h2>
<p>We reworked the export modal into a two-step flow:</p>
<ol>
<li>Pick a format.</li>
<li>Adjust only the options that apply to that format, then hit <strong>Export</strong>.</li>
</ol>
<p>That way you don&#39;t see controls that have nothing to do with what you&#39;re exporting. For example, the new <strong>PNG resolution selector</strong> only shows up when PNG is selected, with three choices:</p>
<ul>
<li><strong>Screen (1x)</strong>, for something quick.</li>
<li><strong>Standard (2x)</strong>, the default.</li>
<li><strong>High (3x)</strong>, when you need maximum sharpness.</li>
</ul>
<h2 id="pdfs-that-are-5-15x-lighter">PDFs that are 5-15x lighter</h2>
<p>The image embedded in PDFs switched from lossless PNG to <strong>JPEG at quality 0.98</strong>, which is visually indistinguishable on diagrams. The result: PDFs are <strong>5 to 15 times lighter</strong>. A PDF that used to weigh 20 MB now lands somewhere between <strong>1.5 and 5 MB</strong>, much easier to attach to an email or upload to your wiki.</p>
<h2 id="huge-pngs-without-the-hiccups">Huge PNGs without the hiccups</h2>
<p>For very large diagrams, PNG exports are now <strong>capped at 8192 px</strong> and downloaded through Blob URLs instead of base64. That removes the encoding overhead and the memory spikes that could make exports sluggish.</p>
<h2 id="consistent-buttons-everywhere">Consistent buttons everywhere</h2>
<p>We also unified button design: a single pattern for primary and secondary buttons, with a focus ring, disabled state and loading spinner, applied across the whole app. It&#39;s a small visual change, but it makes the interface feel more coherent.</p>
<h2 id="try-it">Try it</h2>
<p>Open a diagram in <a href="https://app.diagramahub.com" target="_blank" rel="noopener noreferrer">DiagramaHub Cloud</a> and try <strong>Move</strong>, <strong>Duplicate</strong> or a high-resolution PNG export. If you <a href="https://github.com/diagramahub/diagramahub" target="_blank" rel="noopener noreferrer">self-host</a>, upgrade to 0.6.1. Technical details are in the <a href="https://github.com/diagramahub/diagramahub/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">changelog</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A freehand whiteboard and AI diagram conversion</title>
      <link>https://www.diagramahub.com/blog/freehand-whiteboard-and-ai-conversion</link>
      <guid isPermaLink="true">https://www.diagramahub.com/blog/freehand-whiteboard-and-ai-conversion</guid>
      <pubDate>Sat, 15 Aug 2026 12:00:00 GMT</pubDate>
      <dc:creator>DiagramaHub Team</dc:creator>
      <description>DiagramaHub v0.6.0 adds a freehand whiteboard inspired by Miro and Excalidraw, and uses AI to convert diagrams between Mermaid, PlantUML, D2 and DBML.</description>
      <category>whiteboard</category>
      <category>ai</category>
      <category>launch</category>
      <content:encoded><![CDATA[<p>Not every idea starts as code. Sometimes you need to sketch a few boxes and arrows to think, and sometimes you already have the diagram written, just in the wrong language for where it&#39;s going. <strong>Version 0.6.0</strong> covers both: a <strong>freehand whiteboard</strong> and <strong>AI-powered conversion between diagram languages</strong>.</p>
<h2 id="a-new-diagram-type-the-whiteboard">A new diagram type: the whiteboard</h2>
<p>Alongside Mermaid, PlantUML, D2 and DBML, you can now create a <strong>Freehand</strong> diagram: an Excalidraw-like canvas where you draw directly with:</p>
<ul>
<li>Basic shapes: rectangles, diamonds and circles.</li>
<li>Arrows, lines, text and freehand paths.</li>
<li>A toolbar with color pickers and stroke width controls.</li>
</ul>
<p>If you run a self-hosted instance: the canvas state is stored as JSON in the same content field every other diagram uses, so no schema migration is needed.</p>
<h2 id="the-best-of-miro-and-excalidraw">The best of Miro and Excalidraw</h2>
<p>A whiteboard lives or dies by how it feels, so we borrowed what works best in Miro and Excalidraw:</p>
<ul>
<li><strong>Undo and redo</strong> (Ctrl+Z, Ctrl+Shift+Z or Ctrl+Y) with toolbar buttons and a <strong>100-step</strong> history.</li>
<li><strong>Inline text editing</strong>, no browser prompt: multi-line support, text elements that grow as you type, and text inside shapes always centered.</li>
<li><strong>Keyboard shortcuts</strong> for every tool, Ctrl+D to duplicate, arrow keys to nudge and F to fit to content.</li>
<li>A <strong>hand tool</strong> and Space+drag panning.</li>
<li><strong>Align and distribute</strong> for multi-selections.</li>
<li><strong>Group and ungroup</strong> (Ctrl+G / Ctrl+Shift+G), with clicks that select the whole group.</li>
<li><strong>Rotate</strong> shapes and text with a handle, snapping to 15° while holding Shift. Connected arrows follow the rotated anchors.</li>
<li>Miro-style red <strong>alignment guides</strong> that snap while you drag or draw.</li>
<li>A <strong>contextual style panel</strong> right next to your selection.</li>
<li>A drag-to-erase eraser, dashed lines, start/end arrowheads, rounded corners and font size controls.</li>
</ul>
<h2 id="convert-between-mermaid-plantuml-d2-and-dbml">Convert between Mermaid, PlantUML, D2 and DBML</h2>
<p>Got a Mermaid diagram but your team documents everything in PlantUML? A schema you&#39;d rather have in DBML? You can now <strong>convert a diagram to another language</strong> using the AI provider you already set up in DiagramaHub (your own API key, just like every other AI feature).</p>
<p>Before anything changes, you see the original and the result <strong>side by side</strong>, along with warnings about potential incompatibilities between the languages. Conversion is preview-only: nothing is saved until you accept it. Once you do, the diagram is automatically re-centered on screen.</p>
<pre class="mermaid">sequenceDiagram
    participant U as You
    participant D as DiagramaHub
    participant AI as Your AI provider
    U-&gt;&gt;D: Convert to another language
    D-&gt;&gt;AI: Original diagram and target language
    AI--&gt;&gt;D: Converted diagram
    D--&gt;&gt;U: Side-by-side preview with warnings
    U-&gt;&gt;D: Accept
    D--&gt;&gt;U: Updated and re-centered diagram</pre>
<h2 id="other-changes">Other changes</h2>
<ul>
<li>The editor now opens with the folders/files sidebar closed; it shows up when you click the folder icon next to the diagram title.</li>
<li>For self-hosters: the frontend moved from npm to pnpm for faster installs and better disk efficiency.</li>
</ul>
<h2 id="try-it">Try it</h2>
<p>Create a <strong>Freehand</strong> diagram or convert an existing one in <a href="https://app.diagramahub.com" target="_blank" rel="noopener noreferrer">DiagramaHub Cloud</a>. If you <a href="https://github.com/diagramahub/diagramahub" target="_blank" rel="noopener noreferrer">self-host</a>, upgrade to 0.6.0. Everything else is in the <a href="https://github.com/diagramahub/diagramahub/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">changelog</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A VS Code-style project explorer inside the editor</title>
      <link>https://www.diagramahub.com/blog/project-explorer-in-the-editor</link>
      <guid isPermaLink="true">https://www.diagramahub.com/blog/project-explorer-in-the-editor</guid>
      <pubDate>Sat, 18 Jul 2026 12:00:00 GMT</pubDate>
      <dc:creator>DiagramaHub Team</dc:creator>
      <description>DiagramaHub v0.5.10 adds a persistent explorer to the editor: create diagrams inside folders, rename folders and move diagrams around with drag and drop.</description>
      <category>editor</category>
      <category>organization</category>
      <category>release</category>
      <content:encoded><![CDATA[<p>Once a project grows from five diagrams to thirty, the hard part stops being drawing and starts being finding things. Jumping from the editor back to the project list, hunting for a diagram and coming back again breaks your focus. In <strong>version 0.5.10</strong> we brought the project structure to where you actually work: the editor.</p>
<h2 id="an-explorer-that-stays-with-you">An explorer that stays with you</h2>
<p>If you use VS Code, this will feel familiar. The desktop diagram editor now has a <strong>persistent project explorer</strong> showing your project tree: the diagrams at the root and your folders with their contents. You can open another diagram without leaving the editor and without losing track of where everything lives.</p>
<p>We also fixed a detail that made it awkward to use: interacting with the explorer no longer closes the panel as if you had clicked outside of it.</p>
<h2 id="organize-without-leaving-the-editor">Organize without leaving the editor</h2>
<p>Beyond navigation, the explorer lets you keep your project tidy:</p>
<ul>
<li><strong>Create diagrams directly inside a folder</strong>, instead of creating them at the root and moving them afterwards.</li>
<li><strong>Rename folders</strong> when the name you picked on day one no longer describes what&#39;s inside.</li>
<li><strong>Move diagrams with drag and drop</strong> between the project root and folders.</li>
</ul>
<p>Folders are still <strong>one level deep</strong>. That&#39;s on purpose: a flat hierarchy stays easy to scan and avoids deep trees where nobody can find anything.</p>
<pre class="mermaid">flowchart TD
    P[Project] --&gt; R1[Diagram at the root]
    P --&gt; C1[Backend folder]
    P --&gt; C2[Database folder]
    C1 --&gt; D1[Login sequence]
    C1 --&gt; D2[Service architecture]
    C2 --&gt; D3[DBML schema]
    R1 -. drag and drop .-&gt; C1</pre>
<h2 id="fit-to-screen-properly-centered">Fit to screen, properly centered</h2>
<p>Another change you&#39;ll notice day to day: <strong>fit to screen</strong> now frames the diagram using the actual bounds of the rendered SVG. In practice, <strong>D2</strong> diagrams are now centered correctly, which wasn&#39;t always the case before.</p>
<h2 id="an-about-page">An About page</h2>
<p>We added an <strong>About</strong> page inside the app with product details, a link to the GitHub repository, our X account and a contact email. Whether you want to report something, pitch an idea or just read the code, every path is in one place.</p>
<h2 id="dependencies-refreshed">Dependencies, refreshed</h2>
<p>This release also updates frontend dependencies, including Mermaid 11.16.0 and DOMPurify 3.4.12, and refreshes transitive dependencies. As a result, <code>npm audit</code> reports <strong>0 vulnerabilities</strong> across both production and development dependencies.</p>
<h2 id="try-it">Try it</h2>
<p>Open any diagram in <a href="https://app.diagramahub.com" target="_blank" rel="noopener noreferrer">DiagramaHub Cloud</a> and organize your project from the explorer. If you <a href="https://github.com/diagramahub/diagramahub" target="_blank" rel="noopener noreferrer">self-host</a>, upgrade to 0.5.10. Technical details are in the <a href="https://github.com/diagramahub/diagramahub/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">changelog</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Export your diagrams to SVG (and much lighter PDFs)</title>
      <link>https://www.diagramahub.com/blog/export-your-diagrams-to-svg</link>
      <guid isPermaLink="true">https://www.diagramahub.com/blog/export-your-diagrams-to-svg</guid>
      <pubDate>Thu, 18 Jun 2026 12:00:00 GMT</pubDate>
      <dc:creator>DiagramaHub Team</dc:creator>
      <description>DiagramaHub v0.5.8 lets you download diagrams as SVG. Just before, v0.5.7 cut PDF exports from 150–200 MB to ~1–5 MB and improved PNG and Markdown.</description>
      <category>export</category>
      <category>release</category>
      <category>security</category>
      <content:encoded><![CDATA[<p>A diagram that stays inside the tool doesn&#39;t do much. You want it in the README, in your team wiki, or in a PDF for someone who doesn&#39;t have an account. Over the last few weeks we focused on making exports fast, light and clean, and today, with <strong>version 0.5.8</strong>, a new format is here: <strong>SVG</strong>, vector and scalable.</p>
<h2 id="svg-clean-vectors-for-your-docs">SVG: clean vectors for your docs</h2>
<p>Starting with 0.5.8 you can download your <strong>Mermaid, PlantUML, D2 and DBML</strong> diagrams as SVG. Because it&#39;s a vector format, it stays sharp at any size, it&#39;s small, and it fits right into:</p>
<ul>
<li>Documentation and READMEs, where a PNG gets blurry as soon as someone zooms in.</li>
<li>Vector tools, if you want to keep polishing the diagram by hand for a talk or a poster.</li>
</ul>
<p>Along with SVG we redesigned the export modal. Formats now show up as a 2×2 grid of cards (<strong>PNG, SVG, PDF and Markdown</strong>), content options live in a compact secondary section, and the source-code download moved to a subtle button in the footer. Less clutter, same power.</p>
<h2 id="pdfs-from-150-200-mb-to-1-5-mb">PDFs: from 150–200 MB to ~1–5 MB</h2>
<p>Two days earlier, in <strong>version 0.5.7</strong>, we tackled something you probably noticed if you ever exported a large diagram to PDF: the file weighed <strong>150 to 200 MB</strong>. We were capturing an uncompressed bitmap. We switched to high-quality 2x PNG rasterization, and that same PDF now lands around <strong>~1–5 MB</strong>.</p>
<p>That release also brought:</p>
<ul>
<li><strong>Header and footer on PDF and PNG</strong>: the diagram title is always there; project, folder and author are added when you select them. The footer shows the export date.</li>
<li><strong>Formatted descriptions in PDFs</strong>: the description&#39;s Markdown is rendered as HTML with headings, bold text, lists and tables instead of raw syntax.</li>
<li><strong>Richer Markdown exports</strong>: the Markdown export includes the diagram description and project metadata when you pick those options.</li>
<li><strong>Per-format loading state</strong>: each button shows its own spinner instead of every button switching to &quot;Exporting&quot; at once.</li>
<li><strong>Lazy-loaded jsPDF</strong>: the PDF library is only downloaded when you need it, so the editor loads faster.</li>
</ul>
<p>Under the hood, we pulled the export logic out of the editor page into dedicated modules (PDF generator, Markdown exporter, description renderer and metadata header). That cleanup is what let us add SVG without making the code any messier.</p>
<h2 id="how-the-flow-looks">How the flow looks</h2>
<pre class="mermaid">flowchart LR
    A[Your diagram] --&gt; B[Export modal]
    B --&gt; C[PNG]
    B --&gt; D[SVG]
    B --&gt; E[PDF]
    B --&gt; F[Markdown]
    D --&gt; G[README or wiki]
    D --&gt; H[Vector editor]
    E --&gt; I[Share with people outside DiagramaHub]</pre>
<h2 id="security-fixes-along-the-way">Security fixes along the way</h2>
<p>Between 0.5.5 and 0.5.8 we also shipped security work worth calling out:</p>
<ul>
<li><strong>Password changes (0.5.6, critical)</strong>: when you changed or reset your password, a bug saved the old hash back, so in practice the password didn&#39;t actually change. It&#39;s fixed. If you changed or reset your password before that release, we recommend doing it again.</li>
<li><strong>DOM-based XSS (0.5.8)</strong>: rendered SVG is now sanitized with DOMPurify before it&#39;s shown in the preview, the editor and shared diagram views, and Markdown descriptions rendered for PDF/PNG exports are sanitized too.</li>
<li><strong>Hardened images</strong>: the backend moved to an Alpine base image with fewer packages and a smaller CVE surface (0.5.6), and the frontend image now picks up the latest OpenSSL patches (0.5.8). Diagram descriptions are also capped at 50,000 characters (0.5.5).</li>
</ul>
<h2 id="try-it">Try it</h2>
<p>Open any diagram in <a href="https://app.diagramahub.com" target="_blank" rel="noopener noreferrer">DiagramaHub Cloud</a>, click export and pick <strong>SVG</strong>. If you <a href="https://github.com/diagramahub/diagramahub" target="_blank" rel="noopener noreferrer">self-host</a>, upgrade to 0.5.8. The full technical details are in the <a href="https://github.com/diagramahub/diagramahub/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">changelog</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Streaming and quick actions in DiagramaHub's AI chat</title>
      <link>https://www.diagramahub.com/blog/streaming-and-quick-actions-in-the-chat</link>
      <guid isPermaLink="true">https://www.diagramahub.com/blog/streaming-and-quick-actions-in-the-chat</guid>
      <pubDate>Thu, 14 May 2026 12:00:00 GMT</pubDate>
      <dc:creator>DiagramaHub Team</dc:creator>
      <description>With versions 0.5.3 and 0.5.4 the AI chat streams its answers, shows which phase it's in, and adds quick actions: Explain, Improve UI, Improve Process and Fix.</description>
      <category>release</category>
      <category>ai</category>
      <category>editor</category>
      <content:encoded><![CDATA[<p>Asking an AI to change a diagram and then staring at a generic spinner tells you nothing: is it thinking? Is it stuck? How long will it take? With <strong>version 0.5.3</strong> DiagramaHub&#39;s AI chat answers in real time, and with <strong>0.5.4</strong> you no longer need to type a prompt for the most common requests.</p>
<h2 id="streaming-responses">Streaming responses</h2>
<p>Chat responses now arrive progressively through <strong>Server-Sent Events (SSE)</strong>. Instead of a spinner, you see which phase the response is in: &quot;Thinking…&quot;, &quot;Analyzing your diagram…&quot;, &quot;Generating code…&quot; and &quot;Validating syntax…&quot;.</p>
<pre class="mermaid">sequenceDiagram
    participant Y as You
    participant C as Chat
    participant P as AI provider
    Y-&gt;&gt;C: Ask for a diagram change
    C-&gt;&gt;P: Message with the diagram as context
    P--&gt;&gt;C: Response in chunks
    C--&gt;&gt;Y: Live phases and progressive text
    C--&gt;&gt;Y: Validated diagram and diff preview</pre>
<p>It works with all five providers: OpenAI, Claude, Gemini, DeepSeek and MiniMax. If a provider doesn&#39;t support streaming, the chat automatically falls back to the regular flow, with nothing for you to do.</p>
<h2 id="the-chat-knows-what-kind-of-answer-you-expect">The chat knows what kind of answer you expect</h2>
<p>Not every request is the same, so the chat detects the response mode:</p>
<ul>
<li><strong>Code mode</strong>: when you ask for a diagram change, you only see the phases, not the model&#39;s internal text.</li>
<li><strong>Text mode</strong>: when you ask a question or request an analysis, the text appears as it&#39;s generated.</li>
</ul>
<p><code>&lt;think&gt;</code> tags from reasoning models (like DeepSeek) are filtered out in real time. If you close the chat panel or switch diagrams, the stream cancels itself. And if something fails, a retry button gives you up to 3 consecutive attempts.</p>
<p>Two more details: when the AI doesn&#39;t provide an explanation, you&#39;ll no longer see a generic &quot;Diagram modified as requested&quot; message, just the diff preview; and the chat now answers in the language you have active in the app.</p>
<h2 id="quick-actions-one-click-instead-of-a-prompt">Quick actions: one click instead of a prompt</h2>
<p>0.5.4 adds four preset actions to the chat:</p>
<ul>
<li><strong>Explain</strong>: understand what the diagram does.</li>
<li><strong>Improve UI</strong>: polish how it looks.</li>
<li><strong>Improve Process</strong>: review the flow it describes.</li>
<li><strong>Fix</strong>: repair what&#39;s broken.</li>
</ul>
<p>To keep each request in the right place, if you ask for an explanation from the improve modal, DiagramaHub redirects you to the AI chat, where the answer is shown as text.</p>
<h2 id="a-chat-panel-that-fits-your-work">A chat panel that fits your work</h2>
<p>The chat panel is now <strong>resizable</strong>, and its width is saved per diagram. If one large diagram needs more canvas and another needs room for long explanations, each one remembers your preference.</p>
<h2 id="security-and-maintenance">Security and maintenance</h2>
<p>Alongside streaming we added DOMPurify sanitization for server-rendered (Kroki) SVGs, and fixed a side effect that hid node labels in Mermaid. The backend moved to Python 3.12 with an updated Docker base image. If you run your own instance, the admin panel gains &quot;License Usage&quot;, &quot;AI Models&quot; and &quot;Last Login&quot; columns.</p>
<h2 id="try-it">Try it</h2>
<p>Open a diagram on <a href="https://app.diagramahub.com" target="_blank" rel="noopener noreferrer">DiagramaHub Cloud</a>, bring up the chat and try <strong>Explain</strong> or <strong>Fix</strong>. If you self-host, update from the <a href="https://github.com/diagramahub/diagramahub" target="_blank" rel="noopener noreferrer">repository</a>; details are in the <a href="https://github.com/diagramahub/diagramahub/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">changelog</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Dark mode, DBML diagrams and MiniMax in DiagramaHub</title>
      <link>https://www.diagramahub.com/blog/dark-mode-dbml-and-minimax</link>
      <guid isPermaLink="true">https://www.diagramahub.com/blog/dark-mode-dbml-and-minimax</guid>
      <pubDate>Sun, 10 May 2026 12:00:00 GMT</pubDate>
      <dc:creator>DiagramaHub Team</dc:creator>
      <description>Version 0.5 redesigns navigation and adds full dark mode, DBML support, the MiniMax provider and a more reliable AI chat.</description>
      <category>release</category>
      <category>editor</category>
      <category>ai</category>
      <content:encoded><![CDATA[<p>If you spend hours designing architectures, the interface matters as much as the diagram language. <strong>Version 0.5.0</strong> is a major UX redesign: new navigation, dark mode across the whole app, a new language for modeling databases, and a fifth AI provider.</p>
<h2 id="new-navigation">New navigation</h2>
<p>The sidebar is now <strong>collapsible</strong> and holds navigation, the theme toggle and the language selector. Along with it we reorganized a few things:</p>
<ul>
<li><strong>Projects</strong> has its own page, with a table view.</li>
<li>The &quot;AI&quot; section is now called <strong>Settings</strong>, with a gear icon.</li>
<li>Logout moved to the <strong>Profile</strong> page.</li>
</ul>
<p>The <strong>dashboard</strong> changed too: a donut chart, an AI usage widget and your recent diagrams, so you can pick up where you left off in one click.</p>
<h2 id="real-dark-mode">Real dark mode</h2>
<p><strong>Dark mode</strong> covers the entire app: pages, modals and the editor. For the code editor we added the <strong>Kiro Dark</strong> Monaco theme, plus a project breadcrumb and a resizable code panel.</p>
<h2 id="dbml-your-database-schema-as-code">DBML: your database schema as code</h2>
<p>DBML (Database Markup Language) joins Mermaid, PlantUML and D2. It renders through Kroki on your own infrastructure, just like PlantUML and D2, so your schema never goes to a public service. Here&#39;s a simple model:</p>
<pre><code class="language-dbml">Table users {
  id integer [pk]
  email varchar [unique]
}

Table diagrams {
  id integer [pk]
  user_id integer [ref: &gt; users.id]
  title varchar
}</code></pre>
<p>Tables, columns and relationships in a handful of lines, versioned right next to your code.</p>
<h2 id="minimax-and-updated-models">MiniMax and updated models</h2>
<p>We added <strong>MiniMax</strong> as an AI provider, with the same BYOL (Bring Your Own LLM) model as always: you use your own API key. You can pick <strong>MiniMax-M2.7</strong> or <strong>MiniMax-M2.5</strong>.</p>
<p>We also refreshed the catalog with <strong>DeepSeek v4</strong> and <strong>Gemini 3.1</strong>. If a diagram had a saved model that its provider has since retired, DiagramaHub automatically falls back to a current one instead of failing.</p>
<h2 id="a-more-reliable-ai-chat">A more reliable AI chat</h2>
<p>The chat got several improvements you&#39;ll notice in long conversations:</p>
<ul>
<li>A <strong>persistent rolling summary</strong> of the session, so the model doesn&#39;t lose track.</li>
<li>A code-first response format, with fallbacks to extract the diagram from the reply.</li>
<li><code>&lt;think&gt;</code> tags from reasoning models like DeepSeek and MiniMax no longer show up in the chat.</li>
<li>The response token limit went from 2048 to 4096.</li>
<li>Prompts now include Kroki&#39;s rendering context.</li>
</ul>
<p>And the <strong>&quot;Fix with AI&quot;</strong> button now lives in the code panel and works on render errors too, not just syntax errors. Kroki errors, by the way, are now shown in a readable format.</p>
<h2 id="polish-and-security-in-the-patches">Polish and security in the patches</h2>
<p>The patch releases that followed keep the work going:</p>
<ul>
<li><strong>0.5.1</strong> adds skeleton loading states, guided empty states that point you to the next step, and a mobile-first editor layout: code and description panels in swipeable bottom sheets, a bottom toolbar, and pinch-to-zoom on the diagram.</li>
<li><strong>0.5.2</strong> is a security release: we updated frontend dependencies (axios, jspdf, react-router-dom, mermaid and easymde) to resolve critical and high vulnerabilities reported by Snyk, and joined the Snyk Secure Developer Program for Open Source for continuous monitoring.</li>
</ul>
<h2 id="try-it">Try it</h2>
<p>Turn on dark mode and create your first DBML diagram on <a href="https://app.diagramahub.com" target="_blank" rel="noopener noreferrer">DiagramaHub Cloud</a>, or update your instance from the <a href="https://github.com/diagramahub/diagramahub" target="_blank" rel="noopener noreferrer">repository</a>. The full list of changes is in the <a href="https://github.com/diagramahub/diagramahub/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">changelog</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Self-hosted Kroki and D2 diagrams in DiagramaHub</title>
      <link>https://www.diagramahub.com/blog/kroki-and-d2-diagrams</link>
      <guid isPermaLink="true">https://www.diagramahub.com/blog/kroki-and-d2-diagrams</guid>
      <pubDate>Thu, 30 Apr 2026 12:00:00 GMT</pubDate>
      <dc:creator>DiagramaHub Team</dc:creator>
      <description>Version 0.4 renders PlantUML with Kroki on your own infrastructure, adds D2 as a new language, and refreshes the editor, dashboard and mobile views.</description>
      <category>release</category>
      <category>diagrams</category>
      <category>editor</category>
      <content:encoded><![CDATA[<p>Until now, every PlantUML diagram you drew was sent to the public <code>plantuml.com</code> server to be turned into an image. It worked, but your architecture, your flows and your internal names left your instance. <strong>Version 0.4.0</strong> changes that: rendering now goes through <strong>Kroki</strong>, self-hosted right next to the rest of DiagramaHub.</p>
<h2 id="kroki-your-diagrams-stay-home">Kroki: your diagrams stay home</h2>
<p>Kroki is a diagram rendering engine that runs as one more Docker service (<code>yuzutech/kroki</code>). We added it to all three of the project&#39;s Docker Compose configurations, so if you self-host there&#39;s nothing extra to install. You point to it with the <code>KROKI_URL</code> environment variable (default <code>http://kroki:8000</code>).</p>
<p>The routing rule is simple:</p>
<pre class="mermaid">flowchart LR
    A[Editor] --&gt; B{Diagram type}
    B --&gt;|Mermaid| C[Rendered in your browser]
    B --&gt;|PlantUML or D2| D[DiagramaHub backend]
    D --&gt; E[Self-hosted Kroki]
    E --&gt; F[SVG]</pre>
<p>Mermaid is still drawn in your browser. PlantUML and D2 go to your backend, which talks to your Kroki and returns an SVG. No public service ever sees the content.</p>
<p>There&#39;s also a new <code>POST /api/v1/diagrams/render</code> endpoint that takes source code and a diagram type and returns the SVG. It works without authentication so that <strong>shared diagrams</strong> render properly.</p>
<h2 id="d2-joins-as-a-third-language">D2 joins as a third language</h2>
<p>Next to Mermaid and PlantUML, you can now write diagrams in <strong>D2</strong>, a modern declarative language that reads almost like a list of relationships:</p>
<pre><code class="language-d2">user: User
api: API
db: Database {
  shape: cylinder
}

user -&gt; api: HTTP request
api -&gt; db: query</code></pre>
<p>Support is complete from day one:</p>
<ul>
<li>Rendering through Kroki.</li>
<li>Syntax highlighting in the editor.</li>
<li>A picker with <strong>19 themes</strong> (light, dark and special).</li>
<li>Syntax validation.</li>
<li>AI-powered fixes and AI chat support, with full D2 context in the prompts.</li>
</ul>
<p>In <strong>0.4.1</strong> we fixed an important detail: the <strong>&quot;Fix with AI&quot;</strong> button failed on D2 and PlantUML because the corrected code contained nested braces that tripped up the response parser. We replaced it with a balanced-braces parser across all four clients (OpenAI, Claude, Gemini and DeepSeek), and OpenAI responses are now forced to valid JSON.</p>
<h2 id="an-editor-that-feels-like-your-ide">An editor that feels like your IDE</h2>
<p>0.4.0 also ships a solid round of UX work:</p>
<ul>
<li><strong>IDE-style code editor</strong>: dark theme, macOS-style title bar, a file tab with an error indicator, and a status bar showing errors, lines and diagram type.</li>
<li><strong>Project selector</strong> with search, so you can switch projects without leaving the editor.</li>
<li><strong>Redesigned diagram panel</strong>: a floating sidebar with search, quick actions, an active-diagram indicator and the folder hierarchy.</li>
<li><strong>New &quot;create diagram&quot; modal</strong> with a type selector (Mermaid, PlantUML, D2) and a description of each.</li>
<li><strong>Resizable description panel</strong> that remembers its width per diagram.</li>
<li><strong>Dashboard</strong> with a personal greeting and cards for projects, diagrams, last activity and current plan.</li>
</ul>
<p>On top of that, <strong>every view now adapts to mobile and tablet</strong>, from the editor to your profile and the shared view.</p>
<h2 id="polish-in-0-4-1">Polish in 0.4.1</h2>
<p>Beyond the &quot;Fix with AI&quot; fix, 0.4.1 gives the login page an animated background and a frosted-glass card, shows the email address your MFA code was sent to, and fully translates the share-diagram modal, with dates formatted for your language.</p>
<h2 id="try-it">Try it</h2>
<p>Create a D2 diagram on <a href="https://app.diagramahub.com" target="_blank" rel="noopener noreferrer">DiagramaHub Cloud</a> or update your instance from the <a href="https://github.com/diagramahub/diagramahub" target="_blank" rel="noopener noreferrer">repository</a>: Kroki already ships in the Docker Compose files. Every change is listed in the <a href="https://github.com/diagramahub/diagramahub/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">changelog</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Google sign-in and an AI chat that gets what you want</title>
      <link>https://www.diagramahub.com/blog/google-sign-in-and-unified-ai-chat</link>
      <guid isPermaLink="true">https://www.diagramahub.com/blog/google-sign-in-and-unified-ai-chat</guid>
      <pubDate>Thu, 23 Apr 2026 12:00:00 GMT</pubDate>
      <dc:creator>DiagramaHub Team</dc:creator>
      <description>DiagramaHub 0.3.0 adds sign-in with Google, an AI chat that detects your intent, and AI-generated Markdown descriptions for your diagrams.</description>
      <category>authentication</category>
      <category>ai</category>
      <category>release</category>
      <content:encoded><![CDATA[<p>Two bits of friction kept coming up: creating yet another account with yet another password, and having to tell the AI chat which &quot;mode&quot; you were in before asking for anything. <strong>DiagramaHub 0.3.0</strong> removes both.</p>
<h2 id="sign-in-with-google">Sign in with Google</h2>
<p>You can now sign in with your <strong>Google</strong> account (OAuth 2.0 / OpenID Connect). Here&#39;s how it works:</p>
<ul>
<li>If your Google email matches an account you already have, the provider is <strong>linked automatically</strong>. You keep your projects and there&#39;s nothing to migrate.</li>
<li>If you&#39;re new, your account is created on the <strong>FREE</strong> plan in a single step.</li>
<li>Your profile lists linked providers and when you linked them.</li>
</ul>
<p>Google logins skip DiagramaHub&#39;s own MFA: the session lasts 5 days and the banner recommending MFA doesn&#39;t appear for those sessions.</p>
<p>Under the hood we were careful:</p>
<ul>
<li><strong>CSRF protection</strong> with server-side state tokens that expire after 10 minutes and clean themselves up.</li>
<li><strong>ID token validation</strong>: signature, issuer, audience and expiration.</li>
<li><strong>Rate limiting</strong> on the callback endpoint and an <strong>audit log</strong> entry for every OAuth event (successful or failed logins and account linking), in the same security log that already tracked everything else.</li>
</ul>
<p>The architecture is provider-agnostic: Google is the first one, and each provider plugs in through an adapter class. If you run your own instance, OAuth shows up as an <strong>integration</strong> in the admin panel that you can turn on or off.</p>
<p>While we were at it, the login and sign-up pages got a <strong>language selector</strong> in the top-right corner, and the login page now shows the <strong>app version</strong>.</p>
<h2 id="one-chat-that-detects-your-intent">One chat that detects your intent</h2>
<p>The AI chat used to have separate modes for talking and for improving a diagram, and you had to pick one. Now there&#39;s <strong>a single chat</strong> that figures out what you want on its own:</p>
<pre class="mermaid">flowchart LR
    A[You type a message] --&gt; B{Detected intent}
    B --&gt;|A question| C[Chats with you]
    B --&gt;|Something new| D[Generates a diagram]
    B --&gt;|Change the current one| E[Improves the existing diagram]</pre>
<p>Write the way you&#39;d talk to a teammate: &quot;what&#39;s missing in this flow?&quot;, &quot;make me a sequence diagram of the checkout&quot; or &quot;add the payments service&quot;. The chat decides whether to answer, generate or improve, without you selecting anything.</p>
<p>Also, the provider you choose in a chat session is now saved properly to the diagram&#39;s preferences, and DeepSeek works for refinement operations too. Internally we simplified the chat data model and removed the code for the old modes.</p>
<h2 id="ai-generated-descriptions">AI-generated descriptions</h2>
<p>A diagram says a lot, but it doesn&#39;t always explain the why. You can now <strong>generate a structured Markdown description</strong> for any existing diagram and then <strong>refine it</strong> with the AI until it says what you need. We tuned the prompts so results are consistent, and generation respects the <strong>preferred provider</strong> you set for that diagram, using your own API keys as always.</p>
<h2 id="a-quick-follow-up-0-3-1">A quick follow-up: 0.3.1</h2>
<p>The same day we shipped <strong>0.3.1</strong>, which fixes a TypeScript compile error that broke the production build. Nothing changes for you as a user, but if you build the image yourself, use this version.</p>
<h2 id="try-it">Try it</h2>
<p>Sign in to <a href="https://app.diagramahub.com" target="_blank" rel="noopener noreferrer">DiagramaHub Cloud</a> with your Google account and open the chat on any diagram. Self-hosting? Update from the <a href="https://github.com/diagramahub/diagramahub" target="_blank" rel="noopener noreferrer">repository</a> and enable the OAuth integration in the admin panel. Every change is in the <a href="https://github.com/diagramahub/diagramahub/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">changelog</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>MFA and security from day one</title>
      <link>https://www.diagramahub.com/blog/mfa-and-security-from-day-one</link>
      <guid isPermaLink="true">https://www.diagramahub.com/blog/mfa-and-security-from-day-one</guid>
      <pubDate>Sat, 18 Apr 2026 12:00:00 GMT</pubDate>
      <dc:creator>DiagramaHub Team</dc:creator>
      <description>DiagramaHub 0.2.0 and 0.2.1 bring MFA via email and TOTP apps, recovery codes, stronger passwords, a security audit log and platform hardening.</description>
      <category>security</category>
      <category>authentication</category>
      <category>release</category>
      <content:encoded><![CDATA[<p>Your diagrams describe how your system is built: which services exist, how they authenticate, where each piece of data lives. That&#39;s not something you want in the wrong hands. So just days after launching DiagramaHub, we spent two full releases, <strong>0.2.0</strong> and <strong>0.2.1</strong>, hardening account and platform security.</p>
<h2 id="multi-factor-authentication">Multi-factor authentication</h2>
<p>The headline is <strong>MFA</strong>, with two methods you can enable at the same time:</p>
<ul>
<li><strong>Email</strong>: we send a code to your inbox, in Spanish or English depending on your account language.</li>
<li><strong>TOTP app</strong>: Google Authenticator, Authy or any compatible app.</li>
</ul>
<p>With both enabled, you pick a <strong>default</strong>, and at login you can hit <strong>&quot;Try another method&quot;</strong> to switch. You also get <strong>8 single-use recovery codes</strong> (<code>XXXXX-XXXXX</code> format) for when your main method isn&#39;t at hand.</p>
<pre class="mermaid">sequenceDiagram
    participant U as You
    participant D as DiagramaHub
    U-&gt;&gt;D: Email and password
    D-&gt;&gt;U: Asks for second factor
    U-&gt;&gt;D: TOTP, email or recovery code
    D-&gt;&gt;U: 5-day session</pre>
<p>Everything lives under <strong>Security</strong> in your profile: turn methods on or off, change the default and regenerate codes. If you don&#39;t have MFA yet, you&#39;ll see a low-key banner after signing in recommending it.</p>
<p>We also changed session length: <strong>2 days without MFA, 5 days with it</strong>. Protecting your account means signing in less often, too.</p>
<h2 id="stronger-passwords">Stronger passwords</h2>
<p>The password policy went from 8 to a <strong>12-character minimum</strong>, with at least one uppercase letter, one lowercase letter, one digit and one special character, and it can&#39;t match your email. Sign-up, change and reset forms now show a real-time <strong>strength meter</strong>.</p>
<p>In 0.2.1 we added something important: <strong>changing your password invalidates every session</strong> issued before the change. If you suspect someone got into your account, changing it is enough to kick them out.</p>
<h2 id="security-audit-log">Security audit log</h2>
<p>0.2.1 introduces an <strong>audit log</strong> of security events: successful and failed logins, account lockouts, MFA verifications, password changes and resets, recovery code usage and admin MFA resets. Entries are kept for <strong>90 days</strong> and then removed automatically.</p>
<h2 id="for-instance-admins">For instance admins</h2>
<p>If you self-host DiagramaHub, there&#39;s a new <strong>user admin panel</strong>: a paginated, searchable list with MFA status, subscription plan, sign-up date and, since 0.2.1, each user&#39;s diagram count. You can export it to <strong>Excel (.xlsx)</strong> and <strong>disable MFA</strong> for a user who got locked out.</p>
<h2 id="platform-hardening">Platform hardening</h2>
<p>On the server side we closed a few doors too:</p>
<ul>
<li><strong>Login rate limiting</strong>: at most 10 attempts per IP per minute.</li>
<li><strong>Temporary lockout</strong> for 15 minutes after 5 consecutive failed attempts.</li>
<li>HTTP <strong>security headers</strong> (including HSTS in production).</li>
<li>In production, Swagger/OpenAPI docs are disabled and 500 errors no longer leak stack traces.</li>
</ul>
<p>0.2.1 also polishes the MFA flow: the banner no longer shows up after you enable MFA, &quot;Try another method&quot; now shows a selection screen instead of sending an email right away, and unused recovery codes are no longer regenerated when you add a second method.</p>
<h2 id="turn-on-mfa">Turn on MFA</h2>
<p>Head to <a href="https://app.diagramahub.com" target="_blank" rel="noopener noreferrer">DiagramaHub Cloud</a>, open your profile → <strong>Security</strong> and enable at least one method. Self-hosting? Update from the <a href="https://github.com/diagramahub/diagramahub" target="_blank" rel="noopener noreferrer">repository</a>; every change is listed in the <a href="https://github.com/diagramahub/diagramahub/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">changelog</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Introducing DiagramaHub: diagrams as code, with AI</title>
      <link>https://www.diagramahub.com/blog/introducing-diagramahub</link>
      <guid isPermaLink="true">https://www.diagramahub.com/blog/introducing-diagramahub</guid>
      <pubDate>Thu, 16 Apr 2026 12:00:00 GMT</pubDate>
      <dc:creator>DiagramaHub Team</dc:creator>
      <description>DiagramaHub 0.1.0 is out: a Mermaid and PlantUML editor, projects and folders, AI with your own API keys, share links and self-hosting.</description>
      <category>launch</category>
      <category>diagrams</category>
      <category>ai</category>
      <content:encoded><![CDATA[<p>Architecture diagrams tend to live as loose images nobody updates: a PNG on the wiki, a screenshot in a ticket, a file only its author can open. The system changes and the diagram falls behind. Today we&#39;re shipping <strong>DiagramaHub 0.1.0</strong>, our first functional release, built to fix exactly that.</p>
<h2 id="why-diagrams-as-text">Why diagrams as text</h2>
<p>Writing a diagram in <strong>Mermaid</strong> or <strong>PlantUML</strong> gives you things an image never will: you version it like any other file, review it in a diff, edit it in seconds, and an AI can read and write it. What was missing was a comfortable place to keep them all together, organized and ready to share. That&#39;s DiagramaHub.</p>
<pre class="mermaid">flowchart LR
    A[You write the code] --&gt; B[Live preview]
    B --&gt; C[Organize in projects and folders]
    C --&gt; D[Share or export]</pre>
<h2 id="the-editor">The editor</h2>
<ul>
<li>A <strong>Monaco</strong> editor with syntax highlighting, autocomplete and built-in validation.</li>
<li>Real-time rendering for <strong>Mermaid</strong> and <strong>PlantUML</strong>.</li>
<li>Per-diagram visual settings: themes, layout engines, styles and curves for Mermaid; themes and <code>skinparam</code> for PlantUML.</li>
<li>A configurable background (color plus plain, dots or grid pattern), and zoom and position are saved per diagram.</li>
<li>Full-screen <strong>presentation mode</strong> with annotations.</li>
<li>Export to <strong>PNG, PDF and Markdown</strong>.</li>
</ul>
<h2 id="organization">Organization</h2>
<p>Diagrams live in <strong>projects</strong>, and each project can hold <strong>folders</strong>. Navigation is hierarchical: projects → folders → diagrams. Simple, but enough to keep your backend apart from your frontend, or one client apart from another.</p>
<h2 id="ai-with-your-own-keys-byol">AI with your own keys (BYOL)</h2>
<p>We don&#39;t want to sit between you and your language model. With <strong>BYOL (Bring Your Own LLM)</strong> you plug in your own API keys for <strong>Google Gemini</strong>, <strong>OpenAI GPT</strong>, <strong>Anthropic Claude</strong> or <strong>DeepSeek</strong>, and pick the provider and model per diagram. From there you can:</p>
<ul>
<li><strong>Generate</strong> a diagram from a plain-language description.</li>
<li><strong>Improve</strong> an existing one with suggestions and a diff preview.</li>
<li><strong>Fix</strong> syntax errors, with an explanation and the diff.</li>
<li>Auto-generate <strong>descriptions</strong> for your diagrams.</li>
<li>Iterate step by step in <strong>chat sessions</strong>, with a searchable, reusable prompt history.</li>
</ul>
<p>Your keys are stored <strong>encrypted</strong> in the database and come back masked in API responses. You can test a key before saving it to make sure it works.</p>
<h2 id="sharing">Sharing</h2>
<p>Any diagram can get <strong>share links</strong> with a unique token, either <strong>public</strong> or <strong>protected</strong> by a 4–20 character access code. Links expire after 5, 10 or 30 days, or never, and you decide whether visitors can copy the source code. Access is rate limited and logged with hashed IPs.</p>
<h2 id="accounts-plans-and-languages">Accounts, plans and languages</h2>
<ul>
<li>Sign-up, login, password reset with single-use tokens, and account deletion behind a confirmation phrase.</li>
<li>A <strong>plans</strong> system with limits on projects and diagrams, a <strong>free plan</strong> included, and payments through Stripe.</li>
<li>The interface speaks <strong>Spanish</strong> (the default) and <strong>English</strong>, and your profile lets you set time zone, language and avatar.</li>
</ul>
<h2 id="host-it-yourself">Host it yourself</h2>
<p>DiagramaHub is open source under the <strong>Apache 2.0</strong> license. You can deploy it with <strong>Docker Compose</strong>, with MongoDB bundled or pointing to an external one, and there&#39;s a one-line installer (<code>install.sh</code>). It also ships with an initial setup wizard and onboarding for new users. Docs are available in Spanish and English.</p>
<h2 id="status-beta">Status: beta</h2>
<p>This is a <strong>0.x</strong> release: the product is in beta and under active development, so some things may change between versions. That&#39;s exactly why your feedback matters so much right now.</p>
<p>Try it on <a href="https://app.diagramahub.com" target="_blank" rel="noopener noreferrer">DiagramaHub Cloud</a> or deploy it from the <a href="https://github.com/diagramahub/diagramahub" target="_blank" rel="noopener noreferrer">GitHub repository</a>. If something doesn&#39;t work the way you expect, open an issue: it&#39;s the best way to help us shape it.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
