EasyLottie

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.

By EasyLottie Editorial TeamReviewed 4 min readReport a correction
EasyLottie Lottie viewer playing brand-badge.lottie, a blue check badge with a yellow ring, with the file panel showing a/brand-badge.json, 30 fps, 3.00 seconds, 400 by 400
brand-badge.lottie in the viewer. The file panel shows the animation found inside the package at a/brand-badge.json.
EasyLottie Lottie viewer playing product-card.lottie, a card animation with an embedded dashboard screenshot loaded from the package's i folder
product-card.lottie: the screenshot travels as a binary PNG in the package's i/ folder and is resolved by the viewer.

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.

dotLottie package layout by version
ContentVersion 1.0 folderVersion 2.0 folder
Lottie animations (JSON)animations/a/
Image assetsimages/i/
Themes-t/
State machines-s/
Fonts-f/
Manifestmanifest.jsonmanifest.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.

Lottie delivery formats compared
FormatWhat it isBest for
.jsonOne text file of animation dataSingle vector animations served by a compressing web server
.lottieA ZIP with a manifest and fixed foldersImage-heavy animations, several related animations, themes, or interactivity
.zipAn ad-hoc folder of JSON plus imagesHanding 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.

Measured results from the downloadable test files
MeasurementVector badge, no imagesCard with one PNG
JSON as stored6,823 bytes38,540 bytes
JSON sent with gzip774 bytes28,349 bytes
JSON sent with Brotli669 bytes28,024 bytes
.lottie package1,075 bytes28,223 bytes
.lottie vs gzip JSON39% larger0.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. 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. 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. 3.If your player cannot load .lottie, extract the JSON and its images and load the JSON instead, keeping image paths intact.
  4. 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.