QuickDrop is a self-hosted file sharing app for anonymous uploads with chunked transfers, optional encryption at rest, per-file passwords, share tokens (expiry + download limits), and an admin console for storage/lifetime policies, cleanup schedules, notifications, and privacy controls.
- Screenshots
- Feature highlights
- Technologies
- Getting started
- Persistence (important)
- Updates
- Development builds
- License
- Anonymous uploads with chunked upload support (reliable large-file transfers).
- Folder uploads (directory picker) with preserved structure and manifest handling.
- Configurable maximum file size, storage paths (files/logs), and default max lifetime (e.g. 30 days) with renewals.
- Optional per-file controls (admin-governed):
- Keep indefinitely
- Hide from list (link-only)
- Optional encryption at rest for stored files; per-file passwords supported.
- Built-in previews for images and text files.
- Extended previews for PDF / JSON / CSV (and additional formats).
- Preview controls:
- enable/disable previews
- maximum preview size limit
- Syntax highlighting for code previews (including dark-theme styling).
- Direct links plus token-based share links with:
- expiration date
- download limits
- QR code generation for quick sharing.
- Share tokens are cleaned up when deleting files.
- Privacy options:
- hidden files (link-only)
- disable the public file list entirely
- choose default home page (upload vs. list)
- Whole-app password mode and a separate admin password gate for the admin area.
- Per-file passwords; server-side session tokens for admin/file access.
- CSRF cookie enabled.
- Single-page settings UI; changes apply without restarting the app.
- Dashboard capabilities:
- file list/history
- delete (with confirmation)
- extend lifetime
- visibility toggles
- optional “Admin” button toggle
- Dashboard search + pagination for easier browsing at scale.
- Configurable:
- session timeout
- cleanup cron expression
- feature flags (file list, admin button, encryption, previews, notifications, etc.)
- Cron expression validation with clearer error handling (and next-run visibility when supported).
- Unified file history log for uploads, renewals, downloads (and related actions), including IP + user agent.
- Email and Discord webhook notifications with built-in test actions.
- Optional notification batching (configurable interval) to reduce spam.
- Scheduled cleanup for expired files, missing-file DB rows, expired share tokens, and other maintenance tasks.
- Java 21
- Spring Boot 3.5.x (Spring Web/MVC, Actuator)
- Spring Security (app/admin/password flows, CSRF cookie)
- Spring Data JPA + Hibernate ORM 6.6 (community dialects)
- Spring Cloud Context (refresh scope)
- Flyway (DB migrations)
- SQLite (with SQLite JDBC driver)
- HikariCP (connection pooling)
- Thymeleaf (with Spring Security extras)
- Tailwind CSS + custom JS/CSS assets
- Spring Mail (SMTP notifications)
- Maven
- Docker (deployment)
Pull the image:
docker pull roastslav/quickdrop:latestRun it:
docker run -d --name quickdrop -p 8080:8080 --restart unless-stopped roastslav/quickdrop:latestOpen:
Example stack:
services:
quickdrop:
image: roastslav/quickdrop:latest
container_name: quickdrop
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- ./data/db:/app/db
- ./data/log:/app/log
- ./data/files:/app/filesPrerequisites:
- Java 21+
- Maven
- SQLite
git clone https://github.com/RoastSlav/quickdrop.git
cd quickdrop
mvn -B clean package
java -jar target/quickdrop.jarIf you don’t mount volumes, your database and uploaded files live inside the container and will be lost when you recreate it.
Recommended mounts:
/app/db— SQLite DB and related app data/app/files— uploaded files/app/log— logs (optional but useful)
Typical update flow:
docker stop quickdrop
docker rm quickdrop
docker pull roastslav/quickdrop:latest
docker run -d --name quickdrop -p 8080:8080 --restart unless-stopped -v /path/to/db:/app/db -v /path/to/log:/app/log -v /path/to/files:/app/files roastslav/quickdrop:latestIf you’re using Compose/Portainer: pull the new image and redeploy the stack.
A development build is published to Docker Hub under the develop tag:
docker pull roastslav/quickdrop:develop:developtracks the latest development work and may change frequently.- It can include incomplete features or breaking changes.
- For stable deployments, prefer
:latestor a versioned tag like:v1.5.0.
MIT — see LICENSE.