A minimal file sharing service designed for AI agents. Upload files via API, share them with a link, download from the browser or curl. Files expire automatically after 7 days.
Deployed on Cloudflare Workers with R2 for object storage.
filedrop ships a machine-readable skill definition discoverable via the .well-known/skills/ convention:
pnpx skills add https://your-domain.com/skillUpload:
curl -X POST "https://your-domain.com/files?token=YOUR_TOKEN" \
-F "file=@document.pdf"
# => {"url":"https://your-domain.com/a3xK9f2b","expiresAt":"2026-03-15T12:00:00.000Z"}Download (curl): streams the file directly.
curl -O https://your-domain.com/a3xK9f2bDownload (browser): renders a download page with file info and a download button.
Everything runs on Cloudflare (Workers + R2). Deployment is automated via GitHub Actions.
git clone https://github.com/your-username/filedrop.git
cd filedrop && pnpm installIn the Cloudflare dashboard, go to R2 Object Storage and create a bucket (e.g. filedrop). Optionally add a lifecycle rule to auto-delete objects after 7 days.
Go to My Profile > API Tokens > Create Token. Use the "Edit Cloudflare Workers" template and add R2 read/write permissions.
In your repo, go to Settings > Secrets and variables > Actions and add:
Secrets:
| Secret | Value |
|---|---|
CLOUDFLARE_API_TOKEN |
The API token from step 3 |
NUXT_UPLOAD_TOKEN |
Any string — this is the token callers pass when uploading |
Variables:
| Variable | Value |
|---|---|
CLOUDFLARE_ACCOUNT_ID |
Your account ID (visible on the Cloudflare dashboard overview page) |
APP_NAME |
Worker name, e.g. filedrop |
R2_BUCKET_NAME |
Bucket name from step 2, e.g. filedrop |
git push origin mainGitHub Actions builds the app and deploys it to Cloudflare Workers. Your service will be available at https://<APP_NAME>.<your-subdomain>.workers.dev.