# Getting Started
Get started with Lottie by installing the node module with yarn or npm:
yarn add lottie-react-native@{{ book.reactNativeVersion }}
# or
npm i --save lottie-react-native@{{ book.reactNativeVersion }}
### iOS
If you're using CocoaPods on iOS, you can put the following in your `Podfile`:
```ruby
pod 'lottie-ios', :path => '../node_modules/lottie-ios'
pod 'lottie-react-native', :path => '../node_modules/lottie-react-native'
```
If you're not using CocoaPods on iOS, you can use `react-native link`:
```bash
react-native link lottie-ios
react-native link lottie-react-native
```
After this, open the Xcode project configuration and add the `Lottie.framework` as `Embedded
Binaries`.
### Android
For android, you can `react-native link` as well:
```bash
react-native link lottie-react-native
```
or you can add it manually:
`settings.gradle`:
include ':lottie-react-native'
project(':lottie-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/lottie-react-native/src/android')
`build.gradle`:
dependencies {
...
compile project(':lottie-react-native')
...
}
Lottie requires Android support library version 26. If you're using the `react-native init`
template, you may still be using 23. To change this, simply go to `android/app/build.gradle` and
find the `compileSdkVersion` option inside of the `android` block and change it to
```
android {
compileSdkVersion 26 // <-- update this to 26
// ...
```
You must also add the `LottiePackage` to `getPackages()` in your `ReactApplication`
```java
import com.airbnb.android.react.lottie.LottiePackage;
...
@Override
protected List getPackages() {
return Arrays.asList(
...
new LottiePackage()
);
}
};
```
Then, go to `android/build.gradle` and make sure it has :
```
allprojects {
repositories {
mavenLocal()
jcenter()
// Add the following 3 lines
maven {
url 'https://maven.google.com'
}
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
}
}
```
With this change you should be ready to go.
Lottie's animation progress can be controlled with an `Animated` value:
```jsx
import React from 'react';
import { Animated, Easing } from 'react-native';
import LottieView from 'lottie-react-native';
export default class BasicExample extends React.Component {
constructor(props) {
super(props);
this.state = {
progress: new Animated.Value(0),
};
}
componentDidMount() {
Animated.timing(this.state.progress, {
toValue: 1,
duration: 5000,
easing: Easing.linear,
}).start();
}
render() {
return (
);
}
}
```
Additionally, there is an imperative API which is sometimes simpler.
```jsx
import React from 'react';
import LottieView from 'lottie-react-native';
export default class BasicExample extends React.Component {
componentDidMount() {
this.animation.play();
// Or set a specific startFrame and endFrame with:
this.animation.play(30, 120);
}
render() {
return (
{
this.animation = animation;
}}
source={require('../path/to/animation.json')}
/>
);
}
}
```
## Sample App
You can check out the example project with the following instructions
1. Clone the repo: `git clone https://github.com/airbnb/lottie-react-native.git`
2. Open: `cd lottie-react-native` and Install: `npm install`
3. Run `npm start` to start the packager. ** The packager must be running to use the sample apps.**
4. In another CLI window, do the following:
For Running iOS:
1. If you don't have CocoaPods installed, run `bundle install`
2. Install pods: `npm run build:pods`
3. Run Example: `npm run run:ios`
For Running Android:
1. Run Example: `npm run run:android`
# Props
```
type AnimationProps = {
// The source of animation. Can be referenced as a local asset by a string, or remotely
// with an object with a `uri` property, or it can be an actual JS object of an
// animation, obtained (for example) with something like
// `require('../path/to/animation.json')`
source: string | AnimationJson | { uri: string },
// A number between 0 and 1, or an `Animated` number between 0 and 1. This number
// represents the normalized progress of the animation. If you update this prop, the
// animation will correspondingly update to the frame at that progress value. This
// prop is not required if you are using the imperative API.
progress: number | Animated = 0,
// The speed the animation will progress. This only affects the imperative API. The
// default value is 1.
speed: number = 1,
// A boolean flag indicating whether or not the animation should loop.
loop: boolean = false,
// Style attributes for the view, as expected in a standard `View`:
// http://facebook.github.io/react-native/releases/0.39/docs/view.html#style
// CAVEAT: border styling is not supported.
style?: ViewStyle,
// [Android] Relative folder inside of assets containing image files to be animated.
// Make sure that the images that bodymovin export are in that folder with their names unchanged (should be img_#).
// Refer to https://github.com/airbnb/lottie-android#image-support for more details.
imageAssetsFolder: string,
};
```
Methods:
```
class Animation extends React.Component {
// play the animation all the way through, at the speed specified as a prop.
play();
// Reset the animation back to `0` progress.
reset();
}
```
# Troubleshooting
If you are trying to run `pod install` and you get:
```
[!] Unable to find a specification for `lottie-ios`
```
Run `pod repo update` and retry.
When your build fails with:
```
LottieReactNative/LRNContainerView.h: 'Lottie/Lottie.h' file not found
```
Add the `Lottie.framework` to the `Embedded Binaries` in your Xcode project configuration.
## Animation issues
Refer to the troubleshooting guilds on [Android](/android/troubleshooting.md) or [iOS](/ios/troubleshooting.md).