Skip to content

Migrating from Charles Proxy

If you currently use Charles Proxy and want to switch to Madhyamas (or use both), this page maps Charles features to their Madhyamas equivalents and translates common workflows.

Why Switch?

Charles ProxyMadhyamas
LicenseCommercial, paidOpen source (MIT OR Apache-2.0)
RuntimeJVM/Java (requires a JRE)Single native Rust binary
UIJava Swing desktop appEmbedded React web UI (any browser)
APIHTML-only web interfaceDocumented REST API (184 endpoints)
AI agent supportNoneBuilt-in MCP server (146 tools)
gRPCLimited (5.2 fixes only)Dedicated gRPC inspection UI
ScriptingNoneSandboxed JavaScript (boa_engine)
PluginsNoneSandboxed WebAssembly (wasmtime)

Feature Mapping

Core Proxying

Charles featureMadhyamas equivalentNotes
HTTP proxyGetting StartedSame — set proxy to localhost:8888
HTTPS/SSL MITMHTTPS & CertificatesAuto-generated CA; install via the Setup button
SOCKS proxySOCKS5 ProxySOCKS5 via --enable-socks --socks-port
WebSocket inspectionWebSocket InspectionFrame parsing, fragment reassembly
gRPC inspectionHTTP/2 & gRPCEnable HTTP/2 downstream first
Access control (IP allowlist)Access ControlCIDR-based, live updates
SSL Proxying host allowlistAll hosts intercepted by defaultUse --no-https to disable

Traffic Recording and Inspection

Charles featureMadhyamas equivalent
Recording on/off toggleRecording button in the toolbar (Recording vs Passthrough)
Recording size limitsRecording Limitsmax_requests, max_total_size_mb, max_body_size
Ignore list for recordingignored_domains config with wildcard/suffix matching
Structure view (tree by host)Web UI tree view
Sequence view (chronological)Web UI list view
Focus (highlight hosts)Focus
Chart/timeline visualizationTimeline View — waterfall with status-color-coded bars
Request/response viewersDetail panel tabs (Request, Response, Timing, Preview)
zstd content-encodingOn-demand decompression toggle in the body viewer
Find in sessionSearch bar and advanced filter builder

Sessions

Charles featureMadhyamas equivalent
Multiple named sessionsSessions
Save / re-open sessionsExport/import via API or CLI
Clear sessionPOST /api/traffic/clear or madhyamas traffic clear
Switch active sessionPOST /api/sessions/{id}/switch or the Sessions view
Session exportHAR + cURL (Charles also supports CSV/Trace/XML)
Session importImporting HAR Files

Modifying Traffic

Charles featureMadhyamas equivalent
BreakpointsBreakpoints
Map Local / Map RemoteRewrites + Rewrite Templates
RewriteRewrites
Block ListBlock List
ThrottlingThrottling — latency, bandwidth, packet loss
Repeat / Repeat AdvancedReplay — single, edit-then-repeat, and batch
Compose (edit & resend)Edit-then-Repeat in the Replay view
MocksMocks — collections, recording, conditional, probabilistic

Tools

Charles featureMadhyamas equivalent
No Caching / No CookiesRewrite Templates
MirrorMirror
Auto SaveAuto Save
Process info (which app made a request)Not supported
Validate (HTML/CSS validation)Not supported

Export and Import

Charles featureMadhyamas equivalent
HAR exportGET /api/export/har or madhyamas export har
cURL exportGET /api/export/curl/{id} or madhyamas export curl <id>
HAR importImporting HAR Files
Mock import/exportGET /api/mocks/export, POST /api/mocks/import
Config import/exportGET /api/config/export, POST /api/config/import (enterprise)

Workflow Translation

Importing a Charles Session

Charles can export HAR files, which Madhyamas imports directly:

  1. In Charles, select a session and choose File → Export → HAR.
  2. In Madhyamas, import the HAR file:
    bash
    curl -X POST -H 'Content-Type: application/json' -d @session.har \
      http://localhost:3001/api/traffic/import/har
    Or use the web UI's Import button. The HAR is imported as a new session — your live capture is untouched. See Importing HAR Files.

Replacing Map Local with Rewrites

Charles's Map Local (serve a local file for a URL) maps to a rewrite that replaces the response body. Charles's Map Remote (redirect a URL to another server) maps to a rewrite that changes the request URL.

Replacing Charles Breakpoints

Charles breakpoints pause traffic for manual editing. Madhyamas breakpoints work the same way — set a condition (URL pattern, method, status code), and matching traffic pauses in the web UI for you to inspect and modify before continuing.

Replacing Repeat Advanced

Charles's Repeat Advanced (repeat N times with concurrency) maps to Madhyamas Repeat Advanced / batch replaymadhyamas replay run-advanced <id> --iterations N --concurrency C --delay-ms D.

Features Charles Has That Madhyamas Doesn't

These Charles features have no Madhyamas equivalent today:

  • Reverse proxy
  • Port forwarding (TCP/UDP)
  • Auto browser/OS proxy configuration
  • NTLM authentication pass-through
  • CSV / XML / Trace session export
  • .chlz session format
  • Built-in HTML/CSS validation tool
  • Client process tracking (which app made a request)
  • Native iOS app

Features Madhyamas Has That Charles Doesn't

See also

Released under the MIT OR Apache-2.0 License.