Engineering · Animation · Tooling
Top 5 iOS animation libraries
Lottie, Rive, Pow, and two more, in the order you'd actually reach for them. Real install snippets, and one thing every dead-library trap has in common.
Animation.spring(), PhaseAnimator, and KeyframeAnimator now cover a surprising amount of what used to require a dependency. Reach for the list below when you need designer-authored assets, interactive state machines, or effects native APIs don't do in one line.01 · Lottie
github.com/airbnb/lottie-ios · Apache 2.0 · actively maintained, the industry standard
The one nearly every app with a polished onboarding flow is using. Lottie renders animations exported from After Effects (via the Bodymovin plugin) as vector JSON, so a designer ships a real animation file and you drop it in, no engineer re-implementing keyframes by hand. If your team has a designer who lives in After Effects, this is the bridge.
// Package.swift
.package(url: "https://github.com/airbnb/lottie-spm.git", from: "4.4.0")
import Lottie
let animationView = LottieAnimationView(name: "onboarding-success")
animationView.loopMode = .playOnce
animationView.play()
Use it when
A designer hands you an After Effects animation and expects it to look exactly like the preview, pixel for pixel, at any size.
02 · Rive
github.com/rive-app/rive-ios · MIT · actively developed, real-time state machines
If Lottie is a video, Rive is a video game. Instead of a fixed timeline, animations are built as state machines that respond to input in real time, a button that squishes based on how hard you're pressing, a character that reacts to your app's actual data. It runs its own lightweight runtime rather than replaying frames, so it stays smooth even when the animation itself is complex.
// Package.swift
.package(url: "https://github.com/rive-app/rive-ios.git", from: "5.0.0")
import RiveRuntime
let view = RiveView()
let model = RiveViewModel(fileName: "loading_state")
model.setView(view)
Use it when
The animation needs to react to user input or app state live, not just play from start to finish.
03 · Pow
github.com/movingparts-io/Pow · MIT · SwiftUI-native, no external assets
Code-only, built specifically for SwiftUI. No JSON files, no design tool round-trip, just chainable view modifiers for the small "juice" moments: a view that shakes on error, a button that pops with an elastic bounce, a badge that appears with a spring. If your team is SwiftUI-only and doesn't have a motion designer, this covers most of what you'd otherwise hand-roll with withAnimation blocks.
// Package.swift
.package(url: "https://github.com/movingparts-io/Pow", from: "1.0.0")
import Pow
Text("Saved")
.conditionalEffect(.pushDown, condition: isPressed)
.transition(.movingParts.pop)
Use it when
You want native-feeling UI polish in SwiftUI without an art pipeline, and you're fine writing the effect as Swift code rather than an imported asset.
04 · Native SwiftUI: Animation, PhaseAnimator, KeyframeAnimator
Built into iOS 17+ · zero dependencies · the honest first stop
Worth naming explicitly rather than skipping past: Apple's own animation APIs have gotten genuinely good. PhaseAnimator sequences a view through discrete states without a state machine of your own, and KeyframeAnimator gives you per-property timelines, close to what a dedicated library used to be needed for.
PhaseAnimator([false, true]) { phase in
Circle().scaleEffect(phase ? 1.2 : 1)
} animation: { _ in .spring(duration: 0.4, bounce: 0.5) }
Use it when
Almost always, first. Reach for a dependency only after you've hit something these can't do.
05 · ConfettiSwiftUI
github.com/simibac/ConfettiSwiftUI · MIT · small, focused, does one thing
The niche pick, included because "one thing done well" is worth celebrating on this list too. It's exactly what the name says: a confetti burst, triggered on a state change, for the one or two celebration moments an app actually has (a completed purchase, a finished onboarding). Not a general animation engine, and it shouldn't try to be one.
// Package.swift
.package(url: "https://github.com/simibac/ConfettiSwiftUI.git", from: "2.0.0")
import ConfettiSwiftUI
Text("🎉").confettiCannon(trigger: $didComplete)
Use it when
You have exactly one or two genuine celebration moments and don't want to hand-build particle physics for them.
One to avoid
Facebook's Pop was the standard recommendation for physics-based animation for years, and it's still copy-pasted into "best iOS libraries" lists in 2026. It was archived in March 2020 and is now read-only: no fixes, no Swift 6 support, no future. It's the clearest example of why "popular" and "currently correct" aren't the same question, and why every entry on this list was checked against its actual commit history before being written down, not just its reputation.
Which one to use
| If you need | Reach for |
|---|---|
| A designer's After Effects file, pixel-exact | Lottie |
| Animation that reacts to live app state | Rive |
| SwiftUI polish with zero external assets | Pow |
| Anything a spring or keyframe timeline covers | Native SwiftUI |
| One celebration moment | ConfettiSwiftUI |
Building motion for a launch?
I help iOS teams pick the right tool and ship the actual polish. First session is free.
Book a free 1:1 Connect on LinkedIn