Embed media & engagement into any website
Galleries, smart uploads, reactions and leaderboards — one production-grade, type-safe SDK. Embed it as a React component, a web component, or a single script tag.
Works with the tools you already use
Everything you need, nothing you don't
A compact, production-grade SDK that stays out of your way and your bundle.
Plug & play
React wrapper, framework-agnostic web component, or a single no-code script tag. Your call.
Strict TypeScript
Full typings for every prop and callback — safer integration and first-class editor DX.
Performance-first
~139 KB gzipped core. Heavy features like HEIC conversion are lazy-loaded on demand.
Accessible & themeable
ARIA-friendly out of the box. Light/dark and brand theming via your Org Settings.
An interactive gallery, ready to go
A polished masonry grid with a full-screen lightbox, blurhash placeholders for instant perceived loads, and infinite scroll built in.
Full-screen lightbox with keyboard nav Blurhash placeholders, no layout shift Infinite scroll & view-mode toggles
Smart uploads that just work
Client-side compression and chunked progress keep uploads fast and resilient. HEIC → JPEG conversion is loaded only when a HEIC file shows up — never in your base bundle.
Automatic compression before upload Chunked progress with resume On-demand HEIC conversion
Emoji reactions
Let people react with the emoji set you choose. Per-item counts roll up live, and an optional leaderboard surfaces the crowd favourites — no endpoint to write.
Configurable reaction emojis Live per-item reaction counts Optional crowd-favourite leaderboard
You reacted ❤️ — tap again to undo
-
1
Ava Mercer
4.8 -
2
Liam Kowalski
4.5 -
3
Noah Reyes
4.3
Run a contest
Turn the gallery into a competition. Star ratings drive scores, a ranked leaderboard updates in real time, and winners are surfaced automatically when it closes.
Star ratings & scoring Real-time ranked leaderboard Automatic winner selection
Integrate in minutes
Pick the integration that fits your stack. Same SDK underneath.
import { QratiConnect } from '@qratilabs/qrati-connect';
<QratiConnect
organizationId="your-org-id"
router="memory"
/>
<script type="module"
src="…/element/web.es.js"></script>
<qrati-connect
organization-id="your-org-id"
router="hash"></qrati-connect>
<!-- one async tag -->
<script async
src="…/embed/embed.js"
data-organization-id="your-org-id"
data-router="hash"></script>
Enough reading, try it here
This is the real embeddable web component — same tag you drop into your own app.
gzipped core bundle
frameworks & platforms
ways to embed
TypeScript typings
Drops into your stack
Runnable example apps for every major framework. Browse the one you ship with.
Grab your organization ID, drop in the SDK, and you're live. No backend to build.