netplex. Early Access is open. Join the list to get in first.
netplex./For developers
For developers Your own computer No cloud account

Test your app on a real network.
From your own computer.

Send your project to netplex., connect it to a database or another service, make the link slow or lossy, and run your tests against it. Your code goes to your own netplex. server and nowhere else.

Get netplex. free See the commands
Four steps

Push. Connect. Break the link. Run your tests.

Every command below was run against a real netplex. server before it went on this page. Replace NETPLEX_URL with your server's address.

1. Push your project

Make a push token in Settings → Push your code (it can send code and nothing else). Then, from your project folder, you only need tar and curl:

tar --exclude=.git --exclude=node_modules --exclude=__pycache__ -cz . \
 | curl -sS -H "Authorization: Bearer $NETPLEX_TOKEN" --data-binary @- \
   "$NETPLEX_URL/api/v1/images/push?name=myapp"
Detecting build type
Found a Dockerfile
Building user/admin/myapp:build-07950710
Registering myapp in Your images
Ready - drag myapp from the palette

netplex. only receives what you send. It never reaches out to GitHub or anywhere else to fetch your code.

2. Describe the setup and start it

Put a netplex.yaml next to your code. List your services and the link between them, with the delay and packet loss you want on it:

version: 1
name: my-app-test
services:
  app:
    build: .
  db:
    image: postgres:16
links:
  - between: [app, db]
    latency_ms: 200
    loss_pct: 5
netplex dev up --wait-ready --timeout 180 --down-on-fail
[netplex dev] bootstrap addresses for 'app': eth0=10.200.0.1
[netplex dev] bootstrap addresses for 'db': eth0=10.200.0.2
[netplex dev] impairment applied: app<->db {'delay_ms': 200, 'jitter_ms': 0, 'loss_pct': 5}
[netplex dev] ready.

Each link gets its own addresses (here 10.200.0.1 and 10.200.0.2). Use those addresses to reach the other service. The command waits until every service is running, and exits with an error if that takes too long.

3. Make the network worse, live

Change the delay or loss on the running link, or use a ready-made case: flaky, slow, lossy, satellite, clean. You can also cut the cable and plug it back in.

netplex dev impair app db --latency 400 --loss 0
netplex dev exec app -- ping -c 4 10.200.0.2
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 800.475/801.258/803.506 ms
netplex dev impair app db --preset flaky
netplex dev partition app db     # cable pulled
netplex dev heal app db          # cable back

The delay is applied in both directions, so 400 ms on the link shows as about 800 ms round trip.

4. Run your tests and clean up

netplex dev exec runs your command inside the service and gives back that command's own exit code. Your test is the judge; netplex. only builds the network.

netplex dev exec app -- pytest tests/integration
netplex dev down --delete
[netplex dev] lab 23fa3b88-... stopped and deleted.

Keep editing without rebuilding

Push once as Run your code (nothing is built, your folder is mounted), then sync changes as you save:

tar -cz . | curl -sS -H "Authorization: Bearer $NETPLEX_TOKEN" --data-binary @- \
  "$NETPLEX_URL/api/v1/images/push?name=myapp&engine=docker&build=mount&base_image=python:3.12-slim&command=python%20app.py"
netplex dev watch myapp .
synced 3 files to myapp at 22:19:49

Images pushed with a normal build cannot be synced live. Push them again as Run your code.

Let your AI look at the lab

netplex. has an MCP server, so an AI assistant that speaks MCP can see your running lab. Make a token in Settings → Connect your AI and point your assistant at:

$NETPLEX_URL/api/v1/mcp

Beta. It is a different token from the push token. Which actions the assistant may take depends on your plan.

Plain facts

What this does and what it doesn't.

QuestionAnswer
Works with no internet?Yes. Push, build, run and the delay and loss settings all run on your own server.
Pulls code from GitHub for you?No. You send the code; netplex. never fetches it.
Needs a cloud account?No.
Judges your tests pass or fail?No. Your own test command decides, and dev exec passes its exit code through.
Where does it run?On a netplex. server: x86-64 Linux, or the appliance image. You drive it from any computer with tar and curl.
Same lab in the browser?Yes. The lab you start from the command line shows up on the canvas, where you can open consoles and capture traffic.