Performant and Cross-Platform Shimmers in React Native Apps

Every React Native developer has been there: you need a loading indicator, but <ActivityIndicator /> feels dated, and building a good shimmer from scratch is a hassle.

Today, we're excited to introduce react-native-fast-shimmer, our open-source answer to this common problem. It's a lightweight, performant, and fully customizable library for creating elegant loading skeletons in any React Native app.

You can start using it today by installing the package from npm:

npm install react-native-fast-shimmer

It's designed to be the go-to solution for developers who need a quick, reliable, and beautiful placeholder effect. In this post, we'll dive into the thinking behind the library, its technical architecture, and how you can use it to elevate your app's user experience.

What are shimmers?

If you've used a modern app, you've seen a shimmer effect. Shimmers are the smooth, animated gradients that glide across UI elements, indicating that content is being fetched from a server. In any data-driven application, network latency is a reality. Shimmers provide an elegant way to manage that waiting period.

While spinners were the traditional choice for loading indicators, shimmers offer a superior user experience.

Here's why they've become the standard:

  • UI skeleton: Shimmers are typically applied to placeholder shapes that mimic the final layout. This "UI skeleton" prepares the user for the content that will appear, preventing jarring layout shifts when the data finally loads.
  • Visual cohesion: When multiple components on a screen load data independently, displaying several spinners can look cluttered. Synchronized shimmers create a more polished and cohesive visual experience.

The challenge with existing shimmer solutions

While the concept is simple, the implementation often isn’t. Over time, we’ve seen a number of shimmer libraries for React Native, but many fall short in key areas:

  • Heavy on 3rd-party dependencies
  • Limited customization
  • Poor performance on lower-end devices
  • Unpolished design

That’s why we decided to build something better: leaner, more performant, and built with modern React Native apps in mind.

Introducing react-native-fast-shimmer

Our approach to building react-native-fast-shimmer was guided by three core principles:

  • Platform accessibility: Work across the React Native ecosystem, including projects using Expo.
  • Performance: Ensure buttery-smooth animations with minimal impact on application performance.
  • Customization: Provide developers with the tools to tailor the effect to their needs.

The library achieves these goals by building on a minimal, yet powerful, foundation.

We use react-native-svg to create responsive linear gradients that automatically conform to any container shape. This means you can drop a shimmer into any view without worrying about manual styling.

For animation, we leverage react-native-reanimated to drive the effect off the UI thread, ensuring it remains fluid and responsive.

Rendering multiple shimmers at the same time provides stable performance results
Rendering multiple shimmers at the same time provides stable performance results

In terms of performance, the architecture is highly optimized. No matter how many shimmer components are on-screen, all of them are driven by a single shared animated value. The animation logic is also automatically cleaned up when the shimmers are no longer visible, preventing memory leaks.

Getting started

Integrating react-native-fast-shimmer is straightforward.

After setting up react-native-reanimated in your project, you just need to wrap your application with the ShimmerProvider. This provider exposes the shared animation value to all Shimmer components and allows for global customization.

<ShimmerProvider duration={1000}>
	<View>
     <Shimmer />
  </View>
</ShimmerProvider>

Once the provider is in place, you can add a <Shimmer /> component anywhere in your component tree. It will automatically fill its parent container and synchronize its animation with all other active shimmers.

An example of multiple shimmers with different settings
An example of multiple shimmers with different settings

What’s next?

The future of react-native-fast-shimmer depends on the community's feedback! The goal is to create the definitive, easy-to-use placeholder library for the entire React Native ecosystem.

The current math-based animation system opens the door to powerful new features. The roadmap includes more advanced customization options like:

  • Rotated and directional shimmers
  • Locally controlled animation timing
  • "Glimmer" effects (pulsating opacity animations)

If your project needs a fast, flexible, and beautiful shimmer solution, check out react-native-fast-shimmer on GitHub. We welcome your contributions and feedback to make it the best it can be.

Table of contents
Need help with React or React Native projects?

We support teams building scalable apps with React and React Native.

Let’s chat
Link copied to clipboard!
//
Insights

Learn more about

React Native

Here's everything we published recently on this topic.

Sort
//
React Native

We can help you move
it forward!

At Callstack, we work with companies big and small, pushing React Native everyday.

React Native Performance Optimization

Improve React Native apps speed and efficiency through targeted performance enhancements.

Code Sharing

Implement effective code-sharing strategies across all platforms to accelerate shipping and reduce code duplication.

Mobile App Development

Launch on both Android and iOS with single codebase, keeping high-performance and platform-specific UX.

React Native Development

Hire expert React Native engineers to build, scale, or improve your app, from day one to production.