Share now, not after an upload
The link works the moment vrok starts. They are already downloading while an upload service would still be uploading.
vrok ./launch-cut.mov
Stop uploading. Stop deploying. One command gives your files, folders or local dev server a link anyone can open, served straight from your machine. No account, no size limit, and it's gone when you stop it.
curl -fsSL https://raw.githubusercontent.com/AliJabbar034/vrok/main/install.sh | sh
Or with Homebrew
brew install --cask AliJabbar034/tap/vrok
curl -fsSL https://raw.githubusercontent.com/AliJabbar034/vrok/main/install.sh | sh
Or with Homebrew
brew install --cask AliJabbar034/tap/vrok
irm https://raw.githubusercontent.com/AliJabbar034/vrok/main/install.ps1 | iex
Or with Scoop
scoop bucket add vrok
https://github.com/AliJabbar034/scoop-bucket
scoop install vrok
Free, MIT, no account. Windows, Linux packages, archives · How to use it
vrok ./quarterly.pdf
Or a folder, several files, or
vrok localhost:3000 for a running app.
Every command
Send the URL. It works until you press Ctrl+C, or until the expiry or download limit you set.
$ vrok ./quarterly.pdf
✓ Sharing quarterly.pdf
Expires when stopped · anyone with the link
c copy · q QR code · p add password · e change expiry · 1 one-time link · x stop
■ Stopped sharing quarterly.pdf
The whole round trip, replayed from vrok's real output: you run one command, they open the link, they download, and your terminal shows it happening.
They downloaded a 4 GB video. Your terminal kept the summary.
$ vrok ./launch-cut.mov
✓ Sharing launch-cut.mov
Expires when stopped · anyone with the link
c copy · q QR code · p add password · e change expiry · 1 one-time link · x stop
↓ Sent 4.0 GB in 1m 48s · 38 MB/s average
SHA-256 3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b
Replayed from vrok's real output. Downloads are shown faster than they ran; the numbers are what the terminal printed.
No upload, no waiting on a transfer service. They watch it in the browser, seek around, or download the original. Sending large files
vrok ./cut-03.mp4
Your dev server gets a public URL, with hot reload still working for whoever opens it. Sharing localhost
vrok localhost:3000
A Playwright report or a built site opens as the real thing, not a pile of files.
vrok ./playwright-report
A browsable listing, every file previewable, and the whole folder as one zip.
vrok ./assets
Upload services make you wait, then keep a copy. Tunnels stay open until you remember them. vrok gives someone a link to what is already on your machine, for exactly as long as you decide.
The link works the moment vrok starts. They are already downloading while an upload service would still be uploading.
vrok ./launch-cut.mov
A 50 GB disk image works like a 5 MB PDF. A dropped connection picks up where it stopped, and your terminal shows the progress.
↓ 2.7 GB / 4.0 GB · 67% · 38 MB/s
Files, whole folders and a running dev server, with one command.
No more ngrok for one job, a file host for another and
python -m http.server for the third.
vrok localhost:3000
It lasts until you stop it, or closes itself after a set time or a number of downloads. No forgotten link left on someone else's server.
--ttl 2h --downloads 1
Share demo.pdf and that file is all there is: not
the folder, not ../, not a symlink that walks out.
vrok ./demo.pdf
MIT licensed. No account, no paid tier, no telemetry. Read the code, or run your own relay.
MIT · no account · no telemetry
| If you need | vrok | ngrok / tunnels | WeTransfer / file hosts |
|---|---|---|---|
| Time until the link works | Seconds | Seconds | After the upload finishes |
| Share a file or folder from disk | Yes — preview, seek, zip | Only if you run a file server | Yes, by uploading a copy |
| Share a localhost app, hot reload intact |
Yes — vrok localhost:3000
|
Yes — their main job | No |
| File size limit | None — your disk | Not applicable | Set by the plan |
| Link that expires or works once | Time, downloads, password, revoke | Up until you stop it | After their retention period |
| Account needed | No | Yes | Depends on the service |
| Still there after you switch off | No — by design | No | Yes — their main job |
Use ngrok for a long-lived tunnel to a port you already serve. Use a file host when the recipient must still have the file after you switch off. Use vrok when someone needs what is on your machine now, and should not have it tomorrow. The full comparison.
--ttl 30m,
2h or 1d makes it close itself.
--downloads 5 closes the share after the fifth.
Seeking in a video or resuming a download does not use one up.
--password, or press p while it runs.
Stored as an Argon2id digest, never in plain text.
../ and symlinks that point outside answer 404.
Every URL carries 128 random bits.
vrok list shows what is open.
vrok revoke a82kd9 kills one URL now.
Run vrok ./video.mp4. vrok serves the file from
your own machine through a temporary public URL, so nothing is
uploaded first and there is no size limit beyond your disk. The
person you send the link to can watch it in the browser or
download the original, and an interrupted download resumes.
Run vrok localhost:3000 while your dev server is
running. You get a public HTTPS URL that reverse-proxies to it,
with WebSockets intact, so hot reload keeps working for the
person you send it to. No account, no configuration.
For sharing, yes. vrok is free, open source (MIT) and needs no account. It exposes a localhost port like a tunnel does, and it also serves files and folders directly, with previews, download limits, passwords and an expiry. How it compares.
Those services upload a copy of your file to their servers and keep it there. vrok uploads nothing: visitors read the file from your machine while the command runs, and the link stops working when you stop it or it expires.
Yes. --ttl 2h closes the share after two hours,
--downloads 1 makes it a one-time link, and
--password asks visitors for a password. While a
share runs, press 1, e or
p to change these without changing the URL.
No. A visitor reaches only what you named: sharing one file
exposes that file, not the folder around it. Paths like
../ and symlinks that point outside a shared folder
answer 404, and every URL carries a 128-bit random token.
No. They open the link in any browser. Only the person sharing runs vrok.
Yes. vrok is a single binary for macOS (Apple silicon and Intel), Linux (x86_64, ARM64, ARMv7), Windows and FreeBSD, installable with one command, Homebrew, Scoop, a Linux package (.deb, .rpm, .apk) or a verified archive.
curl -fsSL https://raw.githubusercontent.com/AliJabbar034/vrok/main/install.sh | sh
Built by Ali Jabbar, one person, MIT licensed. Questions and bugs go to Issues; security findings to a private advisory. Or say hello on LinkedIn.