Storage
Configure S3 (or compatible) for media uploads and static asset hosting. Required for HTML import.
Autonnel requires an S3-compatible object store for media uploads, static asset hosting, and HTML page import. Without storage configured, any feature that writes a file will throw a StorageNotConfiguredError and a banner will appear at the top of the admin UI.
Supported providers
Any S3-compatible service works:
- AWS S3
- Cloudflare R2 (zero egress fees — recommended for most deployments)
- Wasabi
- Backblaze B2
- MinIO (self-hosted)
Configuring storage
Go to Settings → Storage and fill in the form fields. The values are saved under the storage.s3 configuration key for your deployment.
The full config shape is:
{
"endpoint": "https://...",
"region": "auto",
"bucket": "my-autonnel-bucket",
"accessKeyId": "...",
"secretAccessKey": "...",
"keyPrefix": "optional/prefix"
}
| Field | Required | Description |
|---|---|---|
endpoint | Yes | The S3 API endpoint URL for your provider |
region | No | AWS region string. Use auto for Cloudflare R2 and most non-AWS providers |
bucket | Yes | Name of the bucket |
accessKeyId | Yes | Access key ID from your provider |
secretAccessKey | Yes | Secret access key. Stored encrypted in the database |
keyPrefix | No | Optional path prefix prepended to every object key |
After saving, click Test connection. Autonnel writes a small verification file (.autonnel-verify-<timestamp>) and immediately deletes it to confirm read/write access.
Provider-specific endpoint URLs
Cloudflare R2:
https://<account-id>.r2.cloudflarestorage.com
AWS S3:
https://s3.<region>.amazonaws.com
Or leave the endpoint field blank for the default AWS SDK endpoint resolution (region must be set).
Wasabi:
https://s3.<region>.wasabisys.com
Backblaze B2:
https://s3.<region>.backblazeb2.com
MinIO (self-hosted):
http://your-minio-host:9000
Static asset domain
The Static Domain field on this page sets the base URL used when generating public-facing URLs for stored objects. Set it to match however your bucket is exposed publicly, either directly (for example a Cloudflare R2 custom domain) or via a CDN (for example a CloudFront distribution).
It lives here rather than under Domains because it describes the bucket, not your funnel hostnames. If you leave it blank, the base URL is derived by prepending static. to the root of your primary domain. See Domains for how the primary domain is chosen.
Key prefix
The keyPrefix field is prepended to every object key before writing to the bucket. For example, with keyPrefix: "deploy-abc", a file uploaded to the uploads folder is stored as deploy-abc/uploads/<uuid>.jpg.
Use keyPrefix when multiple deployments share one bucket. This keeps each deployment’s objects namespaced without requiring separate buckets per deployment.
Single-deployment installations can leave keyPrefix empty.
What storage is used for
Once configured, storage is required by:
- HTML import — when you import a page from a URL in the GrapesJS editor, Autonnel fetches the page and uploads all referenced static assets (images, CSS, JS) to the bucket before saving the page.
- Logo and favicon uploads — the branding image upload controls write to the bucket.
- AI media generation — generated images are stored in the bucket before the object key is saved to the page.
- Puck component image fields — any image picker in the Puck editor uploads the chosen file to the bucket.
env fallback removed
All deployments must configure storage through Settings → Storage. Environment variables are not used for S3 credentials.
If storage is accessed before it is configured, an error is shown and surfaced as a user-visible message.
Caveats
- Bucket must be publicly readable for served media to be accessible to storefront visitors. If your bucket is private, put a CDN (CloudFront, Cloudflare) in front with appropriate cache rules rather than making the bucket itself public.
- Objects are written with
Cache-Control: public, max-age=31536000(one year). If you replace a file, the old cached URL continues serving the old content until the CDN TTL expires. Use versioned keys (the default UUID naming already achieves this) to avoid cache collisions. keyPrefixmust not contain a leading slash. Usedeploy-abc/ordeploy-abc— both are normalized todeploy-abc/internally.- Deleting objects from the bucket is not managed by Autonnel. Re-uploading a file creates a new object; the old object remains in the bucket until you delete it manually.
Related
- Branding — favicon and logo uploads depend on storage
- HTML editor — HTML import uploads static assets to S3
- Configuration — runtime configuration structure