Nexo - Self-hosted S3 storage that streams video and resizes images

by•
Self-hosted, S3-compatible object storage in one Go binary. Upload an MP4 and it streams as HLS at once; upload a photo and one URL serves AVIF, WebP or JPEG at the right size. Open source, one drive to a cluster.

Add a comment

Replies

Best
Maker
📌

Hi Product Hunt! 👋 I’m Paolo, the maker of Nexo.

Why I built it. Every project I worked on needed the same three things: somewhere S3-compatible to put files, a way to stream the videos, and images resized for every screen. That usually means object storage + a transcoding service + an image CDN, three bills and three things to keep running. Nexo puts them in one self-hosted binary.

What it does

  • 🪣 Real S3. It passes all 451 applicable Ceph s3-tests and all 638 MinIO mint tests, so aws, rclone, your SDKs and backup tools just work.

  • 🎬 Video that plays on upload. An MP4 streams as HLS immediately. Tick “HLS” when you create a bucket and a worker adds every quality from 240p to 4K, a poster and seek-bar thumbnails. There’s no ffmpeg, and it uses every core (1080p → 3 renditions at 3.2× real time).

  • 🖼️ One URL, every format. Upload a photo and the same URL returns AVIF, WebP or JPEG depending on the browser, at the width you ask for with ?w=. It works on your own domain with a built-in edge cache.

  • 🛡️ Built not to lose data. Erasure coding, bitrot checks, automatic healing, versioning, object lock and encryption (SSE-S3/KMS/C).

  • 🖥️ Batteries included. A web console, a CLI, Prometheus + Grafana, Docker, Helm, deb/rpm, and binaries for Linux, macOS and Windows.

Coming from MinIO? There’s a step-by-step migration guide, and nexoctl diff verifies every object and version afterwards.

Try it in 30 seconds:

docker run -p 9000:9000 -p 9001:9001 \
  -e NEXO_ROOT_USER=admin -e NEXO_ROOT_PASSWORD=supersecret \
  paolor/nexo server /data

Then open .

It’s open source (AGPL-3.0). I’d love your feedback, especially on what’s missing for your use case. I’ll be here all day answering questions! 🙏

GitHub: · Docs: