# dotLottie Rust
![CI](https://img.shields.io/github/v/release/LottieFiles/dotlottie-rs)
![GitHub contributors](https://img.shields.io/github/contributors/LottieFiles/dotlottie-rs)
![GitHub](https://img.shields.io/github/license/LottieFiles/dotlottie-rs)
dotLottie Rust
This is the Rust implementation of the dotLottie player and its related tools. It utilizes uniffi-rs to generate FFI bindings for Kotlin, Swift, and WebAssembly (WASM). these bindings are then used in the native dotLottie players for [Android](https://github.com/LottieFiles/dotlottie-android), [iOS](https://github.com/LottieFiles/dotlottie-ios), and [Web](https://github.com/LottieFiles/dotlottie-web) bringing consistency of playback and dotLottie features across all platforms.
```mermaid
flowchart TD
A[dotLottie-web] --> WASM+Bindings[WASM Bindings]
B[dotLottie-ios] --> swift+Bindings[Swift Bindings]
C[dotLottie-android] --> kotlin+Bindings[Kotlin Bindings]
WASM+Bindings --> dotlottie-ffi[dotlottie-ffi \n 'uniffi bindings']
swift+Bindings --> dotlottie-ffi[dotlottie-ffi \n 'uniffi bindings']
kotlin+Bindings --> dotlottie-ffi[dotlottie-ffi \n 'uniffi bindings']
dotlottie-ffi --> dotlottiers[dotLottie-rs \n 'Core player']
dotlottiers --> Thorvg[Thorvg \n 'Lottie renderer']
```
## What is dotLottie?
dotLottie is an open-source file format that aggregates one or more Lottie files and their associated resources into a single file. They are ZIP archives compressed with the Deflate compression method and carry the file extension of ".lottie".
[Learn more about dotLottie](https://dotlottie.io/).
## Features
dotLottie-rs builds on the Lottie format, adding powerful quality of life improvements and new features:
- Theming support
- Multi-animation support
- Built-in interactivity powered by state machines (in development)
- Reduced animation file sizes
- Feature parity across platforms
- Guarenteed visual consistancy across platforms (Thanks to the [Thorvg renderer](https://github.com/thorvg/thorvg))
## Available Players
dotLottie-rs serves as a core player from which our framework players use:
- [dotlottie-web] (https://github.com/LottieFiles/dotlottie-web)
- [dotlottie-android] (https://github.com/LottieFiles/dotlottie-android)
- [dotlottie-ios] (https://github.com/LottieFiles/dotlottie-ios)
## Repository contents
- [Crates](#crates)
- [Development](#development)
- [License](#license)
## Crates
- [dotlottie-rs](./dotlottie-rs): The core library for dotLottie native players
- [dotlottie-ffi](./dotlottie-ffi): The FFI bindings for dotLottie core player to kotlin, swift and wasm
- [demo-player](./demo-player): A demo player for dotLottie written in Rust
## Development
### Build Instructions
To build for all target platforms, it would be best to use a Mac. You will also need GNU `make`
installed, at a bare minimum. To ensure that your local machine has all the other necessary
tools installed to build the project, run the following from the root of the repo:
```bash
make mac-setup
```
### Performing builds
Builds can be performed for the following groups of targets:
- `android`
- `apple`
- `WASM`
For `android` and `apple`, builds will be performed for all supported architectures, whereas
for `WASM`, only a single target will be built. These names refer to Makefile targets that can be
used to build them. For example, to build all `android` targets, execute the following:
```bash
make android
```
To build all targets, execute the following:
```bash
make all
```
### Other useful targets
- `demo-player`: Build the demo player
- `clean`: Cleanup rust build artifacts
- `distclean`: Cleanup ALL build artifacts
More information can be found by using the `help` target:
```bash
make help
```
### Release Process
Manually execute the `Create Release PR` Github Action workflow to create a release PR. This will
include all changes since the last release. This repo uses [changesets](https://github.com/changesets/changesets)
to determine the new release version. The [knope](https://github.com/knope-dev/knope) tool can be installed locally
and used to simply the creation of changeset files.
The release PR should be checked for correctness and then merged. Once that is done, the `Release`
Github Actions workflow will be started automatically to do the work of actually creating the new
release and building & uploading the related release artifacts.
### Relevant Tools
- [For your dotLottie creation and modification needs](https://github.com/dotlottie/dotlottie-js)
- [Tools for parsing Lottie animations](https://github.com/LottieFiles/relottie)
### License
[MIT](LICENSE) © [LottieFiles](https://www.lottiefiles.com)