On-premise device farm for Android & iOS

Run tests on real devices.On your network.

Farmly turns USB-connected Android and iOS phones into a shared device farm. Run automated Appium tests or remote-control any device from your browser — all on your own infrastructure.

30 devices · live
Farmly device farm — a grid of Android and iOS phones running tests in parallel
farmly ~ terminal
$ npm install -g farm-orchestrator farm-runner
$ farm-orchestrator --port 3000
  ✓ Hub started on http://localhost:3000
  ✓ Connected to postgres://localhost/device_farm
$ farm-runner -c node.config.json
  → Discovered 4 devices
iPhone 15 Pro iOS 17.4 ONLINE
Pixel 8 Android 14 ONLINE
Galaxy S24 Ultra Android 14 ONLINE
iPad Air M2 iPadOS 17 ONLINE
  Ready — point your tests at http://localhost:3000/wd/hub

Works with the devices you already have

iPhone 15 Pro iOS 17
Pixel 8 Android 14
Galaxy S24 Android 14
iPad Air M2 iPadOS 17
Pixel 7a Android 13
iPhone 14 iOS 16
OnePlus 12 Android 14
Galaxy Tab S9 Android 14

Any USB-connected Android 8+ or iOS 14+ device

Architecture

Two packages.
That's the whole system.

Farmly is two npm packages: farm-orchestrator runs on your hub and exposes the Appium-compatible endpoint. farm-runner runs on each machine with USB-connected devices. They find each other, reconcile state, and self-heal.

farm-orchestrator

Postgres, REST API, Dashboard

farm-runner

Mac mini #1

iPhone 15 Pro
iPad Air M2
farm-runner

Linux host #2

Pixel 8
Galaxy S24 (idle)
Hybrid execution

On your floor.
In the cloud. Same run.

Farmly isn't on-premise or cloud — it's both. Plug in TestMu AI, Sauce Labs, or AWS Device Farm as additional nodes, then route the same Appium suite across local and cloud devices in a single test run. Use your own phones first, spill to the cloud when CI gets hot.

On-premise · your floor

Local devices

USB-connected phones in your lab

farm-runner · usb

Zero latency. Zero per-minute cost.

Combined
Cloud · any provider

Cloud devices

Bring your existing vendor contracts

cloud adapter · api
  • TestMu AI connector
  • Sauce Labs connector
  • AWS Device Farm connector
  • + BrowserStack, Headspin…

Pay-as-you-go. Spill over on demand.

One test run · 6 devices · 2 sources live
01 iPhone 15 Pro LOCAL
02 Pixel 8 LOCAL
03 Galaxy S24 Ultra CLOUD
04 iPhone 12 mini CLOUD
05 Pixel 6a CLOUD
06 iPad Air M2 LOCAL
3 local · 3 cloud routed by capability
How it works

From zero to running tests
in five commands.

01

Install hub and runner

Two npm packages. The orchestrator runs once on your network; the runner runs on every host with phones plugged in.

npm install -g farm-orchestrator farm-runner
02

Verify dependencies

A built-in doctor checks Postgres, ADB, Xcode, ffmpeg, ports — and tells you exactly how to fix anything missing.

farm-orchestrator doctor
farm-runner doctor
03

Boot the hub

Point at Postgres with inline env vars. Migrations run automatically. Dashboard opens at localhost:3000.

DB_HOST=localhost DB_PORT=5432 \
  DB_USER=$(whoami) DB_PASSWORD="" \
  DB_NAME=device_farm farm-orchestrator
04

Connect a node

Drop a node.config.json with hubUrl, accessKey, and token, then start the runner. Devices appear in seconds.

farm-runner start --config ./node.config.json
05

Run your tests

Point your Appium or WebDriver suite at the hub. Sessions stream live with recordings, logs, and artifacts attached.

await driver.executeScript(
  "devicefarm: setSessionStatus",
  [{ status: "passed" }]
);

Example node.config.json

only hubUrl + accessKey + token are required
{
  "hubUrl": "http://hub.local:3000",
  "accessKey": "your-access-key",
  "token": "your-token",
  "name": "mac-mini-01",
  "platform": "both",
  "iosDeviceType": "both",
  "androidDeviceType": "both",
  "appiumServer": {
    "enabled": true,
    "serverArgs": { "port": 4723, "address": "0.0.0.0" }
  }
}

Full CLI reference — farm-runner --help

show
zsh — farm-runner --help
$ farm-runner --help

Farm Runner — Device Farm Node Server

Usage:
  farm-runner [command] [options]

Commands:
  start                          Start the node server (default)
  doctor [options]               Verify all required dependencies are installed
  --help, -h                     Show this help message
  --version, -v                  Show version information

Start options (can also come from --config file or env vars):
  --config, -c <path>            Path to node.config.json (default: ./node.config.json in cwd)
  --hub-url, -u <url>            Hub WebSocket URL, e.g. http://hub.local:3000
  --access-key, -a <key>         Access key issued by the hub
  --token, -t <token>            Auth token issued by the hub
  --name, -n <name>              Friendly name for this node (default: hostname)
  --host <host:port>             Override the host:port advertised to the hub
  --os <android|ios|both>        Platforms this node serves
  --tags <csv>                   Comma-separated tags for capability matching
  --temp-logs-dir <path>         Where to buffer session logs before upload

Doctor options:
  --platform <android|ios|both>  Limit checks to one platform (default: both on macOS, android elsewhere)
  --hub-url <url>                Also probe reachability of the given hub URL

Examples:
  # 1) Start with a config file (recommended)
  farm-runner start --config ./node.config.json

  # 2) Start with inline flags
  farm-runner start \
    --hub-url http://hub.local:3000 \
    --access-key abc123 \
    --token tk_xyz \
    --name mac-mini-01 \
    --os both

  # 3) Health check
  farm-runner doctor
  farm-runner doctor --platform ios
  farm-runner doctor --hub-url http://localhost:3000

Notes:
   Only hubUrl + accessKey + token are required; everything else has a sensible default.
   CLI flags override the config file. Run farm-runner doctor first to verify deps.

Docs & more: https://farmly.dev
Dashboard

See every device. Control every session.

The Farmly dashboard gives your team a real-time view of every connected device, active session, and test result.

farmly.local:3000/dashboard

Devices

12

Sessions

4

Tests today

847

Uptime

99.8%

iPhone 15 Pro iOS 17.4 ONLINE Login flow regression
Pixel 8 Android 14 ONLINE Checkout happy path
Galaxy S24 Android 14 IDLE
iPhone 14 iOS 16.7 ONLINE Push notification test
Pixel 7a Android 13 IDLE
iPad Air M2 iPadOS 17.4 BUSY Onboarding flow
Sessions

Every session recorded. Every action traced.

Whether it's an automated test or a hands-on remote-control session, Farmly captures the full video, screenshots, device logs, and Appium command traces. Debug — or drive — any device without being next to it.

  • Live device mirroring and remote control
  • Automatic session recordings with screenshots
  • Full Appium command log with timing
  • One-click artifact download
Capabilities

Everything you need.
Nothing you don't.

100% on-premise

Your devices, your network, your data. Nothing leaves your firewall. Comply with the strictest security policies.

Android & iOS

Real phones, real tablets. Plug in any Android 8+ or iOS 14+ device. Farmly handles ADB, WebDriverAgent, and provisioning.

Parallel execution

Run tests across dozens of devices simultaneously. Cut your CI pipeline from hours to minutes.

CI/CD native

First-class hooks for GitHub Actions, GitLab CI, Jenkins, and Bitrise. Drop Farmly into the pipeline you already have.

Auto-reconciliation

Farmly polls real device state and self-corrects. Disconnected devices re-register automatically.

Session cleanup

Every session ends clean. Test apps uninstalled, artifacts removed, WDA rebuilt. Ready for the next run.

Integration

Four lines in your
CI config.

Point your Appium or XCUITest suite at the Farmly hub. It works with every test framework that speaks WebDriver.

.github/workflows/test.yml
- name: Run mobile tests
  env:
    FARMLY_HUB: http://farmly.internal:3000
  run: |
    npx appium-test-runner \
      --hub $FARMLY_HUB \
      --parallel 8
Pricing

Flexible pricing for your fleet.

Start free with 4 devices. Scale to unlimited when your team is ready.

Monthly billing, cancel anytime

Free

$0per month
  • 2 Android + 2 iOS devices
  • 1 host machine
  • 1 user · local network only
  • Appium, recordings, dashboard
  • Community support (Discord + GitHub)
4 devices included

Team

Popular
$100per month

Everything in Free, plus

  • Unlimited devices
  • Unlimited team members
  • Multi-host orchestration
  • CI/CD integrations (GitHub, GitLab, Jenkins, Bitrise)
  • Hybrid cloud spillover (Sauce Labs, TestMu AI, AWS Device Farm)
  • Session recordings & artifacts
  • Email support · 24h response
Unlimited devices

Pro

$999per month

Everything in Team, plus

  • SSO / SAML / SCIM provisioning
  • 99.9% uptime SLA · 4h response SLA
  • Dedicated Slack + customer success manager
  • Air-gapped install support
  • Priority feature requests
Unlimited devices

All plans include the Farmly agent and web console.

FAQ

Frequently asked questions.

Yes — every Farmly plan runs entirely on your own hardware and network. We never see your devices or test data. Your builds, screenshots, and session recordings stay behind your firewall.

Any USB-connected Android (8+) or iOS (14+) phone or tablet. We handle ADB, WebDriverAgent, and reboots for you. tvOS devices are also supported for Apple TV testing.

Farmly helps you set up a device farm locally — plug in real Android and iOS devices and turn them into a shared, automatable lab. It's powered by Appium, so any existing Appium or WebDriver test suite works unchanged, and the dashboard gives you live manual control of any device from your browser (screen mirroring + touch). When you need extra capacity, Farmly can distribute the same test run across your local devices and cloud providers (Sauce Labs, BrowserStack, AWS Device Farm, LambdaTest) in a single session — capability-routed, with results unified in one place.

Yes, upgrade or downgrade any time from the admin console. Pricing is pro-rated to the day, so you only pay for what you use.

14 days, no credit card required. Spin it up against your existing devices and decide before you pay.

Farmly works with any CI that can run Appium or WebDriver tests — GitHub Actions, GitLab CI, Jenkins, Bitrise, CircleCI, and more. The Team plan adds native hooks for parallel execution.

Ready to own your
device farm?

Start free with 4 devices. No credit card, no cloud dependency.

or talk to us at hello@farmly.dev