Changelog
Newest first. Notable updates to the public app and self-hosted project. Edit the narrative in content/changelog.md.
Latest
v3 (current)
- Security hardening pass - Added signed one-time finalize tokens for upload completion, stricter file API response normalization, hardened cron auth (POST-only, fail-closed unless explicitly allowed in local dev), global security headers (CSP/HSTS/nosniff/frame/referrer/permissions), safer external URL validation, and DB integrity constraints in migration
005. E2EE key-fragment leak risks were reduced further by avoiding automatic secret-link clipboard copy and preserving key-safety warnings in UI. - Full E2EE mode - Added a true end-to-end encrypted workflow where the browser manages the decryption key locally and the server stores only ciphertext and metadata. The secret link is the only way to unlock a file, so keep it safe.
Prior update
v2
- Direct R2 uploads (Vercel-safe) -
POST /api/files/upload/prepareissues a per-file key and presignedPUTURL; the browser encrypts (AES-256-GCM, same format as before) and uploads ciphertext to R2, thenPOST /api/files/upload/completefinalizes metadata. Avoids Vercel’s 4.5 MB function body limit. DB adds optionalwrapped_file_key(migration003); legacy rows still decrypt with the global key only. Configure R2 CORS for your app origin (see README). - Open Graph & link previews - Default site title, description, and
banner.pngfor embeds (e.g. Discord) via root metadata;og:imageresolves withmetadataBase/ public URL in production. - Terms of Service & AUP -
/tosand/aupwith the same server-rendered layout as the rest of the app; on wide screens, an On this page table of contents stays sticky and tracks the section in view. - Footer - Links to Terms of Service and Acceptable use under the storage disclaimer.
- Nav - GitHub icon pointing at the public repo in the top bar (next to Donate and Discord).
- Upload size - 500 MiB default, documented as optional
MAX_FILE_SIZE_BYTESin.env.example; the home blurb, API limit, and upload form use the same value, with a toast if a file is over the limit before upload starts.
v1.5
- Upload API shape -Successful
POST /api/files/uploadreturns onlyfileId; the app builds the share link from the page origin. File metadata at?meta=1no longer repeats derived share URLs in JSON. - More options (modal) -Expiry, max downloads, and optional access password are configured in a dialog instead of an inline block. Expires is one menu: presets (no expiry through 30 days) plus Choose your own for a custom amount in minutes, hours, or days.
- Access password (optional) -Set under More options; show/hide (eye) and copy on the field. Recipients need the password to download; it is stored as a bcrypt hash. The server still holds
ENCRYPTION_KEYfor at-rest storage—an extra gate on the link, not end-to-end zero-knowledge file encryption. - Changelog -Changelog page (layout aligned with the blog) with Latest / Prior / Initial in
content/changelog.md; Changelog in the header next to Discord, optional bug report, and theme. - UI & theming -Dialogs (More options, bug report) use the same zinc palette and borders as the main shell; overlays and close controls match. Selects and dropdowns were restyled (focus, shadow, stacking over modals) for upload and the bug form.
- Branding & nav -The home header no longer shows an icon above the storra.host title; Donate uses the Ko-fi-style mark instead of a Ko-fi-style mark instead of a generic heart.
- README -Shorter and plainer, with database steps pointing at the
supabase/migrationsfolder in name order.
Initial release
v1
- Encrypted file sharing -Upload from the browser; the server encrypts with AES-256-GCM and stores only ciphertext in Cloudflare R2, with file metadata in Supabase Postgres.
- Share links -Short links (
/?f=…) with no decryption keys in the URL; optional expiry and download limits. - Blog -How Storra works article; light/dark theme; optional announcement strip; community links (e.g. Discord, Ko-fi) and optional bug reports via Discord webhook.
- Self-hosting -MIT open source, env-based configuration, SQL migrations, optional cron cleanup for expired files.