Read and write objects on S3 or any S3-compatible store — MinIO, R2, Tigris — from any Windmill script, flow or app.
Set up in 3 steps
Collect the bucket details
You need the bucket name, its region, the endpoint that serves it — s3.eu-west-3.amazonaws.com for AWS, your own host for MinIO or R2 — and an access key and secret allowed to reach it.
Add the resource in Windmill
Open Resources, add a resource of type s3, and fill the fields. Turn pathStyle on for MinIO and most self-hosted stores, off for AWS.
Run your first script
Fork any script below and list the bucket to confirm the credentials before writing anything.
Scripts
Building blocks, if none of the projects above fit. Fork one, run it, or call it as a step inside your own flow.
Stream file to S3 from URL
Get recently updated objects
Put a list of objects in a bucket
Get object in bucket as text
Upload text in bucket
List objects in a bucket
Create a file in S3 (Bun)
Generate signed URL
Read a file from S3 within a script (Bun)
Read a file from S3 within a script (Deno)
Read a file from S3 within a script (Python)
Create a file in S3 (Deno)
Create a file in S3 (Python)
Resource type
s3 — the shape of the credential every script on this page expects.
| Field | Type | Required | What it is |
|---|---|---|---|
| endPoint | string | No | The full URL of the S3 endpoint (e.g. https://s3.us-east-1.amazonaws.com) |
| region | string | No | AWS region (e.g. us-east-1). Used to auto-generate the S3 endpoint URL when endPoint is not specified |
| pathStyle | boolean | No | <host>/<bucket>/<path> instead of <bucket>.<host>/<path> |
| bucket | string | Yes | |
| accessKey | string | No | |
| secretKey | string | No | |
| port | number | No | Deprecated: pass in a complete URL to `endPoint` instead, including a port number if needed |
| useSSL | boolean | No | Deprecated: pass in a complete URL to `endPoint` instead, including 'https://' or 'http://' |
All resource types
Questions
Can I connect without an access key?
On AWS, yes: the s3_aws_oidc resource takes a role to assume instead of a key pair, and workers exchange their own identity for short-lived credentials.
Is this the same as workspace object storage?
No. This resource is for scripts that address a bucket themselves. Workspace object storage is a separate, Enterprise layer that lets scripts pass files around without ever seeing the credentials.
Are my keys stored on the hub?
Never. They live only in your own Windmill workspace, encrypted at rest.