Push files to the cloud, pull them on another computer
Last updated: 2026-09-01
Sometimes the two computers are never awake at the same time. You want to drop a file from your work laptop tonight and grab it from your home desktop tomorrow, with nobody waiting on a live connection. relayium up and relayium down do exactly that: up encrypts and uploads to your account, and down fetches and decrypts it later on any machine — no peer-to-peer handshake, no server you both ssh into.
This is the main part of the CLI that uses your Relayium account, alongside send, which needs it to mint a pairing code. Binding is optional for the rest: push/pull, daemon-direct and sync keep working with no login, and so does receive. Downloading needs no account at all, just the link.
When to reach for it
Pick the mode by whether the far end is online and how the two machines reach each other:
- up / down (this guide) — the two machines are never online together. You upload now; you (or another machine) download later. Goes through your account.
- send / receive — both ends are online right now and want a direct peer-to-peer transfer over a one-time code.
- push / pull — you can already ssh into the far machine.
- up and send are the two that need relayium login — up to store the file under your account, send only when it has to mint a pairing code (handed one, it needs nothing). down, receive, push/pull, daemon-direct and sync need no account.
Before you start
What you need
- Install the CLI so the relayium command exists. The command below drops a prebuilt binary on your PATH (macOS and Linux; on Windows, grab the .zip from the releases page); relayium --version confirms it, and relayium.com/cli lists every install option. Skip this and relayium login just prints 'command not found'.
- Have a free Relayium account. The browser step approves the login against your account, so you need one before you can approve — sign in at relayium.com first, or create one there if you haven't. Only uploading needs the account; downloading never does.
- A way to move one link to the other machine — a note app, a chat window, a password manager. Anyone holding the link can download the file, so treat it like a password.
Two one-time things before your first up — install the CLI, and have an account. Already have both? Skip ahead.
curl -fsSL https://relayium.com/install.sh | sh
Bind this machine to your account (once)
up needs to know whose account to store under, so sign in once per machine. It's a browser-approved device login — nothing is typed into the terminal except the code you confirm:
relayium login
- The CLI prints a short code and a URL (relayium.com/device). Open it in the browser where you're signed in to relayium.com (sign in there first if you aren't), enter the code, and approve — this machine is now bound.
- The login is saved under ~/.config/relayium/, so you only do it once per machine. relayium whoami shows who you're bound to; relayium logout clears it.
- To revoke a machine later, delete its device from your account's devices page in the browser.
Upload from the first computer
up walks the files you give it, encrypts them locally, uploads the ciphertext, and prints a claim link:
Check this machine is still bound to your account. It prints the account and the server it is bound to; if it says you are not logged in, do the login step above first.
relayium whoamiUpload the file. up encrypts it locally, sends only ciphertext, and prints the claim link on stdout.
relayium up ./report.pdfAdd a retention flag if the 24-hour default isn't what you want. Your plan caps how long the server will actually keep it.
# choose how long it lives (default: 24 hours): relayium up ./report.pdf --burn # deleted after one download relayium up ./report.pdf --ttl 7d # kept 7 days (your plan sets the cap) relayium up ./report.pdf --max-downloads 5 # allow 5 downloads, then goneMove the link to where the second machine can read it. Only the link goes to stdout, so a pipe stays clean.
relayium up ./report.pdf | pbcopy
What a successful upload looks like
A progress bar runs on stderr while it uploads, then clears. The link lands on stdout on a line of its own, and the human hint — plus any retention note — follows on stderr.
relayium up ./report.pdf
https://relayium.com/d/7fK2p…#k=Xr8s…
opens in a browser, or fetch it with `relayium down 'https://relayium.com/d/7fK2p…#k=Xr8s…'`- Retention: --burn removes the file after a single download; --ttl <duration> keeps it for a fixed time; --max-downloads <n> allows a fixed number of downloads. Give none of them and the link lives 24 hours, the default when --ttl is absent.
- --ttl takes a duration with a unit — 30m, 12h, 7d, 2w — or a plain number of seconds, so --ttl 3600 and --ttl 1h are the same request. Your plan sets the ceiling: 1 day on Free, 3 days on Plus, 7 days on Pro, 14 days on Max. Ask for longer than your ceiling and the server silently keeps it for the ceiling instead — up prints a note afterwards telling you how long it actually kept it.
Download on the second computer
On the other machine, hand the link to down. No login, no setup — the key that decrypts the file is inside the link, so down needs nothing from your account:
relayium down '<your link>' <target directory>Get the link onto the second machine, however suits you. Nothing has to be installed or logged in there beyond the CLI itself.
Hand it to down inside single quotes, with the directory the files should land in.
relayium down 'https://relayium.com/d/7fK2p…#k=Xr8s…' ./downloadsLeave the directory off to land in the current one.
relayium down 'https://relayium.com/d/7fK2p…#k=Xr8s…'
What a successful download looks like
Every file it wrote is listed on stdout, one per line, and the count and destination are confirmed on stderr.
relayium down 'https://relayium.com/d/7fK2p…#k=Xr8s…' ./downloads
downloads/report.pdf
✓ downloaded 1 file(s) to ./downloads- If the file was set to burn, has hit its download limit, or has expired, the link is spent and down reports that it's gone.
- A dropped or stalled connection is retried inside the same run: down reconnects up to five attempts and continues with an HTTP Range request from the last complete encrypted frame, so a large download does not start over because a proxy reset it. Against a server that ignores Range — an old one, or a burn/limited file — it restarts the file within that same run instead.
- That recovery does not outlive the command. When the attempts are spent, down deletes what it had written rather than leaving a truncated file that looks complete, and running down again begins from the start. This is not the across-runs resume that relayium sync has.
Works with the website too
The link is the same one the website uses, so the CLI and the browser interoperate freely:
- A link from relayium up opens in a browser — hand it to someone who doesn't have the CLI and they download from the web.
- A share link created on relayium.com can be fetched with relayium down on another machine.
What the server can and can't see
Cloud transfers stay end-to-end encrypted:
- Your file is encrypted on your machine before it's uploaded. The decryption key lives only in the link's #k= fragment and is never sent to the server — Relayium stores ciphertext it cannot read, including the file names.
- That also means the link is the only way back to the file: lose it and the file is unrecoverable, by you or by us.
When a link doesn't work
Four failures cover almost every unsuccessful up or down, and none of them needs guessing — the state that decides each one is printed by a command, or visible in the command you typed.
Symptom, check, fix
- up refuses with "run relayium login first".
relayium whoami # not logged in (run `relayium login`)Uploading stores the file under your account, so this machine needs credentials. Run relayium login and approve it in the browser at relayium.com/device; whoami then prints your account and the server it is bound to.
- down cannot parse the link, and the key seems to have vanished.
echo relayium down https://relayium.com/d/7fK2p#k=Xr8s # relayium down https://relayium.com/d/7fK2pAn unquoted # starts a comment in most shells, so everything from #k= onwards never reached the command — echo shows exactly what survived. Wrap the whole link in single quotes and the fragment, which is the decryption key, arrives intact.
- The link stops working sooner than the --ttl you asked for.
relayium up ./report.pdf --ttl 7d # note: your plan caps retention, so this link is kept 1d, not the 7d you asked forThe server silently clamps a request beyond your plan's ceiling — 1 day on Free, 3 on Plus, 7 on Pro, 14 on Max — and up prints that note afterwards to say what it actually got. A link also ends early on --burn or --max-downloads. Upload again for a fresh one.
- You are logged in, but up says you're logged in somewhere else.
relayium whoami # you@example.com (https://relayium.com)A --server that did not issue your token is refused rather than sent your credential, which would leak it and would not authenticate there anyway. Either drop --server so it uses the bound server whoami just printed, or run relayium login against the other host first.
Frequently asked questions
Do I need an account?
To upload, and to send when a code has to be minted. relayium up always requires relayium login, so the file can be stored under your account. relayium send requires it only when the server has to mint a fresh pairing code for you — run send with a code someone handed you and it mints nothing, so it needs no login. relayium down and relayium receive need no account, and push/pull, daemon-direct and sync work without one.
Is my file encrypted?
Yes, end-to-end. It's encrypted on your machine before upload; the key lives only in the link's #k= fragment and is never sent to the server. Relayium stores ciphertext it can't read, including the file names.
What if I lose the link?
The link carries the only copy of the decryption key, so a lost link means an unrecoverable file — there's nothing on the server that could recover it.
Can I limit who downloads it?
Anyone with the link can download, so share it privately. Use --burn to allow a single download, or --max-downloads <n> to cap the number, and --ttl <duration> to expire it after a set time.
Does it work with the website?
Yes. A link from relayium up opens in a browser, and a share link created on relayium.com can be fetched with relayium down on another machine.
What happens if a download is interrupted?
Inside one run, down handles it: it reconnects up to five attempts and continues by HTTP Range from the last complete encrypted frame, or restarts the file within that run if the server ignores Range. Once the attempts are spent it removes the partial output instead of leaving a truncated file, so a later relayium down starts from the beginning rather than picking up where the last one stopped. Only relayium sync resumes across separate runs.
Ready to move a file across your own machines? Install the CLI, run relayium login, and up it.
Get the CLI