Skip to main content
The Storage primitive is object storage (buckets + files), backed by a fullstack app’s managed backend. Naive injects the project’s service-role key and proxies the storage API (/storage/v1).
Requires a fullstack app (naive.apps.create({ name, type: "fullstack" })). Like Database/Functions/Auth, it’s a curated surface over the app-scoped backend proxy.

Two ways to use it

Omit { appId } to auto-resolve the user’s single fullstack app; pass it when they own several.

Buckets

Objects

Binary uploads (images, video) are best done with a signed upload URL rather than the JSON proxy. Request one via the backend proxy (POST .../storage/v1/object/upload/sign/{bucket}/{path}) and PUT the bytes directly.

REST

Your own project uses /v1/apps/<app-id>/…; an end-user’s project uses /v1/users/<user-id>/apps/<app-id>/…. Everything under storage/proxy/* forwards to the project’s /storage/v1/*. See the Storage API reference.

Billing

Free — no per-operation credit cost. Account Kits can gate the storage primitive per user.