Instant phone controllers
for indie games
Turn any phone into a game controller in under 2 seconds. Stop building and maintaining networking infrastructure — spend that time on your game instead.
Drop in a controller. Ship.
Pick one — buzzer, drawing pad, steering wheel — and handle inputs.
let room = try await Beacon.host(controllerTemplate: "trivia-buzzer")
room.onPlayerJoined { player in
print("\(player.name) joined with buzzer ready")
}
room.onControllerInput { player, input in
// Player pressed their buzzer, drew something, moved a slider, etc.
handlePlayerAction(player: player, input: input)
} Unity SDK (primary, Asset Store distribution), Unreal, native iOS / Android TV / macOS / Windows, and plain WebSocket for everything else.
Ready-made controllers
Ship on day one with production-ready controllers — or open the no-code designer and drag-and-drop your own. Users scan a QR Code from within your game or app, and instantly pull up a controller configured to your game and connect - no app download necessary.
Game Controller
D-pad, buttons, and joystick. The host receives directional and button events — ready for action games, trivia buzzers, or any input that maps to discrete controls.
Phone sends
Trackpad & Keyboard
Phone becomes a touch surface and text input. The host receives normalized pointer coordinates and keystrokes — for presentations, kiosks, or collaborative control.
Phone sends
Poll
Multiple choice, rating scales, or free response. The host receives aggregated results in real time — for classrooms, live events, and audience Q&A.
Phone sends
Drawing Canvas
Freeform drawing surface with color and brush controls. The host receives stroke paths as they're drawn — for Pictionary, whiteboard annotation, or collaborative art.
Phone sends
Motion Sensor
Streams accelerometer and gyroscope data from the phone hardware. The host receives orientation vectors — for tilt steering, shake gestures, or Wii-style controls.
Phone sends
Media Remote
Transport controls for media playback. The host receives play, pause, seek, and volume events — for video walls, shared music, or watch parties.
Phone sends
Need something custom? Open the controller designer and drag together buttons, sliders, touch areas, and gyroscope controls. Mix types in a single session — some players on buzzers, others on drawing pads.
Ship a game, not a networking platform
Every piece of the real-time stack — direct peer-to-peer data channels, NAT traversal, ordered delivery, transparent relay fallback — engineered for low latency. Handled so you can put that time into the part players actually care about.
Direct peer-to-peer data channels
Once the handshake completes, phone and host exchange inputs over a WebRTC data channel — not through our servers. On the same WiFi, ICE picks a host-candidate pair and the data path stays on the LAN.
Cloudflare-edge signaling
Room matching, SDP/ICE exchange, and TURN credential minting all run on Cloudflare Durable Objects at the edge. Short-lived TURN credentials are scoped per room, so the relay is authenticated and credentials don't outlive the session.
Transparent relay fallback
When NAT traversal fails on restrictive networks, traffic falls through to a TURN relay. Same API, same event shapes, same ordering — your code never branches on transport.
Per-player ordered delivery
Each phone owns one ordered WebRTC data channel. Inputs from that phone arrive in emit order, guaranteed — so high-frequency streams never reorder against discrete events.
Frame-coalesced high-rate inputs
Joystick samples are batched with requestAnimationFrame, so fast thumbstick drags produce one send per display frame instead of flooding the channel. Discrete events (button presses, buzzer taps, pause) flush immediately.
Binary-framed wire protocol
Input events are MessagePack-encoded — a stick sample is around 22 bytes on the wire versus 55+ as JSON. Smaller packets, faster parsing on mobile CPUs, better behavior on congested WiFi.
Zero-loss reconnection
When a phone drops (screen lock, WiFi roam, 2.4↔5GHz band switch), the server holds its slot for a 60-second grace window. Inputs buffer locally and replay in order once the phone re-attaches with its resume token.
Observable transport state
Each session exposes its live transport — local, direct-wan, or relay — via ICE candidate-pair inspection. React to transport changes in-app, or pin a room to local-only for offline deployments.
SDK, not a walled garden
The other option is to ship inside someone else's player, hand over 30% of your revenue, and let their brand sit on top of your game. poketsticks is the SDK — you keep everything.
Works where you build, runs where your players are
Integrate in your engine of choice. Controllers run in any mobile browser — no app store required.
Game development
- U Unity — primary SDK, Asset Store distribution
- UE Unreal Engine — C++ SDK
- NA Native — iOS, tvOS, Android TV, macOS, Windows
- JS Web games — JavaScript SDK for browsers
- WS Custom — WebSocket API for any platform
Controller deployment
- Zero app installs — runs in any phone browser
- Universal — iOS Safari, Android Chrome, any mobile web
- Offline capable — works on LAN with no internet once connected
- QR code joining — scan and play in under 5 seconds
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
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
Commercial
Indie games and small commercial projects
- Everything in Hobbyist
- 3,500 cloud relay device-minutes included
- Analytics dashboard and session insights
- Custom branding / white-label controllers
- Priority support
Enterprise
High-volume games, venues, corporate training, education
- Dedicated relay infrastructure
- Volume discounts
- SLAs and dedicated support
- Custom integrations
- Procurement, legal, and security review
Usage overages
When you exceed your Commercial tier limits:
per device-minute
per GB
What 3,500 device-minutes covers
- • ~75 sessions, 4 devices for 12 minutes each
- • ~50 sessions, 4 devices for 18 minutes each
- • ~115 sessions, 3 devices for 10 minutes each
Most indie games stay well within this limit. Only your most successful titles will generate meaningful overages.
Contact us for volume pricing if you're consistently exceeding 50,000 device-minutes per month.
The next Jackbox could be yours
Stop building and maintaining networking infrastructure. Put that time into the gameplay that makes people laugh, compete, and come together around a screen.