yungle sends files and folders from a terminal, a script or a build server. An interrupted upload continues when you run the same command again, and --json turns every command into something a pipeline can read.
Prerequisites
- Node 22 or newer, if you install with npm.
- A Yungle account. Sending transfers works on the free plan. Collections, upload requests and
watchneed a paid plan (pricing). yungle getneeds neither: anyone with a link can download it.
Install
Sign in
There are two ways to sign in. Which one you need depends on whether Yungle should email anyone for you.Browser sign-in
~/.config/yungle/config.json (readable only by you). It renews itself, including during a long upload. Add --no-browser to print the link instead, for example when the browser is on another machine.
A browser sign-in makes links but never emails anyone. Signing in with a code can be phished (“enter this code” is the whole attack), so that session cannot make Yungle mail strangers or register a webhook. If you pass --to with a browser sign-in, the CLI notices before uploading and offers to send a link instead.
API key
Create a key in Settings → API keys (or runyungle open keys), then save it:
YUNGLE_API_KEY is always read first, so no login step is needed:
Everyday tasks
Send a file or folder
- Folder structure is kept:
Shoot/Ceremony/Rawarrives asShoot/Ceremony/Raw. - Hidden files (names starting with
.) are skipped when the CLI walks a folder, so a.DS_Storein every subfolder stays behind. A hidden file you name directly is sent. --expires 90sets the lifetime in days. A value beyond your plan’s maximum is clamped to it, not rejected.--password <text>makes recipients enter a password.--title <text>labels the transfer in your dashboard.
--from-url <url>. Yungle fetches it itself, and the CLI waits until it has arrived before the transfer goes live.
Send to people
--to takes one address per flag or a comma-separated list. It needs an API key; a browser sign-in cannot email.
Resume an interrupted upload
Run the same command again with the same files. The CLI continues the existing transfer from the last committed part, instead of starting a second one.The resume state lives in
~/.cache/yungle/, keyed on each file’s path, size and modification time, because that is all a second run has to go on. If you change a file between runs, the upload starts over. Resume state expires after two hours, the lifetime of the upload permissions it holds.See who downloaded it
Push into a collection
Collections need a paid plan. Find the collection’s id, then push files or folders into it:--folder <folder-id> to upload into a folder of the collection. A push resumes like a send.
Watch a folder
For a render box writing frames, a card reader or an export folder:--interval to change), and uploads a file only once it has stopped changing, so a half-written frame never goes up. What it uploaded is remembered across restarts. Files already in the folder when it starts are left alone unless you pass --existing. Stop it with Ctrl-C.
Download a link
yungle pull --collection <collection-id> downloads a whole collection of your own the same way.
Use it in a script
With--json, every command prints one JSON object on stdout. Progress and diagnostics go to stderr, so a pipe stays clean:
send --json prints:
notified lists the addresses that were emailed. push --json prints collection (the id), uploaded (the number of files) and the collection’s url. watch --json prints one line of JSON per uploaded file.
How the CLI behaves depends on where it runs:
Use
--yes to skip confirmations in a script that runs at a terminal. A failure with --json prints { "error": { "code", "message" } } on stdout.
Exit codes: 0 success, 1 failure, 2 usage error, 130 cancelled.
For a complete CI job, see Send from CI.
Command reference
Runyungle <command> --help for examples of any command. Old spellings (auth login, ls transfers, rm transfer) still work.
yungle login
Opens your browser to sign in; nothing to copy, and it works over SSH because the browser can be on another machine. The session refreshes itself, including during long uploads. On a server or in CI, save an API key with —key instead, or set YUNGLE_API_KEY, which is always read first.
yungle whoami
The workspace, plan, storage used, and how you are signed in (browser, saved key, or YUNGLE_API_KEY).
yungle logout
Revokes the browser session on the server and forgets it on this machine.
yungle send <paths…>
Uploads resumably: interrupt it and run the same command again, and it carries on from the last committed part. Folders keep their structure; hidden files are skipped. Without —to you get a link and nobody is emailed; —to needs an API key (yungle login —key), because a browser sign-in never emails anyone. Run it with no paths at a terminal and it asks what to send.
yungle get <link>
Needs no account: the link is the credential. Asks for the password if the transfer has one, and resumes an interrupted download. End-to-end encrypted transfers open only in a browser.
yungle put <file> --target <target>
For AI assistants that cannot reach your disk: the assistant prepares the upload and hands you one command with a target in it. Running it checks the file is the one the target was made for, then uploads it resumably, renewing its token as it goes.
yungle status [<id\|link>]
Per recipient: emailed, downloaded, or bounced, plus the link and when it expires. Takes the full id, the short id from yungle transfers, or the link; with none, it lets you pick from your recent transfers.
yungle transfers
The latest 25, with size, downloads and time left.
yungle revoke <id>
Destroys the files and ends the link immediately. Asks first at a terminal; cannot be undone.
yungle push <paths…> --collection <id>
Resumable like send. Folder structure is kept.
yungle watch <dir> --collection <id>
For render farms, card readers and export folders. A file goes up once it has stopped changing, what went up is remembered across restarts, and files already in the folder are left alone unless —existing.
yungle pull --collection <id>
Downloads a whole collection into a folder, keeping its folder structure, resumably: run it again and it skips what is already there at full size. With —transfer it downloads one of your own transfers instead.
yungle collections
List your collections.
yungle requests
Every public upload page you have out, with its link, whether it is open, and how much has arrived through it.
yungle requests new --collection <id>
Creates a public upload page whose files go straight into the collection, and prints its link. Anyone with the link can upload.
yungle requests pause\|resume\|close <id>
Pause and close both stop new uploads through the link; resume opens it again.
yungle contacts
List your contacts.
yungle open [<id>\|plan\|keys\|webhooks]
Opens the page in your browser: the dashboard, a transfer by id or link, or your plan, API keys or webhook settings.
yungle webhooks ls
List webhook endpoints.
yungle webhooks listen
Reads a pull endpoint of its own, so it needs no public URL, and prints each event live. With —forward-to it also POSTs each one, signed with the session’s secret, to a server on your machine while you build the receiver.
yungle mcp install
Writes the local MCP server into your assistant’s config, with a saved API key (a browser sign-in expires too soon to live in a config file). Refuses keys with more power than the server uses; transfers:write needs —allow-write. Simpler still: add https://yungle.co/mcp to your assistant and sign in there.
yungle mcp status
Show where it is installed.
yungle completion <shell>
Prints a completion script; yungle completion bash >> ~/.bashrc, for example.
yungle --version
Print the version.
Global flags
What the CLI cannot do
- Reach your vault. Its key is derived in your browser and never reaches Yungle.
- Open end-to-end encrypted transfers.
yungle geton such a link says so and points you to the browser. - Wait for a download. To act when someone downloads, poll
yungle status, or subscribe to thetransfer.downloadedwebhook.
Next steps
Send from CI
Deliver build artefacts to a client from a pipeline.
Authentication
API keys, scopes, and what each one allows.
MCP server
Let an AI assistant answer questions about your files.
Upload large files
How resumable uploads work, if you build your own.
