Playwright + residential proxies

Stop wiring proxy config into every browser context

Open a proxied shell. Run your Playwright tests. The proxy is at the shell level — your test code stays clean.

Without shellroute

playwright.config.js
const browser = await chromium.launch({
  proxy: {
    server: 'http://proxy:8080',
    username: 'user',
    password: 'pass'
  }
});

// credentials in code
// different config per provider
// every context needs it
// no country selection
// no IP rotation

With shellroute

terminal
$ shellroute
$ /connect US
  ✓ Connected — 45.12.67.89

$ npx playwright test
  8 passed (12s)

$ /rotate
  ✓ New IP: 98.34.12.56

$ npx playwright test
  8 passed (11s)

Your test code doesn't change. Playwright picks up the proxy from the shell automatically.

How it works

1

Open a proxied shell

Run shellroute and connect to a country. Your test environment, aliases, and PATH all work inside.

shellroute
/connect US
2

Run your tests normally

Playwright reads HTTP_PROXY from the shell. All browser traffic routes through the US residential exit. No proxy config in your test code.

npx playwright test
3

Switch countries or rotate IPs

Need a different country? /connect DE. New IP? /rotate. Run your tests again. No config changes.

/connect DE
npx playwright test
/rotate
npx playwright test

A real session

Test your app from the US, then from Germany, in the same terminal session.

terminal
$ shellroute

 shellroute · not connected
~ ❯ /connect US
  ✓ Connected to US — New IP: 45.12.67.89

 shellroute us · 45.12.67.89
~ ❯ npx playwright test geo-pricing.spec.ts
  ✓ US pricing page shows $49.99
  ✓ US checkout accepts USD
  2 passed (4s)

~ ❯ /connect DE
  ✓ Connected to DE — New IP: 78.46.91.23

 shellroute de · 78.46.91.23
~ ❯ npx playwright test geo-pricing.spec.ts
  ✓ DE pricing page shows €44.99
  ✓ DE checkout accepts EUR
  2 passed (3s)

~ ❯ /disconnect

Why Playwright developers use shellroute

No proxy in test code

Your Playwright config stays clean. No proxy server, username, or password in your codebase.

Residential IPs

Test with real residential connections from 120+ countries. See what actual users see.

Switch countries instantly

/connect DE and run tests again. No reconfiguration.

Rotate IPs on demand

/rotate gives you a fresh IP from a different provider. One command.

Frequently asked questions

Does Playwright automatically use the proxy?

Yes. When you launch Playwright inside a shellroute session, it reads HTTP_PROXY from the environment. All browser traffic routes through the proxy without any Playwright proxy config.

Can I test from multiple countries in one session?

Yes. Use /connect US, run tests, then /connect DE and run them again. Or open multiple shellroute sessions in different terminals for parallel testing.

What about Playwright's built-in proxy option?

You can still use it. But with shellroute you don't need to — the proxy is set at the shell level, so your test code stays clean and you can switch countries without changing config.

Does it work with Puppeteer too?

Yes. Puppeteer reads proxy settings the same way. Any browser automation tool that runs inside the shellroute session is proxied.

How much does it cost?

Residential from $3/GB, datacenter from $1/GB. Pay per use, no subscriptions. A typical Playwright test suite uses minimal bandwidth.

Open-source CLI · Prepaid usage · Residential + datacenter proxies · macOS + Linux

Start proxying your shell.

Open a session, connect a proxy, and run commands normally

Prepaid usage · Open-source CLI · No contracts