Bubble.io File Storage
Production File Storage for Bubble.io Apps via the API Connector
External file storage for Bubble apps with reliable global delivery.
Bubble's built-in file storage is fine for a prototype but leaks at scale: the URLs Bubble hands back point at Bubble's own infrastructure and are tied to your app's lifecycle, free apps often serve without a CDN in front, and there's no clean way to expire access to a private document. As an app grows into real user-generated content — avatars, uploaded documents, receipts, course files — you want a storage backend you'd be comfortable shipping in a hand-coded product. files.link gives a no-code Bubble app exactly that: a REST API you wire into the API Connector, permanent CDN URLs returned on every upload, and signed URLs for anything that must stay private. You stay in Bubble; the bytes live on durable storage with edge delivery.
Setup runs through Bubble's API Connector. Add an API named files.link, set the Authorization header to your raw API key (no Bearer prefix), and define three calls matching the upload flow: (1) POST https://api.files.link/v1/files/[folderId] with the file metadata, which returns a presigned PUT URL and a file id; (2) a PUT to that presigned URL carrying the file body; (3) POST https://api.files.link/v1/files/confirm-upload with the id.
Initialize each call once so Bubble learns the response schema, then expose them as workflow actions. On a page, drop a File Uploader, and in its on-upload workflow pass the uploader's value into your upload action, then "Make changes to a thing" to save the returned CDN URL onto the relevant record's text field. Bind an Image or Link element to that field to display it.
Keep private documents private by uploading with the private flag and calling the signed-URL endpoint from a Backend Workflow each time a user needs access, so the API key never ships to the browser and the 10-minute-default URL dies quickly if leaked. The portability win is the one teams underrate: because the CDN URLs belong to files.link rather than Bubble, exporting your app or rebuilding the front end in code later doesn't orphan your asset library — the same URLs keep resolving while your balance is active, so you're not re-uploading everything during a migration.
Billing is prepaid credits with per-GB storage and CDN delivery included, so you watch one balance instead of guessing how file operations consume Bubble workload units.
Benefits With No Complexity
Global CDN delivery
Edge-cached worldwide
Signed-URL security
What You Get
Unlimited files
Unlimited storage
Public + Private storage
CDN ready links
Prepaid credits
More coming soon
How files.link Works
1. Upload
2. Copy
3. Use Anywhere
Why Developers Choose files.link
A Better Way to Store & Deliver Files
| Bubble Built-in Storage | Firebase Storage | Amazon S3 | files.link | |
|---|---|---|---|---|
| Global CDN delivery on every plan | ||||
| Wired in via API Connector (no SDK) | ||||
| Signed URLs for private files | ||||
| URLs survive app export/migration | ||||
| Prepaid credits (no subscription) | ||||
| Cold storage tier for archives |
Calculate Your Needs
Storage
Egress
CDN Bandwidth
Start Bubble Storage
- Global CDN delivery
- Edge-cached worldwide
- Signed-URL security
- Unlimited files
- Unlimited storage
- Public + Private storage
- No subscription — prepaid credits keep spend predictable