Private by default
Every file lives under its owner's organization, and all access goes through short-lived, permission-checked links.
Your users' files stay private, verified, and off your server.
Users upload files straight to storage, so a big file never ties up your server. Every file is checked against its declared fingerprint before anyone can download it. And deletes that fail show up for a human instead of leaving stray files behind.
Product example
This is the same visual component used by the authenticated app, rendered with deterministic sample data.
Inspect tenant-scoped metadata, classification, download, and durable deletion controls.
Inert sample data · no network access
Preview ready
Highlights
Every file lives under its owner's organization, and all access goes through short-lived, permission-checked links.
After upload, the server compares the stored file's size and fingerprint to what was declared. Mismatches get quarantined.
Deleting runs as a retried background job. If the provider keeps refusing, the file is flagged as failed instead of quietly lingering.
Without a shared foundation, every team rebuilds these edge cases — differently.
Streaming big files through your app server burns memory until requests time out. But letting browsers write straight to a bucket usually skips your permission checks. Here you get both: direct upload, server-approved first.
An upload gets cut off halfway, or someone swaps the bytes after declaring them. Without a settlement step, that broken file goes live. Here a mismatch means quarantine, never availability.
A fire-and-forget delete fails silently. Months later you're paying to store files nobody can see. Worse: files marked deleted still exist, which is a compliance problem. Failed deletes here surface for an operator.
The mechanism end to end, as implemented in the repository.
Ask for an upload link
The server checks the user's role plus the file's name, type, size, and fingerprint, then returns a signed link that works for 10 minutes.
The browser uploads directly
The file goes straight from the browser to the storage provider, with progress reporting. Your server never touches the bytes.
The server double-checks
After upload, the server asks the provider for the file's real size and fingerprint. A match makes it available; a mismatch gets quarantined.
Deletes are jobs, not wishes
Delete hides the file immediately, then a background job removes the bytes with retries. Stubborn failures get flagged so an operator can act.
Engineering guarantees
The included certification proof runs against a disposable local storage provider, not a hosted one. This feature stays switched off behind a gate until you certify it against the storage you'll actually run in production.
The boundary above is code, not a claim. These files carry the contract:
src/features/storage/server.tssrc/features/storage/jobs.tssrc/features/storage/browser-upload.ts.resource-certifications/storage.jsonThese capabilities share contracts and boundaries with this one.
The docs describe the same contracts this page demonstrates.