Skip to content

file-vault

End-to-end encrypted file sharing with expiring, limited-use links. You host it on Google Cloud, and the server can't read your files.

Encrypted in the browser

Files and their names are encrypted with AES-256-GCM before upload. The server and the bucket only store ciphertext. The key is in the URL fragment, which browsers don’t send to servers.

Expiring, limited-use links

Each download link has its own expiry (1 hour to 7 days) and use count (1 to 100). Shares are deleted after 7 days.

Link previews don't count

Opening a link only checks it. A download is counted when the recipient clicks Download, so Slack, Outlook or iMessage previews don’t use up a one-time link.

No accounts

Links are the credentials. Tokens are random 256-bit values, stored as HMAC hashes, and never appear in a URL path, so request logs can’t leak them.

One small service

A single Go binary serves the UI and the API on Cloud Run. Uploads and downloads go directly between the browser and Cloud Storage.

Deployed by GitHub Actions

Terraform for the infrastructure, Workload Identity Federation for CI, no keys. Nothing deployment-specific lives in the repository.

Upload page: drop zone, link settings, and the Encrypt and upload button.

Pick a file and the link settings. The browser encrypts the file before anything leaves it.

Architecture: the browser encrypts and talks to one Cloud Run service; ciphertext is transferred directly between the browser and Cloud Storage.