
Security News
Feross on TBPN: How North Korea Hijacked Axios
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.
@revenge-mod/devtools-server
Advanced tools
WebSocket server with interactive terminal for debugging React Native apps connected via the Revenge Developer Tools client.
WebSocket server with interactive terminal for debugging React Native apps connected via the Revenge Developer Tools client.
The server package provides a WebSocket server that:
Install globally using Bun:
bun install --global @revenge-mod/devtools-server
Or using npm:
npm install --global @revenge-mod/devtools-server
Start the server with default settings:
revenge-devtools
The server runs on ws://localhost:7864 by default.
revenge-devtools [options]
--port, -p <port> - Port to listen on (default: 7864)--watch, -w [path] - Enable file watching (default: current directory if no path provided)--help, -h - Show help information# Run on a custom port
revenge-devtools --port 8080
# Enable file watching on a specific directory
revenge-devtools --watch ./src
# Enable file watching on current directory
revenge-devtools --watch
# Combine options
revenge-devtools --port 8080 --watch ./src
Once the server is running, you can use these commands in the terminal:
.clients or .lsList all connected clients with their IDs and protocol versions.
> .clients
Connected clients (2):
a1b2c3d4 - v2
e5f6g7h8 - v2
Mappings allow you to create shortcuts for accessing client-side values when executing code.
.mapShow all current mappings.
> .map
Current mappings (2):
nmp -> nativeModuleProxy
.map+ <var> <path>Add a new mapping.
> .map+ HI HermesInternal
Mapped: HI -> HermesInternal
Now you can use HI in your code:
> HI === HermesInternal
true
.map- <var>Remove a mapping.
> .map- HI
Removed mapping: HI
.setting <key> [value]Get or set a configuration setting. If no value is provided, displays the current value.
> .setting client.log.level
client.log.level: 1 (default: 1)
> .setting client.log.level 0
Set client.log.level = 0
> .setting
Current settings:
client:
log:
level: 0
interceptConsole: true
inspectDepth: 2
server:
watch:
command: false
client.log.level - Minimum log level (0=Debug, 1=Default, 2=Warn, 3=Error)client.log.inspectDepth - Maximum depth for object inspectionclient.log.interceptConsole - Whether to suggest intercepting console methods (must be manually implemented in client)server.watch.command - Command to execute when watched files changeAny input that doesn't start with a dot (.) is treated as JavaScript code and executed on all connected clients. Note that Hermes does not persist variables between executions. You can use the vars object to store persistent variables:
> x = 1 + 1
2
> x
undefined
> vars.x = 1 + 1
2
> vars.x
2
The code is executed in the client's environment with access to:
client.expose()).map+)devTools object containing the client instanceWhen the server is started with --watch, you can configure automatic code execution on file changes:
> .setting server.watch.command "console.log('Reloaded!')"
Set server.watch.command = console.log('Reloaded!')
Now whenever files change in the watched directory, the command will be executed on all clients.
.help or ?Show all available commands.
.exit, .quit, or .qShut down the server.
The server uses a simple WebSocket protocol with message types:
Hello (1) - Client introduces itself with versionHi (2) - Server responds with version compatibility and settingsLog (3) - Client sends log messagesRun (4) - Server sends code to executeThe protocol version is currently 2. Clients with incompatible versions are rejected.
You can also use the server programmatically in your own Node.js applications:
import { broadcast, sendToClient } from '@revenge-mod/devtools-server'
import { MessageType } from '@revenge-mod/devtools-shared/constants'
// Broadcast a message to all clients
broadcast({
type: MessageType.Run,
data: {
code: 'console.log("Hello from custom script")',
mappings: {}
}
})
// Send to a specific client
sendToClient('a1b2c3d4', {
type: MessageType.Run,
data: {
code: 'return user.name',
mappings: { user: 'devTools.scope.user' }
}
})
The server uses @parcel/watcher for efficient file watching. When changes are detected:
This enables workflows like:
# Watch for changes and reload a module
revenge-devtools --watch ./src
# In the server terminal:
> .setting server.watch.command "import('./myModule.js')"
This project is licensed under CC0 1.0. See LICENSE for more details.
FAQs
WebSocket server with interactive terminal for debugging React Native apps connected via the Revenge Developer Tools client.
We found that @revenge-mod/devtools-server demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.

Security News
OpenSSF has issued a high-severity advisory warning open source developers of an active Slack-based campaign using impersonation to deliver malware.

Research
/Security News
Malicious packages published to npm, PyPI, Go Modules, crates.io, and Packagist impersonate developer tooling to fetch staged malware, steal credentials and wallets, and enable remote access.