Skip to main content
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 watch need a paid plan (pricing).
  • yungle get needs neither: anyone with a link can download it.

Install

Check it works:

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

The CLI opens your browser, you confirm a code, and the session is saved 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 run yungle open keys), then save it:
The CLI checks the key against Yungle before saving it. On a server or in CI, set the environment variable instead. YUNGLE_API_KEY is always read first, so no login step is needed:
See Authentication for the scopes a key can have.

Everyday tasks

Send a file or folder

It uploads, prints the share link, and emails nobody. You pass the link on yourself.
  • Folder structure is kept: Shoot/Ceremony/Raw arrives as Shoot/Ceremony/Raw.
  • Hidden files (names starting with .) are skipped when the CLI walks a folder, so a .DS_Store in every subfolder stays behind. A hidden file you name directly is sent.
  • --expires 90 sets 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.
To include a file that is already online (a presigned S3 link, a CDN URL), add --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

It shows, per recipient, whether they were emailed, downloaded, or bounced, plus the link and when it expires. An id can be the full id, its last 6–8 characters, or the link. With no id, you pick from your recent transfers.

Push into a collection

Collections need a paid plan. Find the collection’s id, then push files or folders into it:
Add --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:
It looks every 10 seconds (--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.
No account is needed: the link is the credential. Folders are kept, the download resumes if interrupted, and the CLI asks for the password if the transfer has one. 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

Run yungle <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 get on 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 the transfer.downloaded webhook.
The CLI is open source (MIT): yungle-cli on GitHub.

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.