There have been a fair number of graphics library abstractions, but Raphaël is very elegant indeed, and a first release candidate for the 1.0 release is now here: The path method syntax has been changed: Instead of r.path({attributes}, pathString) you should write r.path(pathString).attr(attributes). That makes path more consistent with other methods; Path methods moveTo, lineTo, curveTo,…