Developers building consumer mobile or web apps that include a gamification layer are faced with a choice: build their own UI components from scratch or use an existing library.
Both come with trade-offs:
- Building your own gamification UI components gives you full control over every pixel, but takes longer initially and requires more time investment with every new component.
- Using an existing gamification component library is much faster, you'll get most of what you need upfront, but some libraries come with constraints and lack customization options.
This post outlines the top libraries, npm packages and single components for developers looking to build gamification UI in web and mobile apps in 2026, and the pro's and con's of each.
Before you compare full libraries, look at coverage primitive by primitive. Here's what each open-source React option actually covers.
| Library | Points | Achievements/Badges | Streaks | Leaderboards |
|---|---|---|---|---|
| Trophy gamification UI kit | ✓ (6) | ✓ (5) | ✓ (3) | ✓ (3) |
| Ludiks | ✓ | ✓ | ||
| react-achievements | ✓ | |||
| react-rewards | ||||
| react-confetti | ||||
| GamiUI |
Full gamification component libraries
Full gamification component libraries can give you UI components for the most common gamification use cases upfront, resulting in a significant time saving compared to building in house. However, some lack customization options, extensibility and have varying levels of community maintenance and support.
Trophy's Gamification UI Kit

The most comprehensive entry in the category and the only one that ships as a shadcn/ui registry is Trophy's gamification UI kit. Seventeen components across four primitive families: Achievement (5 components), Leaderboard (3), Points (6), Streak (3). Each component installs into your codebase as plain React and Tailwind source code via the shadcn CLI:
npx shadcn@latest add https://ui.trophy.so/streak-badge
There's no npm package to depend on. Once installed, the component code lives in your repository. This is the same install model used by Aceternity, Magic UI, Origin UI, and the broader shadcn ecosystem, applied to a vertical (gamification) that didn't previously have a dedicated registry.
The library is MIT licensed and explicitly designed for zero lock-in. The components can be restyled to match any design system, modified freely, or have their data source swapped out independently of Trophy's API. Trophy's gamification UI kit works with the Trophy gamification platform out of the box, but the components don't require it.
Two design points are worth flagging:
- All four primitives are covered. Many libraries in this list ship achievements without leaderboards, or leaderboards without streaks. Trophy UI is the only one that ships all four (streaks, achievements, leaderboards, points) in a coherent design language, which matters if your gamification design uses more than one mechanic.
- Components are sized for real product UIs, not game UIs. The Achievement Badge is small enough to embed inline. The Leaderboard Card shows the user's rank in context (rank above, rank below) rather than dominating the page. This sounds obvious but most game-engine-derived libraries get this wrong by defaulting to full-screen treatments.
Best for: product teams building consumer apps where gamification is one of several engagement surfaces, and where the design system needs to be consistent across all of them.
License: MIT Install model: shadcn CLI (open-code) Coverage: Streaks, achievements, leaderboards, points (all four primitives)
Ludiks (@ludiks/react)
Ludiks ships a combined SDK and React component library as a single npm package designed to work with the Ludiks backend platform. The package includes leaderboard, streak, profile, and notification components.
npm install @ludiks/react
Ludiks bundles the data layer and the UI layer in one install, where others treat them as separable. For those that dont want to use the Ludiks platform, this is a big blocker.
Ludiks's component set is also meaningfully narrower than others in this list. Achievements are not a separate primitive in Ludiks at the component level, and the points and leaderboard surfaces are tighter.
However the biggest drawback is that at time of writing neither the UI library or Ludiks platform have been updated in over 9 months, which suggests that developers building on Ludiks could find it difficult to get support if things break.
Best for: teams that have already chosen Ludiks as their gamification platform and want the official UI alongside it.
License: MIT Install model: npm package (combined SDK + UI) Coverage: Leaderboards, streaks, profile, notifications. No dedicated achievement component layer.
GamiUI (@gamiui/standard)

GamiUI is a general-purpose React component library (buttons, inputs, layout primitives, avatars) with a bright, playful theme. It's less of a dedicated gamification library, but more of a collection of components with a fun visual aesthetic.
GamiUI doesn't have purpose built components for streaks, achievements, leaderboards, or points components. It is, however, a perfectly serviceable general UI kit if you happen to want one with a less austere visual language than Material UI.
Being an installable NPM package, GamUI suffers from the same lack of customization and flexibilty as Ludiks, and like Ludiks it hasn't been updated for a significant time period (3+ years for GamiUI).
Best for: developers who want a general UI library with a playful aesthetic, not gamification-specific primitives.
License: MIT Install model: npm package Coverage: General UI primitives only. No gamification-specific components.
Single-purpose gamification component libraries
The next set of options are single-component libraries and npm packages built for a specific use case.
react-achievements / react-achievements-redux
A focused library for client-side achievement tracking and display. It includes a provider that manages achievement state via local storage, a badge collection view, and a confetti effect that fires on unlock. The redux variant exists for teams already using Redux for state management.
The defining constraint is the local-storage model. Achievements live in the user's browser, not on a server, which means they don't persist across devices or survive a cleared cache. For prototypes, internal tools, or single-device experiences, this is fine and saves a lot of setup time. For any production-grade consumer product where features like analytics and integrations are critical features, it's a non-starter.
Best for: prototypes, hackathon projects, and single-device experiences where server-side persistence isn't needed.
License: MIT Install model: npm package Coverage: Achievement tracking and display only. No streaks, leaderboards, or points.
react-award
A single-purpose component that handles the unlock animation moment using Lottie. The component shows an award silhouette that fades into the full image while a Lottie animation plays around it. It's tightly scoped to that one interaction and does it well.
react-award isn't an achievement system. It doesn't track state, manage progress, or render collections. It's a presentational component that pairs with whatever state-management approach you're using. If you've already solved the data layer and just need a polished unlock moment, this is a clean option.
Best for: teams that have their own achievement API and want a drop-in unlock animation.
License: MIT Install model: npm package Coverage: Unlock animation only.
Micro-interaction primitives
These aren't gamification libraries in the strict sense, but they often show up in gamification implementations because they handle the celebratory moments that achievement and milestone systems trigger.
react-rewards
The most popular library in this group by a wide margin. react-rewards exposes a useReward hook that fires confetti, balloons, or emoji rain anchored to a specific element. It's tree-shakeable, around 3.6kB gzipped, and works with any state-management approach.
npm install react-rewards
It does not manage achievement state, does not render badges, does not handle streaks. Many production apps use it as a complement to a dedicated gamification platform.
Best for: any app that needs lightweight celebratory animations, used alongside a separate platform for the actual gamification logic.
License: MIT Install model: npm package Coverage: Confetti, balloons, emoji rain animations. No state, no badges, no leaderboards.
react-confetti
Even more focused than react-rewards. react-confetti renders a full-screen confetti animation that runs until you stop it. The component takes width and height props and a few physics knobs, and that's most of the API.
Where react-rewards is element-anchored and ephemeral, react-confetti is page-anchored and continuous. The two libraries solve adjacent but different problems. react-confetti is the right choice for major milestones (annual recap, signup completion, major achievement) where you want a sustained celebration. react-rewards is the right choice for small, repeated reward moments (every streak day, every task complete) where a 300ms burst is enough.
Best for: major celebratory moments that warrant a sustained, page-wide animation.
License: MIT Install model: npm package Coverage: Sustained confetti animation only.
React Native Gamification UI Libraries
Everything above covers web and React libraries that render to the DOM. React Native renders to native views, so those web confetti and animation packages do not run there. You need a different set of tools. These three cover the visual layer most React Native gamification UIs are built on.
react-native-reanimated
This is the animation engine most React Native gamification UIs build on. It runs animations on the UI thread, so reward and celebration moments (level-up badges and unlock effects) stay smooth even when JavaScript is busy. It does not draw particles itself. For confetti bursts you pair it with a helper like react-native-confetti-cannon, which handles the particle emitter while Reanimated drives the timing and easing.
Here is a "level up" badge that springs in and fades up on unlock:
import Animated, {
useSharedValue,
useAnimatedStyle,
withSpring,
withTiming,
} from 'react-native-reanimated';
const scale = useSharedValue(0);
const opacity = useSharedValue(0);
function unlock() {
scale.value = withSpring(1);
opacity.value = withTiming(1, { duration: 250 });
}
const badgeStyle = useAnimatedStyle(() => ({
opacity: opacity.value,
transform: [{ scale: scale.value }],
}));
// <Animated.View style={badgeStyle}>{/* level up badge */}</Animated.View>
npx expo install react-native-reanimated
Best for: Reward and celebration animations such as unlock effects and level-up badges, plus confetti timing when paired with a particle helper.
react-native-skia
Skia is a 2D graphics engine that draws directly to a canvas, so you get pixel-level control that plain React Native views cannot give you. That is exactly what animated progress surfaces need: streak rings and points arcs that fill as a value moves from 0 to 1. You compute the arc from your progress value and let Skia render it.
Here is a ring progress indicator driven by a progress value:
import { Canvas, Path, Skia } from '@shopify/react-native-skia';
const size = 120;
const radius = 50;
const progress = 0.6; // 0–1
const ring = Skia.Path.Make();
ring.addCircle(size / 2, size / 2, radius);
// <Canvas style={{ width: size, height: size }}>
// <Path
// path={ring}
// style="stroke"
// strokeWidth={12}
// strokeCap="round"
// color="#22c55e"
// start={0}
// end={progress}
// />
// </Canvas>
npx expo install @shopify/react-native-skia
Best for: Custom-drawn progress surfaces such as streak rings and points arcs.
react-native-game-engine
This models your UI as entities in a game loop, with systems that update them every frame and renderers that draw them. That fits genuinely game-like reward surfaces, such as a badge that reacts to physics or an achievement scene with moving pieces. It is the heaviest option here. For a static badge grid or a simple achievement list it is overkill, and you are better off with plain views plus Reanimated.
Here is a minimal engine with one badge entity and its renderer:
import { GameEngine } from 'react-native-game-engine';
import { View } from 'react-native';
const Badge = (props) => (
<View style={{ position: 'absolute', left: props.x, top: props.y }}>
{props.children}
</View>
);
const entities = {
badge: { x: 40, y: 80, renderer: <Badge /> },
};
// <GameEngine systems={[]} entities={entities} />
npm install react-native-game-engine
Best for: Badge and achievement surfaces that are genuinely game-like, where reward moments run inside a game loop.
These libraries handle the visual layer, but they do not track state. The data behind them (streak counts, achievement state, leaderboard ranks, and points balances) still needs a backend to compute and store it. Trophy's SDK supplies that data, so you can feed live values straight into these components.
What's not in this category
Three types of libraries are also worth mentioning to highlight the different approach they take to the component libraries listed in this list, even though they belong in different categories.
SaaS-embedded widgets. Several gamification platforms offer JavaScript snippets you embed in your app to render their hosted UI. These are not libraries in the npm sense. The UI is owned by the vendor, lives in an iframe or remote bundle, and disappears the moment you stop paying. Useful for some, but usually come with very narrow customization options and almost never provide the same high-quality user experience that the other UI components in this list offer.
Game engine UI kits. Phaser, PixiJS, and similar game engines ship UI tooling, but the audience is game developers, not app developers adding gamification to a consumer product. The constraints are different (canvas rendering, frame loops, sprite atlases) and the components don't drop into a React app.
Abandoned packages. The npm registry contains a few legacy "gamification" libraries that haven't been touched in years. react-gamification last updated in 2018 with about ten weekly downloads. gamification-library last updated in 2022. These come up in npm search but aren't appropriate for new projects. Worth knowing they exist only so you can recognise and skip them.
How to pick the right library
The right choice depends mostly on two questions: how much of the gamification surface you're building, and how much control you want over the code.
If you're building a complete gamification surface (streaks, achievements, leaderboards, points, all integrated), Trophy's gamification kit is the only library in the list that covers all four primitives in a coherent design language. Ludiks covers a subset; everything else covers a single primitive or a single moment.
If you're already committed to a specific gamification platform, use the library that pairs with it. Ludiks ships its own React components that can only be used with Ludiks. Trophy ships an open-source gamification UI library that can be used with any gamification platform, but has a first-class experience when paired with Trophy iteslf. Other platforms ship their own widgets or, more commonly, leave the UI entirely to the developer.
If you only need one piece (achievements, or animations, or just the unlock moment), the single-purpose libraries above are appropriate and don't carry the overhead of a broader library. react-achievements for client-side achievement display. react-award for the unlock moment. react-rewards or react-confetti for the celebration.
If you want maximum code ownership, the shadcn open-code model adopted by Trophy's gamification UI kit is meaningfully different from the npm install model that the others in this list follow. With shadcn, the component code lives in your repository as source. With npm, the code is a versioned dependency you import. Both work; they trade off in different directions. Npm is easier to update; shadcn is easier to modify deeply and harder to find yourself blocked by upstream decisions.
A summary table:
| Library | Coverage | Install | License | Lock-in concern |
|---|---|---|---|---|
| Trophy gamification UI kit | Streaks, achievements, leaderboards, points | shadcn CLI | MIT | None (code lives in your repo) |
| Ludiks | Leaderboards, streaks, profile, notifications | npm | MIT | Coupled to Ludiks platform |
| GamiUI | General UI only (not gamification-specific) | npm | MIT | None |
| react-achievements | Achievements only (local storage) | npm | MIT | None |
| react-award | Unlock animation only | npm | MIT | None |
| react-rewards | Micro-interaction animations | npm | MIT | None |
| react-confetti | Sustained confetti only | npm | MIT | None |
FAQ
What does "gamification UI library" actually mean?
A library of pre-built user interface components for the visual surfaces gamification mechanics need: streak badges, achievement displays, leaderboard layouts, points balances, unlock animations, and similar. The category is distinct from gamification backend platforms (which handle the data and logic but leave the UI to the developer) and from SaaS widgets (which render hosted UI inside an iframe or remote bundle).
Do gamification UI libraries replace a gamification backend?
No. A UI library renders what the backend produces. If you install Trophy UI's Streak Card, you still need a data layer to compute current streak length, longest streak, and freeze availability. The library renders those values; it doesn't compute them. Trophy UI can connect to Trophy's API, to a custom backend, or to mock data during development, but the data has to come from somewhere.
Why isn't Material UI or shadcn/ui on this list?
Both are excellent general component libraries with useful primitives (Badge, Progress, Avatar) that get used in gamification implementations. Neither ships gamification-specific components like streak badges, achievement grids, or leaderboard podiums. They're the foundation many gamification UIs are built on top of, not the gamification UI itself. Trophy's gamification UI kit specifically extends the shadcn pattern with gamification primitives, which is why it sits in this list and shadcn does not.
Can I combine multiple libraries from this list?
Yes. The most common combination is a primary library (Trophy's gamification UI kit for the structural components) plus a micro-interaction primitive (react-rewards or react-confetti for animations the structural components don't include). The libraries don't conflict because they handle different parts of the UI.
Is there an open-source gamification UI library for Vue or Svelte?
The dedicated category is currently React-only. The shadcn ecosystem is React-first, and the npm packages above (Ludiks, react-achievements, react-rewards) are also React-focused. Vue and Svelte developers typically combine general UI libraries (Vuetify, Skeleton UI) with framework-specific animation libraries to assemble a comparable surface. Trophy's gamification UI kit has plans to extend support to other frameworks in the future based on demand.
Which library is best for building a Duolingo-style streak feature?
Trophy's Streak Badge and Streak Calendar are the closest direct analogues to the Duolingo streak surface (compact badge for ambient display, calendar view for history). Ludiks also has a streak component, though narrower in coverage. For just the unlock animation when a streak milestone is reached, react-award or react-rewards work alongside any state layer. The design decisions behind a Duolingo-style streak matter at least as much as the library choice; the library renders what the design dictates.
Is there an open-source React gamification component library?
Yes. Trophy's gamification UI kit is MIT-licensed and covers all four primitives: points, achievements, streaks, and leaderboards (17 components total). It installs as a shadcn/ui open-code registry, so the component source lives in your repo through the shadcn CLI, with no npm dependency to track. You keep and edit the code. It works with any backend or with mock data, so there's zero lock-in. Most other open-source React options cover only one primitive.
Get the latest on gamification
Product updates, best practices, and insights on retention and engagement — delivered straight to your inbox.
The gamification layer for consumer apps
Drop-in gamification features you can ship this sprint. Increase retention and user engagement without sacrificing your roadmap.

Book a call