Inspect your running app.

Run code inside your live app. $app.get(UserService) returns the real instance.

$npm install -g appwire
appwire · ipc:main.ts
try:
works with

Up and running in three steps.

01

Install

One global install. No config files, no plugins, no framework changes.

$ npm install -g appwire
02

Attach

Run appwire in your project root. Entry point auto-detected, TypeScript runtime resolved, agent injected.

$ appwire
03

Evaluate

You're in. Call services, read env vars, query the database. Your app keeps running.

> $app.get(UserService)

Inspect your app while it runs.

Call services, read env vars, query the database. Your app keeps running.

Inspect any service

Call DI-injected services, query the database, and read env vars from one prompt.

Log streaming

console.log output streams inline with your eval results. Logs and return values appear in order, in context.

TypeScript-native

Full ts-node and tsx support. Import and evaluate TypeScript directly, against your project's types.

Framework context

$app is wired to your NestJS DI container. Resolve any service, repository, or provider in the live app.

Multi-line editor mode

Drop into block mode with .editor for multi-statement evals. Write async functions, loops, or conditional logic inline.

Smart serialization

Handles undefined, bigint, circular refs, and Errors with stack trimming. Results display correctly across all types.

appwire · ipc:main.ts

Zero config. Real data.

One command to start

Run appwire from your project root. Entry point auto-detected from package.json, TypeScript runtime resolved from devDependencies, agent injected.

$ appwire
appwire: detected entry src/main.ts (from scripts.start)
appwire: using ts-node for TypeScript
appwire: starting src/main.ts ...
appwire: app ready (42 services)
appwire(ipc:main.ts) >

Benchmark anything

Time any expression N times against your real DI and database. Reports avg, min, and max.

> .timeit 100 cache.get('session:1')
{ userId: 1, role: 'admin' }
  runs: 100  avg: 0ms  min: 0ms  max: 1ms

Introspect live values

.doc shows the class name, every method with its signature, and own properties on any value.

> .doc $app.get(AuthService)
  AuthService
  login(dto)  logout(userId)
  validateToken(token)

Give your AI editor a live
window into your app.

appwire-mcp spawns your app the same way appwire does. No separate process needed. Claude Code, Cursor, Zed, and Cline can call evaluate, list_services, and ping directly inside your running app.

evaluateRun code in the app's VM context
list_servicesList all DI providers
pingCheck agent health
Read the MCP guide →
.claude/settings.json
{
  "mcpServers": {
    "appwire": {
      "command": "appwire-mcp"
    }
  }
}

Reach for appwire when it matters.

Debug a production incident

Logs show a 500 but the stack is missing context. Call the failing service, inspect its state, and run the query against live data — without restarting.

Explore unfamiliar code

.services lists every DI provider. .doc shows every method and signature. Call them and see what they return against real data.

Script against live data

Need to backfill a column or test a migration? Use .editor mode for multi-line TypeScript against your real database — no throwaway script files.

Common questions.

No. The bootstrap is injected via --require only when appwire spawns your process. When running normally — in CI, in production, anywhere without appwire — the module is never loaded. Zero overhead.

Yes. APPWIRE=1 gates the IPC channel, not NODE_ENV. appwire sets it when it spawns your process, so it works on any environment. The agent binds to 127.0.0.1 only, never exposed externally.

Node.js 18 and above. Works with ts-node, tsx, and plain JavaScript projects.

NestJS is auto-wired with no configuration. For plain Node, Express, or Fastify, call startAppwireAgent() and pass whatever context keys you want available in the REPL.

A debugger pauses execution. appwire runs code alongside your app — it keeps serving requests while you evaluate in a parallel VM context. No breakpoints, no stepping, no pausing.

appwire-mcp exposes the same capabilities to AI editors — Claude Code, Cursor, Zed, Cline. It spawns your app the same way appwire does and surfaces evaluate, list_services, and ping as MCP tools your AI can call directly.

Still have questions? Ask on GitHub Discussions →

Get started
in one command.

$ npm install -g appwire

MIT license · No signup required