Lottie is an open format for animated vector graphics
70 comments
·May 25, 2025panstromek
chrisldgk
100% what you said. One thing I ran into as well was that horrid after effects -> Lottie workflow. Many layers and styles also just don’t work when you export them, so you have to explain to motion designers which features they’re allowed to use and which they aren’t, which a lot of time they’re not thrilled about.
In many cases just rendering a video and binding playback to interaction is much more lightweight and less work-intensive than using Lottie.
I’ve heard about Rive before and a lot of the choices they make seem to be exact fixes for the issue of Lottie. I haven’t worked with it yet however, so YMMV.
_kblcuk_
I worked in a company, where webapp bundle was 8 megs (so close to 2 megs compressed). Upon brief investigation turned out that it was lottie library (~2 megs) + 4 animations, all of which were shown only to first time users.
Managed to get rid of two animations, and put another two together with lottie thing istelf into lazy loading. Still, I consider that battle lost rather than won, because I couldn't really convince the designer or other developer why having 8 megs for a bundle is a bad thing.
phkahler
Sounds like a build system, not a file format. Does it work inside any container format that supports audio with it?
moralestapia
It seems like you're quite knowlegdeable about all of this.
Can we see what you've built?
burdibox
my experience on mobile has been a lot kinder to Lottie—mainly because of its runtime-editable text. just imagine full localisation without shipping 15 different assets...
echelon
Lottie demonstrates two things:
- there's still tremendous demand for a product like Flash, an easy interface for non-technical creatives to build animations
- building / compiling to web standards is highly suboptimal and we need binary formats special purposed for animation
crazygringo
On the one hand, I understand your disappointment with JSON due to its gigantic size.
On the other hand, I wouldn't want another proprietary binary format to deal with.
And it seems like zipped JSON is almost the best of both worlds -- text-based so debugging and manual editing in a pinch is easy, but around as small as a binary format would be.
Sometimes I wonder if there shouldn't be a kind of optimized library that translates directly between 1) an in-memory structure based on e.g. class attributes rather than dictionary keys so the repeated keys aren't using up all your memory, and 2) writing out to zipped JSON format but automatically creating zip dictionary entries for keys, syntax like braces, numbers, repeated values, etc. It could be vastly faster than regular zip compression because it wouldn't be creating a dynamic dictionary, but would know the repeated bits and frequencies in advance. (I.e. by default wouldn't compress English text within JSON values, but you could also enable regular slower global zip compression if you wanted.)
So the file format would still just be zipped JSON that any tool can read. But you could use this optimized library to convert directly between a much smaller size on disk and a small size in memory, without ever having to e.g. hold the entire JSON uncompressed string in memory at any stage.
Maybe something like this already exists? I haven't come across it though.
IshKebab
You don't need to use a proprietary binary format. There are plenty of existing options, Protobuf is probably the most obvious.
In my experience zipped JSON is not a magical panacea. It usually isn't as small as a binary format (especially a compressed one), and you usually need to decompress the whole thing in memory before you can use any of it. It's a lazy bodge, not a proper solution.
Tade0
Our corporate UI library uses lottie-web for its animated components like spinners, progress bars etc.
This page:
https://airbnb.io/lottie/#/community-showcase
Absolutely cooks my company-issued laptop and my belief is that had it been done via CSS, it wouldn't have this effect.
herrherrmann
I do like the idea of having a common and open format for animations. That being said, I see quite a few web devs reaching for Lottie (which will add quite a few hundred kilobytes for the library/wrapper, and some extra ones for each animation), instead of learning more about CSS- and SVG-based animations (which would be a multitude smaller and more easily adjustable). In that sense, I also don’t like how they continuously boast about Lottie’s small size on the main website, while only comparing it to gif and png files (and not mentioning SVG/CSS animations).
I’m sure it is a good fit for usage on native mobile apps, though.
nine_k
The point of Lottie is not simple animations like CSS transitions, but complex arbitrary animations, more like a cartoon than a minor piece of motion.
A good example is the Telegram messenger that uses Lottie as the format of animated stickers, e.g. https://tlgrm.eu/stickers/Princess (click to animate).
herrherrmann
Yes, and I think Lottie is very fitting for that use case! I was referring to reaching for Lottie even for simple small animations, because it seems easier to just drop the designer’s Lottie file into the project, rather than building the animation in a more native way. At least I’ve witnessed recommendations like this on Reddit.
throwanem
Oh, I think I see your meaning. Sure, for trivial translation and rotation, even scaling, I wouldn't expect or want to take a new dependency on the library. But if I already have Lottie in the bundle and a completed example of the animation in Lottie format, how much sense in the general case does it make to reimplement instead of using what I have? It will take pixel peeping and I would most likely do better to spend the same time on something a designer can't also do.
throwanem
Where it really excels IME is as a target format for design authoring tools, most notably After Effects, which is discussed above the fold in the linked article as the original motivation for the library and the file format. No one is writing stuff like that by hand to begin with.
I've worked with Lottie animations as a mobile app dev, but never authored one.
pavlov
It’s not trivial to produce a Lottie file in After Effects. 95% of the app’s features are off limits, so it’s practically impossible to take an existing AE project and convert it.
Instead you have to ask an artist to author a project from scratch within Lottie’s limitations, but of course there’s no feedback within AE itself if you’re overstepping the boundaries, so they have to be particularly careful.
I wouldn’t recommend it based on my personal experience. But I guess there are teams who have the diligence to make it work.
legulere
Shouldn't it be possible to compile Lottie-animations down to SVG+JS? Is that maybe just something that's still missing?
JusticeJuice
That’s exactly what the library does for its web renderer. There’s a svg renderer and a web renderer.
herrherrmann
The library does this in during runtime, though, if I’m not mistaken? The original commenter is probably referring to a build step that extracts the Lottie content and only leaves JS and SVG in the final output (which is not the case, as the Lottie web player library itself needs to be included as well, to render the animations and provide interactivity APIs during the rendering of the web page).
echelon
> instead of learning more about CSS- and SVG-based animations
Contrarian opinion: Flash was one of the best things about Web 1.0.
The forced move to CSS and the constellation of other "standards" still hasn't caught up to what Flash once offered us.
Flash was all at once a video format, animation format, programming environment, video player, interactive UI system, game programming engine, multiplayer MMO game dev engine, infographics system -- actually, it was literally everything you wanted it to be. And it was so simple that even kids could use it.
If Adobe had opened everything - the format, the player, etc. - it could have become something tremendous that is still with us.
I think there's space for this to be rethought and redone. We shouldn't be so dogmatic that CSS and SVG and HTML and Javascript are the only way. They've had nearly 40 years to shine and we're still struggling with the same issues.
We should be trying to reinvent the wheel.
WorldPeas
And not just that, it was downloadable. This was huge for me then and even PWAs haven’t caught up (though admittedly are more mutable). It was so nice to be able to download 90% of a webapp for offline use and have it be portable across all my systems as a file. Only JAR files come close nowadays but there’s not really an ecosystem behind that
Benanov
Flash was one of those things that tried to do too much, and some of its things started being at cross-purposes with each other. The video conflicted with its roots as a vector/animation studio, and that's why Apple famously didn't use it - it ended up being a battery hog.
A lot of interests in web-based video wanted DRM, which meant it was never going to be usable by Free Software.
It was trying to do too much and then the usual corporate mismanagement led to its demise.
hbarka
Here for Team Flash. That was an incredible era during its peak. Apple brought on its demise not because it wasn’t competition and Steve Jobs penned the famous criticism which marked the downfall. Flash was ahead of its time.
dagmx
Flash was great but it was from an era that brought a ton of baggage that wouldn’t have scaled without a full rethink.
From energy use, to security and accessibility, it was very problematic.
cwillu
Ruffle exists: https://ruffle.rs/downloads#website-package
echelon
Ruffle is great! But there's no great, well-maintained tool to author SWF files.
bsimpson
Unfortunately doing that many things means the codebase must have been rather big. Big enough that auditing and removing licensed code (for instance, the video codecs) seems to be more than they had the stomach for.
It really was a wonderful tool that is still unmatched for creative coding.
dylan604
How is the modern JS control of DOM elements styled with CSS not the same as ActionScript and Flash sprites. I'd argue that Flash was not a video format. It could play videos encoded in specific codecs, but that's not the same as being a video format. At the end you could wrap MP4 encoded video as an FLV, but that was just a wrapper not a format.
At this point, the only think I see being Flash was the app with its timeline to make the animations visually instead of just with code. I've seen plenty of Show HNs of various apps attempting he animation UI similar to Flash, so I know they are out there. I just have no need for that type of work, so I don't spend too much time with them.
Aurornis
> The forced move to CSS and the constellation of other "standards" still hasn't caught up to what Flash once offered us.
Hard disagree. Modern web apps can be amazing within the browser alone. Look at Figma or OnShape as class leading examples.
I think you’re also misunderstanding Lottie: For web use it is compiled down to those browser primitives you were talking about. It works well, too, so I don’t understand why you’re claiming we’re “still struggling”.
rixed
> within the browser alone
What do you mean by that? My understanding of the above suggestion is that the author dreamed of a world where something like flash would have become the standard, so part of the browser, without the (proprietary) extension.
echelon
> so I don’t understand why you’re claiming we’re “still struggling”.
Because we are.
If you've ever used Flash, you know how easy and accessible it is to create.
The results were 100% portable and even downloadable. You could treat flash files like gifs or pngs.
The web document standards don't work that magically. They have never lived up to what you once could do.
> For web use it is compiled down to those browser primitives you were talking about.
Gross. I want a single, self-contained file that I can open on my computer without having to open a browser. Not an assortment of JavaScripts and css files.
Anything can be a "standard". The web standards are way too big. And they've accumulated decades of baggage.
atemerev
Well, that's a part of the problem — it was controlled by a corporation which didn't have any interest in opening it. Therefore it has been excised from the Web.
Same goes for Java applets.
It's always politics.
afavour
Not to mention CSS animations (and the newer Web Animations API) allow hardware acceleration while libraries like this do not.
panstromek
Lottie has canvas and svg renderer (that uses CSS transitions where possible, I believe), so technically it's also hardware accelerated (in most cases at least).
zdragnar
Having had minimal experience with both Lottie and Rive on the implementation / embedding side, I can say that my experience with Rive was strictly better.
Does anyone know if there's something I was missing about Lottie if I needed to choose between them in the future?
andrewingram
I haven’t used Rive myself, but have been following its progress. Notably, the creator of Lottie joined the Rive team a couple of years ago. It’d be on my shortlist for tools to evaluate in this space.
I’ve personally pushed against the use of Lottie in projects I’ve worked on due to the file sizes being very difficult to justify for the kinds of animations that our designers wanted to use it for. SVGator was another alternative we had success with.
One thing I’ve been very frustrated is the amount of places I see Lottie pushed with no mention of file size. ie tools like Webflow, and general advocacy from prominent figures in the tech community. I’m sure there is a sweet spot for Lottie, but I’m also convinced that there are better choices for use cases most people are using it for.
cjbgkagh
I had never head of Rive before and it looks like something I can use in one of my projects. Thanks, this is the kind of stuff that keeps me addicted to HN.
euvin
I've used Rive in a small personal project before and I really can't imagine creating or editing web animations in any other way. Apparently they also made their own vector-based feathering technique, which is also amazing:
https://rive.app/blog/introducing-vector-feathering
I do understand the appeal for an open format though. Rive seems to have their own proprietary (documented) binary format: https://rive.app/docs/runtimes/advanced-topic/format
cjbgkagh
They say on https://rive.app/pricing that the Format is OS and MIT, perhaps I have missed something?
gervwyk
We wanted to create some animations for our site https://resonancy.io, and I’ve built them using lottielab. I must say, they have done an amazing job to create a decent editor which really works with svgs, by far better than any online tool I’ve used before. Smooth experience overall. Then comes export.
Not sure if this is only a problem with lottielab or the lottie format, but if not using their proprietary minimizing hosting the animations are so big that I consider them useless for a landing page. Their compression reduces the size by 400% on average for larger animations. We ended up paying $30 subscription just to host the animations which does not sit right with me. So will be looking for alternatives but not looking forward to recreating them..
In the past I’ve used other react based animation libs and they chore of building animations was so tedious I would not attempt anything complicated. With lottlielab you can really play and build what you can imagine with relative ease.
Have not tried Rive.. Will check it out. Any suggestions on how to better compress lottie format for libs for that would be appreciated.
ComputerGuru
This is the AirBnb format, right? They ditched it for a newer alternative; I’m not sure if this was relying on them for maintenance and development or not, but if so I’d say start looking elsewhere.
nokeya
There is an independent C++ library by Samsung called rlottie: https://github.com/Samsung/rlottie
Telegram uses it for animated stickers, Samsung itself uses it for icons on their smart watches
landr0id
Do not under any circumstances use rlottie for your application if it consumes untrusted animations. It is not secure software and Samsung does not service security issues.
*I will add though if you absolutely need to, use Telegram's fork. They've at least fixed most of the known issues (with very great commit messages like "fix bug")
b3ing
The problem with Rive (competitor to Lottie) is that it’s built less artistically. You can’t just draw things with a pencil/blob tool. You have to do things a certain way which mostly means importing SVGs. Definitely doesn’t have the Flash simple artistic point of view for a UI, don’t get me wrong it does some interesting things but it’s less intuitive than Flash
higgins
raster images are also supported asset types for input
WorldPeas
Saw a demo for this a while ago on here and lost it, been thinking about it ever since. Now that visual models are getting a lot better at vectors and reasoning in general I wonder if we could reach a point where it is at least possible to translate part of an cartoon into a scalable vector for preservation or remastering
shmerl
How does it compare to SVG?
personality1
I prefer rive.app, it is a lot lighter and easier to work with imo, plus, it has a great editor
terpimost
Why would rive website use video instead of their binary format and performant js?
neurowave
Mostly to show projects on-device/being interacted with. We also designed this version of the site back before we had responsive layouts, dynamic text, data binding, etc. We will eventually update it to be designed entirely in Rive, but we're first prioritizing launching features like Libraries, Scripting, and a better way to handle Accessibility features.
poyhen
in their recent summer release airbnb created a new video format called lava. considering they also created lottie its really interesting they had a need for something new. i hope they will open source it in the future
Lottie for me is sadness.
I love the idea, it's really cool that you can generate the animations from what animators already use, but boy, the implementation of it is very disappointing.
The format is probably one of the worst choices they could do for a use case like this - it's JSON, for something that is usually a bunch of numbers and perfect fit for more compact binary format. This JSON can reference external files, so the animation is either
- a folder with bunch of files (sub pictures)\
- or those files are inlined in the JSON as base64
- or it's just a single file, which turns out to be a zipped folder of this amalgamation.
If you imagine loading this on the web, you have to load absolutely enormous SDK (which is not very actively maintained and isn't very well size optimized), and then loading the animation either means loading a bunch of files separately, or loading a single file but processing it through multiple different parsers in multiple passes (JSON, base64, png, lottie, zip). If you use the .lottie file, you have to include zip decompresser in the JS bundle (.lottie player, which is a different library, also uses 2MB wasm blob, not sure why).
It took me a while to squash the footprint of this craziness in our app and I'm glad we don't use it in a hot path, because this is just crazy - it's supposed to be this little cherry on top for special occasions, but it's by far the heaviest part of the codebase. I had to manually tweak tose animations, run them through some optimizers, fixup weird path and inlining issues, fixed issue with those exporters turning vectors to png, all sorts of stuff.
On top of that, the browser doesn't survive playing more than a few of them reliably at the same time (especially on lower end devices), because turns out (who would have guessed?) - animating stuff with JS and DOM is not quite performant.
I kinda want to try a weekend project to turn these into optimized svg sprites and try to play them with a CSS transision, see if this makes it more bearable.