Vibeleaderboard
Index / tool

Supabase Storage

supabase.com
Visit supabase.com
Category
Developer Tools
Rank
No. 1031Tools index

Previous survey · No. 1024 ·

Pricing
Paid
Type
TOOL
Use case
Deployment & Operations
Interfaces
API
Builder
supabase
Latest release
v1.87.2
Date

About

S3-compatible storage on Supabase. S3-compatible object storage built into Supabase, with row-level security, image transformations, and a CDN. Billed by storage and bandwidth on top of your project plan.

What it does

This is the backend engine behind Supabase's file-hosting product: a Fastify service that accepts uploads through several protocols at once, including plain HTTP, resumable chunked transfer for unreliable connections, a bucket API built to match a widely used cloud provider's interface so existing client libraries work unmodified, and a catalog endpoint for the Iceberg table format used by data-lake tools. Files land on local disk or get forwarded to a compatible bucket provider, while bucket, file and permission records live in Postgres, so read and write access is decided by database rules rather than a bolted-on access layer.

Why it's ranked here

Apache 2.0 licensing puts the real production code in reach of anyone self-hosting the open-source stack, not just customers of the managed product, and what ships here is the literal service behind the paid tier rather than a thin client wrapper. Handling four upload protocols and two swappable backends from one codebase is unusual for infrastructure this size, and deciding read and write access with the same database rules used elsewhere in the stack, instead of a separate policy engine, is a coherent design choice rather than a bolted-on feature. Those fundamentals matter more than any usage count.

What's good

The protocol coverage is genuinely broad for a single service: plain HTTP, resumable chunked uploads for large or flaky connections, a bucket API that existing client tooling for a widely used cloud provider can talk to without changes, and a REST catalog for the table format analytics engines increasingly expect. The upload path supports two independent locking strategies for concurrent resumable transfers, one built on Postgres and one on the object backend itself, so operators can pick whichever fits their existing infrastructure. Authorization threads through as tenant-scoped feature flags rather than being hardcoded, letting individual protocols be switched off per tenant.

Tradeoffs

The bundled local development compose file wires literal placeholder secrets for the authentication token signing key and both access-key pairs directly into the file, normal for a local stack but a reminder that anyone copying it toward a real deployment must replace every one of them. The dependency list pulls in the full cloud provider SDK regardless of whether a deployment ever touches a cloud-compatible backend, since the code path that selects a backend imports both implementations unconditionally. The package's own declared license field does not match the license actually shipped with the repository, a paperwork inconsistency worth a maintainer's attention even though the broader license controls.

How to use it well

Reach for this when self-hosting the open-source stack and needing uploads that survive flaky mobile networks or handle files too large for a single HTTP request: the resumable protocol and configurable size limits are built in. It also suits teams migrating tooling that already speaks a widely used object-storage API, since that surface is implemented directly rather than emulated at the edge. It is not the layer to reach for when the goal is managed storage without operating Postgres and a Fastify service: that is what the hosted product in front of this code exists to provide.

Technical notes+

The route table in src/http/routes/index.ts registers nine protocol and resource groups (admin, bucket, cdn, health, iceberg, object, render, s3, tus), each mounted as its own Fastify plugin from src/app.ts, which also exposes a Swagger/OpenAPI document set gated behind an exposeDocs flag. src/http/routes/s3/index.ts builds S3 route matching dynamically from a router of method, query and header predicates and enforces an s3Protocol tenant feature flag before registering handlers. src/http/routes/tus/index.ts wires the @tus/server library to either an S3Store or FileStore depending on storageBackendType, with pluggable Postgres- or S3-based distributed locking (PgLocker, S3Locker) for concurrent resumable uploads, and src/storage/backend/index.ts shows createStorageBackend importing both FileBackend and S3Backend unconditionally regardless of which one is selected at runtime. package.json declares an ISC license field that conflicts with the Apache-2.0 text in the repository's LICENSE file, and docker-compose.yml ships literal example values for AUTH_JWT_SECRET, AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY and S3_PROTOCOL_ACCESS_KEY_ID/SECRET intended for the local MinIO-backed stack it defines.

Observed

License
Apache License 2.0 text in the repository root (LICENSE), while package.json's own license field is set to ISC.
Language
Written in TypeScript on top of the Fastify HTTP framework.
Packaging
Packaged both as an npm module with a CLI entry point and as a multi-stage Docker image built from a single Dockerfile.
Interfaces
Supports four protocols in one server: HTTP/REST, TUS resumable upload, an S3-compatible API, and an Iceberg REST catalog.
Structural
Storage backend is swappable between local filesystem and an S3-compatible object store via configuration rather than a build-time choice.
Structural
Bucket, object and authorization metadata are persisted in Postgres rather than a separate datastore.

Read from README.md, package.json, src/app.ts, src/index.ts, src/storage/index.ts, src/http/routes/index.ts, src/http/routes/s3/index.ts, src/http/routes/tus/index.ts, src/storage/backend/index.ts, src/storage/backend/s3/index.ts, src/internal/auth/index.ts, src/internal/database/index.ts, Dockerfile, docker-compose.yml, LICENSE.

Tags

Storage & FilesSupabase

Tech Stack

Node.jsDockerTypeScript

Media

Supabase Storage

Comments (0)

No comments yet

Editorially curated, with community endorsements as a secondary signal. Corrections welcome.