Tracks our support for each Excalidraw element type and feature, against Excalidraw's element schema.
Legend: ☐ not started · ⏳ in progress · ☑ done · — N/A · skip not in v0.1
| Type | Status | Notes |
|---|---|---|
rectangle |
☑ | Includes roundness (rounded corners). |
ellipse |
☑ | |
diamond |
☑ | Includes roundness. |
line |
☑ | Straight line, optional curve via points array. |
arrow |
☑ | All arrowhead variants: arrow, bar, dot, triangle, triangle_outline, diamond, diamond_outline, crowfoot_one, crowfoot_many, crowfoot_one_or_many. |
text |
☑ | Multi-line, font family, alignment, container-bound positioning (padding-aware, rect/ellipse/diamond). |
freedraw |
☑ | Smooth path through points (Catmull-Rom spline). Pressure curves not in v0.1. |
image |
☑ | Embedded via files dict (data URLs). |
frame |
☑ | Clip-path + frame label. |
magicframe |
skip | AI-generated frame; same shape as frame. v0.2. |
iframe |
skip | Web embed; not meaningful in static export. |
embeddable |
skip | Same as iframe for our purposes. |
| Feature | Status | Notes |
|---|---|---|
strokeColor |
☑ | Hex colors. |
backgroundColor |
☑ | Hex colors. |
strokeWidth |
☑ | Integer pixels. |
strokeStyle |
☑ | solid / dashed / dotted. |
fillStyle |
☑ | solid plus hachure / cross-hatch / zigzag / zigzag-line / dots / dashed as clean SVG <pattern> approximations of roughjs fills. |
opacity |
☑ | 0–100 → SVG opacity 0–1. |
angle |
☑ | Element rotation in radians; SVG transform="rotate(...)". |
roughness |
— | Not supported in v0.1 — see README. |
groupIds |
☐ | Group transforms (rotation/translation applied to group as a unit). |
boundElements |
☑ | Text bound to rect/ellipse/diamond gets padding-aware layout and rotates with the container. Arrow labels keep stored coords. Clipping/wrapping recompute not done. |
containerId (on text) |
☑ | Same as above, from the text side. |
link |
skip | SVG <a xlink:href="..."> wrap; v0.2. |
- Parse
.excalidrawJSON → typed dataclasses (element.py). - Resolve group transforms and container relationships (
layout.py). - Compute scene bounding box for viewBox.
- Emit SVG fragments per element (
renderers/<type>.py). - Wrap in
<svg>document with background. - Optional: cairosvg → PNG.