A Dev x Pinata hackathon project for secure file sharing via password-protected disposable share links.
"Secure File Transfer" is an open-source, self-hostable file sharing solution that allows users to generate secure, password-protected file share links with customizable expiration dates. This application doesn't require any logins or signups - it's designed for simple, secure file sharing.
This app mainly solves the issue of sharing sensitive information online, without the need of signing up from any 3rd party app. Since this can be self-hosted, you can have full control over your files.
- Upload a file you want to share
- Set a passphrase and expiration, then click Create Share Link
- Send the share link to your intended recipient/s. It's recommended to share the passphrase separately.
- Generate secure, password-protected file share links
- Set custom expiration dates for shared links
- No user accounts or logins required
- Files stored in Pinata cloud
- Self-hostable
- Free and open-source
- BullMQ with Redis for handling background tasks (files and records deletion on expiration)
- Backend: Express.js with TypeScript
- Frontend: EJS templates, Bulma CSS framework, Alpine.js
- Database: SQLite with Prisma ORM (easily replaceable if needed)
- File Storage: Pinata cloud
- Node.js and npm
- Docker and Docker Compose (optional, for containerized deployment)
- Pinata account for file storage
- Fork the project and clone it locally
- Sign up for a Pinata account
- Obtain your
PINATA_JWTandPINATA_GATEWAYcredentials - Set up your environment variables:
PINATA_JWTPINATA_GATEWAYREDIS_URL(Note: Redis is used by BullMQ for background tasks - file deletion on expiration jobs)
For development with hot reloading:
docker compose watch
The application can be run as a single Docker container or via Docker Compose.
Single container:
docker build -t secure-file-transfer .
docker run --env-file ./.env --name secure-file-transfer -p 3000:3000 secure-file-transfer
Docker Compose (includes Redis):
docker-compose up
This application can be self-hosted (like in VPS machines).
To deploy on Fly.io:
- Remove the existing
fly.tomlfile - Generate a new
fly.tomlfile using the Fly.io CLI - Follow Fly.io's deployment instructions
MIT License
- This project was created as part of the Dev and Pinata hackathon
- Thanks to Pinata for providing the cloud storage solution