Removing some unnecessary commits from this PR.

Adding newline to fix diff.

Update tests.yml

Update tests.yml

See rive.make

Attempt using a pre-generate makefile.

Update tests.yml

Remove windows make

One more windows test.

Make with verbose.

Trying verbose ar.exe


Make without parallel

More debug

Trying to fix this wsl issue

Seeing which version of make we have on github actions

Use an instance of the artboard for SMI test

Attempt wsl

Attempt wsl

install unzip


try to get unzip

add to path instead of github_path with wsl

just move premake to bin

use correct filename for premake

use crlf

Back to crlf


Attempt using just powershell

premake with powershell

call msbuild

add msbuild to path

Proper msbuild config

more args

Build rive tests

use right solution name

Use any cpu for tests

remove the config and platform

Update tests for windows

LS right dir

look for exe


Add “b” so windows reads in binary mode

More “rb” fixes

Final “rb” fix!
9 files changed
tree: 203767d07f8289f43fe3cf7df095347c2425b880
  1. .github/
  2. .vscode/
  3. build/
  4. dev/
  5. include/
  6. skia/
  7. src/
  8. test/
  9. .clang-format
  10. .dockerignore
  11. .gitignore
  13. Dockerfile
  14. Doxyfile

Build Status Discord badge Twitter handle


C++ runtime for Rive. Provides these runtime features:

  • Loading Artboards and their contents from .riv files.
  • Querying LinearAnimations and StateMachines from Artboards.
  • Making changes to Artboard hierarchy (fundamentally same guts used by LinearAnimations and StateMachines) and effienclty solving those changes via Artboard::advance.
  • Abstract Renderer for submitting high level vector path commands with retained path objects to optimize and minimize path re-computation (ultimately up to the concrete rendering implementation).
  • Example concrete renderer written in C++ with Skia. Skia renderer code is in skia/renderer/src/skia_renderer.cpp.

Build System

We use premake5. The Rive dev team primarily works on MacOS. There is some work done by the community to also support Windows and Linux. PRs welcomed for specific platforms you with to support! We encourage you to use premake as it's highly extensible and configurable for a variety of platforms.


In the rive-cpp directory, run to debug build and release for a release build.

If you've put the premake5 executable in the rive-cpp/build folder, you can run it with PATH=.:$PATH ./

Building skia projects

cd skia/dependencies
./      // this will invoke

To build viewer (plus you'll needed CMake installed)



Uses the Catch2 testing framework.

cd dev

In the dev directory, run to compile and execute the tests.

(if you've installed premake5 in rive-cpp/build, you can run it with PATH=../../build:$PATH ./

The tests live in rive/test. To add new tests, create a new xxx_test.cpp file here. The test harness will automatically pick up the new file.

There's a VSCode command provided to run tests from the Tasks: Run Task command palette.

Code Formatting

rive-cpp uses clang-format, you can install it with brew on MacOS: brew install clang-format.

Memory Checks

Note that if you‘re on MacOS you’ll want to install valgrind, which is somewhat complicated these days. This is the easiest solution (please PR a better one when it becomes available).

brew tap LouisBrunner/valgrind
brew install --HEAD LouisBrunner/valgrind/valgrind

You can now run the all the tests through valgrind by running memory.

Disassembly Explorer

If you want to examine the generated assembly code per cpp file, install Disassembly Explorer in VSCode.

A disassemble task is provided to compile and preview the generated assembly. You can reach it via the Tasks: Run Task command palette or you can bind it to a shortcut by editing your VSCode keybindings.json:

        "key": "cmd+d",
        "command": "workbench.action.tasks.runTask",
        "args": "disassemble"