PRACTICAL ANIMATION GUIDE / 2026
dotLottie vs JSON: what changes?
Lottie JSON contains animation data. A .lottie file is a compressed container that can package one or more animations with related resources and supported metadata, themes or interactivity. Choose a compatible player and compare the real delivery bundle. Packaging does not automatically simplify the artwork or remove rendering cost.
Separate animation data from packaging
It is useful to distinguish the motion description from the way it is delivered. A JSON file can describe an animation and reference or embed other resources. A container can package animation data and associated assets into a single distributable file. That changes asset management and transfer behavior, but it does not necessarily change the visual complexity of the scene.
The practical question is which delivery package fits your runtime and workflow. Ask for both the expected visual result and the intended player, then test a representative export. Changing an extension without converting the file is not a valid migration.
Consider asset management
A scene with external images needs those files to arrive at the locations the player expects. A missing dependency can produce an incomplete preview even when the main JSON file loads successfully. A packaged format can make distribution more convenient, especially when an asset needs to move between teams or environments.
Keep the source-of-truth version clear. When a designer updates the animation, a developer should know whether the change affects only the data or also images, fonts and configuration. A neat file name is not enough if related assets belong to different revisions.
Compare network cost honestly
Compression can change download size, especially for suitable data and bundled resources. The useful comparison is the actual transfer in your deployment environment, including server compression, caching and player requirements. Comparing a compressed container with an uncompressed text file can be informative, but it is not the complete delivery comparison.
Record source size, transferred bytes and runtime dependencies separately. A product that already loads a compatible player has a different incremental cost from a simple page that would introduce a new runtime for one small icon. Measure the scenario you intend to ship.
Do not confuse compression with simpler rendering
The player still has to interpret and draw the animation. Large images, elaborate paths and many simultaneous instances can remain expensive even when the download is compressed efficiently. If scrolling or interaction is slow, investigate rendering work rather than assuming another packaging pass will solve the problem.
A static poster and deliberate playback lifecycle can help both formats. Use the full player when the animation is relevant, pause it outside the viewport and avoid keeping a whole library active. Simplifying the artwork may be the correct fix for a visually complex scene.
Check advanced features on the actual runtime
A container format may support features that a particular integration does not expose or implement in the way your product needs. Treat themes, multiple animations and interactive behavior as requirements to verify. A successful basic loop is not evidence that every advanced feature has been tested.
Create a small acceptance example for the features your project uses. Confirm the expected default state, what changes when an input arrives and what happens if the user interrupts playback. Keep these checks with the handoff so they can be repeated after a runtime upgrade.
Choose a delivery agreement
For a simple existing integration, a tested JSON deliverable may be the most straightforward option. For a workflow that benefits from packaged resources or supported container features, dotLottie may be a better fit. The decision should reflect the product and the maintenance model rather than a blanket preference for one extension.
Document the file type, player version, supported platforms, asset dependencies and fallback behavior in the quote or handoff. If both formats are required, include that explicitly in the scope and test both. A conversion is a production step with an output to verify, not just a renamed copy.
Measure packaging and rendering separately
Take one representative JSON animation and prepare a compatible dotLottie version. Compare the actual requests served by the intended hosting setup. A compressed container and server-compressed JSON are different transfer scenarios from two raw files viewed in a folder. Record which resources are included and whether the runtime downloads any additional files.
Next compare the rendered result. Check the same initial frame, timing, loop boundary, masks and embedded images. Packaging should not be accepted solely because the file opens: the animation needs to match the approved reference. If the target runtime exposes themes or interactive features, verify those specific features in the chosen version instead of assuming all players interpret the package identically.
A collection of animations may benefit from shared packaging, but consider how the product loads that collection. Downloading an entire package for one small icon can be a poor trade if the rest is never used. Conversely, repeatedly fetching separate resources can complicate management. Compare the real navigation and caching behavior, not only the sum of file sizes in a source directory.
Keep the original editable source and record the export process. The deployment format is a delivery decision, while future design changes still need maintainable source material. Document which package version and player were tested, and include a static fallback where appropriate. If a developer requests another format, revisit feature support and rendering checks rather than treating conversion as proof of compatibility.
A format decision table
| Format | Useful for | Quality / control | Weight & support |
|---|---|---|---|
| Lottie JSON | Vector icons, UI and illustration | Scalable supported vectors; player controls | Varies with paths and images; compatible runtime required |
| GIF | Animated image placements | Raster, limited palette; limited playback controls | Can grow with frames; broad image support |
| MP4 | CGI, footage, narrated explainers | Rendered pixels; video controls | Depends on codec and quality; test target playback |
| Rive | State-driven interactive visuals | Designed interaction inputs and states | Asset plus runtime; test relevant integration |
A practical handoff checklist
Before approving delivery, open the animation inside the intended screen with real content. Compare it with the agreed reference and check the start, loop boundary and final state. Confirm that the animation does not cover a control, obscure a label or leave the user waiting for decoration to finish. Review it at the smallest supported layout as well as the desktop presentation.
Ask for the agreed delivery files, a reference preview, the tested player and version, and a note describing triggers and fallback behavior. Confirm source-file and usage-rights arrangements in the project scope. A developer should not need to guess whether an animation loops, which frame is the resting state, or whether an embedded image is intentionally part of the file.
Test slow loading, an unavailable asset, reduced motion and navigation away from the screen. Keep essential instructions and status in accessible HTML. If a sequence is purely decorative, its failure should not block the task. If it helps explain a process, provide an equivalent explanation that remains available without playback.
Finally, assign an owner for future changes. Product copy, design systems and runtime dependencies evolve. Keep the approved source and integration notes together so a later update can be checked against the original intent. This small amount of documentation makes a custom animation easier to maintain beyond the launch.
Frequently asked questions
Is a .lottie file the same as JSON?
No. It is a compressed container for animation data and associated resources, with additional supported capabilities defined by the format. The player needs to understand the file type and the features used by the asset.
Does dotLottie always render faster?
No. Packaging can change transfer and asset-management behavior, but the scene still needs to be rendered. Measure the actual animation and runtime on target devices, including the number of active players.
How do I request a custom animation?
Send the product URL, intended screen, target platform, brand assets, references and deadline. You can select a real example in the Lottie studio or use the estimator. The brief is reviewed before a final scope, price and delivery schedule are agreed.
Can I use a portfolio animation in my product?
A public portfolio preview does not grant a reuse licence for commissioned artwork. Request a custom version for your product and confirm usage rights in the engagement. Reference links are useful for discussing style, timing and behavior without assuming ownership of existing client work.
What should happen for reduced-motion users?
Provide an intentional still or simplified experience while retaining the same information and usable controls. Essential status should remain understandable without a loop. Test the target browser or app preference, and offer deliberate playback where it is useful instead of forcing continuous motion.
Can you prepare files for my development team?
Delivery can be scoped for Web, iOS or Android and the agreed runtime. Share the player, platform and integration constraints early. Compatibility is tested against that specific setup; a browser preview alone cannot establish support for every native player or every exported feature.
Sources and further reading
Technical references for the format and integration details in this guide. Check the documentation for the version used in your project.
Official dotLottie format documentation ↗Lottie web documentation ↗