Send Encrypted File Sharing
Simple, private file sharing with automatic expiry (Firefox Send fork).
Overview
Send is a privacy-focused file sharing platform that emerged as a continuation of Mozilla's discontinued Firefox Send project. This self-hosted solution provides end-to-end encryption for temporary file sharing, where files are encrypted in the browser before upload and automatically deleted after download or expiration. The encryption keys never touch the server, ensuring true zero-knowledge file sharing.
This deployment combines Send with Redis to create a robust temporary file sharing service. Redis serves as the session store and metadata cache, tracking download counts, expiration times, and file metadata without ever accessing the actual file contents. The in-memory nature of Redis makes it perfect for managing the ephemeral data associated with temporary file shares, while Send handles the encrypted file storage and browser-based encryption/decryption.
This stack is ideal for organizations, developers, or privacy-conscious individuals who need secure file sharing without relying on third-party services. Unlike traditional cloud storage solutions, this setup ensures that sensitive documents, source code, or personal files remain encrypted and automatically purged, making it perfect for temporary collaborations, secure document handoffs, or any scenario where data retention policies require automatic cleanup.
Key Features
- Client-side end-to-end encryption using AES-GCM with keys generated in browser
- Automatic file expiration with configurable time limits up to 7 days
- Download count limits with files auto-deleting after specified downloads
- Maximum 2.5GB file size support for large document and media sharing
- Redis-powered session management and metadata tracking for performance
- Zero-knowledge architecture where server never sees encryption keys
- No user accounts required - anonymous file sharing with secure links
- Mobile-responsive web interface supporting drag-and-drop uploads
Common Use Cases
- 1Secure sharing of confidential business documents with automatic cleanup
- 2Developer collaboration for sharing source code snippets and build artifacts
- 3Healthcare organizations sharing patient records with HIPAA compliance needs
- 4Legal firms exchanging sensitive case documents with time-limited access
- 5Remote teams sharing temporary project files without permanent cloud storage
- 6Educational institutions distributing course materials with controlled access
- 7Personal use for sharing family photos or documents with automatic deletion
Prerequisites
- Minimum 640MB RAM (512MB for Redis, 128MB for Send application)
- Port 1234 available for Send web interface access
- BASE_URL environment variable configured for proper link generation
- Sufficient disk space for uploaded files (considering 2.5GB max per file)
- Modern web browser supporting WebCrypto API for client-side encryption
- Basic understanding of temporary file sharing and link expiration concepts
For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms
docker-compose.yml
docker-compose.yml
1services: 2 send: 3 image: registry.gitlab.com/timvisee/send:latest4 container_name: send5 environment: 6 - REDIS_HOST=redis7 - FILE_DIR=/uploads8 - BASE_URL=${BASE_URL}9 - MAX_FILE_SIZE=268435456010 - MAX_EXPIRE_SECONDS=60480011 - MAX_DOWNLOADS=10012 volumes: 13 - send-uploads:/uploads14 ports: 15 - "1234:1234"16 depends_on: 17 - redis18 networks: 19 - send-network20 restart: unless-stopped2122 redis: 23 image: redis:7-alpine24 container_name: send-redis25 volumes: 26 - redis-data:/data27 networks: 28 - send-network29 restart: unless-stopped3031volumes: 32 send-uploads: 33 redis-data: 3435networks: 36 send-network: 37 driver: bridge.env Template
.env
1# Send2BASE_URL=http://localhost:12343# Max file size: 2.5GB4# Max expiry: 7 daysUsage Notes
- 1Web UI at http://localhost:1234
- 2End-to-end encryption
- 3Set download limits and expiry
- 4Firefox Send fork
- 5No account needed
Individual Services(2 services)
Copy individual services to mix and match with your existing compose files.
send
send:
image: registry.gitlab.com/timvisee/send:latest
container_name: send
environment:
- REDIS_HOST=redis
- FILE_DIR=/uploads
- BASE_URL=${BASE_URL}
- MAX_FILE_SIZE=2684354560
- MAX_EXPIRE_SECONDS=604800
- MAX_DOWNLOADS=100
volumes:
- send-uploads:/uploads
ports:
- "1234:1234"
depends_on:
- redis
networks:
- send-network
restart: unless-stopped
redis
redis:
image: redis:7-alpine
container_name: send-redis
volumes:
- redis-data:/data
networks:
- send-network
restart: unless-stopped
Quick Start
terminal
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 send:5 image: registry.gitlab.com/timvisee/send:latest6 container_name: send7 environment:8 - REDIS_HOST=redis9 - FILE_DIR=/uploads10 - BASE_URL=${BASE_URL}11 - MAX_FILE_SIZE=268435456012 - MAX_EXPIRE_SECONDS=60480013 - MAX_DOWNLOADS=10014 volumes:15 - send-uploads:/uploads16 ports:17 - "1234:1234"18 depends_on:19 - redis20 networks:21 - send-network22 restart: unless-stopped2324 redis:25 image: redis:7-alpine26 container_name: send-redis27 volumes:28 - redis-data:/data29 networks:30 - send-network31 restart: unless-stopped3233volumes:34 send-uploads:35 redis-data:3637networks:38 send-network:39 driver: bridge40EOF4142# 2. Create the .env file43cat > .env << 'EOF'44# Send45BASE_URL=http://localhost:123446# Max file size: 2.5GB47# Max expiry: 7 days48EOF4950# 3. Start the services51docker compose up -d5253# 4. View logs54docker compose logs -fOne-Liner
Run this command to download and set up the recipe in one step:
terminal
1curl -fsSL https://docker.recipes/api/recipes/send-file-sharing/run | bashTroubleshooting
- Upload fails with 'File too large' error: Check MAX_FILE_SIZE environment variable is set to 2684354560 bytes (2.5GB) and ensure sufficient disk space
- Redis connection errors in Send logs: Verify REDIS_HOST environment variable matches the Redis service name and both containers are on the same network
- Generated file links don't work: Ensure BASE_URL environment variable is set correctly to match your domain or IP address
- Files not expiring automatically: Check Redis container has persistent storage mounted and MAX_EXPIRE_SECONDS is properly configured
- Browser shows encryption errors: Verify the client browser supports WebCrypto API and is accessing Send over HTTPS in production
- Container memory issues: Monitor Redis memory usage as it stores all file metadata and increase available RAM if handling many concurrent files
Community Notes
Loading...
Loading notes...
Download Recipe Kit
Get all files in a ready-to-deploy package
Includes docker-compose.yml, .env template, README, and license
Components
sendredis
Tags
#file-sharing#send#encryption#privacy#expiry
Category
Productivity & CollaborationAd Space
Shortcuts: C CopyF FavoriteD Download