About TinyShare
A browser-only file encryption tool. This page lists every planned feature and its real status today.
Why browser-only
Most file-sharing services ask you to trust their servers with your files. TinyShare takes the opposite approach: everything happens on your device, and you decide how the encrypted package travels. The trade-off is that a static website cannot host files, enforce expiry or count downloads, so TinyShare does not claim to. See the security model for details.
TinyShare is free and has no accounts. It is funded by its owner; if advertising is ever added it will be limited to informational pages and kept out of the encryption and decryption tools.
Feature status
Every requirement from the product specification, with its real status in this build. R1 is the launch scope; R2 and R3 are later phases; X marks things excluded on purpose.
| ID | Phase | Feature | Status | Notes |
|---|---|---|---|---|
| TS-001 | R1 | Select multiple local files | Done | Names, sizes and types listed before anything happens. Nothing is uploaded. |
| TS-002 | R1 | Package manifest | Done | Version, file IDs, names, sizes, type hints and SHA-256 stored inside the encrypted payload. |
| TS-003 | R1 | Random-key encryption | Done | 256-bit keys from crypto.getRandomValues; fresh salt and nonce per package. |
| TS-004 | R1 | Authenticated encryption | Done | AES-256-GCM, header bound as associated data, plus HKDF key commitment. Not independently reviewed. |
| TS-005 | R1 | Recovery key presentation | Done | Copy, download key file, and a retention confirmation before the package download unlocks. |
| TS-006 | R1 | Decrypt locally | Done | Wrong key or tampering yields one generic failure and no files. |
| TS-007 | R1 | Per-file integrity verification | Done | Order, count and lengths bound by the authenticated manifest; per-file SHA-256 for files up to 64 MiB. |
| TS-008 | R1 | Ciphertext export | Done | Documented TSPK v1 format; offline decoder available. |
| TS-009 | R1 | Original files untouched | Done | Files are only read. Cancel or error produces nothing. |
| TS-010 | R1 | Key/data separation guidance | Done | Key and package shown as separate objects with separate actions; nothing is sent automatically. |
| TS-011 | R1 | Memory-only default | Done | No keys, files or packages are stored. Only the theme choice uses localStorage. |
| TS-012 | R1 | Clear/reset session | Done | Revokes object URLs and zero-fills key buffers we hold. Not forensic erasure. |
| TS-013 | R1 | Filename/path safety | Done | Traversal, control/bidi characters, reserved device names and case collisions handled. |
| TS-014 | R1 | Resource preflight | Done | Input total, package size and rough peak-memory estimate before encrypting. |
| TS-015 | R1 | Progress/cancel | Done | Stage and chunk-aware progress. Cancel takes effect between steps/chunks; canceled output is discarded. |
| TS-016 | R1 | Package inspection | Done | /inspect-package shows the public header byte-by-byte; manifest only after verification. |
| TS-017 | R1 | Recipient safe download | Done | Outputs are application/octet-stream downloads; nothing is previewed or rendered. |
| TS-018 | R1 | Format/version compatibility | Done | Unknown versions, profiles, KDFs and reserved flags are rejected before work. |
| TS-019 | R2 | Passphrase mode | Done | PBKDF2-HMAC-SHA256, 600,000 iterations default, bounded 100k–5M on decode. Argon2 not used (no vetted self-hosted WASM shipped). |
| TS-020 | R2 | Batch recipient packages | Done | Up to 10 independent packages and keys in one go. |
| TS-021 | R2 | Optional compression | Done | deflate-raw before encryption, whole profile only, bounded on decode. |
| TS-022 | R2 | Chunked large-package profile | Partial | STREAM-style nonces with reorder/drop/duplicate/truncation tests. Not audited; output still buffered in memory (512 MiB cap). |
| TS-023 | R2 | Native streaming save | Not done | Packages are built as in-memory Blobs; limits shown in preflight. |
| TS-024 | R2 | Web Share handoff | Done | Shown only where the browser supports sharing files. Sharing does not prove delivery. |
| TS-025 | R2 | Verification receipt file | Done | Plain-text local receipt with explicit limits. |
| TS-026 | R2 | Metadata/privacy inspector | Done | Encrypt screen lists exposed vs encrypted fields; inspector shows header bytes. |
| TS-027 | R3 | Manual-signalled WebRTC transfer | Partial | Experimental. Copy/paste offer and answer, no STUN/TURN by default. Same-network only in practice. |
| TS-028 | R3 | Peer verification code | Partial | Code derived from both DTLS fingerprints; users compare out of band. Experimental. |
| TS-029 | R3 | Data-channel backpressure | Partial | Ordered channel, bufferedAmount backpressure, encrypted package verified on arrival. |
| TS-030 | R3 | Qualified resume | Not done | Interrupted transfers must restart with a fresh session and key. |
| TS-031 | X | Global download caps | Excluded | Impossible without a trusted server. |
| TS-032 | X | Guaranteed expiry/revocation | Excluded | Only an advisory date inside the package. |
| TS-033 | X | Background hosted link | Excluded | Would need hosted storage; not part of this product. |
| TS-034 | X | Malware-free guarantee | Excluded | Encryption and checksums say nothing about whether a file is safe. |
| TS-101 | R2 | Offline decoder distribution | Done | Single-file HTML with published SHA-256 and a no-network CSP. |
| TS-102 | R2 | Key confirmation exercise | Done | Paste a saved key to check it against the package commitment, locally. |
| TS-103 | R2 | Package name privacy mode | Done | Opaque package filename by default; internal names encrypted. |
| TS-104 | R2 | Manifest comparison | Done | Missing, extra or duplicate members block success. |
| TS-105 | R2 | Recipient extraction selection | Done | Select files after full-package verification. |
| TS-106 | R2 | Safe file-type handling | Done | Extension-based warnings for active content; not a scan. |
| TS-107 | R2 | Key rotation by repackaging | Done | Re-encrypt decrypted files with a new key; old copies stay readable with the old key. |
| TS-108 | R2 | Password-strength guidance | Done | Rough estimate plus offline-guessing explanation; random passphrase generator. |
| TS-109 | R2 | Container migration | Not done | Only TSPK v1 exists, so there is nothing to migrate yet. |
| TS-110 | R3 | Transfer speed and ETA | Partial | Bytes sent and rate shown; ETA not shown. |
| TS-111 | R3 | Receiver storage preflight | Done | Receiver sees advertised size and must approve; hard cap enforced. |
| TS-112 | R3 | Simultaneous transfer queue | Not done | One transfer per session. |
| TS-113 | R3 | Sender receipt limitations | Done | Acknowledgement worded as "the other browser reported success". |
| TS-114 | R3 | Advisory expiry display | Done | Optional date inside the encrypted manifest, displayed as a request. |
| TS-115 | R3 | Security profile report | Done | On /security, including "not independently audited". |