Troubleshooting
Chrome shows “No internet” / connection refused
Cause: ProxyPro is not running but the system proxy is still pointed
at 127.0.0.1:9090. Chrome obeys the system proxy → connects to dead
port → fails.
Fix — fastest:
networksetup -setwebproxystate "Wi-Fi" offnetworksetup -setsecurewebproxystate "Wi-Fi" offFix — restart ProxyPro:
cd /path/to/proxypromake devCert errors (NET::ERR_CERT_AUTHORITY_INVALID) in Chrome
You installed the CA into the login keychain but not the system keychain. Chrome reads the system keychain only.
sudo security add-trusted-cert -d -r trustRoot \ -k /Library/Keychains/System.keychain \ ~/Library/Application\ Support/ProxyPro/ca/root.pemThen fully quit Chrome (cmd+Q, not just the window) and reopen. See Install the certificate.
Cert installed but Chrome still rejects
Chrome caches trust per-process at startup. Quit ALL Chrome windows with cmd+Q (not the red X), then reopen. The new process re-reads trust from the system keychain.
Also verify the cert is actually trusted:
security find-certificate -c "ProxyPro" -p /Library/Keychains/System.keychain | \ openssl x509 -text -noout | grep -A2 "Certificate Purposes"You should see SSL/TLS listed under the purposes.
Some sites work, others don’t (Google, Facebook, YouTube)
These sites preferentially use HTTP/3 (QUIC). Chrome caches successful
QUIC sessions and bypasses our Alt-Svc strip until the cache expires.
Force HTTP/2 in Chrome:
- Visit
chrome://flags/#enable-quic - Set to Disabled
- Relaunch Chrome (the prompt at the bottom).
After this, all browser traffic falls back to HTTP/2 which ProxyPro decrypts fully.
”captures stream error CANCELLED” in the dev console
Harmless. React StrictMode in dev double-mounts the captures hook, which opens then immediately cancels a stream. The fresh re-mount opens the real stream that carries your captures.
Production builds run without StrictMode and don’t show this. The dev log was suppressed in P06.5 so you shouldn’t see it on current builds.
”Cannot find module ‘protobufjs/minimal’” at app launch
You’re on a stale build that predates the ts-proto extension fix. Run:
make proto # regenerate with importSuffix=.jscd app && pnpm buildthen relaunch.
”size mismatch” gRPC marshal error
You’re on a build that predates the Flow snapshot fix. Update + rebuild:
git pullmake enginecd app && pnpm buildIf you’ve got local changes and can’t pull: the fix is in
engine/internal/proxy/recorder.go
— OnStarted / OnCompleted must clone the Flow via proto.Clone
before buffering.
Two proxypro-engine processes after make dev
A previous dev session didn’t exit cleanly. Kill both:
pkill -f proxypro-enginepkill -f "electron.*proxypro"sleep 1make devMobile device says “Profile installation failed”
The .mobileconfig is unsigned (we don’t have a paid Apple Developer
cert). iOS shows an “Unsigned profile” warning but still allows install
— tap Install anyway, then enter your device passcode.
If the profile downloads but doesn’t open the install flow:
- Settings → General → VPN & Device Management
- The profile appears under “Downloaded Profile”
- Tap it → Install
Playwright tests fail with timeouts
You have make dev running. Both can’t bind :9090. Kill the dev
session before running E2E:
pkill -f proxypro-enginepkill -f "electron.*proxypro"cd app && pnpm test:e2eAnything else
Open an issue on github.com/trongitnlu/proxypro with the output of:
sw_versgo versionnode --versionpnpm --version~/Volumes/DATA/Project/proxypro/engine/bin/proxypro-engine --version