Skip to content

Introduction ​

Remote DevTools lets you inspect and control a running app from your computer. You add the JavaScript SDK to your app (React Native / Expo, a web page or Node), pair the app with the Remote DevTools UI, and get tabs for logs, network requests, state, storage, feature flags, functions you expose and panels you design yourself.

It is built for the moments when the usual debugger is out of reach: a physical phone on the desk, a TestFlight or internal build, a QA colleague's device, or a production build where you switched the developer menu on.

How it fits together ​

┌──────────────────────────┐   ws / wss   ┌────────────────────────────┐
│ Your app                 │◄────────────►│ Relay                      │
│  └─ @himmetkaan/remote-  │  /ws/device  │  sessions · pairing ·      │
│     devtools + modules   │              │  forwards module messages  │
└──────────────────────────┘              └─────────────┬──────────────┘
                                                        │ /ws/ui
                                          ┌─────────────┴──────────────┐
                                          │ UI (React)                 │
                                          │  ├─ desktop app (Electron, │
                                          │  │   relay built in)       │
                                          │  └─ browser (Docker image) │
                                          └────────────────────────────┘
  • SDK — a thin core plus optional modules. It is off by default: until you pass enabled: true it opens no socket, patches nothing and every API is a no-op.
  • Relay — a small Node server that pairs devices with UI sessions and forwards messages. It never looks inside module messages, so new modules need no relay changes. It runs inside the desktop app, or as a Docker image you host.
  • UI — shows one tab per capability the app reports. A tab only appears if the app enables that module. The UI keeps everything in memory; closing it discards logs and requests.

Tabs ​

TabAppears whenWhat it does
📜 LogsAlwaysDevice logs and connection / lifecycle events; level, source and tag filters, search
🌐 NetworknetworkModule()Requests and responses; filters, JSON tree, cURL, HAR / JSON export
🧩 FunctionsfunctionsModule()Functions the app registered; arguments rendered as forms
🗄️ StoragestorageModule()AsyncStorage / MMKV / localStorage / SecureStore keys; view, edit, delete
🧠 StatestateModule()Redux / Zustand state as a JSON tree with a live change timeline
🚩 FlagsflagsModule()Flags the app defined; type-aware editors and persistent overrides
🧱 CustompanelsModule()Your own panels: text, stats, key-value, tables, JSON, buttons, forms

Several devices can be connected at once; pick one in the sidebar.

Packages ​

PackagePurpose
@himmetkaan/remote-devtoolsThe JS SDK (React Native, browsers, Node) with all built-in modules
@himmetkaan/remote-devtools-protocolMessage types, the field DSL and helpers shared by the SDK, relay and UI
@himmetkaan/remote-devtools-mdnsOptional mDNS (Bonjour) discovery for React Native and Node
Desktop appmacOS app with the relay and UI built in (Desktop app)
Docker imageRelay + UI for a server or your LAN (Self-hosting)

The wire protocol is documented in full (Protocol), so SDKs for other platforms can be written against it (Writing an SDK).

Next steps ​

Released under the MIT License.