# Droidline > Droidline is an open-source (MIT) library that controls Android phones from code without ADB, a USB cable or root. A PC server (`droidline serve`) keeps an encrypted link to an Android app on each phone; your code sends one JSON line per action from Python, Node.js, the CLI, HTTP, a raw socket or MCP. Key facts: - Phones run Android 9 or later. The app uses an accessibility service, its own keyboard and an optional per-app VPN. No ADB, root or Shizuku. - The phone always connects out to the PC: same Wi-Fi by UDP discovery, a forwarded port with TLS, a tunnel (Cloudflare Tunnel, ngrok), or a relay the user deploys (Cloudflare Workers or a VPS). No public relay is operated. - Every line after a two-line handshake is end-to-end encrypted (P-256 ECDH, HKDF-SHA256, AES-256-GCM). - Elements are chosen by a dump() field and value, e.g. touch("text", "Log in") or touch("id", "login"). touch waits up to 10 s and falls back to tapping the element's bounds center. - SDK functions, wire commands, CLI subcommands and MCP tools share names, generated from spec/commands.json. - Not on Google Play; signed APKs are published on GitHub Releases. - Status: version 0.1, before a first public release. ## Docs - [Droidline documentation](https://droidline.dev/docs/): What Droidline is, how its three parts fit together, what you need before you start, and which page to read next. - [Installation](https://droidline.dev/docs/install/): Install the droidline server on Windows, macOS or Linux, install the app on the phone and turn on its permissions, then add the SDK for your language. - [Quick start](https://droidline.dev/docs/quickstart/): Pair a phone with your PC and send your first commands from the shell, Python, Node.js or HTTP, in about five steps. - [Your first script](https://droidline.dev/docs/tutorial/): Build a complete login script step by step against a simulated phone, with every line explained, in Python, Node.js or the shell. - [Concepts](https://droidline.dev/docs/concepts/): The ideas behind every Droidline command, explained once: the screen as a tree, selectors, automatic waiting, conditions, errors, several phones, commands that cut the network, and why nothing runs twice. - [Choose a language](https://droidline.dev/docs/sdk/): Every way to talk to Droidline (Python, Node.js, the CLI, HTTP, a raw socket and MCP), what each one is best at, and the settings they share. - [Python](https://droidline.dev/docs/python/): Everything about the Python SDK: installing it, connecting, calling commands, files, waiting, errors, several phones and threads, notifications, events and testing with pytest. - [Node.js and TypeScript](https://droidline.dev/docs/nodejs/): Everything about the Node.js SDK: installing it, connecting, calling commands with options objects, files, waiting, errors, parallel phones with Promise.all, notifications and TypeScript. - [Command line](https://droidline.dev/docs/cli/): Use the droidline command from bash, zsh or PowerShell: how arguments work, what each command prints, exit codes, scripting patterns and scheduled jobs. - [HTTP API](https://droidline.dev/docs/http/): Drive phones with plain HTTP requests from curl, PowerShell, Python requests, fetch or any no-code tool: endpoints, request bodies, replies, status codes and tokens. - [Other languages](https://droidline.dev/docs/other-languages/): Use Droidline from Go, Java, C#, PHP or any other language, over HTTP or a raw socket that carries one JSON line per command, with tested examples. - [AI agents and MCP](https://droidline.dev/docs/ai-agents/): Give Claude, Cursor, VS Code or any MCP client the ability to see and use an Android phone through droidline mcp, with setup for each client and tips for good results. - [Finding elements](https://droidline.dev/docs/finding-elements/): How to read a screen dump, choose the selector that keeps working, handle duplicates, lists, icons, web pages and screens without elements, and debug a selector that does not match. - [Recipes](https://droidline.dev/docs/recipes/): Ready-to-copy patterns for everyday tasks in Python, Node.js and the shell, from starting an app fresh and dismissing pop-ups to reading lists, retrying, one-time codes and new IP addresses. - [Notifications and webhooks](https://droidline.dev/docs/notifications/): Receive a phone's notifications on the PC, wait for one, react to every one, reply, open or dismiss them, and forward them to a webhook. - [Per-app proxy](https://droidline.dev/docs/proxy/): Send chosen apps on a phone through an upstream SOCKS5 or HTTP proxy, without root, check the address they appear from, and keep credentials out of your scripts. - [Running many phones](https://droidline.dev/docs/fleet/): Name phones, run them in parallel from Python, Node.js or the shell, renew mobile IP addresses, and keep a shelf of phones connected for days. - [Server configuration](https://droidline.dev/docs/configuration/): config.toml, where the server keeps its files, and the CLI commands for tokens, relays, saved proxies and webhooks. - [Reaching phones off your Wi-Fi](https://droidline.dev/docs/remote/): Six ways to connect phones that are not on the PC's network, from a forwarded port to a relay you deploy, and how to pick one. - [Same Wi-Fi](https://droidline.dev/docs/remote/same-wifi/): The default route. The phone finds the PC with a UDP broadcast and connects directly. - [Port forwarding](https://droidline.dev/docs/remote/port-forwarding/): Forward one TCP port on your router to the PC, and phones connect to your public address over TLS, pinned to the PC's own certificate. - [Cloudflare Tunnel](https://droidline.dev/docs/remote/cloudflare-tunnel/): Expose the agent port through Cloudflare Tunnel when you cannot forward ports. Free, with a fixed address when you use your own domain. - [Cloudflare Workers relay](https://droidline.dev/docs/remote/cloudflare-workers-relay/): Deploy the Droidline relay to your own Cloudflare account when both the PC and the phones are behind NAT. No server to keep running. - [VPS or Docker relay](https://droidline.dev/docs/remote/vps-relay/): Run the relay as one binary or a Docker image on a server you control. - [Other tunnels](https://droidline.dev/docs/remote/other-tunnels/): Use ngrok, Tailscale Funnel or any HTTPS tunnel you already have, and why a VPN app on the phone conflicts with the per-app proxy. - [Troubleshooting connections](https://droidline.dev/docs/remote/troubleshooting/): What to check when a phone does not show up, will not pair, or keeps dropping. - [Troubleshooting](https://droidline.dev/docs/troubleshooting/): Fixes for the problems people meet most, by symptom: the server, pairing, phones going offline, permissions, elements that are not found, typing, screenshots and settings shortcuts. - [Security](https://droidline.dev/docs/security/): What protects your phones from other people on the network, from relay operators and from web pages, and what is out of scope. - [Protocol](https://droidline.dev/docs/protocol/): The wire format between your code, the PC server and the phones. One JSON object per line, so any language can drive a phone. - [Limitations](https://droidline.dev/docs/limitations/): What Droidline cannot do because it uses only ordinary app permissions, with the workaround where there is one. - [Glossary](https://droidline.dev/docs/glossary/): Short explanations of the words used across the Droidline docs, from accessibility service and selector to relay, route and token. - [Command reference](https://droidline.dev/docs/commands/): every command with parameters, return values and errors - [Error codes](https://droidline.dev/docs/errors/): every error code, HTTP status and whether to retry ## Source - [Repository](https://github.com/KnifeLemon/Droidline) - [Protocol specification](https://github.com/KnifeLemon/Droidline/blob/main/spec/PROTOCOL.md) - [Command definitions](https://github.com/KnifeLemon/Droidline/blob/main/spec/commands.json) - [Verification record](https://github.com/KnifeLemon/Droidline/blob/main/docs/STATUS.md) ## Optional - [Full docs as one text file](https://droidline.dev/llms-full.txt) - [Korean docs](https://droidline.dev/ko/docs/) - [Simplified Chinese docs](https://droidline.dev/zh/docs/)