Content types
SyncBins supports eleven content types (ITEM_TYPES in shared/src/types.ts). The type field is stored unencrypted on the server so sync can route without decrypting. Every field inside payload is ciphertext on the wire.
Auto-detection today (web app)
Section titled “Auto-detection today (web app)”The composer and clipboard hint only infer a subset:
| Input | Detected type | Where |
|---|---|---|
http(s)://…, domain-like string | link | Composer + clipboard |
Text with braces/; heuristic | code | Composer + clipboard |
| 12–64 char high-entropy token | password | Clipboard hint only |
| Image in clipboard | image | Clipboard hint |
| Other text | text | Composer + clipboard |
| Dropped image file | image | Drag/drop |
| Dropped other file | file | Drag/drop |
There is no composer auto-detect for note, video, audio, contact, or location yet — create those via API/MCP or future UI.
Link items save with placeholder title New link and desc Fetching preview…. Open Graph fetching is not implemented — metadata stays placeholder until edited.
password
Section titled “password”{ service: string; user: string; secret: string; }UI hides secret by default with a reveal toggle and copy button.
{ url: string; title: string; desc: string; site: string; }Renders as a link tile (title, description, domain). site is derived client-side from the URL host.
text / note
Section titled “text / note”{ text: string; }Same payload shape. Rendered with pre-wrap. Distinction is cosmetic in the UI.
{ lang: string; label: string; text: string; }Monospace block, language chip, copy button. Composer defaults: lang: 'txt', label: 'snippet'.
{ w: number; h: number; label: string; tone: number; blobRef?: string; }Inline if small; blobRef set when encrypted bytes exceed inline limit (~64 KB ciphertext). Drag/drop currently uses placeholder dimensions until blob pipeline fills them in.
{ url: string; title: string; desc: string; duration: string; tone: number; }Thumbnail + play overlay when UI supports it. Large files use blob storage like images.
{ name: string; size: string; kind: string; blobRef?: string; }Icon tile with filename and download. size is human-readable (e.g. 2.4 MB).
{ duration: number; label: string; wave: number[]; blobRef?: string; }Play control + waveform from wave samples. Voice memo recording UI is not in the alpha web composer.
contact
Section titled “contact”{ name: string; role: string; email: string; phone: string; }Initials avatar + contact lines.
location
Section titled “location”{ name: string; addr: string; lat: number; lng: number; }Map pin rendered client-side from lat/lng.
Large items (blobs)
Section titled “Large items (blobs)”Payloads larger than ~64 KB after encryption use the blob flow:
POST /api/blobs/upload-url- Upload ciphertext to presigned URL (R2 / Azure / signed local URL)
POST /api/itemswithblobRef,blobNonce,blobKeys(no inlinepayloadEnc)
See Encryption envelope.
Type summary
Section titled “Type summary”| Type | Blob-backed | Auto-detect in web UI |
|---|---|---|
password | No | Clipboard only |
link | No | Composer + clipboard |
text | No | Composer + clipboard |
note | No | No |
code | No | Composer + clipboard |
image | Often | Drag/drop + clipboard |
video | Often | No |
file | Often | Drag/drop |
audio | Often | No |
contact | No | No |
location | No | No |