Presigned uploads, built in.
Get presigned upload URLs without standing up an upload service. Files land on local disk in development and an S3-compatible bucket such as R2, Backblaze, MinIO, or AWS in production. One environment variable selects the backend.
import { FileUpload } from "@pylonsync/react"; function AvatarPicker() { return ( <FileUpload accept="image/*" onUploaded={(file) => callFn("setAvatar", { fileId: file.id })} /> );}- Presigned uploads send files straight from the client to storage
- Local disk in dev, S3-compatible buckets in prod
- R2, Backblaze B2, MinIO, or AWS S3 via one env var
- File metadata lives in your typed schema, gated by the same policies
How it works.
Pylon gives the client a short-lived presigned URL, so the bytes go straight to the bucket and large files do not tie up a server worker. The same access policies that guard your rows also guard downloads.
What you’d otherwise wire up.
Each line is a piece teams normally assemble for this one capability. On Pylon it is part of the runtime.
- An object-store SDK and a service to sign upload URLs
- An upload proxy that streams file bytes through your API
- Access checks bolted on after the fact to file URLs
- Per-environment bucket policies kept in sync by hand
Apps built with it.
Scaffold any of these with npm create @pylonsync/pylon.
A studio site with a case-study portfolio, plus a back-office: clients, invoices with PDF export, and live project availability.
Build it on Pylon.
One framework for your schema, sync, auth, functions, realtime, and SSR. Free to start.