Skip to main content
rockboxd exposes an S3-compatible HTTP API on port 9000, so any tool that speaks S3 — awscli, MinIO Client (mc), rclone, the AWS SDKs, S3-mounted backup tools — can push audio files into your library and remove them again. The library DB stays in sync automatically through the filesystem watcher: every PUT triggers an add, every DELETE triggers a remove. You don’t need to call a separate “rescan” endpoint.

Enable it

In ~/.config/rockbox.org/settings.toml:
The region is fixed to us-east-1 and the bucket is fixed to music — these are not configurable. Clients must sign with region us-east-1 and address objects as s3://music/<key>. If s3_enabled is omitted/false, or either credential is empty, the server doesn’t start (you’ll see a s3: disabled debug log line on startup).

Supported operations

ListObjectsV2 supports prefix, delimiter, and max-keys (capped at 1000). GetObject honours If-Match / If-None-Match against the returned ETag.

Use it with awscli

If you can’t set those env vars (older awscli, locked-down CI), use the raw s3api put-object subcommand instead of s3 cp — it always signs the full body in one shot:

Use it with rclone

rclone defaults to UNSIGNED-PAYLOAD for non-AWS endpoints, so no extra knobs are needed:

Use it with MinIO Client (mc)

Allowed file extensions

Uploads are restricted to recognised audio extensions:
A PUT with any other extension returns 400 Bad Request — InvalidRequest. The list mirrors the library watcher’s AUDIO_EXTENSIONS, so anything the scanner would index is also accepted on upload.

Limitations

  • Single-shot uploads only — no multipart upload, no STREAMING-AWS4-HMAC-SHA256-PAYLOAD. Per-PUT cap is 2 GiB.
  • One fixed bucket (music). Bucket CRUD isn’t supported.
  • Header-form SigV4 only — no presigned URLs, no query-string auth.
  • No ACLs, policies, versioning, lifecycle, tagging, or encryption headers. They’re parsed-and-ignored, not rejected, so existing clients won’t crash.
  • The watcher is the only path that mutates the library DB. Adding a parallel “tell the DB about this S3 op” code path would race with the watcher and double-insert.

How sync works

This means new uploads appear in MPD, Subsonic, GraphQL, gRPC, and the web UI within milliseconds without a manual rescan.

Troubleshooting

When to choose S3 over the alternatives

  • You already have an S3-aware backup pipeline (rclone sync, restic, S3 mounting tools) and want it to write to your Rockbox library.
  • You want to use the AWS SDKs from a language that doesn’t have a Rockbox SDK yet.
  • You want simple, well-documented multi-language tooling that handles retries, multipart-on-large-files (in clients that ask for it), and concurrent uploads out of the box.
For programmatic playback control — playing, queueing, searching — use GraphQL, gRPC, or REST instead.