Apps
Desktop app & watch folders
The desktop app carries the transfer engine, moves whole folders and runs watch folders; the Linux agent and the boita CLI do the same on servers.
Updated 2026-09-21
The desktop app#
Download it from boita.io/desktop for macOS or Windows. It wraps the web app and carries a private transfer engine inside it — you install Boita and nothing else. The engine listens only on the local machine with a key that changes every launch.
What it gives you over the browser:
- Whole folders in the file picker, with multi-select.
- Up to 50 concurrent transfers, each with a live rate you can change while it runs.
- Resume after any interruption; files that already landed are skipped.
- Downloads land in
Downloads/Boitaunless you choose a folder per transfer. - Watch folders (below), which keep running while the window is closed.
- Send from my computer: a phone signed in as you can browse this computer's Home, Desktop, Documents, Downloads, Movies, Pictures, Music and mounted drives and send up to 500 items at once, straight from here over the fast path.
Closing the window keeps Boita in the menu bar / tray with Open Boita, Check for Updates… and Quit Boita. Updates are checked on launch and every 24 hours, downloaded quietly and installed when you quit. Links such as boita://s/<slug> open in the app.
Watch folders#
A watch folder ties a folder on this computer to a folder in the workspace, one way. Watch folders → Add watch folder (inside the desktop app) opens a native folder picker, then:
| Field | Notes |
|---|---|
| Name | How it appears in the list. |
| Direction | Upload — files dropped here go to the workspace. Download — keep this folder filled from a workspace folder. |
| Folder in the workspace | Created for uploads; must already exist for downloads. |
| Send after a file has been unchanged for | 2 to 600 seconds, 10 by default, so renders and copies finish before they go. |
How it behaves:
- New and changed files are offered once they have been stable for the chosen time, in batches (a 10-second window or 500 files), with a full rescan every minute.
- Dot-files,
Thumbs.db,desktop.ini,~$lock files and partial-download suffixes are ignored. - A file that fails five times is set aside until you press Re-send all, which re-offers everything (unchanged files are skipped by the engine).
- Download watch folders fetch anything new or changed into this computer every minute, keep the folder layout, and never delete locally.
- Hours limits sending to a daily window such as
22:00-06:00in the workspace time zone; outside it the batch waits and the app retries the next minute. - Pause / Resume and Remove (files already uploaded stay in the workspace). The web app shows what every device reports — name, destination, device, bytes sent, last activity — and can pause or remove from anywhere; the device honours it within a minute.
Each batch is checked against storage quota before it starts. Watch folders need the desktop app (or the agent) signed in: while the window is closed and signed out, the batch waits with Boita window is not open — sign in to resume watch folders.
Plans: Free none, Pro 2, Studio 1,000, Enterprise 10,000 watch folders.
The Linux agent#
For servers, NAS boxes and render nodes there is a headless agent. Install it in one line as root on Ubuntu, Debian or RHEL (x86_64 or arm64):
curl -fsSL https://boita.io/downloads/agent/install.sh | sudo bash
It creates a boita-agent system user, installs to /opt/boita-agent, fetches the transfer engine, and enables a boita-agent systemd unit. Then:
boita-agent init --api-key <key> --workspace <id> --sdk-dir /opt/boita-agent/sdk
boita-agent watch add --local /srv/renders --to Renders
systemctl start boita-agent
The API key comes from Developers → API keys with write scope; the agent acts as the person who created it. watch add --from <folder> makes a download watch folder; watch list | pause | resume | remove, status and version do what they say. Configuration lives in /etc/boita-agent/config.json (or ~/.config/boita-agent for non-root installs). The agent runs up to 10 transfers at once and resyncs with the web app every minute, so pausing a watch folder in the browser stops it on the server.
The boita command line#
The agent ships a CLI for scripts and pipelines:
boita upload <local…> --to <workspace folder> [--parallel N] [--streams N] [--priority deadline|background] [--deliver-to <ruleId,…>]
boita download <workspace path…> --to <local dir> [--parallel N]
boita ls [<folder>]
boita share <path…> [--title …] [--expires <days>] [--password …]
boita wait-receipt <shareId> [--timeout <seconds>] # resolves when every invited recipient has downloaded
boita speed [--mb 256] # eight files up, then down, from a "Speed test" folder
--json prints machine-readable output; the exit code is 1 when any transfer fails. A session that fails while it is being set up (a busy server, a dropped handshake) is retried twice with a short back-off before it counts as failed — BOITA_TRANSFER_RETRIES=0 turns that off, and --json shows attempts on a transfer that needed one. Credentials come from boita-agent init or the environment: BOITA_API_URL, BOITA_API_KEY, BOITA_WORKSPACE, BOITA_LABEL, BOITA_SDK_DIR.
Your connection#
Transfers → Your connection says which path this computer has — Fast path, Standard speed (HTTPS) or No transfer path yet — and why. Test speed (desktop app 1.3 or later) moves a 128 MB probe as eight files up and down and reports upload, download and a typical upload for comparison, with plain advice: if nothing moved, the accelerated port (UDP 33001) is probably blocked and IT should allow it. See Troubleshooting.