File Drop

Private, decentralized file sharing for Nostr and the web.

One all-in-one storage backend you can drop into anything: your own apps, screenshot tools, pastebin-style pastes, Nostr clients, Reddit posts, forum embeds—anything that needs durable, anonymous file hosting. One File Drop to rule them all and keep you anonymous.

filedrop

Why File Drop

  • Anonymous uploads: no accounts, no tracking, no logs
  • Resilient by design: served from IPFS; your node neednt be online 24/7
  • Nostr-optimized: you are your own media host (no domain or servers)
  • Self-healing: content repopulates across IPFS when your node comes online

Supported Platforms

FileDrop is integrated into the following platforms:

Platform Description Link
0xchat Private, decentralized Nostr chat 0xchat.com

Quick Start

Install on Umbrel

Minimal setup:

docker run -d --restart unless-stopped \
  -p 3232:3232 \
  -p 4001:4001/tcp \
  -p 4001:4001/udp \
  -e STORAGE_MAX=200GB \
  ghcr.io/besoeasy/file-drop:main

Open http://localhost:3232 after starting.

For full Docker configuration options and Docker Compose setup, see docker.md.

How It Works

  1. Upload Files stream to your local IPFS node (unpinned)
  2. Propagate Content spreads via IPFS as peers request it
  3. Repopulate If garbage collected, your node repopulates content when it comes online
  4. Optional Nostr mode Automatically fetches your notes, extracts IPFS CIDs, and pins them

Nostr Mode (Optional)

  • Supports multiple NPUBs (comma-separated)
  • Fetches all posts from each configured NPUB (with pagination) and filters out expired notes
  • Extracts IPFS CIDs and pins them locally (permanent)
  • Caches media from people you follow for redundancy (ephemeral, garbage collected)
  • Runs automatically every 3 hours; view status in the admin

API Endpoints

File Upload

Upload a file directly from your local system:

curl -X POST -F "file=@yourfile.pdf" http://localhost:3232/upload

Response:

{
  "status": "success",
  "cid": "QmX...",
  "url": "https://dweb.link/ipfs/QmX...?filename=yourfile.pdf",
  "size": 12345,
  "type": "application/pdf",
  "filename": "yourfile.pdf"
}

Remote URL Upload

Download and upload content from any URL to IPFS:

curl -X POST http://localhost:3232/remoteupload \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/image.png"}'

Response:

{
  "status": "success",
  "cid": "QmX...",
  "url": "https://dweb.link/ipfs/QmX...",
  "filename": "image.png",
  "size": 12345,
  "type": "image/png",
  "sourceUrl": "https://example.com/image.png",
  "timing": {
    "download_ms": 1234,
    "upload_ms": 5678,
    "total_ms": 6912
  },
  "timestamp": "2026-01-07T03:18:00.000Z"
}
Description
A decentralized, open-source solution for sharing images, videos, and any other files.
Readme 1.3 MiB
Languages
JavaScript 52.5%
HTML 46.3%
Dockerfile 1.2%