Skip to content

greirson/DumbDrop

 
 

Repository files navigation

Dumb Drop

A stupid simple file upload application that provides a clean, modern interface for dragging and dropping files. Built with Node.js and vanilla JavaScript.

image

No auth (unless you want it now!), no storage, no nothing. Just a simple file uploader to drop dumb files into a dumb folder.

Features

  • Drag and drop file uploads
  • Multiple file selection
  • Clean, responsive UI
  • File size display
  • Docker support
  • Dark Mode toggle
  • Configurable file size limits
  • Drag and Drop Directory Support (Maintains file structure in upload)
  • Optional PIN protection (4-10 digits) with secure validation
  • Configurable notifications via Apprise
  • Custom notification messages with filename templating

Environment Variables

Variable Description Default Required
PORT Server port 3000 No
MAX_FILE_SIZE Maximum file size in MB 1024 No
DUMBDROP_PIN PIN protection (4-10 digits) None No
DUMBDROP_TITLE Site title displayed in header DumbDrop No
APPRISE_URL Apprise URL for notifications None No
APPRISE_MESSAGE Notification message template "File uploaded: {filename}" No

Security Features

  • Variable-length PIN support (4-10 digits)
  • Constant-time PIN comparison to prevent timing attacks
  • Automatic input sanitization
  • Secure PIN validation middleware
  • No PIN storage in browser (memory only)

Notification Support

  • Integration with Apprise for flexible notifications
  • Support for all Apprise notification services
  • Customizable notification messages with filename templating
  • Optional - disabled if no APPRISE_URL is set

Future Features

  • Camera Upload for Mobile
  • Enhanced Progress Features (upload speed display, time remaining estimation)

Quick Start

Running Locally

  1. Install dependencies:
npm install
  1. Set environment variables in .env:
PORT=3000                  # Port to run the server on
MAX_FILE_SIZE=1024        # Maximum file size in MB (default: 1024 MB / 1 GB)
DUMBDROP_PIN=123456       # Optional PIN protection (4-10 digits, leave empty to disable)
  1. Start the server:
npm start

Running with Docker

Pull from Docker Hub

# Pull the image
docker pull dumbwareio/dumbdrop:latest

# Run the container
# For Linux/Mac:
docker run -p 3000:3000 -v $(pwd)/local_uploads:/app/uploads -e DUMBDROP_PIN=123456 dumbwareio/dumbdrop:latest

# For Windows PowerShell:
docker run -p 3000:3000 -v "${PWD}\local_uploads:/app/uploads" -e DUMBDROP_PIN=123456 dumbwareio/dumbdrop:latest

Docker Compose

name: Dumb Drop
services:
    dumbdrop:
        ports:
            - 3000:3000
        volumes:
            - $(pwd)/local_uploads:/app/uploads
        environment:
            - DUMBDROP_PIN=123456
            # - APPRISE_URL=          # i.e. tgram://bottoken/ChatID
            # - APPRISE_MESSAGE= 
        image: dumbwareio/dumbdrop:latest

Build Locally

  1. Build the Docker image:
docker build -t dumbdrop .
  1. Run the container:
# For Linux/Mac:
docker run -p 3000:3000 -v $(pwd)/local_uploads:/app/uploads -e DUMBDROP_PIN=123456 dumbdrop

# For Windows PowerShell:
docker run -p 3000:3000 -v "${PWD}\local_uploads:/app/uploads" -e DUMBDROP_PIN=123456 dumbdrop

Usage

  1. Open your browser and navigate to http://localhost:3000 (unless another domain has been setup)
  2. If PIN protection is enabled, enter the 4-10 digit PIN
  3. Drag and drop files into the upload area or click "Browse Files"
  4. Select one or multiple files
  5. Click "Upload Files"
  6. Files will be saved to:
    • Local development: ./uploads directory
    • Docker/Unraid: The directory you mapped to /app/uploads in the container

Technical Details

  • Backend: Node.js with Express
  • Frontend: Vanilla JavaScript with modern drag-and-drop API
  • File handling: Chunked file uploads with configurable size limits
  • Security: Optional PIN protection for uploads
  • Containerization: Docker with automated builds via GitHub Actions

About

dumb file dropper

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • HTML 57.7%
  • JavaScript 26.2%
  • CSS 15.0%
  • Dockerfile 1.1%