Figler is a headless renderer for a documented Figma subset. It does not claim complete Figma or OpenPencil parity.

Use strict: true when partial or approximate output is unacceptable:

Figler.Render.render(fig,
  root: "0:123",
  scale: 2,
  strict: true,
  fallback_font_paths: ["fonts/Inter-Regular.ttf"]
)

A non-strict render returns structured warnings in metadata.warnings. Strict mode returns {:error, {:unsupported_render_features, warnings}} instead.

Status meanings

  • Supported — implemented and covered by behavioral tests.
  • Oracle-covered — compared with OpenPencil using the same root, bounds, scale, background, and fonts.
  • Approximate — rendered with an explicit warning.
  • Diagnostic-only — not rendered; strict mode rejects it.

Documents and scene semantics

FeatureStatus
Complete .fig ZIP/archive inputSupported within documented pre-extraction safety limits
Raw Kiwi message inputSupported
Page and root selectionSupported
Archive images/* and message blobsSupported
Components, instances, swaps, and overridesSupported
Component properties and effective valuesSupported
Focused native source projectionSupported
Affine transforms, visibility, and opacitySupported
Bounded output allocationInvalid/oversized bounds rejected before canvas allocation
Frame, symbol/component, and instance clippingSupported for transformed descendants and independent corners
Common node blend modesSupported
Linear burnDiagnostic-only

Shapes and geometry

FeatureStatus
Frames, sections, symbols, and instancesSupported
Rectangles and rounded rectanglesSupported
Independent rectangular corner radiiSupported
EllipsesSupported
LinesSupported
TextSupported
Imported vector pathsSupported
Flattened boolean geometrySupported
Editable vector networks and compound regionsSupported, oracle-covered
Even-odd and winding fill rulesSupported
Regular polygon and star nodesSupported
Arc/partial-ellipse and ellipse-ring geometrySupported
Unresolved live boolean geometryExplicit warning; rejected in strict mode
Figma smooth cornersCircular-radius approximation with warning; rejected in strict mode

Figler does not fall back to drawing an unsupported shape as a rectangle.

Paints and images

FeatureStatus
Solid fillsSupported, oracle-covered
Linear gradientsSupported, oracle-covered
Radial gradientsSupported, oracle-covered
Angular/sweep gradientsSupported, oracle-covered
Diamond gradientsSupported with a native SkSL shader
Gradient transformsSupported, oracle-covered
Gradient fills on editable vectorsSupported, oracle-covered
Image FILL and FITSupported
Transformed STRETCH/cropSupported
Transformed and scaled TILESupported, oracle-covered
Image rotationSupported
Image color-adjust/filter pipelinesDiagnostic-only
Pattern paintsDiagnostic-only
Noise and custom paintsDiagnostic-only

OpenPencil currently approximates diamond gradients as radial gradients, so Figler uses native behavioral coverage rather than a misleading visual oracle for that feature.

Strokes

FeatureStatus
Width, miter limit, joins, and butt/round/square capsSupported
Dash patternsSupported, oracle-covered
Center alignmentSupported
Inside/outside alignment on closed, compound, and transformed pathsSupported, oracle-covered
Open-path inside/outside alignmentCentered approximation with warning; rejected in strict mode
Gradient/image strokes on vectors and boolean pathsSupported
Non-solid strokes on ordinary primitive shapesDiagnostic-only
Decorative arrow, ERD, highlight, and washi capsDiagnostic-only
Stroke cap sizingDiagnostic-only
Individual-side stroke weightsDeferred

Text and fonts

FeatureStatus
UTF-16-indexed rich-text style runsSupported
Unicode scalar and grapheme-safe segmentationSupported
Per-run font, size, fills, and fallbackSupported, oracle-covered
Caller-supplied font filesSupported
Character-aware system fallbackSupported
Line height and letter spacingSupported
Horizontal and vertical paragraph alignmentSupported
Underline, line-through, and decoration stylesSupported
Wrapping, max lines, ellipsis, and bounded clippingSupported, oracle-covered
Upper/lower/title caseSupported
Small capsDiagnostic-only
Decoration thickness/offset and non-solid decoration paintsDiagnostic-only
Exact CanvasKit/Figma shaping for every scriptNot guaranteed

Font substitution is always reported and is rejected by strict mode. Figler does not bundle a large fallback font; applications provide any required font files or directories.

Effects, compositing, and masks

FeatureStatus
Drop shadow, including spreadSupported, oracle-covered
Inner shadow on supported shapes, vectors, and textSupported, oracle-covered
Foreground/layer blurSupported, oracle-covered
Shape-masked background blurSupported, oracle-covered
Bounded offscreen layers for nested frames, instances, text, and masksSupported
Effect ordering around shapes and childrenSupported
Mask-node opacity and supported effectsSupported
Alpha sibling masksSupported, oracle-covered
Luminance sibling masks preserving source alphaSupported, oracle-covered
Outline masksApproximate
Effect-specific non-normal blend modesDiagnostic-only
Drop-shadow cutout under translucent contentDiagnostic-only
Grain, glass, repeat, symmetry, noise, and custom effectsDiagnostic-only

Visual validation

OpenPencil is Figler's primary visual oracle. Oracle manifests record the exact source and Figler roots because OpenPencil may remap GUIDs while importing a .fig file. Each case also records fixture/reference hashes, scale, background, fonts, expected warnings, and case-specific pixel thresholds.

An oracle case is omitted when OpenPencil ignores the feature being tested. Passing the oracle suite demonstrates the listed selections, not arbitrary whole-file parity.