Skip to content

Feature Matrix ​

Support tiers are defined in Versioning & Stability: Supported (tested, with the determinism contract applying at each documented surface boundary), Experimental (works, may change in any minor release), Not supported (documented gap).

Text & typography ​

CapabilityStatusNotes
Shaping (kerning, ligatures, OpenType features)SupportedHarfRust (HarfBuzz-compatible), fontFeatureSettings
Line breaking (UAX #14)SupportedGreedy first-fit; no Knuth–Plass
Japanese kinsoku (JLREQ-informed) + hanging punctuationSupportedlanguage: "ja" only; fixed JaTypesettingV1 profile; no zh/ko profiles
Vertical writing (vertical-rl, UTR #50, vert/vkna)SupportedtextOrientation: "sideways" not implemented
Ruby annotations (Ruby/Rt)SupportedMultiple Rt levels, tunable rubyGapPx/rubyOffsetPx; inter-character falls back with warning; long-ruby overhang is warned
Tate-chu-yoko (textCombineUpright: "all")ExperimentalManual only; no automatic TCY grouping
Auto-fit (fit: shrink/grow), ellipsis, max linesSupportedShared horizontal/vertical and normal/flow contract; exact rich-prefix projection; deterministic work limits
Variable fonts (fontVariationSettings)Supported
Font fallback chainsSupportedAlias-driven, per-character glyph availability
WOFF2 / TTF / OTF inputSupportedWOFF2 decoded at registration
Rich inline (Inline styling + decoration)SupportedFragmentable background/border/padding across line breaks
Inline boxes (InlineBox)SupportedAtomic (non-fragmenting)
Text decorationSupportedSolid/double/dotted/dashed/wavy filled geometry on Text/rich ranges; horizontal/vertical and outline-aware skipInk
Inline rectangles (InlineRect)SupportedAtomic caret/paint primitive with zero or non-zero advance and optional opacity/transform animation
Text on a path (TextOnPath)SupportedStrings/nested Inline; mixed paint, curved decoration/skipInk, open/closed path, fit/ellipsis, decoration-free unit animation
Text flow around exclusionsExperimentalLogical-axis region provider; content/geometry-aware exact-grid fit; deterministic query/interval budgets
Letter spacingSupported
Color emoji (COLR/CBDT/sbix)Not supportedFont-level color emoji not rendered
Emoji cluster detectionExperimentalsplitEmojiClusters/isEmojiCluster — foundation for opt-in asset packs; no bundled artwork, render-time compositing not yet wired
Bidi / RTLNot supportedExplicit current non-goal

Layout ​

CapabilityStatusNotes
Flexbox (Taffy)SupportedFull flex model
CSS Grid (Taffy)SupportedtemplateColumns/Rows, placement, span, gap
position: relative / absolute + insetSupportedNo fixed/sticky
aspectRatio, min/max sizingSupported
overflow: visible / clipSupportedNo scroll/auto
Block / inline flow layoutNot supportedBox is a flex column internally
zIndex (sibling-local paint order)SupportedIntegers; no CSS stacking contexts
Multi-layer text stroke / text shadowSupportedtextStrokes / textShadows (max 8 layers)
Node metadata (meta)Supporteddata-boundsvg-meta-* + layered manifest

Visuals ​

CapabilityStatusNotes
Solid fills, opacity, stroke stylesSupported
Linear / radial gradients (background)SupportedNo conic; background only
borderRadius (uniform + per-corner)Supported
Uniform bordersSupportedNo per-side borders
Canvas-stable strokesSupportedOpt-in strokeScaling: "canvas" on solid Flex / Grid / Box borders and Path strokes under similarity transforms
boxShadow (single, unitless)SupportedNo inset, no multiple shadows, no px units
Static transform (translate/rotate/scale)ExperimentalPost-layout paint transform; not a layout input
Declarative animation (animate)SupportedOpacity and center-pivot transform with cubic, step, and spring easing. Independent animated SVG preserves authored clocks; static APIs sample timeMs.
Document-synchronized SVG timelineSupportedplayback: { mode: "timeline", durationMs, iterations } compiles representable tracks onto one document clock. Spring and clamped opacity overshoot cubics fail rather than approximate; live discontinuities use the documented two-sided carve-out.
Text unit animation (animateUnits)ExperimentalShaping-cluster or resolved-line opacity/transform with deterministic linear staggering and ruby association.
Prepared batch frames (renderFrames)ExperimentalOne fixed layout sampled to ordered static SVG/PNG frames; duplicate and non-monotonic times are preserved.
Layout-reactive materializationExperimentalApplication-generated static scenes receive full-scene layout per time; no declarative layout tracks are added to core.
Images (objectFit: fill/contain/cover)SupportedPNG/JPEG/WebP/GIF raster decode; no AVIF
Embedded SVG (<Svg>)ExperimentalSanitized; inner <text> outside determinism contract
Shape / Symbol geometry (boolean ops)Experimentalvia @boundsvg/shape registry
CSS filters (blur, etc.)Not supportedOnly box-shadow

Output & integration ​

CapabilityStatusNotes
Static SVG output (text as glyph paths)SupportedAnimated input requires explicit timeMs; nodeIdMetadata can include preview identity or omit it for final export.
Independent animated SVG outputSupportedExplicit engine.renderToAnimatedSvg(..., { playback: { mode: "independent" } }) preserves authored clocks.
Document-timeline animated SVG outputSupportedExplicit duration and finite/fractional or infinite document iterations; deterministic base pose and budgeted CSS.
PNG output (scale, background, caps)SupportedMax 3840×2160
WebP output (engine.renderToWebp)SupportedLossless (VP8L) only; byte-deterministic; often smaller than PNG
Animated WebP (engine.renderToAnimatedWebp)ExperimentalRequired sink / Promise result; lazy sampled schedule; full-frame lossless
Animated GIF (engine.renderToAnimatedGif)Experimental256-color quantized; 10 ms timing quantum; byte-deterministic
MP4 export, browser (@boundsvg/video)ExperimentalH.264 via the browser's WebCodecs encoder; outside the determinism contract; no Cloudflare Workers
MP4 export, CLI (--format mp4)ExperimentalH.264 via an external ffmpeg you install; outside the determinism contract
Layered SVG/PNG exportExperimentalFor motion-tool handoff
Scene Document round-trip (.scene.json)Experimental
React bindings (@boundsvg/react)SupportedProvider, hooks, worker offload
Web Worker rendering (@boundsvg/worker)SupportedESM-only worker entry
Worker frame poolExperimentalOrdered, bounded prepared sampling and full-scene materialized streams
Interactive events / hit-testingExperimental
CLI (convert / export / inspect / doctor)ExperimentalSVG import analyzer has documented limits
Node.js / browser / worker runtimesSupportedSame covered artifacts for accepted inputs on declared surfaces (see contract)

MP4 failures preserve structured FatalError codes and Video category/operation context. See the Video diagnostics guide for load/ABI retry and encoder/container failure handling.