Skip to content

0.8.0 (2026-10-02)

A product release built on three pillars that reinforce each other: export a whole project or folder (ZIP or a single Markdown file), import files, ZIP archives and Excalidraw drawings, and a freehand canvas with Excalidraw's hand-drawn look, element locking, PNG export and sketch-to-Mermaid conversion.

⬆️ Upgrade notes

  • No migrations or mandatory configuration changes. Rebuild the images as usual (docker compose up -d --build).
  • Existing drawings keep their look: the hand-drawn style applies to new elements only; any element can be switched from the style panel.
  • New optional MAX_IMPORT_UPLOAD_BYTES (default 20 MB) for the maximum import size, plus MAX_IMPORT_FILES (500) and MAX_IMPORT_UNCOMPRESSED_BYTES (50 MB).
  • New THIRD_PARTY_NOTICES.md listing the third-party components distributed with the application (roughjs and perfect-freehand, MIT; the Caveat font, SIL OFL 1.1).

✨ Features

Export a project or a folder

  • From the explorer (download icon or folder menu → "Export folder") and from the projects list.
  • Scope: the whole project (root and every folder) or a single folder.
  • ZIP: one subfolder per folder, one file per diagram with its type's extension (.mmd, .puml, .d2, .dbml, .freehand.json), the description in a .md next to it, a README.md index and a manifest.json to import it back. File names are safe on every operating system and never collide.
  • Single-file Markdown, in two variants: for AI context (a preamble that explains the file to the model, an index with paths, per-diagram metadata and a token estimate — ready to paste into ChatGPT or Claude) or standard (a clean document). Diagrams go in code blocks tagged mermaid, plantuml, d2 or dbml.
  • Before downloading you see what will be exported: diagrams, folders, size and, for the AI variant, approximate tokens.

Import

  • From the explorer's upload icon, the folder menu ("Import here") or by dragging files from your computer onto the explorer root or a folder.
  • Accepts loose files (.mmd, .puml, .d2, .dbml, .freehand.json sketches, Markdown with a code block, plain text with type detection), ZIP archives (Diagramahub exports restore folders and colours; any other ZIP creates folders from its paths) and Excalidraw drawings (.excalidraw: shapes, labels, connected arrows, strokes and text; images and frames are skipped and reported).
  • Preview before anything is created: folders and diagrams to be created, skipped files with their reason, and your plan quota. An import that would exceed the plan limit is rejected as a whole.
  • If something fails midway, what was created is rolled back. Duplicate titles get a "(2)" suffix. Folders with the same name are reused.
  • Protection against malicious ZIP files: limits on upload size, file count and uncompressed size; nested ZIPs are skipped.

Freehand canvas

  • Hand-drawn look for shapes, lines and arrows (roughjs), with a stroke style (Clean, Architect, Artist, Cartoonist) and fill pattern (solid, hachure, cross-hatch) in the style panel.
  • Smooth freehand strokes with variable width and pen pressure (perfect-freehand).
  • Handwriting font (Caveat) for new text, with a Handwritten / Regular / Code selector.
  • Lock elements (panel, context menu or Ctrl/Cmd+Shift+L): they cannot be moved (drag, arrow keys, align), resized, rotated, edited, restyled or deleted. When aligning, locked elements act as fixed references.
  • Export the canvas as PNG (previously impossible) at 1x/2x/3x with an optional transparent background (rotated elements are fully included; for huge drawings the scale is reduced to stay within browser limits); download the source as .freehand.json.
  • Sketch → Mermaid: from the convert menu, shapes with text become nodes and connected arrows become links of a new flowchart; whatever cannot be converted is noted as comments at the top of the code. No AI involved: the result is exact and repeatable.
  • The shared view and presentation mode use the new rendering.

🐛 Fixes

  • The canvas text tool lost its text: on click, the inline editor lost focus immediately and the element vanished. It now works with a single click.
  • The canvas could not be exported: the export button was hidden for this diagram type.
  • Downloading the source of a DBML diagram used the .mmd extension.
  • Browser downloads did not receive the server's file name (the Content-Disposition header was not exposed).
  • The canvas live preview did not reflect fill colour changes.
  • Opening the export dialog on a sketch after choosing SVG, PDF or Markdown for another diagram kept the hidden format and the button failed; sketches always export PNG.
  • The export summary has its own per-user rate limit and no longer compresses the ZIP to measure it (it shows "up to" that size).

🧪 Tests

  • Backend: 70 new tests for export and import (pure builders, safe names, Markdown variants, ZIP with and without manifest, Excalidraw, limits, plan quota, rollback, permissions).
  • Frontend: Vitest is introduced for pure functions (npm test), with the first 15 tests (sketch → Mermaid and PNG export geometry).
  • End-to-end flows verified in the browser with Playwright: export (18 checks), import (20), canvas (13 + 13) and shared view.
  • Full backend suite: 343 tests, 57.01% coverage (45% gate).