Now open for signups

Instant phone controllers
for indie games

Let your players turn their phone into a game controller in under 2 seconds. Don't spend time building and maintaining a controller for your game and the networking infrastructure to keep it running — spend that time on what you care about, your game!

<20ms latency Up to 32 players Scan to play No app install

Built on the gamepad your players already know

One full-featured game controller — themeable per game, reactive to what's happening on screen, with optional native-app polish. Players scan a QR from inside your game and connect instantly — no app download required.

Familiar gamepad buttons and joystick

D-pad, thumb-stick, A/B/X/Y face buttons, L/R triggers, and a pause button — the layout players already know. Inputs stream to your game in under 20ms on local WiFi.

Inputs

D-pad / joystickA / B / X / YL / R triggersPause

Customizable per game

Theme the controller to match your game — button palette, accent color, labels, which controls are visible. Configured once in the dashboard, pushed to every player — no rebuild, no code change.

Configurable

Button visibilityColors & labelsJoystick vs D-padAccent theme

Put your HUD on the controller

Health, stamina, ammo, score, mini-map — any HUD element can render on the player's phone instead of cluttering the main screen. In local multiplayer, each player sees their own stats privately; the TV stays clean.

Render on phone

Health / staminaScore / comboAmmo / inventoryPer-player only

Dialogue choices, polls, and text prompts

Trigger a question from your game and the phone pops a full-screen overlay — single choice, multi-select, or free text. Answers stream back as they come in; your code awaits the result and moves on.

Prompt types

Single choiceMulti-selectFree textPer-player or all

Reactive to game state

Your game broadcasts state, the controller reflects it. The pause button flips live when you pause, the UI tints with each player's team color, a 'your turn' indicator lights up in turn-based rounds, and the whole controller dims when a player is eliminated.

Reactive to

Pause / resumePer-player colorYour-turn indicatorEliminated / spectating

Persistent user profiles

Players set their display name and avatar once on their phone — it rides into every game built on dropcontroller. No 'what should I call you?' on every round, and the identity survives reconnects, WiFi roams, and return visits.

Profile carries

Display nameAvatarAcross sessionsAcross games

Extendable modules

Beyond the gamepad, compose purpose-built modules into the controller: a private inventory, a hidden card hand, a mini-map, a drawing canvas, or tilt/motion input. Each one is a drop-in component that stacks alongside the rest — and you can ship your own.

Module library

InventoryCard handMini-mapDrawing canvasTilt / motion

Bring the controller to life with the (optional) iOS controller app

Players who install the free dropcontroller iOS app get haptic rumbles that actually feel like a real gamepad — your game's events drive them directly, so hits land with a thump, engines purr, and close calls buzz under the player's thumbs. Same API, same events — no browser chrome, faster resume, and your code doesn't change.

App adds

Haptic rumbleNo browser chromeFast resumeFree on App Store

Familiar gamepad buttons and joystick

D-pad, thumb-stick, A/B/X/Y face buttons, L/R triggers, and a pause button — the layout players already know. Inputs stream to your game in under 20ms on local WiFi.

Inputs

D-pad / joystickA / B / X / YL / R triggersPause

Customizable per game

Theme the controller to match your game — button palette, accent color, labels, which controls are visible. Configured once in the dashboard, pushed to every player — no rebuild, no code change.

Configurable

Button visibilityColors & labelsJoystick vs D-padAccent theme

Put your HUD on the controller

Health, stamina, ammo, score, mini-map — any HUD element can render on the player's phone instead of cluttering the main screen. In local multiplayer, each player sees their own stats privately; the TV stays clean.

Render on phone

Health / staminaScore / comboAmmo / inventoryPer-player only

Dialogue choices, polls, and text prompts

Trigger a question from your game and the phone pops a full-screen overlay — single choice, multi-select, or free text. Answers stream back as they come in; your code awaits the result and moves on.

Prompt types

Single choiceMulti-selectFree textPer-player or all

Reactive to game state

Your game broadcasts state, the controller reflects it. The pause button flips live when you pause, the UI tints with each player's team color, a 'your turn' indicator lights up in turn-based rounds, and the whole controller dims when a player is eliminated.

Reactive to

Pause / resumePer-player colorYour-turn indicatorEliminated / spectating

Persistent user profiles

Players set their display name and avatar once on their phone — it rides into every game built on dropcontroller. No 'what should I call you?' on every round, and the identity survives reconnects, WiFi roams, and return visits.

Profile carries

Display nameAvatarAcross sessionsAcross games

Extendable modules

Beyond the gamepad, compose purpose-built modules into the controller: a private inventory, a hidden card hand, a mini-map, a drawing canvas, or tilt/motion input. Each one is a drop-in component that stacks alongside the rest — and you can ship your own.

Module library

InventoryCard handMini-mapDrawing canvasTilt / motion

Bring the controller to life with the (optional) iOS controller app

Players who install the free dropcontroller iOS app get haptic rumbles that actually feel like a real gamepad — your game's events drive them directly, so hits land with a thump, engines purr, and close calls buzz under the player's thumbs. Same API, same events — no browser chrome, faster resume, and your code doesn't change.

App adds

Haptic rumbleNo browser chromeFast resumeFree on App Store

Try it right now

Tap in for a live game controller — no signup, no install.

Try the game controller demo →

Drop in a controller. Ship.

Host a room, pass "gamepad", handle inputs. That's the whole SDK surface.

Your Unity game — that's literally it
using DropController;

var room = await DropController.Host(
    new HostOptions(appId, apiKey)
        .WithControllerTemplate("gamepad")
);

room.OnPlayerJoined += (e) => {
    Debug.Log($"{e.Player.Name} joined");
};

room.OnControllerInput += (e) => {
    // e.Input is a gamepad event: button, stick, trigger, dpad, or pause.
    HandleGamepadInput(e.Player, e.Input);
};

Unity (Asset Store distribution) and JavaScript today. Godot, Bevy, LÖVE, and Phaser SDKs in the monorepo — landing soon.

Ship a game, not a platform

The real-time stack is handled. You keep your revenue, your brand, and your engine of choice.

Networking handled

  • <20ms latency — direct WebRTC on local WiFi
  • Transparent relay fallback on restrictive networks
  • Zero-loss reconnection across screen locks and WiFi roams

SDK, not a walled garden

  • Keep 100% of your revenue — no platform cut
  • Ship anywhere — Steam, consoles, your own site
  • Your brand on top — dropcontroller is invisible infrastructure

Your stack, any browser

  • Unity · Unreal · Native · JS — plus raw WebSocket
  • Any mobile browser — no app install, QR to join
  • Offline / LAN capable once players connect

Want the deeper dive — ordered delivery, binary wire protocol, edge signaling? Read the architecture →

On the roadmap — v2

A GraphQL API for everything your players own.

Profiles, characters, worlds, and the objects placed inside them — one typed graph your game can query. Dropcontroller handles the account, the schema, and the sync. No auth screens, no backend to run, no "save got wiped when I switched devices."

Profile & preferences, set once

Display name, avatar, handle, controller preferences — set the first time a player scans a QR to join any game. Every dropcontroller room they join after picks it up automatically.

On the Player object

When a phone joins a room, the SDK hands your game everything you need to render a profile next to the score:

{
  id: "plr_8kQ...",
  displayName: "Zoe",
  avatar: "https://...",
  preferences: { /* ... */ },
}

Many gamesaves per player, per game

A player keeps as many parallel saves in your game as they want — a fresh run, last weekend's campaign, the world they're building with their sister. List them, pick one, keep going.

const saves = await player.listSaves();
// [{ id, name, updatedAt, ... }, ...]

Save the world — or just the seed

A gamesave holds a world blob (full state), a seed (for procedurally-generated starts), and characterRefs pointing at the player's characters. Share a seed as a string and a friend can spawn the exact same starting world.

await save.write({
  seed: "emerald-harbor-1847",
  world: { /* tiles, state, your shape */ },
  characterRefs: ["chr_..."],
});

Characters live on the player, not the save

Level, loadout, skin, unlocks — character data sits on the player's account, separate from any particular world. Take your level-40 rogue into a brand-new seed, a friend's hosted save, or your own campaign from last month. One character, many worlds.

Objects belong to the world

A castle your friend built, a chest your party dropped, the shop Seraphine set up — objects live inside the world they were placed in. Unlike characters, they don't travel with the player. Visit a friend's world and you see everything they've built; go home and your own world is untouched.

Pricing that stays out of your way

The SDK is free. Local network sessions always cost $0. You only pay when traffic routes through our cloud relay.

Hobbyist

$0 Free forever

Personal projects, prototypes, learning

  • Unlimited local-network sessions
  • Up to 32 devices, under 20ms latency
  • Discovery, session management, reconnection
  • End-to-end encryption
  • Full no-code controller designer
  • 100 MB player data storage
Start free
Most popular

Pro

$5 per month

Indie games and small commercial projects

  • Everything in Hobbyist
  • 3,500 cloud relay device-minutes included
  • 5 GB player data storage included
  • Analytics dashboard and session insights
  • Custom branding / white-label controllers
  • Priority support
Sign up

Usage overages

When you exceed your Pro tier limits

Additional relay device-minutes
$0.002

per device-minute

Relay data transfer
$0.10

per GB

Additional player data storage
$0.50

per GB / month

Contact us for volume pricing if you're consistently exceeding 50,000 device-minutes per month.

We can't wait to see what you make

Don't spend time building and maintaining a controller for your game and the networking infrastructure to keep it running. Put that time into the gameplay that makes people laugh, compete, and come together around a screen.