TheGallery developer platform

Ship beautiful image experiences without the media infrastructure.

Upload assets, organize galleries, embed them anywhere, and deliver optimized images globally through a typed API, focused SDKs, and an edge-ready media platform.

JavaScript SDKReact libraryCloudflare edge deliveryMulti-tenant ready

Choose your path

Start with the surface that matches your product, then compose the rest as your integration grows.

The short version

Your application talks to the API when it needs metadata or authorization. Repeated image requests are served by the media edge, using synchronized policy and metadata instead of querying your API for every image.

Create and authorize

Use the SDK on the server to create galleries, issue upload intents, and define bounded public or private access.

Upload and organize

Upload directly with a short-lived intent, then complete the asset and attach it to a gallery without proxying image bytes through your app.

Render with React or URLs

Pass gallery data to React components, or build a delivery URL for any frontend, mobile client, CMS, or server-rendered experience.

Deliver at the edge

The media Worker validates the request against synchronized KV policy, reads from storage, applies transformations, and lets Cloudflare cache the result close to the viewer.

A platform designed for image traffic

Direct uploads

Short-lived signed intents keep image bytes off your application server and make uploads resilient to large files.

Edge delivery

Cloudflare Workers, Images transformations, cache, and storage work together to serve the right variant near the viewer.

Scoped access

Separate server credentials, public capabilities, private galleries, and synchronized plan entitlements.

Useful signals

Observe upload, transform, cache, and delivery behavior with structured analytics events.

The familiar syntax

The SDK handles control-plane work. The React library handles presentation. The media edge handles repeat image traffic.

app/gallery.tsx
import { GalleryClient } from '@degallery/sdk';
import { Gallery } from '@degallery/react';

const client = new GalleryClient({
  apiKey: process.env.DEGALLERY_API_KEY,
});

const gallery = await client.getGallery('gallery_id');

export function ProductGallery() {
  return <Gallery gallery={gallery} layout="masonry" />;
}
flowchart LR
    App[Your application] --> SDK[JavaScript SDK]
    SDK --> API[DeGallery API]
    API --> Sync[Policy and metadata sync]
    Sync --> KV[(Cloudflare KV)]
    App --> React[React library]
    React --> Worker[Media Worker]
    Worker --> KV
    Worker --> R2[(Object storage)]
    Worker --> Transform[Image transformation]
    Transform --> Cache[Edge cache]
    Cache --> Viewer[Viewer]

Control plane and media plane

The API owns metadata, authorization, billing, and upload coordination. The media Worker owns authorized byte delivery. Keep API keys and privileged credentials on the server; browser code should use only the public capabilities intended for it.

Where to go next

Open the docs

Make your first gallery the beginning.

Read the quickstart, choose your SDK surface, and build on the same contracts as your product moves from prototype to production.