full_svg_flutter
Animated SVG renderer for Flutter — SMIL, CSS keyframes, filters, path morphing, JS runtime, SVGator support, playback control, flutter_svg-compatible API.
1.4.3
2.5K downloads/mo
#4930 most downloaded on pub.dev
denisnadey/flutter_full_svg_support
What this package is like to depend on
Last release today
23 Aug 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 13 of 13 stable releases
Nothing withdrawn
no release was ever pulled
3 months old
13 releases · first in 2026
13 releases in the last 12 months
see the full history below
Release timeline
13 releases · Apr 2026 to Aug 2026Releases
latest 13-
1.4.323 Aug 2026Release notes
Open source →Windows build compatibility
- Updates
quickjs_engineto^0.1.4. - Fixes Windows generated plugin registrant compile/link failures.
- Refreshes installation examples and public guides.
- Includes clean Windows release-build coverage and preserves Android 16 KB alignment checks.
Thanks to @dariyooo for contributing the core manifest fix in #36.
Published package: https://pub.dev/packages/full_svg_flutter/versions/1.4.3
Changelog: https://github.com/denisnadey/flutter_full_svg_support/blob/v1.4.3/CHANGELOG.mdRelease notes
Open source →Windows plugin registration
Fixed
- Updated
quickjs_engineto^0.1.4, fixing Windows builds that failed when Flutter's generated plugin registrant called the missingQuickjsEnginePluginRegisterWithRegistrarsymbol. - The Windows plugin now declares its exported C API class consistently and provides the canonical header expected by Flutter's generated registrant.
Maintenance
- Updates
-
1.4.213 Aug 2026Release notes
Open source →Fixed
- Source-based diffuse lighting, specular lighting, and displacement filters now keep separate precomputed rasters for each rendered use instance.
- SourceGraphic precomputation now stays in the filter target's local coordinate space, fixing scaled, rotated, nested, and positioned use chains.
Maintenance
- Centralized supported use targets and recursion limits across painting, hit testing, and filter precomputation.
- Added regression coverage for inherited styles, transforms, lighting, displacement, and id-less filter targets.
Published on pub.dev: https://pub.dev/packages/full_svg_flutter/versions/1.4.2
Release notes
Open source →Correct SourceGraphic filters for repeated use instances
Fixed
- Source-based diffuse lighting, specular lighting, and displacement filters
now keep separate precomputed rasters for each rendered
<use>instance, so inherited properties such asfillno longer leak between instances of the same definition. - SourceGraphic precomputation now stays in the filter target's local
coordinate space. Scaled, rotated, nested, and x/y-positioned
<use>chains therefore use the same cache dimensions as paint-time filter lookup instead of silently falling back to the unfiltered graphic.
Maintenance
- Centralized the supported
<use>target whitelist and recursion-depth limit across painting, hit testing, and asynchronous filter precomputation. - Added pixel regressions for flat and nested use inheritance, transformed use chains, lighting, displacement, and distinct id-less filter targets.
-
1.4.111 Aug 2026Release notes
Open source →Android 16 KB page-size compatibility.
- Releases quickjs_engine 0.1.3 with 16 KB ELF LOAD segment alignment on Android.
- Requires quickjs_engine ^0.1.3 from full_svg_flutter.
- Adds CI checks for ELF segment and APK ZIP alignment.
- Preserves support for CMake 3.10 host toolchains.
Fixes #31.
Release notes
Open source →Android 16 KB page-size compatibility
Fixed
- Updated
quickjs_engineto^0.1.3, which links its Android native library with 16 KB ELFLOADsegment alignment for compatibility with devices that use a 16 KB memory page size. - Added release APK verification for native ELF segment alignment and 16 KB ZIP alignment to prevent regressions in Android packaging.
-
1.4.005 Aug 2026Release notes
Open source →Highlights
- Complete ordered SVG filter-pass execution for groups and leaf elements.
- Correct
objectBoundingBoxsizing for paths, text, containers, and referenceduse/symbol/svggeometry. - Geometry-accurate
transform-box: fill-boxand percentagetransform-originrotation/scaling. - Correct filter + mask/opacity/clip composition, paint-channel isolation, and identity filter-region clipping.
- Stable per-node source-filter precompute caching.
- New public documentation in English, Simplified Chinese, and Hindi, plus refreshed migration, feature, and limitations guides.
- Android arm64 release CI support for current GitHub-hosted Ubuntu runners.
Install
dependencies: full_svg_flutter: ^1.4.0
Published on pub.dev: https://pub.dev/packages/full_svg_flutter/versions/1.4.0
See
CHANGELOG.mdfor the complete release notes.Release notes
Open source →Complete group filters and geometry-accurate transform origins
This minor release completes the filter pipeline for container elements, shares real SVG geometry bounds with bounding-box-based transforms, and adds a new multilingual public documentation set.
New
- Added complete public usage guides in English, Simplified Chinese, and Hindi, plus dedicated migration, supported-features, and limitations documents.
- Added focused pixel regressions for group filter composition and
transform-box: fill-boxbehavior across complex SVG geometry.
Changed
- Leaf elements and groups now use one ordered filter-pass executor, including specialized turbulence, displacement, lighting, image, and inner-shadow passes.
- Filter sizing and bounding-box transform origins now share one fill-geometry
resolver for paths, polygons, polylines, text, containers, and referenced
<use>content, including<symbol>/<svg>viewport andviewBoxmapping. - Source-based displacement and lighting precomputation now uses rendered geometry instead of requiring explicit width and height attributes.
Fixed
- Group filters no longer drop ordinary passes around specialized passes.
FillPaintandStrokePaintchannel restrictions remain isolated through descendants and nested filters.- Groups combining filters with masks, opacity, or clipping now preserve the correct compositing order.
- Explicit identity filters still apply their declared filter-region clip.
objectBoundingBoxfilters now resolve real bounds for path, polygon, polyline, text, switch, symbol, and use geometry, including transformed and visibility-controlled descendants.transform-originwithtransform-box: fill-boxnow rotates and scales paths, polygons, polylines, text, and positioned/referenced use elements around their actual fill bounds instead of a zero-sized fallback.- Source-filter precompute caches now use stable per-node identities, avoiding collisions between same-size elements that share a filter.
Maintenance
- Fixed the Android arm64 release workflow for current GitHub-hosted Ubuntu
runners by resolving
sdkmanagerthroughANDROID_SDK_ROOT.
-
1.3.122 Jul 2026Release notes
Open source →Fixed
- Updated
quickjs_engineto^0.1.2, which fixes Android clean CI release builds failing at native CMake linking because the QuickJS bridge used__android_log_printwithout linking Androidliblog. - The
quickjs_engineupdate also aligns Android plugin Java/Kotlin JVM target settings for clean release builds on modern Flutter/Gradle toolchains.
- Updated
-
1.3.008 Jul 2026Release notes
Open source →Android packaging + dependency refresh
This release folds in the Android
CMakeLists.txtfix that explicitly links theloglibrary on Android, which resolves NDK 27+ builds for the native QuickJS bridge.Changed
- Added Android-specific
loglibrary linking inpackages/quickjs_engine/native/CMakeLists.txt. - Updated the package metadata to the new minor release.
- Refreshed the public-facing README install examples to
^1.3.0.
Fixed
- Android builds with newer NDK versions no longer fail on
__android_log_printsymbol resolution in the native bridge.
- Added Android-specific
-
1.2.019 May 2026Release notes
Open source →One self-contained rendering engine 🎉
Static SVG rendering no longer depends on the
vector_graphicspackage family. Both static (SvgPicture) and animated (FSvgPicture/AnimatedSvgPicture) SVGs are now rendered by this package's own DOM-preserving engine — one consistent code path, fewer transitive dependencies, and the full feature set (filters, masks, gradients, text) available to static SVGs too. The publicSvgPicture/FSvgPictureAPI is unchanged, so this is a drop-in upgrade for the common case.Changed
- Removed the dependencies on
vector_graphics,vector_graphics_compiler, andvector_graphics_codec. They are no longer pulled into your app. SvgPictureis now rendered by the built-in engine instead ofvector_graphics'createCompatVectorGraphic. The publicSvgPictureAPI — every constructor,SvgTheme,ColorMapper, and all loaders — is unchanged.- Types previously re-exported from
vector_graphicsare now owned by this package:BytesLoaderresolves the raw UTF-8 SVG source rather than a compiled binary vector format.PictureInfois now this package's own class (picture+size), produced by the newrenderSvgToPicturehelper.RenderingStrategyis retained for source compatibility but is now a no-op hint.
- Removed precompiled
.vecasset support (AssetBytesLoader) — it was avector_graphics_compilerfeature. SVGs are parsed directly at runtime and the decoded source is cached. vg/VectorGraphicUtilitiesare no longer exported. UserenderSvgToPictureto render an SVG to aui.Picture/ui.Image.- WOFF/WOFF2 font decoding for SVG
@font-facerules now lives in the new standalonewoff2package (added as a dependency). Same code, lifted out so apps that don't render SVGs but do need WOFF/WOFF2 font loading can use it directly.es_compressionmoved from a direct dependency to adev_dependenciesentry used only by the test config. TheSvgFontLoadertypedef (re-exported fromlib/src/animation.dart) is now an alias forWoffSrcResolverwith the same signature — no source changes required for callers.
New
renderSvgToPicture(String svg, {Size?, SvgTheme?, ColorMapper?})renders an SVG to aPictureInfooutside the widget tree.SvgTheme(currentColor,font-size) andColorMapper(per-attribute color substitution) are now honored by the engine for both static and animated SVGs.AnimatedSvgPictureacceptsthemeandcolorMapper.BoxFit/alignmentare now honored for non-containfits.SvgPicturewithout an explicitwidth/heightlays out at its intrinsic size in unbounded contexts (rows, columns, scroll views).- New demo assets: an animated Flutter logo (
assets/flutter_logo_animated.svg) and a CSS@keyframesloader (assets/demo_css.svg).
Fixed
- Relaxed the
metadependency constraint from^1.17.0to^1.16.0so it no longer conflicts with themetaversion pinned by the SDK'sflutter_test(Flutter 3.32 shipsmeta 1.16.0), which previously made version resolution fail for projects that also useflutter_test.
Migration
For static SVGs no code change is required —
SvgPicture.asset/.network/.string/.memory/.filework exactly as before. If you importedvector_graphicstypes directly, switch to the package's own (BytesLoader,PictureInfo,renderSvgToPicture) exported frompackage:full_svg_flutter/full_svg_flutter.dart. - Removed the dependencies on
-
1.1.111 May 2026Release notes
Open source →Documentation fixes for the 1.1.0 release — no code changes.
- Updated supported-features table:
JavaScript inside SVGrow now reads ✅ Supported (linking to the JavaScript runtime section) instead of the stale ❌ from previous versions. - Updated FAQ entry on SVGator: both SMIL/CSS and JS-export modes are documented as working now.
- Added a Native dependencies + Building the native library from source section to the README covering macOS / Linux / Windows toolchain prerequisites and when end users actually need to recompile.
- Rewrote
doc/limitations.mdJavaScript section: spelled out which DOM APIs the polyfill covers and which still aren't supported (full HTML DOM, inlineonclick=handlers, browser frameworks). - Updated
doc/supported_features.md: JavaScript runtime is its own table now with the polyfill surface; removed the obsolete row from "Not supported". - Quick-start version pins refreshed from 1.0.3 → 1.1.0.
- Updated supported-features table:
-
1.1.011 May 2026Release notes
Open source →JavaScript runtime + SVGator support 🎉
This release ships an embedded JavaScript engine and a polyfilled SVG DOM, so animated SVGs that drive their animation through inline
<script>blocks now render natively — no WebView, no conversion to SMIL.- SVGator JS-export files now render correctly. Coffee Match Cut, Glowing Gummies, Basketball Boy, Skating Girls, Dog Character, Ramen Raccoon and similar SVGator-exported scenes play with their original player script attached. SMIL/CSS export is no longer required.
- Embedded JavaScript engine. QuickJS-NG 0.14.0 (May 2026 release) ships inside the app on every platform — Android, iOS, macOS, Linux, Windows — via the new
quickjs_engineruntime package. The same JS engine on every target eliminates the JSC-vs-old-QuickJS divergence that plagued cross-platform JS-in-SVG. - SVG DOM polyfill.
document.getElementById,Element.setAttribute/setAttributeNS,styleproperty proxy, virtualcreateElementNS('svg', 'path')with realgetTotalLength()andgetPointAtLength(distance)for arc-length-parameterized bezier interpolation,requestAnimationFrame,addEventListener, timers,fetch/XHR via Darthttp, plus the rest of the surface SVGator and similar players touch. - Cubic-bezier path arc-length math. Virtual
<path>elements compute real arc length via 100-sample subdivision + cumulative table;getPointAtLengthdoes a binary search across the table and linearly interpolates between samples. Cached per-path keyed by thedattribute. This is the keystone fix that gets SVGator'sFt()interpolator to produce correct points instead of{x:0, y:0}mid-segment. - Custom JS animations also work — any inline
<script>that walks the SVG viagetElementById+setAttributewill animate, even if it's not from SVGator.
-
1.0.307 May 2026Release notes
Open source →- Fix
<image>aspect ratio: when onlywidthorheightis specified, the missing dimension is now computed proportionally from the image's intrinsic size. Previously, the raw pixel dimension was used, causing images placed with a single size attribute to shift position and appear at incorrect scale. - Fix
background-colorclipping withclipToViewBox=true: the SVG rootbackground-colorstyle was drawn before the viewBox clip was applied, causing it to fill the entire widget instead of being bounded by the SVG viewport. It is now drawn inside the transformed and clipped canvas context, matching browser behaviour. - Add
clipToViewBoxtoggle (defaulttrue) to the example playground, so SVG content that overflows the viewBox boundary is clipped by default — matching how browsers display SVG files opened directly. - Fix playground SVG proportions: preview width and height are now derived from the SVG
viewBoxaspect ratio instead of forcing a square container, so portrait or landscape SVGs display at correct proportions.
- Fix
-
1.0.204 May 2026Release notes
Open source →- Add native
file://URI support for<image>elements: local files load viadart:ioon all non-web platforms. Web stub returns null gracefully. - Improve pub.dev package description and topics for animated SVG discoverability.
- Rewrite README: clear animated-SVG positioning, comparison table, migration guide, SVGator notes, FAQ, and supported-features matrix.
- Add
docs/directory: migration guide, feature compatibility matrix, limitations, and SEO notes. - Add marketing article drafts in
docs/marketing/.
- Add native
-
1.0.127 Apr 2026Release notes
Open source →- Fix filter rendering on
<g>groups: filters applied to<g>elements with no opacity or blend-mode were silently discarded. Now correctly opens asaveLayerwith the filter, improving fidelity for SVGs that animate filter primitives on groups. - Fix SMIL sandwich model for multiple animations targeting the same attribute: additive animations no longer double-stack when chained via
computeRawValue+applyAdditiveWithBase. - Add
clipToViewBoxoption toAnimatedSvgPictureandAnimatedSvgPainter: opt-in strict viewBox clipping to match browser direct-URL rendering behaviour (defaults tofalsefor backward compatibility). - Widen
xmldependency constraint from^6.0.0to>=6.0.0 <8.0.0to support xml 7.x. - Fix deprecated
FontWeight.indexusage — replaced withFontWeight.value.
- Fix filter rendering on
-
1.0.026 Apr 2026Release notes
Open source →- Initial release of
full_svg_flutter— a comprehensive SVG rendering library for Flutter.
- Initial release of