12. Known limitations
Collected from the code, from its comments, and from driving the app. Nothing here is a plan; it is what the thing does not do today.
Rendering and export#
- PDF artwork is a raster. Page geometry is vector-exact (media box in
points, multi-page splitting, A4 tiling), but the artwork is a JPEG at 200 dpi
by default, so PDF text is not selectable or searchable and deep zooms show
pixels. This is deliberate: the PDF is rasterised from the exporter's own SVG
so the two can never look different.
dpi: 300is the print setting. - SVG, PNG, draw.io and Mermaid are per page. Only Plota JSON and PDF cover
a whole multi-page document in one file; exporting the others with scope
All pageswrites one file per page. - Mermaid export is a flowchart projection (a sequence diagram exports as
sequenceDiagram). Shape kinds collapse to the handful of Mermaid node shapes; styling, layers, data and pages are dropped. - A document theme change rewrites the theme's style keys. Per-node overrides survive, but there is no per-page theme.
Import#
- A foreign SVG becomes one image node. Only SVGs this app wrote are re-read as a real document. The importer says which one you got.
- Mermaid import covers 13 diagram types (see
Mermaid diagrams). Charts and grids —
gantt,pie,quadrantChart,xychart,sankey,packet,kanban,radar-beta,treemap-beta— andzenumlare refused by name. - Icons and service tiles from captions are an MCP-server feature. A Mermaid chart pasted into the editor keeps plain shapes; add icons from the Icons panel.
- The PlantUML reader is a deliberately small subset: declarations
(
participant,actor,class,component,database,entity,usecase, …), the arrow spellings,[*]terminals andtitle. Skinparams, notes, packages and nested blocks are ignored. - Lucidchart import reads the clipboard's
text/htmlflavour, not.lucidfiles. Unknown block classes fall back to a plain rectangle rather than dropping the paste. - draw.io shapes outside the mapped style vocabulary become rectangles. The warning list in the import dialog names what was approximated.
Routing#
- Smart Route plans orthogonal and Smart connectors with both ends on a shape and no hand-placed waypoints together. Elbow, straight, curved, waypointed and free-ended connectors are drawn one at a time, so they are not spread along a shape's side or kept apart from their neighbours.
- On very large pages routing is the slowest part of redrawing; turn Smart
Route off while you rearrange, or set the busiest connectors to
elbow. - Keeping parallel runs apart is best-effort. Where there is no room, two connectors can still share a run.
Text#
- Auto-fit does not apply to containers and renderer-driven kinds:
plane,group,fragment,lane,lifeline,activationandimageare skipped and reported as skipped, because sizing them from their own label would collapse them over their children. - ERD attribute rows are drawn by the ERD stencil, not the shared label
renderer. The shared renderer treats a newline as ordinary whitespace and
re-wraps the body into a centred block, which cannot line an attribute up
with its divider. Consequence: inline markup (
**bold**, links, …) does not apply inside attribute lines — only in the entity name. - The same is true of the other content-driven stencils (
table,umlClass): their body text is a model, not prose.
Persistence and AI#
- No autosave, no server, no accounts, no collaboration.
Ctrl/⌘ Swrites tolocalStorage; clearing site data deletes it. Export JSON for anything that matters. - WebLLM needs WebGPU and a one-off download of roughly 1.5 GB. Without WebGPU the panel says so and downloads nothing.
- Embeddings need the model CDN on first use (~23 MB, then cached). Offline the semantic features degrade to lexical similarity and say so.
- Ollama cannot be reached from a
file://page — there is no origin to put inOLLAMA_ORIGINS. Serve the single-file build overhttp://if you want a local model with it. - The single-file build stubs the three heavy in-browser models — WebLLM,
transformers.js (embeddings) and background removal — because inlining them
would add gigabytes. It does not stub the network providers: Ollama and
any OpenAI-compatible server work normally, since they are plain
fetchcalls. Serve the file overhttp://rather than opening it asfile://, or the browser sends anullorigin that Ollama's CORS check rejects. - A model can produce a valid but wrong plan. The op schema is enforced, so it cannot corrupt the document, but it can still propose nonsense — which is why nothing is applied without a preview.