upload · pushPath
This tool on every surface: CLI · MCP · Python · JavaScript · Go · Java · .NET
Put a file from this machine where the device keeps downloads, so an app's file picker finds it: Android's shared Download folder, or on iOS an app's own Documents folder, which the Files app shows under On My iPhone. These call app_upload.
upload
upload(path: string, options?: { name?: string; app?: string }): Promise<Data>
Put a local file where the device keeps downloads: Android's shared Download folder (app is ignored), or an iOS simulator app's Documents, the app in front unless named — on a real iPhone too.
pushPath
pushPath(local: string, devicePath: string, options?: { app?: string }): Promise<Data>
Send a local file or folder to a path on the device; every file's size is read back there.
Examples
Send a file where the device keeps downloads
const sent = await device.upload('invoice-42.txt')
console.log(sent.where, sent.bytes, sent.checked)
The same call from the command line, mobium upload invoice-42.txt, printed on an Android 15 emulator:
uploaded …/invoice-42.txt to Download/invoice-42.txt (24 bytes) — confirmed by its size read back on the device, and MediaStore listing it

After mobium upload invoice-42.txt, the Files Demo's Upload a file opened the system picker, the file was in it, and the line under the button says the name, size and first line of what arrived — on an Android 15 emulator
Send a folder to a path on the device
const sent = await device.pushPath('seed', '/sdcard/seed')
console.log(sent.files, sent.checked)
The same call from the command line, mobium upload ./seed --device-path /sdcard/seed, printed on an Android 15 emulator:
uploaded …/seed to /sdcard/seed (a folder of 2 files, 8 bytes) — confirmed by each of its 2 files' sizes read back on the device