Repolode
hyphy-void

hyphy-void/Parcel

Self-hosted, end-to-end encrypted temporary file sharing that runs on your own Cloudflare Workers, D1 and R2 account.

Open-source alternative to:WeTransfer

Stars
100
Forks
5
Open issues
0
Last commit
18 days ago

What is it?

Parcel lets you upload a file, get a link, and set when the share expires. Files are encrypted in the sender's browser with a random 256-bit key using AES-256-GCM, uploaded directly to a private R2 bucket, and decrypted in the recipient's browser. The file key and original file name are sealed in an encrypted envelope that the server cannot open.

The app runs on Cloudflare Workers, with D1 storing share state and private R2 holding ciphertext. Shares can have an optional password, an expiry time, and a download limit, and can be revoked at any time. A scheduled task removes expired or exhausted shares and reclaims storage.

Uploads and downloads are chunked and resumable, with 16 MiB encryption chunks and a default 8 GiB per-file limit. Admin login uses a password plus TOTP with recovery codes.

Key features

  • 01Browser-side AES-256-GCM encryption with a per-file random key.
  • 02Direct chunked uploads to private R2 storage with resumable transfers.
  • 03Share links with optional password, expiry time and download limit.
  • 04Revocation of shares and scheduled cleanup of expired files.
  • 05Admin login with password and TOTP, plus recovery codes.

Use cases

  • Sending large files to someone with a link that expires automatically.
  • Running a private file drop on your own Cloudflare account without a third-party file host.
  • Sharing sensitive files where the hosting server should not be able to read contents.

Quick start

  1. 1

    Click the Deploy to Cloudflare button and set Node 24, build command npm run build, deploy command npm run deploy

  2. 2

    Clone the repository

    git clone https://github.com/hyphy-void/Parcel.git
  3. 3

    Enter the project folder

    cd Parcel
  4. 4

    Generate the temporary admin setup token locally

    npm run admin:setup-token

Things to know

  • Requires your own Cloudflare account with Workers, D1 and R2 enabled.
  • Setup needs Node.js 24 and Bash, and involves several manual configuration steps.
  • Recipients need local disk space of about twice the file size to save a decrypted file.
  • Lost file keys or share links cannot be recovered by the server.

In collections

Topics

FAQ

What is Parcel?
Self-hosted, end-to-end encrypted temporary file sharing that runs on your own Cloudflare Workers, D1 and R2 account. Parcel lets you upload a file, get a link, and set when the share expires. Files are encrypted in the sender's browser with a random 256-bit key using AES-256-GCM, uploaded directly to a private R2 bucket, and decrypted in the recipient's browser. The file key and original file name are sealed in an encrypted envelope that the server cannot open.
Is Parcel free to use? What license does it have?
Parcel is open source under the MIT license. Check the license terms before using it in commercial products.
Is Parcel still maintained?
Actively maintained. The last commit to Parcel was on Oct 20, 2026.
What can I use Parcel for?
Sending large files to someone with a link that expires automatically. Running a private file drop on your own Cloudflare account without a third-party file host. Sharing sensitive files where the hosting server should not be able to read contents.
How do I install Parcel?
Click the Deploy to Cloudflare button and set Node 24, build command npm run build, deploy command npm run deploy Clone the repository: git clone https://github.com/hyphy-void/Parcel.git Enter the project folder: cd Parcel Generate the temporary admin setup token locally: npm run admin:setup-token
Where can I get Parcel?
The source code and installation instructions are on GitHub: https://github.com/hyphy-void/Parcel

Summary generated by AI from the project's README. GitHub stats refresh daily.

Related projects