Skip to content

Storage

Storage settings live at Admin → Storage. All changes take effect immediately without a server restart.


The per-file size limit that applies to all uploads. Range: 1–100 MB. Default: 5 MB.

Images wider than this value are resized on upload. The resizing happens during the WebP conversion step. Range: 400–4000px. Default: 1200px.

This setting applies to post images and general uploads. Some upload types have fixed maximums regardless of this setting:

Upload typeMax width
Avatars400px (always)
Logos400px (always)
Cover images1920px (always)
Post imagesConfigurable (this setting)

When enabled, Nexus converts uploaded images to WebP format. The original file is kept alongside the WebP version. GIFs are never converted (to preserve animation). SVG files are never converted.

Default: enabled.

The quality level used when encoding WebP images. Range: 50–100. Default: 85. Only shown when Convert to WebP is enabled.


Upload categoryAllowed types
Post images, avatars, coversJPEG, PNG, GIF, WebP
Logo, faviconICO, PNG, SVG, WebP
OG imageJPEG, PNG, WebP

SVG is excluded from post images and avatars because it can carry embedded scripts.


Nexus supports two storage backends: local filesystem (default) and S3-compatible object storage. The backend is configured from Admin → Storage → Object storage.

All uploaded files are stored inside the Docker container’s bind-mounted volume at /opt/nexus-data/uploads on the host. This directory persists across container rebuilds and updates.

uploads/
posts/ post images
avatars/ user profile pictures
covers/ user profile cover images
logos/ site logo, favicon, OG image
webp/ WebP-converted versions
extensions/
<slug>/ files uploaded by each installed extension

When enabled, all new uploads are PUT to an S3-compatible bucket instead of local disk. Existing local uploads are not migrated automatically — only files uploaded after enabling S3 go to the bucket.

To configure, enable Enable S3 / R2 storage and fill in the fields:

FieldNotes
Bucket nameThe name of your S3 or R2 bucket
RegionAWS region (e.g. us-east-1) or auto for Cloudflare R2
Access key IDYour S3 or R2 access key ID
Secret access keyYour S3 or R2 secret access key
Custom endpointFor R2 and S3-compatible services: your account endpoint, e.g. abc123.r2.cloudflarestorage.com. Leave blank for standard AWS S3.
Public URL baseThe public URL used to serve uploaded files. For R2 with a custom domain: https://cdn.example.com. For R2 public buckets: https://pub-abc123.r2.dev. No trailing slash.
  1. In the Cloudflare dashboard, go to R2 → Create bucket
  2. Create an API token with Object Read & Write permissions for the bucket
  3. Copy the Access Key ID and Secret Access Key from the token
  4. The endpoint is your account ID followed by .r2.cloudflarestorage.com
  5. For public access, either connect a custom domain to the bucket or enable the R2.dev public URL
  1. Create an S3 bucket with public read access (or a CloudFront distribution)
  2. Create an IAM user with s3:PutObject, s3:DeleteObject, and s3:GetObject permissions on the bucket
  3. Leave Custom endpoint blank — Nexus derives the AWS endpoint from the region automatically
  4. Set Public URL base to your bucket’s public URL or CloudFront distribution URL

The Storage usage panel at the bottom of Admin → Storage shows a live breakdown of stored files by type — count and total bytes for post images, avatars, logos, and favicons.


The All uploads table at Admin → Storage lists every uploaded file with its type, size, dimensions, uploader, and upload date. You can filter by type and delete individual files. Deleting removes both the original and its WebP version and the database record. Files referenced in existing posts will appear as broken images after deletion.