# upup upup is an MIT-licensed, self-hosted file uploader: one headless core plus native, DOM-identical UI packages for React, Vue, Svelte, Angular, Vanilla JS, and Preact, with optional server-mode uploads and cloud-drive sources. ## Start here Agent setup (fetch and execute to install + wire upup): https://useupup.com/agent-setup/prompt.md Agent setup, human guide: https://useupup.com/agent-setup/ FAQ: https://useupup.com/docs/faq/ Full docs corpus: https://useupup.com/llms-full.txt ## Docs - [Use upup with AI assistants](https://useupup.com/docs/ai-assistants/): How coding agents (Claude Code, Cursor, and others) discover and correctly integrate upup — machine-readable context files and a paste-ready context block. - [Azure SAS Responses](https://useupup.com/docs/api-reference/azure-generate-sas-url/): Return an Azure Blob SAS URL shaped as upup's presign contract so the browser can PUT directly to blob storage in client mode. - [Error Codes](https://useupup.com/docs/api-reference/error-codes/): The complete UpupErrorCode enum, the seven UpupError classes that carry them, restriction reasons, and the parser that turns error bodies into typed errors. - [File Upload Events](https://useupup.com/docs/api-reference/events/): The complete upup event catalog — all 52 typed core events with their payloads, plus the React callback props and the core event each one is driven by. - [S3 Presign Responses](https://useupup.com/docs/api-reference/s3-generate-presigned-url/): The PresignedUrlResponse shape your client-mode presign endpoint returns so upup can upload bytes directly to S3. - [Server HTTP API](https://useupup.com/docs/api-reference/server-http/): The complete HTTP contract of @useupup/server — every route, request and response shape, status code and header, for custom clients and live debugging. - [Theme Slots](https://useupup.com/docs/api-reference/upupuploader/classnames/): The stable per-element styling API — theme.slots keyed by component then slot, plus theme.mode for the color scheme. - [Event Handlers](https://useupup.com/docs/api-reference/upupuploader/event-handlers/): The UpupUploader callback props — onFilesSelected, onUploadStart, progress, per-file and batch completion, onFileRemoved and onError — mirroring core state. - [Icon Prop](https://useupup.com/docs/api-reference/upupuploader/icon-prop/): Override the UpupUploader's built-in icons — camera, delete, rotate, add-more, and loader — with any React component that accepts a className. - [Image Editor](https://useupup.com/docs/api-reference/upupuploader/image-editor/): Enable in-uploader cropping, annotation, filters, and watermarking with the imageEditor prop — available in the React and Preact packages only. - [Optional Props](https://useupup.com/docs/api-reference/upupuploader/optional-props/): The complete optional-prop reference for UpupUploader — behavior, file validation, the processing pipeline, upload reliability, sources, appearance and i18n. - [Ref API](https://useupup.com/docs/api-reference/upupuploader/ref-api/): The UploaderRef imperative surface — a useUpload() accessor exposing files, progress, and the upload, uploadFiles, setFiles, and replaceFiles commands. - [Required Props](https://useupup.com/docs/api-reference/upupuploader/required-props/): UpupUploader runs with no upload target as a local file collector; for real uploads, configure exactly one of uploadEndpoint, serverUrl, or resumable.endpoint. - [Code Examples](https://useupup.com/docs/code-examples/): Ready-to-copy upup snippets — source pickers, client-mode uploads, a presign endpoint handler, and server-mode wiring. - [Best Angular File Upload Libraries Compared](https://useupup.com/docs/comparisons/best-angular-file-upload-libraries/): Angular file upload libraries compared - upup, ngx-file-drop, ng2-file-upload, PrimeNG, DevExtreme, FilePond and Uppy on S3, resumable uploads and licensing. - [Best JavaScript Image Upload Libraries Compared](https://useupup.com/docs/comparisons/best-javascript-image-upload-libraries/): JavaScript image upload libraries compared on previews, client-side resize and compression, HEIC, cropping and direct-to-S3 - upup, Uppy, FilePond and more. - [Best React File Upload Libraries Compared](https://useupup.com/docs/comparisons/best-react-file-upload-libraries/): React file upload libraries compared - upup, react-dropzone, Uppy, FilePond, UploadThing, react-uploady and PrimeReact on S3, resumable uploads and licensing. - [Best Vanilla JavaScript File Upload Libraries](https://useupup.com/docs/comparisons/best-vanilla-js-file-upload-libraries/): Framework-free JavaScript file upload libraries compared - upup, Uppy, FilePond, Dropzone.js, Uploadcare and tus-js-client on S3, resumable uploads. - [Best Vue File Upload Libraries Compared](https://useupup.com/docs/comparisons/best-vue-file-upload-libraries/): Vue file upload libraries compared - upup, vue-upload-component, PrimeVue FileUpload, FilePond and Uppy on drag and drop, S3 and resumable uploads. - [JavaScript File Upload Libraries Compared](https://useupup.com/docs/comparisons/): Compare upup, Uppy, FilePond, UploadThing, react-dropzone and Uploadcare on UI, cloud drives, resumable uploads, direct-to-S3 and hosting model. - [PrimeVue and PrimeReact FileUpload Alternatives](https://useupup.com/docs/comparisons/primevue-primereact-fileupload-alternatives/): PrimeVue 5 and PrimeReact 11 moved to the PrimeUI License. What FileUpload does, what to use instead, and how to migrate to upup, Uppy or FilePond. - [UploadThing Pricing, Free Tier and S3 Costs](https://useupup.com/docs/comparisons/uploadthing-pricing/): What UploadThing costs in October 2026 - the 2 GB free tier, paid plans, overage - and what the same storage costs on S3, R2, Backblaze B2 or Spaces with upup. - [upup vs DevExtreme FileUploader](https://useupup.com/docs/comparisons/upup-vs-devextreme-fileuploader/): Compare DevExtreme's dx-file-uploader with upup's Angular uploader on upload modes, chunk upload, S3, cloud drives and licensing, with a migration snippet. - [upup vs FilePond](https://useupup.com/docs/comparisons/upup-vs-filepond/): An honest, factual comparison of upup and FilePond — a polished, accessible file uploader with first-party framework adapters — to help you choose. - [upup vs react-dropzone](https://useupup.com/docs/comparisons/upup-vs-react-dropzone/): An honest, factual comparison of upup and react-dropzone — a headless drag-and-drop primitive versus a full file uploader — so you can pick the right scope. - [UploadThing vs S3: A Self-Hosted Alternative](https://useupup.com/docs/comparisons/upup-vs-uploadthing/): UploadThing vs your own S3 bucket, compared on ownership, cost model, egress and lock-in, plus a self-hosted UploadThing alternative built on upup. - [upup vs Uppy — Which Uploader to Choose](https://useupup.com/docs/comparisons/upup-vs-uppy/): A factual upup vs Uppy comparison — two free, MIT-licensed file uploaders with headless cores, cloud drives and resumable uploads, and where they differ. - [Credentials and CORS](https://useupup.com/docs/credentials-configuration/): Keep storage keys and OAuth client secrets in server mode; configure your bucket's CORS policy for browser direct uploads. - [Error Handling](https://useupup.com/docs/error-handling/): upup reports failures as a typed UpupError taxonomy with stable codes — narrow by instanceof or error code, and configure automatic or manual retries. - [FAQ](https://useupup.com/docs/faq/): The questions people ask most about upup — frameworks, licensing, storage, cloud drives, client vs server mode, custom UI, and common setup errors. - [Getting Started](https://useupup.com/docs/getting-started/): Install upup and run your first upload — local file selection, client uploads straight to your storage, or full server mode with @useupup/server. - [Accessibility](https://useupup.com/docs/guides/accessibility/): What upup ships by default — keyboard interaction, ARIA roles and live regions, focus management on overlays, and prefers-reduced-motion handling. - [Auth Recipes](https://useupup.com/docs/guides/auth-recipes/): Wire your existing auth into @useupup/server — one getUserId hook, recipes for Better Auth, NextAuth, Clerk and raw JWT, plus Redis and SQL TokenStores. - [Authenticate uploads with Better Auth](https://useupup.com/docs/guides/auth/better-auth/): Wire a Better Auth session into @useupup/server so every upload is scoped to the signed-in user — the getUserId hook, gated sessions, uid binding. - [Authenticate uploads with Clerk](https://useupup.com/docs/guides/auth/clerk/): Scope S3 uploads to the Clerk user — authenticateRequest inside @useupup/server's getUserId hook, why authorizedParties is mandatory, and multipart uid binding. - [Authenticate uploads with a custom JWT](https://useupup.com/docs/guides/auth/custom-jwt/): Verify your own JWT inside @useupup/server's getUserId hook with jose — bearer or cookie, shared secrets, and remote JWKS for asymmetric tokens. - [Authenticate uploads with NextAuth (Auth.js v5)](https://useupup.com/docs/guides/auth/next-auth/): Scope @useupup/server uploads to the NextAuth session — the auth() helper in the App Router, getToken outside a request, and the missing session.user.id. - [Error Monitoring](https://useupup.com/docs/guides/error-monitoring/): Wire upup's structured errors — upload-error events, UpupError codes, and the server onError seam — into your error tracker. - [File Processing](https://useupup.com/docs/guides/file-processing/): upup client-side pipeline — image compression, HEIC to JPEG conversion, EXIF stripping, thumbnails, SHA-256 checksums, Web Worker offload and custom steps. - [Headless Usage](https://useupup.com/docs/guides/headless/): Build your own uploader UI on the upup engine — the useUpupUpload React hook, driving UpupCore directly, and the webWorker, HEIC and resumable opt-ins. - [Guides](https://useupup.com/docs/guides/): Every upup guide in one place — client vs server mode, server adapters, auth, storage providers, file processing, sources, reliability, theming, and plugins. - [Client Mode vs Server Mode](https://useupup.com/docs/guides/modes/): Choose between client mode (your presign endpoint) and server mode (@useupup/server signs uploads and runs drives) — what runs where and when to pick each. - [Plugins & Extensions](https://useupup.com/docs/guides/plugins/): Enable upup's built-in cloud-drive plugins with the cloudDrives config, compare client- and server-mode drives, and register third-party plugins on UpupCore. - [Client-side image compression before upload](https://useupup.com/docs/guides/processing/compression/): Client side image compression with upup — resize and re-encode images in the browser before upload with quality, maxWidthOrHeight and maxSizeMB options. - [Custom file processing pipeline steps](https://useupup.com/docs/guides/processing/custom-steps/): Write your own upup PipelineStep — the contract, safe UploadFile cloning, registering a custom pipeline, and Web Worker offload with main-thread fallback. - [Convert HEIC to JPEG in the browser](https://useupup.com/docs/guides/processing/heic-conversion/): Convert iPhone HEIC/HEIF photos to JPEG before upload with upup — install the optional libheif decoder, matching rules, and failure behavior. - [Reliability](https://useupup.com/docs/guides/reliability/): How upup survives flaky networks — the per-file retry policy and its backoff math, custom success predicates, upload concurrency, and multipart resume. - [Upload Files to S3 from React with Presigned URLs](https://useupup.com/docs/guides/s3-presigned-url-upload-react/): Upload files to S3 from React with presigned URLs. Sign a PUT with the AWS SDK v3, show upload progress, set bucket CORS and fix 403 errors. - [File upload server with Express and S3](https://useupup.com/docs/guides/server-adapters/express/): Mount @useupup/server on an Express route with createUpupMiddleware — install, config, the express.json() ordering trap, proxy origins, and CORS. - [File upload server with Fastify and S3](https://useupup.com/docs/guides/server-adapters/fastify/): Register @useupup/server as a Fastify plugin with createUpupPlugin — install, the mount-path option, body parsing, trustProxy origins, and CORS. - [Hono file upload server with S3](https://useupup.com/docs/guides/server-adapters/hono/): Hono file upload with @useupup/server — mount createUpupRoutes on the web-native Hono app, with no body parsing, edge-runtime bindings and CORS. - [File upload server with Next.js and S3](https://useupup.com/docs/guides/server-adapters/nextjs/): Mount @useupup/server in Next.js — App Router via createUpupNextHandler, Pages Router via createUpupPagesHandler, plus proxy origins, bodyParser, and CORS. - [Server Auth & Trust Model](https://useupup.com/docs/guides/server-auth/): How @useupup/server authenticates uploads — the mandatory HMAC upload-token secret, the secure-by-default 403 on anonymous uploads, and per-user scoping. - [Secure S3 File Upload Server for Node.js and Next.js](https://useupup.com/docs/guides/server-mode-setup/): Set up a secure S3 file upload server for Node.js with Express, Fastify, Hono or Next.js. It signs each upload; the browser PUTs the file to the bucket. - [Upload Sources](https://useupup.com/docs/guides/sources/): Every input the uploader ships — local files, drag and drop, paste, folder upload, camera, microphone, screen capture, URL import, and cloud drives. - [Storage Providers](https://useupup.com/docs/guides/storage-providers/): Connect upup to any S3-compatible storage — AWS S3, Cloudflare R2, MinIO, Backblaze B2, DigitalOcean Spaces, Wasabi and more, with a guide per provider. - [Upload files to Amazon S3](https://useupup.com/docs/guides/storage/aws-s3/): Upload files to AWS S3 from React, Vue, Svelte, Angular, or plain JS with upup — bucket setup, IAM policy, CORS, and a copy-paste createUpupHandler config. - [Upload Files to Azure Blob Storage from the Browser](https://useupup.com/docs/guides/storage/azure-blob/): Upload files and images to Azure Blob Storage from the browser with JavaScript and a SAS URL. Test the SAS with the Azure CLI, set CORS, fix 403s. - [Upload files to Backblaze B2](https://useupup.com/docs/guides/storage/backblaze-b2/): Upload files to Backblaze B2 from React, Vue, Svelte, or plain JS with upup — application keys, the region-scoped S3 endpoint, CORS, and a copy-paste config. - [Upload Files to Cloudflare R2 from the Browser](https://useupup.com/docs/guides/storage/cloudflare-r2/): Upload files to Cloudflare R2 with upup — the account-scoped endpoint, region auto, API tokens, CORS, and a copy-paste React, Vue or plain JS config. - [Upload Files to DigitalOcean Spaces from the Browser](https://useupup.com/docs/guides/storage/digitalocean-spaces/): Upload files to DigitalOcean Spaces from the browser with upup. Covers access keys, the regional endpoint, CORS, multipart uploads, the CDN and 403 errors. - [Storage provider guides](https://useupup.com/docs/guides/storage/): Upload files from the browser to AWS S3, Cloudflare R2, Backblaze B2, DigitalOcean Spaces, MinIO, Azure Blob, or any S3-compatible store with upup. - [Upload Files to MinIO from the Browser](https://useupup.com/docs/guides/storage/minio/): Upload files to a self-hosted MinIO server with upup — Docker setup, path-style addressing, CORS, and a copy-paste React, Vue, Svelte or plain JS config. - [Upload files to any S3-compatible storage](https://useupup.com/docs/guides/storage/s3-compatible/): Upload files to Wasabi, Google Cloud Storage, Supabase, Hetzner, Scaleway, Storj, and any other S3-compatible store from React, Vue, or plain JS with upup. - [Theming](https://useupup.com/docs/guides/theming/): Style the upup uploader with the theme prop — light, dark and system modes, design tokens as CSS variables, slot class overrides, and data-upup-slot hooks. - [Write a custom upup plugin](https://useupup.com/docs/guides/writing-plugins/): Build a custom upload-source plugin for upup — the UpupPlugin contract, namespaced events, registering with core.use(), and subclassing PopupOAuthPlugin. - [File Uploader Documentation](https://useupup.com/docs/): Docs for upup, the free and open-source file uploader with native UI for React, Vue, Svelte, Angular, Vanilla JS and Preact, plus an optional server mode. - [Localization (i18n)](https://useupup.com/docs/localization/): upup ships nine ICU locale bundles from @useupup/core/i18n — set the locale on any framework uploader, override message keys, and get RTL and plurals. - [Migrating from v1 to v3](https://useupup.com/docs/migration/v1-to-v3/): Upgrade from upup v1 (upup-react-file-uploader) to v3 — the rename to @useupup/react, the v1 to v3 prop map, the error taxonomy, and client vs server mode. - [Angular Quickstart](https://useupup.com/docs/quickstarts/angular/): Add a file uploader to an Angular 19–22 app with @useupup/angular — a standalone component, drag and drop, cloud drives, camera, and resumable uploads. - [Framework quickstarts](https://useupup.com/docs/quickstarts/): Add the upup file uploader to React, Vue, Svelte, Angular, Vanilla JS, Preact, or Next.js — one install per framework and the same drag-and-drop UI. - [Next.js Quickstart](https://useupup.com/docs/quickstarts/next/): Add a file uploader to a Next.js app with @useupup/next — client UI and server handlers in one install, split so the AWS SDK never reaches your bundle. - [Preact Quickstart](https://useupup.com/docs/quickstarts/preact/): Add a file uploader to a Preact app with @useupup/preact — a preact/compat re-export of @useupup/react, drag and drop, cloud drives, and resumable uploads. - [React Quickstart](https://useupup.com/docs/quickstarts/react/): Add a file uploader to a React 19 app with @useupup/react — one npm install, drag and drop, cloud drives, camera, and resumable uploads, no server to run. - [Svelte Quickstart](https://useupup.com/docs/quickstarts/svelte/): Add a file uploader to a Svelte 5 app with @useupup/svelte — one npm install, drag and drop, cloud drives, camera, and resumable uploads to any S3 storage. - [Vanilla JS Quickstart](https://useupup.com/docs/quickstarts/vanilla/): Add a file uploader to any page with @useupup/vanilla — framework-free, drag and drop, cloud drives, camera, and resumable uploads to any S3 storage. - [Vue Quickstart](https://useupup.com/docs/quickstarts/vue/): Add a file uploader to a Vue 3 app with @useupup/vue — one npm install, drag and drop, cloud drives, camera, and resumable uploads to any S3 storage. - [Resumable Uploads — S3 Multipart & tus](https://useupup.com/docs/resumable-uploads/): Resumable file uploads in upup — S3 multipart through @useupup/server or the tus protocol, with part-size rules and what each protocol actually resumes.