What
dropit is a self-hosted drop for HTML files. Set a token. Drop a file. Get a dedicated subdomain URL. It expires when you say — or never, if you're an admin.
| Format | HTML only — extension, content-type, and markup are all checked |
| Auth | Bearer token — named pairs via UPLOAD_TOKENS |
| TTL | 1h · 6h · 24h · 48h · 7d · forever (admin token required) |
| URLs | Per-page subdomains — abc123.dropit.example.com |
| Max size | 5 MB per file |
| Storage | Local filesystem + SQLite — no cloud dependency |
Web UI
Paste your API token once. dropit validates it against /me and stores it in localStorage. No cookies. The connected username is shown inline.
Drag an HTML file onto the drop zone. Upload starts the moment you release — no button press. Click to browse instead. Non-HTML files are refused before anything is sent.
The returned URL is a dedicated subdomain — origin-isolated, no path collisions, no JS required to view. Permanent until the TTL fires. Recent uploads appear in the history panel.
API
For when the browser isn't the workflow. One endpoint. Full Swagger docs at dropit.patilla.es/docs.
# ?ttl accepts seconds or "forever" curl -s -X POST \ "https://dropit.patilla.es/upload?ttl=86400" \ -H "Authorization: Bearer $DROPIT_TOKEN" \ -F "file=@report.html"
{
"url": "https://abc123.dropit.patilla.es",
"expires_at": "2026-05-29T14:00:00Z"
}
TTL shortcuts: 3600 (1h) · 21600 (6h) · 86400 (24h) · 172800 (48h) · 604800 (7d) · "forever" (admin token required)
Claude Code skill
One command. /dropit resolves files, prompts for TTL,
uploads, and returns the URL — without leaving your terminal.
Self-hosting
Docker image for amd64 and arm64. SQLite, local storage, one process — no external services required. Requires a wildcard DNS record and SSL cert for per-page subdomains.
docker run -d \ -e UPLOAD_TOKENS="alice:her-token,bob:his-token" \ -e BASE_URL="https://dropit.example.com" \ -e CONTENT_DOMAIN="dropit.example.com" \ -v ./data:/app/data \ -p 8000:8000 \ ghcr.io/patillacode/dropit:latest
| Variable | Description | Default |
|---|---|---|
| UPLOAD_TOKENS | name:token pairs, comma-separated — one per user |
required |
| BASE_URL | Your public domain — used in API responses | required |
| CONTENT_DOMAIN | Wildcard subdomain domain — *.content_domain must resolve to your server |
required |
| ADMIN_TOKEN | Enables admin panel and "forever" TTL | optional |
| MAX_UPLOAD_SIZE | Max file size in bytes | 5 242 880 |
| ALLOWED_TTLS | Comma-separated list of valid TTL values | 1h,6h,24h,48h,7d |
| DEFAULT_TTL | Fallback TTL when none is specified | 24h |