EasyLottie Guide
What Is a .lottie File? dotLottie vs Lottie JSON
What is inside a .lottie file, how the format changed between versions, how to open one, and a measured test of when dotLottie actually saves bytes.


The short answer
A .lottie file, usually called dotLottie, is a ZIP archive with a fixed internal layout. It holds one or more Lottie animations as JSON, plus optional images, fonts, themes, and state machines, and a manifest that lists what is inside. The animation data is the same Lottie JSON you already know. dotLottie changes the packaging, not the animation.
The format exists to solve a delivery problem. A Lottie with external images is several files that have to travel together, and a set of related animations is several requests. A single package is easier to download, cache, and hand off.
What is inside a .lottie file
Rename any .lottie file to .zip and open it. Under the current dotLottie 2.0 specification you will find a manifest.json at the root and short folder names: a for animations, i for images, and optionally t for themes, s for state machines, and f for fonts. The manifest must contain a version field set to "2" and an animations array where each entry has an id that matches a file in the a folder. The archive is compressed with Deflate, and the registered media type is application/zip+dotlottie.
Older files follow the 1.0 specification, which used longer folder names: animations for the JSON and images for bitmaps. Both versions require a manifest with version and animations. Our brand-badge.lottie is a minimal 2.0 package, an 83-byte manifest plus one animation file. product-card.lottie adds an i folder holding the card's screenshot as a normal PNG, which the animation JSON references with the path /i/img_0.png.
| Content | Version 1.0 folder | Version 2.0 folder |
|---|---|---|
| Lottie animations (JSON) | animations/ | a/ |
| Image assets | images/ | i/ |
| Themes | - | t/ |
| State machines | - | s/ |
| Fonts | - | f/ |
| Manifest | manifest.json | manifest.json, version "2" |
dotLottie vs Lottie JSON vs ZIP
All three carry the same animation data. They differ in how many files travel together and how they are compressed.
| Format | What it is | Best for |
|---|---|---|
| .json | One text file of animation data | Single vector animations served by a compressing web server |
| .lottie | A ZIP with a manifest and fixed folders | Image-heavy animations, several related animations, themes, or interactivity |
| .zip | An ad-hoc folder of JSON plus images | Handing off a JSON that references external image files |
How to open or preview a .lottie file
Drop the file into EasyLottie Preview. It unpacks the archive in your browser, finds the animation by reading the manifest, resolves any images, and starts playback. The file information panel shows which file inside the package is playing, along with its frame rate, duration, and dimensions. Nothing is uploaded.
This is the fastest way to confirm that a downloaded .lottie contains the animation you expected before you integrate it. If you need to recolor it or replace an image, extract the JSON first; the editing tools work on JSON or ZIP.
Which one should you ship?
Measure rather than assume. For a single small vector animation served by a CDN that compresses JSON, plain JSON downloaded smaller in our test. With one embedded image, the two were effectively tied over HTTP, while the package was 27 percent smaller on disk. For several animations that load together, or a player that uses dotLottie themes and state machines, the package format pays for itself.
Also check your runtime. If the app uses lottie-web directly, JSON is the native input. If it already uses a dotLottie player, .lottie removes an unpacking step. Whatever you receive from a designer or a marketplace, preview it first so you know what you are working with.
Quick checklist
- Rename a copy to .zip to see what a .lottie contains.
- Check the manifest version: version 1 uses animations/, version 2 uses a/.
- Compare against gzip or Brotli JSON, not raw JSON, when judging size.
- Use dotLottie for images, multiple animations, themes, or state machines.
- Confirm your player supports .lottie before switching formats.
Reproduce the workflow
Use these local sample files to repeat the checks described in this guide. Review the file before using it in a production project.
Tested result: is .lottie smaller than JSON?
We packaged two animations as spec-conforming dotLottie 2.0 files with standard Deflate ZIP: a vector-only badge, and a card with one 27 KB PNG stored as a binary file in i/. We compared each with its plain JSON as stored, and as a web server would typically send it with gzip or Brotli. All four files open in the EasyLottie viewer.
| Measurement | Vector badge, no images | Card with one PNG |
|---|---|---|
| JSON as stored | 6,823 bytes | 38,540 bytes |
| JSON sent with gzip | 774 bytes | 28,349 bytes |
| JSON sent with Brotli | 669 bytes | 28,024 bytes |
| .lottie package | 1,075 bytes | 28,223 bytes |
| .lottie vs gzip JSON | 39% larger | 0.4% smaller |
Against the raw files, dotLottie is much smaller: 84 percent for the badge and 27 percent for the card, mostly because the PNG is no longer base64 text. That matters wherever files are not compressed in transit, such as assets bundled into an app.
Against what a browser actually downloads from a server that compresses JSON, the gain disappears. The vector badge was 39 percent larger as .lottie, because ZIP headers and the manifest cost about 300 bytes. The card was within half a percent either way. The practical reasons to choose dotLottie are packaging, multiple animations, themes, and state machines, not raw bytes over HTTP.
Know the limits
- Not every player reads .lottie. The classic lottie-web loadAnimation call expects JSON; dotLottie needs a dotLottie-aware player or an unpacking step.
- Version 1 and version 2 packages use different folder names. Tools written for one may not find the animation in the other.
- Editing tools that work on JSON, including most color editors, need the JSON extracted first. A .lottie file is a container, not a different animation format.
- Our size tests use two small files. Results for large, image-heavy animations differ and should be measured on your own assets.
If your result is different
- 1.If a .lottie file will not open, rename a copy to .zip and open it. If that fails too, the file is damaged or not a dotLottie package.
- 2.Inside the ZIP, look for manifest.json and an animations folder (version 1) or an a folder (version 2). The animation is the JSON file inside.
- 3.If your player cannot load .lottie, extract the JSON and its images and load the JSON instead, keeping image paths intact.
- 4.If the animation plays but images are missing, check that the image folder came along: images in version 1, i in version 2.
Frequently asked questions
What is a .lottie file?
A dotLottie file is a ZIP archive with a manifest and fixed folders that holds one or more Lottie JSON animations plus optional images, themes, state machines, and fonts.
Is .lottie always smaller than JSON?
No. Our 6,823-byte badge became a 1,075-byte .lottie, but the same JSON sent with gzip was 774 bytes. With a 27 KB image inside, .lottie and gzip JSON were within half a percent. dotLottie wins clearly only when files are not compressed in transit.
How do I open a .lottie file?
Drop it into EasyLottie Preview, which unpacks and plays it locally. You can also rename it to .zip and open it with any archive tool to see the JSON inside.
What changed in dotLottie 2.0?
Folder names became single letters (a, i, t, s, f), the manifest version is "2", and the specification adds themes, state machines, and fonts.
Can I edit a .lottie file directly?
Extract the JSON first. Color and image editors work on the animation JSON or a ZIP of JSON plus images; you can repackage afterwards if your player needs .lottie.
Primary sources
Technical behavior was checked against the original runtime or format documentation below.