A lightweight library for manipulating and animating SVG.
Last release 26 days ago
04 Aug 2026
Release timing varies
gaps range from 9 days to 1.6 years
Most releases are documented
notes for 25 of 29 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
29 releases · first in 2018
Release timeline
29 releases since 201820182020202220242026
20182026
One column per quarter.
Releases
- 3.2.84 Aug 2026
Nothing published for this version
- 3.2.719 Jul 2026
Nothing published for this version
- 3.2.617 Jul 2026
Release notes
Open source →Changed
- upgrade
svgdomand the development dependencies, including Babel 8 - migrate builds from Rollup to Rolldown and code-quality checks from ESLint and Prettier to Oxlint and Oxfmt
- use the standard Browserslist defaults and remove obsolete Sauce Labs tooling
Fixed
- preserve namespaces and escaping when serializing SVG in the IE polyfill
- make the IE
outerHTMLpolyfill replace the target element and reject invalid markup - return complete inline styles, including values containing colons and
!important - allow zero width or height in animated
size()calls - keep the animator scheduler running after a callback throws
- honor zero-valued transform positions
- resolve references safely and match exact targets when IDs contain CSS-special characters
- preserve multiline text metadata when writing SVG.js data to the DOM
- align TypeScript declarations with the package's runtime exports and behavior
- point published browser, ESM, and CommonJS entry points at the built distributions
- isolate cached parser elements when switching between documents
- handle document fragments correctly in
parents() - restore the previous window context when a
withWindow()callback throws - remove every matching listener when the same callback is registered multiple times
- upgrade
- 3.2.515 Sept 2025
- 3.2.427 Jun 2024
- 3.2.318 Jun 2024
- 3.2.218 Jun 2024
- 3.2.118 Jun 2024
Release notes
Open source →Fixed
- skip descriptive elements on rebuild and
toParent()(#1304) - allow 0 as animation duration and delay (#1125)
- allow nodes that are not imported yet (#1252)
- only apply color conversion to attributes that can take a color (#1241)
- support css vars (#1230)
- fix import of leading, dont write data to dom if not neccessary
- discontinue use of svgjs:data in favor of data-svg
- allow + as delemiter in paths (#1165)
- added
amove()methods to runner (#1131) - fix
css(), dont throw when screenCtm fails (#968) - several type fixes
Added
- skip descriptive elements on rebuild and
- 3.2.012 Jun 2023
Release notes
Open source →Fixed
- improve performance of
point()by not creating intermediate objects (#1251) - fixed references by using single quotes instead of double quotes which lead to errors (#1277)
- fixed a few spelling errors in comments (#1277)
- fix several typings (#1253, #1280, #1300)
Added
- added second parameter
assignNewIdtoclone()to allow cloning with the same id (#1161)
- improve performance of
- 3.1.226 Jan 2022
Release notes
Open source →Fixed
- fixed several type issues (#1249, #1233, #1231, #1223, #1215)
- fixed
css()returning camelCased properties even though they were specified in kebap-case - fixed
ObjectBagloosing information when callingvalueOf()(Numbers lost its unit) - fixed
parents()(#1235) - fixed
nodeOrNew()to work in object tags as well (#1219)
- 3.1.125 Jun 2021
Nothing published for this version
- 3.1.013 Jun 2021
Nothing published for this version
- 3.0.1612 Nov 2019
Release notes2 sources agree
Open source →Fixed
- fixed build of polyfills which was broken because of core-js update
- 3.0.158 Nov 2019
Release notes2 sources agree
Open source →Fixed
- allow object input of
whenanddelaytoanimate()
Added
- added missing dmove function to runner
- allow object input of
- 3.0.1431 Oct 2019
Release notes2 sources agree
Open source →Fixed
- hide parser from screen readers (#1023)
Added
- added transpiled esm bundle for webpack und co and faster import
- 3.0.1312 Jun 2019
Release notes2 sources agree
Open source →Fixed
- fixed a bug in Timeline.finish() (#964)
- fixed registration of classes with custom bundler
- fixed transform getter (e.g.
el.transform('scale')) - fixed typings (#1004)
- 3.0.1219 Feb 2019
Release notes2 sources agree
Open source →Fixed
- fixed package.json which points to correct file for webpack now (browser keyword)
- fixed typescript types
Added
- added
ForeignObjectto the core
- 3.0.1122 Jan 2019
Release notes2 sources agree
Open source →Fixed
- fixed move commands (x, y, move) of text so that it moves text always by the upper left edge.
- fixed center commands (cx, cy, center) of text so that it moves text always by the center.
- 3.0.1014 Jan 2019
Release notes2 sources agree
Open source →Fixed
- fixed
textPath(),path().text()andtext().path() - fixed
root()method - fixed default values returned by
attr. Can be missleading if present.
Added
- added
findOne()for better performance
- fixed
- 3.0.914 Jan 2019
- 3.0.813 Jan 2019
Release notes2 sources agree
Open source →Fixed
- added back
to()asunit()ofSVG.Numberwhich was removed accidentally
- added back
- 3.0.713 Jan 2019
Release notes2 sources agree
Open source →Fixed
- fixed a bug in
isNulledBox()anddomContains() - performance changes:
- replace
getElementsByTagNamewithquerySelector - make Color check in
attrmore restrictive to prevent expensivetoString
- replace
- fixed a bug in
- 3.0.612 Jan 2019
Release notes2 sources agree
Open source →Fixed
- fixed group move and size commands
- default font size is not set anymore because it mostly goes against what the user wants
- fix bug in
font()which set wrong values
Added
PointArray.transform()(#945)
- 3.0.512 Dec 2018
Release notes2 sources agree
Open source →Fixed
- fixed
parserwhich didnt have all required css rules and not focusable=false - group
x(), y(), width(), height(), dx(), dy()now correctly change the bbox of the group by moving/resizing all children - fixed timeline which fired
finishedtoo early - fixed
Animator.frame(). The passed callback gets the current time now (same as RAF) - allow
loop(true)which is the same asloop()
- fixed
- 3.0.47 Dec 2018
Release notes2 sources agree
Open source →Fixed
- fixed
zoomwhich was added correctly and is animatable now - fixed
Runnerwhich merges transformations on the correct frame and in the correct way now - fixed condition on which transforms get deleted from an element when animating
- fixed
Timelinewhich executes Runner in the correct order now - fixed
Svgwhich correctly deletes the defs reference onclear()
- fixed
- 3.0.35 Dec 2018
Release notes2 sources agree
Open source →Fixed
- fixed
Runnerwhich correctly retains transformations when it is still on a timeline - fixed
plot()method of Runner - fixed
timeline()so that one can set the timeline of an element now - fixed
Gand added missingwidth/height
- fixed
- 3.0.23 Dec 2018
Release notes2 sources agree
Open source →Fixed
- fixed
Listwhich still didn't have all method names it should have - fixed
Runnerwhich correctly handle retargeted controlled animations now - fixed
Runnerso that it is able to be persisted correctly - fixed
Colorwhich correctly handles empty strings now - fixed
attrwhich correctly handles Objects of other kind now - fixed
Morphablewhich correctly calculates the done flag now
- fixed
- 3.0.13 Dec 2018
Release notes2 sources agree
Open source →Fixed
- fixed
insertBefore,insertAfterandflipcorrectly returningthis - fixed
Listwhich didn't have all method names it should have
- fixed
- 3.0.01 Dec 2018
Release notes2 sources agree
Open source →Added
- added
text()method toSVG.Pathto create a textPath from this path (#705) - added
SVG.HTMLNodewhich is the object wrapped around html nodes to put something in them - added
dispatch()method onSVG.Elementwhich returns the dispatched event for event cancelation (#550) - added
isRoot()onSVG.Doc(#809) - added a linter during the npm build process
- added
beziere()andsteps()to generate easing functions - added
insertAfter()andinsertBefore - added
SVG.Stylewhich can be created withstyle()orfontface()(#517) - added
EventTargetwhich is a baseclass to get event abilities (#641) - added
Domwhich is a baseclass to get dom abilities - added
round()which lets you round attribues from a node - added
ax(), ay(), amove()to change texts x and y values directly (#787) - added possibility to pass attributes into a constructor like:
new SVG.Rect({width:100}) - added possibility to pass in additional attribues to element creators e.g.
canvas.rect({x:100})orcanvas.rect(100, 100, {x:100})(#796) - added
SVG.List(#645) - added
words()andelement()toDombecause of (#935) - added lab, lch, hsl and cmyk color spaces (#790)
- added
random()method onSVG.Colorto create random colors of different kinds (#939)
Removed
- removed
SVG.Array.split()function - removed workaround for browser bug with stroke-width
- removed polyfills
- removed
SVG.Setin favour ofSVG.List - removed feature to set style with css string (e.g. "fill:none;display:block;")
- removed
loaded()anderror()method onSVG.Image(#706) - removed sub-pixel offset fix
- removed
SVG.Nested(#809) - removed
show()fromSVG.Ato avoid name clash (#802) - removed
size()fromSVG.Textto avoid name clash (#799) - removed
native()function - removed
Barein favour ofDom(#935) - removed
bowersupport because it is deprecated
Changed
- gradients now have there corresponding node as type and not only radial/linear
SVG.Path.pointAt()correctly returns anSVG.Pointnow- replaced static reference to
maskerinSVG.Maskwith themasker()method - replaced static reference to
clipperinSVG.ClipPathwith theclipper()method - replaced static reference to
targetsinSVG.MaskandSVG.ClipPathwith thetargets()method - moved all regexes to
SVG.regex - new constructor signature for
SVG.Imageandload():container.image(src, callback) / image.load(src, callback)(#706) - changed
style()tocss(). Now accepts array as input and returns object when no argument given (#517) - ids are not generated upon creation anymore. Instead they are generated when requested (#559)
SVG.extend()now expects exactly one module or an array of modulesSVG.Text.path()now returns an instance of SVG.TextPath (#705)SVG.Text.path()does not move all contents to the textPath (#705)SVG.TextPathnow inherits fromSVG.Textand can be manipulated the same way (#705)SVG.Text.textPath()returns the first textPaths in the text element (#705)- renamed
SVG.Stopconstructorat()onSVG.Gradienttostop()(#707) - renamed
fill()method onSVG.GradientandSVG.Patterntourl()(#708) - renamed
previous()method toprev() - changed
childNodestochildren(same forfirstChild,lastChild, ...) (#710) - changed it back because of performance drop - moved
defs()method fromSVG.ParenttoSVG.Element SVG()can be called with css selector, node or svg string, now. Without an argument it creates a newSVG.Doc()(#646)add(),put(),addTo(),putIn()now excepts all arguments accepted bySVG()- all
SVG.*objects now can have a node as parameter when constructing SVG()does not set a default size anymore- default constructor now has an optional
nodeargument which is used to consruct the object e.g.new SVG.Rect(rectNode) - SVG.Elements constructor now tries to import svgjs:data from the node
SVG.on()calls the listener in the context of the passed object. el.on always uses the svg.js object as contextSVG.on()/off()andel.on()/off()now accepts multiple comma or space separated events e.g. "mousedown, foo bar" (#727)- Matrices now apply transformations like
scale,translate, etc... by left multiplying them to simplify transformations - The way
transform()works is now completely different. See the docs for more as soon as they are updated - merged
SVG.DocandSVG.Nested, addedisRoot()onSVG.Doc()(#809) - The fx module was completely reworked to be faster and less error prone. For more information on how to use it refer to the docs
- The whole lib is now splitted into es6 modules (#875)
Element.svg()now can can replace the current node, can export the children of a node and can take an export modifier to change/replace the exported nodesungroup()now breaks off one container and not moreclone()does not add the clone to the dom anymoreattr()excepts array now to get multiple values at onceSVG.Text.rebuild()now takes every font-size into account (#512)fill()andstroke()return the fill and stroke attribute when called as getter (#789)parents()now gives back all parents until the passed one or documentImagecallback passes normalloadevent instead of custom object (#931)- renamed
DoctoSvganddoc()toroot(andtoDoc()/toRoot()) (#932)
- added