Build Status MIT License Docker Pulls

QuickDrop

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.


Contents


Screenshots

QuickDrop UI Admin settings Admin analytics

Feature highlights

Uploads & storage

  • 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.

File previews

  • 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).

Sharing & access

  • 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)

Security

  • 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.

Admin & settings

  • 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).

Notifications & logging

  • 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.

Cleanup & maintenance

  • Scheduled cleanup for expired files, missing-file DB rows, expired share tokens, and other maintenance tasks.

Technologies

  • 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)

Getting started

Pull the image:

docker pull roastslav/quickdrop:latest

Run it:

docker run -d --name quickdrop   -p 8080:8080   --restart unless-stopped   roastslav/quickdrop:latest

Open:

Docker Compose / Portainer

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/files

Run without Docker

Prerequisites:

  • Java 21+
  • Maven
  • SQLite
git clone https://github.com/RoastSlav/quickdrop.git
cd quickdrop
mvn -B clean package
java -jar target/quickdrop.jar

Persistence (important)

If you dont 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)

Updates

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:latest

If youre using Compose/Portainer: pull the new image and redeploy the stack.


Development builds

A development build is published to Docker Hub under the develop tag:

docker pull roastslav/quickdrop:develop
  • :develop tracks the latest development work and may change frequently.
  • It can include incomplete features or breaking changes.
  • For stable deployments, prefer :latest or a versioned tag like :v1.5.0.

License

MIT — see LICENSE.

S
Description
QuickDrop is an easy-to-use file sharing application that allows users to upload files without an account, generate download links, and manage file availability, file encryption and optional password protection.
Readme MIT 2 MiB
Languages
Java 40.9%
HTML 34.7%
JavaScript 22.3%
CSS 1.9%
Dockerfile 0.2%