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.
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.
What this does and what it doesn't.
| Question | Answer |
|---|---|
| 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. |