share
Files, pastes, screenshots and short links with a lifetime. Host: share.<d>. Binary: shared. Stage 9.
- Drop: one or more files uploaded from the CLI, panel or a macOS share extension / Shortcut;
link
share.<d>/<code>, TTL (ttl strings, default 7 days), optional password, download limit,
view count. Optional end-to-end encryption: the key lives in the URL fragment, the server stores
ciphertext only.
- Paste: text or code with syntax highlighting, raw view, same lifetime rules.
- Screenshot: an image drop with an inline preview page.
- Short link:
share.<d>/<slug> → URL, with click counts; slugs per team.
- Limits per team: storage, file size.
CLI: xvii share <file…> [--ttl] [--password] [--e2e], xvii share paste < file, xvii share link <url>.
As built (stage 9)
- Drops at
share.<d>/<code>: 8 characters (no look-alikes), or a short link's chosen name; the panel's
paths are reserved. Kinds: files (a screenshot when it is one image, shown inline), paste (highlighted
with shiki in the browser, /d/<code>/raw for the text), short link (a redirect, counted as a view).
- Lifetime
12h, 7d, 2w … up to a year, or never; 7 days by default. Expired drops and drops whose
downloads are used up are removed with their files every 5 minutes.
- Password (bcrypt): the page asks first; a cookie (or
?t=) signed with DATA_DIR/secret opens it and
its downloads for a day. Download limits count every file fetched.
- End to end: the panel and the CLI encrypt with AES-256-GCM (12-byte IV, then the sealed bytes; pastes as
base64), the key goes only in the link's
#k= fragment, the page decrypts in the browser. File names and
sizes stay visible.
- Uploads stream to disk (
DATA_DIR/drops/<code>/<n>), 5 GB an upload; downloads are attachments under a
sandboxing CSP.
- Limits
share.drops, share.storage. CLI: xvii share FILE… [--ttl] [--password] [--downloads] [--e2e],
share paste [FILE] [--lang] [--e2e] (stdin otherwise), share link URL [--name], ls, rm; it
prints the link and a QR code.
- Not yet: the macOS share extension and Shortcut (the API takes them: multipart with a token).
- A team's own host name (panel → Domains): attached in xvii domains with "share of " as the target;
the team's links then use it, and on it only the team's drops open (pages, downloads, pastes, short
links); its root and the panel go to share's own address. Public pages wear the instance's look.
Journal
share.domain.