MCPcopy Index your code
hub / github.com/RoastSlav/quickdrop

github.com/RoastSlav/quickdrop @v1.5.3

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.5.3 ↗ · + Follow
598 symbols 1,303 edges 56 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

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

Docker (recommended)

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:

  • http://localhost:8080

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

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 you’re 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.

Extension points exported contracts — how you extend this code

ShareTokenRepository (Interface)
(no doc)
src/main/java/org/rostislav/quickdrop/repository/ShareTokenRepository.java
FileRepository (Interface)
(no doc)
src/main/java/org/rostislav/quickdrop/repository/FileRepository.java
ApplicationSettingsRepository (Interface)
(no doc)
src/main/java/org/rostislav/quickdrop/repository/ApplicationSettingsRepository.java
FileHistoryLogRepository (Interface)
(no doc)
src/main/java/org/rostislav/quickdrop/repository/FileHistoryLogRepository.java

Core symbols most depended-on inside this repo

markValidity
called by 18
src/main/resources/static/js/settings.js
toString
called by 17
src/main/java/org/rostislav/quickdrop/entity/FileEntity.java
findByUUID
called by 13
src/main/java/org/rostislav/quickdrop/repository/FileRepository.java
applyState
called by 12
src/main/resources/static/js/upload/controller.js
register
called by 11
src/main/resources/static/js/metadata.js
getFileStoragePath
called by 9
src/main/java/org/rostislav/quickdrop/service/ApplicationSettingsService.java
safeString
called by 9
src/main/java/org/rostislav/quickdrop/util/DataValidator.java
showMessage
called by 7
src/main/resources/static/js/upload/state.js

Shape

Method 431
Function 118
Class 44
Interface 4
Enum 1

Languages

Java80%
TypeScript20%

Modules by API surface

src/main/java/org/rostislav/quickdrop/entity/ApplicationSettingsEntity.java74 symbols
src/main/java/org/rostislav/quickdrop/model/ApplicationSettingsViewModel.java72 symbols
src/main/resources/static/js/fileView.js42 symbols
src/main/java/org/rostislav/quickdrop/service/ApplicationSettingsService.java42 symbols
src/main/java/org/rostislav/quickdrop/service/FileService.java34 symbols
src/main/resources/static/js/settings.js26 symbols
src/main/java/org/rostislav/quickdrop/util/FileUtils.java22 symbols
src/main/java/org/rostislav/quickdrop/service/NotificationService.java21 symbols
src/main/resources/static/js/metadata.js17 symbols
src/main/java/org/rostislav/quickdrop/controller/FileViewController.java16 symbols
src/main/resources/static/js/upload/controller.js14 symbols
src/main/java/org/rostislav/quickdrop/controller/AdminViewController.java14 symbols

For agents

$ claude mcp add quickdrop \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact