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, plusMAX_IMPORT_FILES(500) andMAX_IMPORT_UNCOMPRESSED_BYTES(50 MB). - New
THIRD_PARTY_NOTICES.mdlisting 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.mdnext to it, aREADME.mdindex and amanifest.jsonto 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,d2ordbml. - 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.jsonsketches, 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
.mmdextension. - Browser downloads did not receive the server's file name (the
Content-Dispositionheader 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).