Skip to content

Deploying Send

Introduction

Send is a self-hosted, encrypted file sharing service that allows you to share files securely with end-to-end encryption. Originally developed by Mozilla as Firefox Send, the project was discontinued but lives on through community forks. Send enables users to upload files and receive a unique link that can be shared with anyone, with the files automatically deleted after a specified time or number of downloads.

Built with Node.js on the backend and a modern web frontend, Send provides a simple drag-and-drop interface for sharing files without requiring recipients to create accounts. All encryption happens client-side in the browser, meaning the server never has access to unencrypted file contents.

Key highlights of Send:

  • End-to-End Encryption: Files are encrypted in the browser before upload
  • Automatic Expiration: Files automatically delete after time limit or download count
  • Password Protection: Add an additional layer of security with passwords
  • No Account Required: Recipients can download without creating accounts
  • Large File Support: Upload files up to configurable size limits
  • Drag-and-Drop Interface: Simple, intuitive file uploading
  • Download Limits: Set maximum number of downloads per link
  • No Tracking: Privacy-focused with no analytics or tracking
  • 100% Open Source: Multiple community forks available

This guide walks through deploying Send on Klutch.sh using Docker, configuring file limits, and providing secure file sharing for your users.

Why Deploy Send on Klutch.sh

Deploying Send on Klutch.sh provides several advantages:

Simplified Deployment: Klutch.sh automatically builds your Send configuration without complex Node.js setup.

Persistent Storage: Attach persistent volumes for file storage that survives restarts.

HTTPS by Default: Klutch.sh provides automatic SSL certificates, essential for secure end-to-end encryption.

Custom Domains: Use your own domain for branded, trustworthy file sharing links.

Always-On Availability: Your file sharing service remains accessible 24/7.

Prerequisites

Before deploying Send on Klutch.sh, ensure you have:

  • A Klutch.sh account
  • A GitHub account with a repository for your Send configuration
  • Basic familiarity with Docker and containerization concepts
  • A Redis instance for session management (optional but recommended)

Preparing Your Repository

Create a GitHub repository with your Send configuration.

Repository Structure

send-deploy/
├── Dockerfile
└── .dockerignore

Creating the Dockerfile

Create a Dockerfile in the root of your repository using a community fork:

FROM registry.gitlab.com/timvisee/send:latest
# Environment variables
ENV BASE_URL=${BASE_URL}
ENV DETECT_BASE_URL=true
ENV FILE_DIR=/uploads
# File limits
ENV MAX_FILE_SIZE=${MAX_FILE_SIZE:-2684354560}
ENV MAX_FILES_PER_ARCHIVE=${MAX_FILES_PER_ARCHIVE:-64}
ENV MAX_EXPIRE_SECONDS=${MAX_EXPIRE_SECONDS:-604800}
ENV MAX_DOWNLOADS=${MAX_DOWNLOADS:-100}
ENV DOWNLOAD_COUNTS=${DOWNLOAD_COUNTS:-1,2,5,10,20,50,100}
# Redis configuration (optional)
ENV REDIS_HOST=${REDIS_HOST:-}
ENV REDIS_PORT=${REDIS_PORT:-6379}
# Create upload directory
RUN mkdir -p /uploads
# Expose the web interface port
EXPOSE 1443

Environment Variables Reference

VariableRequiredDefaultDescription
BASE_URLYes-Public URL of your Send instance
MAX_FILE_SIZENo2684354560Maximum file size in bytes (default 2.5 GB)
MAX_FILES_PER_ARCHIVENo64Maximum files per upload
MAX_EXPIRE_SECONDSNo604800Maximum expiration time (default 7 days)
MAX_DOWNLOADSNo100Maximum downloads per link
DOWNLOAD_COUNTSNo1,2,5,10,20,50,100Available download count options
EXPIRE_TIMES_SECONDSNo300,3600,86400,604800Available expiration time options
REDIS_HOSTNo-Redis host for session storage
REDIS_PORTNo6379Redis port
FILE_DIRNo/uploadsDirectory for encrypted file storage

Deploying Send on Klutch.sh

    Push Your Repository to GitHub

    Initialize and push your repository:

    Terminal window
    git init
    git add Dockerfile .dockerignore
    git commit -m "Initial Send deployment configuration"
    git remote add origin https://github.com/yourusername/send-deploy.git
    git push -u origin main

    Create a New Project on Klutch.sh

    Navigate to the Klutch.sh dashboard and create a new project with a descriptive name like “send” or “file-sharing”.

    Create a New App

    Within your project, create a new app. Connect your GitHub account and select your Send repository.

    Configure HTTP Traffic

    In the deployment settings:

    • Select HTTP as the traffic type
    • Set the internal port to 1443

    Set Environment Variables

    Add the following environment variables:

    VariableValue
    BASE_URLhttps://your-app-name.klutch.sh
    MAX_FILE_SIZE2684354560 (2.5 GB)
    MAX_EXPIRE_SECONDS604800 (7 days)

    Attach Persistent Volumes

    Add the following volume:

    Mount PathRecommended SizePurpose
    /uploads50+ GBEncrypted file storage

    Deploy Your Application

    Click Deploy to start the build process.

    Access Send

    Once deployment completes, access your Send instance at https://your-app-name.klutch.sh.

Using Send

Uploading Files

  1. Navigate to your Send instance
  2. Drag and drop files onto the upload area, or click to browse
  3. Configure sharing options:
    • Expiration time
    • Download limit
    • Optional password
  4. Click Upload
  5. Copy the generated link to share

Downloading Files

  1. Open the shared link
  2. Enter password if required
  3. Click Download
  4. Files are decrypted in the browser and saved locally

Security Features

  • Client-Side Encryption: Files are encrypted using AES-GCM before upload
  • Key in URL Fragment: Decryption key is part of the URL fragment (never sent to server)
  • Zero Knowledge: Server only stores encrypted blobs
  • Automatic Deletion: Files are deleted after expiration or download limit

Advanced Configuration

Custom Expiration Options

Set custom expiration time options (in seconds):

EXPIRE_TIMES_SECONDS=300,3600,86400,604800,2592000

This provides options for 5 minutes, 1 hour, 1 day, 7 days, and 30 days.

Custom Download Limits

Set custom download count options:

DOWNLOAD_COUNTS=1,2,5,10,25,50,100,200

Branding

Some forks support custom branding through environment variables or mounted configuration files. Check your chosen fork’s documentation for options.

Troubleshooting

Upload Fails

Symptoms: File upload fails or times out.

Solutions:

  • Check file size against MAX_FILE_SIZE limit
  • Verify persistent storage has sufficient space
  • Check browser console for JavaScript errors

Symptoms: Share link returns an error.

Solutions:

  • Verify the file hasn’t expired or reached download limit
  • Check that BASE_URL matches your actual deployment URL
  • Ensure the link wasn’t truncated when sharing

Download Decryption Error

Symptoms: Download fails with decryption error.

Solutions:

  • Ensure the complete URL including the fragment (#) was copied
  • Try downloading in a different browser
  • Check that the file wasn’t corrupted during upload

Additional Resources

Conclusion

Deploying Send on Klutch.sh gives you a private, encrypted file sharing service that respects user privacy. With end-to-end encryption, automatic expiration, and no account requirements for recipients, Send provides a secure alternative to commercial file sharing services while keeping all data under your control.