Skip to main content
Send a build’s output, a signed installer or a nightly report to someone outside your team, straight from a pipeline. The CLI uploads resumably, prints the link, and can email it for you.

Prerequisites

  • An API key with transfers:write. Add transfers:read if the job checks download receipts afterwards.
  • The key stored as a secret in your CI, exposed to the job as YUNGLE_API_KEY. The CLI reads it from the environment, so there is no login step.
  • Node 22 or newer on the runner, for the CLI (yungle-cli).
Transfers work on every plan. On the free plan a transfer holds up to 10 GB and lasts 7 days.

Send from GitHub Actions

1

Store the API key

In your repository, open Settings → Secrets and variables → Actions and add a secret named YUNGLE_API_KEY.
2

Add the workflow

The yungle-send-action runs yungle send for you and returns the link as an output. This workflow builds on every published release and emails the result to a client.
.github/workflows/deliver.yml
The action adds a summary with the link to the run, and fails the job with Yungle’s error message if the send fails.
3

Check the result

Each run sends a new transfer. The action’s outputs:

Action inputs

Without the action

On another CI system, or to control the command yourself, run the CLI directly. --json prints one JSON object on stdout; progress goes to stderr, so the pipe stays clean.
yungle send --json returns:
On failure it prints { "error": { "code": "…", "message": "…" } } and exits non-zero. The code values are the ones on Errors.

Send a nightly report from cron

1

Store the key in a file

Put the key in a file only the cron user can read, rather than in the crontab, which leaks through ps and backups.
2

Write the script

The script generates the report, sends it, and appends one line per send to a log.
/usr/local/bin/send-nightly-report
--expires is clamped to your plan’s maximum rather than rejected. The log answers “did Tuesday’s report go out?” with one grep, and holds the transfer id if you need to check downloads.
3

Schedule it

Run it at six every morning:
crontab

When an upload is interrupted

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. In CI, a rerun of the job on a fresh runner has nothing to resume and sends a new transfer, which is usually what you want.

Check that it was downloaded

Use the transfer id from the JSON output to read the download receipts, or subscribe to the transfer.downloaded webhook instead of polling.

Limits that apply to pipelines

  • Up to 10 recipients per transfer. Emailing them counts against a daily budget per workspace. Leave out --to and nobody is emailed, so the send costs nothing from that budget.
  • API uploads are metered separately from your plan. See Limits.

Next steps

CLI

Every command and flag, including push for collections and watch for export folders.

Webhooks

Get told when the client downloads the build.

Send from Python

Send from a Python job with the yungle SDK.

Limits

Transfer sizes, recipients, email budgets and API metering.