Storage-backed feature

Full-stackReleased · Preview

Add a React media library with app-owned storage.

BTST adds uploads, folders, asset metadata, storage adapters, a searchable media library, picker UI, and image fields inside your application.

Best for

Teams that need a shared media layer for product features while keeping files, metadata, and storage credentials under their control.

Requires
An isolating Prisma, Drizzle, or Kysely database adapter for persistent writes; A configured media storage adapter
External service boundary
Optional S3-compatible storage or Vercel Blob when the adopter selects those adapters
Ownership boundary
Asset metadata stays in your database and files stay in the storage you configure. You own limits, access policy, and embedding; the library view can be ejected.
Real BTST Media library showing the checked-in product-proof image after upload, metadata registration, and search.
The proof fixture moves through the registered Media upload route into the searchable library, ready for picker and image-field reuse.

BTST supplies

  • Asset and folder data models with typed upload, registration, and library APIs
  • An SSR-aware media-library route with search, folders, and asset actions
  • Embeddable MediaPicker and ImageInputField components
  • Local, S3-compatible, and Vercel Blob storage adapter implementations

You supply

  • A database adapter with isolated transaction support for persistent writes
  • A configured storage adapter and its credentials or local upload directory
  • Allowed MIME types, size limits, URL prefixes, and authorization policy
  • The application routes and fields that embed the picker or image input

You own and customize

Asset metadata stays in your database and files stay in the storage you configure. You own limits, access policy, and embedding; the library view can be ejected.

Compatibility and dependencies

Maintained integrations
Next.js 15+ App Router · React Router v7 · TanStack Start
Requires
An isolating Prisma, Drizzle, or Kysely database adapter for persistent writes; A configured media storage adapter
External services
Optional S3-compatible storage or Vercel Blob when the adopter selects those adapters

From registration to result

The shipped workflow

This is the feature path BTST supplies—not a claim that your app needs no integration work.

  1. Choose storage

    Configure local, S3-compatible, or Vercel Blob storage in your backend.

  2. Upload or register

    Send a file through the matching protocol or register an allowed asset URL.

  3. Organize

    Search assets, maintain folders, and edit metadata in the library.

  4. Reuse

    Embed MediaPicker or ImageInputField wherever your application needs an asset.

Continue your task

Move from evaluation to the right implementation boundary.