# enzomanuelmangano/demos: a Reanimated, Gesture Handler and Skia reference app you can run locally

> A collection of React Native animation demos built with Reanimated, Gesture Handler and Skia, packaged as an Expo app with a custom licence that forbids resale and competing animation libraries.

**enzomanuelmangano/demos** — An ongoing collection of React Native animations crafted with Reanimated, Gesture Handler, and Skia.

- Repository: https://github.com/enzomanuelmangano/demos
- Website: https://reactiive.io/demos
- Stars: 3,231 · Forks: 298
- Language: TypeScript
- License: NOASSERTION
- Published: 2026-09-24 · Updated: 2026-09-24 · Language: en
- Canonical page: https://hysenlabs.com/projects/enzomanuelmangano-demos

## What enzomanuelmangano/demos actually is, and who it is for

This is not a library you install and import. It is an Expo application whose source is a catalogue of animation demos, written in TypeScript and built on Reanimated, Gesture Handler and Skia. The README describes it as "an ongoing collection of React Native animations", and the browsable version lives at reactiive.io/demos. The repository ships app screens, a src/animations directory and a src/navigation directory, plus the native build scaffolding an Expo project needs (app.config.ts, metro.config.js, eas.json, a DemosNitro.podspec and a nitrogen/ directory for Nitro modules).

The audience is narrow and specific. If you are learning how a drawer gesture, a shader transition or a haptic response is wired together in Reanimated, reading src/animations is the point. The README even points at a paid course, reanimate.dev, for people who want structured teaching rather than raw source. If you want a drop-in component to paste into a production screen, this repository is the wrong shape: there is no published package name in package.json to install, only "demos" with expo-router as the entry point.

## How the animation code is organised and what runs it

The README's project layout is short: src/animations holds the demos, src/navigation holds navigation utilities and hooks. That split matters. The navigation layer was reworked, according to the roadmap, because "currently the navigation is quite unintuitive and needs to be improved" was checked off, and the roadmap also records the migration of runOnJS and runOnUI away from Reanimated itself to react-native-worklets. If you copy animation code from an older commit, those worklet imports are the first thing to check.

package.json carries Reanimated static feature flags rather than runtime configuration: DISABLE_COMMIT_PAUSING_MECHANISM, USE_COMMIT_HOOK_ONLY_FOR_REACT_COMMITS and ANDROID_SYNCHRONOUSLY_UPDATE_UI_PROPS are all set to true. Those flags change how commits and UI prop updates behave on Android, and they are global to the app. A postinstall script, scripts/patch-skia-webgpu-android.js, patches Skia's WebGPU path on Android, which tells you the Skia integration needed a workaround at some point. The roadmap still lists "Optimize performance in Shaders demos" as unchecked, so the shader demos are the part the author considers unfinished.

## Installing enzomanuelmangano/demos and running a first demo

The README's Quick Start is four commands and assumes bun. The install step runs the postinstall patch script automatically, so if you use a package manager other than bun you are on your own for that patch.

```bash
bun install
bun prebuild
bun ios     # for iOS
```

For Android, the README gives the same prebuild step followed by bun android. Note that the package.json scripts differ slightly from the README: the ios script is expo run:ios --device and prebuild is npx expo prebuild --clean, which wipes and regenerates the native projects. If you have hand-edited anything under ios/ or android/, that clean flag will remove it.

```bash
bun prebuild
bun android
```

There is also a dev script, node scripts/start-with-animation.js, and a plain expo start. The README does not describe what start-with-animation.js does differently, so treat it as undocumented. Once the app is running you land in the demo browser and pick an animation; the app icon is generated from a script that counts the animations, which is why eas-build-pre-install calls generate-icons-set with get-animations-count.js.

## The licence is the biggest practical constraint

The repository is not MIT or Apache. It uses a custom Software License Agreement in LICENSE.md, and the README summarises the key points: free for individuals and companies, usable in commercial projects, modifiable. The two prohibitions are the ones that decide whether you can use this at work. You cannot resell or redistribute the code, and you cannot create competing animation libraries.

The second prohibition is broader than it first looks. If your product is a component kit or an animation package that you distribute, even internally as a shared library, the README's wording puts that use in question. Internal application code that happens to contain a copied gesture pattern is a different case, but the boundary is not spelled out in the README, only in LICENSE.md. The repository metadata reports the licence as NOASSERTION, which means the automated classifier could not map it to a standard identifier. That is a signal to read the file, not to assume permissiveness from the checkmarks in the README.

## Where this repository stops being useful

There is no versioned package to depend on. package.json declares version 0.2.7 and the releases list shows v0.2.4, v0.2.1 and v0.2.0, but the README documents no import path, no exported component list and no API surface. You cannot pin a demo and expect it to keep working, because the demos are app screens that assume the surrounding navigation, the Reanimated feature flags and the Skia patch are all in place.

The Android story is unfinished. The roadmap lists "Android Release (starting with App Tester / Firebase Distribution)" as unchecked, while the TestFlight release for iOS is checked. There is an Android build path via bun android and eas.json, but the README does not document a distributed Android build. The shader demos are also flagged as needing performance work. If your interest is specifically Skia shaders on Android, you are reading code the author has not finished tuning, and the patch script under scripts/ is evidence that the platform needed special handling.

## How it compares with react-native-reanimated's own example set

Reanimated ships its own example application inside its repository, and the difference in approach is structural. Reanimated's examples exist to validate and demonstrate the library's API, so each example is small and self-contained, and the surrounding app is a test harness. This repository is the reverse: the app is a real Expo application with navigation, icons, EAS build profiles and a custom Nitro podspec, and the animations are the content rather than the test fixtures.

That means you get more context here (how a gesture, a worklet and a Skia canvas fit into a screen with navigation) and less isolation. Copying from Reanimated's examples gives you a snippet with a known API contract; copying from src/animations gives you a screen that assumes this app's flags, this app's navigation hooks and this app's patch script. The trade-off is real and worth naming: the richer example is the harder one to transplant.

## Maintenance, upgrade cost and what the release history shows

The last push to the default branch was on 2026-09-20, and the repository is not archived. The most recent tagged release is v0.2.4 from 2026-06-06, with v0.2.1 and v0.2.0 before it in March 2026, while package.json declares 0.2.7. Tags and the manifest version have drifted apart, so treat the release list as a rough history rather than a source of truth about what main contains.

Upgrading is not a dependency bump. The project pins Expo, Reanimated and Skia behaviour through app.config.ts, babel.config.js, metro.config.js, patches/, plugins/ and the Reanimated static flags in package.json, and it carries an update-expo-packages script that runs expo install --fix. The clean script deletes node_modules, ios, android and the Metro and haste caches, which is the honest description of what an upgrade here costs. The postinstall Skia patch has to keep applying as Skia changes; if Skia's Android WebGPU code moves, that script breaks the install, not the runtime.

## Conclusion

Adopt it if you want a runnable Expo project that shows Reanimated, Gesture Handler and Skia working together, and you are willing to read src/animations to learn the technique. Do not adopt it if you need a documented component library with a stable API, or if your product is itself an animation library, because the custom licence forbids reselling the code and building competing animation libraries. Verify the LICENSE.md terms and the exact Expo SDK and Reanimated versions in package.json against your own app before copying anything, and check that the Reanimated static feature flags in package.json do not conflict with your existing configuration.

## FAQ

### How do I install enzomanuelmangano/demos and run it?

The README's Quick Start is bun install, bun prebuild, then bun ios or bun android. It is an Expo project, so the native projects are generated by prebuild rather than committed.

### Can I use enzomanuelmangano/demos in a commercial project?

The README states the custom licence is free for individuals and companies and can be used in commercial projects, and that you can modify it. It also states you cannot resell or redistribute the code or create competing animation libraries, so read LICENSE.md for the exact terms.

### Is enzomanuelmangano/demos a library I can install from npm?

No. package.json names the project "demos" with expo-router as its entry point, and the README documents no import path or exported component list. It is an Expo application whose source you read or fork.

### Does enzomanuelmangano/demos have an Android release?

The roadmap lists the Android release as unchecked, while the TestFlight release for iOS is checked. The README gives bun android as a local build command but does not document a distributed Android build.

### What is enzomanuelmangano/demos used for?

It is a runnable catalogue of React Native animations built with Reanimated, Gesture Handler and Skia, browsable at reactiive.io/demos. The README points to a companion course, reanimate.dev, for people who want to learn the techniques rather than read the source.

## Sources

- [enzomanuelmangano/demos on GitHub](https://github.com/enzomanuelmangano/demos)
- [Issues](https://github.com/enzomanuelmangano/demos/issues)
- [Project website](https://reactiive.io/demos)
- [README](https://github.com/enzomanuelmangano/demos/blob/main/README.md)
- [Releases](https://github.com/enzomanuelmangano/demos/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/enzomanuelmangano-demos
