Self-hosted · Open Source

Network Diagnosis
for your own server

FluxTest is a self-hosted network diagnosis tool that measures latency, download, and upload throughput between a browser and your infrastructure — not a third-party CDN.

View on GitHub Quick Start
Server my-homelab-01
Status Online
Latency 4 ms
Jitter 1.2 ms
Bloat +3 ms
Download
102 Mbps
Elapsed
00:15
Downloaded
66 MB
Upload
45 Mbps
Elapsed
00:15
Uploaded
24 MB
Test Complete
Connection Analysis
Save Report
90 /100
A - Exceptional
Overall Score
⏱
Latency Excellent — 4 ms

Exceptional RTT for latency-sensitive workloads and real-time APIs.

〰
Jitter Stable — 0.2 ms

Consistent timing for VoIP, WebSockets, and collaborative apps.

↓
Download Excellent — 102 Mbps

Strong ingress capacity with low packet-delay side effects.

↑
Upload Good — 45 Mbps

Reliable egress for backups, commits, and replication jobs.

🫧
Bloat Minimal — +3 ms

Queueing stays controlled when download load ramps up.

🖥
CPU Healthy — 34%

Server CPU headroom indicates throughput is not CPU-capped.

💾
Memory Healthy — 48%

Memory usage remains stable during both transfer phases.

⇢
NIC TX Avg Aligned — 101 Mbps

Download throughput aligns with measured server transmit average.

⇠
NIC RX Avg Aligned — 44 Mbps

Upload phase uses RX averages for accurate direction-aware analysis.

What it does

Built for real infrastructure

Everything you need to accurately measure network performance between your client and your own server.

Live Network + Server Telemetry

Track download/upload rings alongside live server CPU, memory, and NIC TX/RX during each test phase.

Latency, Jitter & Bloat

5 sequential pings compute average RTT and jitter (stddev). During download, concurrent pings detect bufferbloat — exposing connection stability under load.

Self-Hosted

Test against your own VPS, home-lab, edge node, or bare-metal server — not a third-party CDN.

Docker-Ready

Pre-built image on GHCR. One docker compose up command to deploy with Gunicorn and Traefik labels.

Secure by Design

Streaming chunks prevent memory exhaustion. Server-side upload ceiling stops runaway workers. Cache-control on all data endpoints.

9-Metric Analysis & Stable Export

Scores now combine latency, jitter, throughput, bloat, CPU, memory, and NIC alignment. Save a fixed-width 640px report with dynamic height for consistent sharing across devices.

Under the hood

How a test works

1

Latency & Jitter Probe

Five /ping requests are fired sequentially. Average RTT is your latency; the standard deviation across those five samples is your jitter.

2

Download + Bloat Probe (15 s)

The server streams 1 MB random chunks. The browser reads the stream and computes live speed. Concurrently, periodic /bloat pings measure latency under load to detect bufferbloat.

3

Upload (15 s)

The browser generates random 64 KB chunks via ReadableStream for 15 s, then closes. The server counts received bytes and returns the result.

4

System-Aware Score & Export

A weighted 9-metric model combines network quality with CPU, memory, and phase-average NIC alignment. Save Report exports a stable 640px PNG with dynamic height.

Full test completes in ~35 s regardless of connection speed
Deploy

Up in seconds

No configuration files to edit. One command and you're testing.

Option A — Docker Compose
docker-compose.yml
services:
  speedtest:
    image: ghcr.io/siddheshgunjal/flux-test:latest
    container_name: flux-test
    ports:
      - "4855:4855"
    environment:
      - SERVER_NAME=${HOSTNAME:-my-server}
    restart: unless-stopped
    deploy:
        resources:
            reservations:
                memory: 256M
                cpus: 0.5
    labels:
        - "traefik.enable=true"
        - "traefik.http.routers.speedtest.rule=Host(`speedtest.example.com`)"
        - "traefik.http.routers.speedtest.entrypoints=websecure"
        - "traefik.http.routers.speedtest.tls.certresolver=letsencrypt"
terminal
# start
docker compose up -d

# stop
docker compose down
Option B — Docker run
terminal
docker run --rm \
  -p 4855:4855 \
  -e SERVER_NAME=${HOSTNAME} \
  ghcr.io/siddheshgunjal/flux-test:latest

Access the UI at http://your-server-ip:4855. For HTTPS, place it behind a reverse proxy such as Traefik or Nginx with TLS termination.

Intended Use

Not just another speed test

What it's great for

  • · Validating client-to-server throughput on your home lab
  • · Testing VPS network performance after provisioning
  • · Diagnosing bandwidth bottlenecks on Tunnels or Proxies
  • · Checking edge node connectivity in private clouds
  • · Verifying network after Docker/K8s deployments
  • · Correlating app throughput with live CPU, memory, and NIC TX/RX averages
  • · Getting a weighted connection score with production-ready recommendations
  • · Exporting consistent fixed-width report cards to document baselines

What it's not

  • · A public ISP speed benchmark (no geographically distributed nodes)
  • · A replacement for Speedtest.net or fast.com
  • · Designed to be exposed publicly on the internet
  • · A synthetic traffic generator for load testing or benchmarking
Built with

Tech stack

⬡ Python ⬡ Docker ⬡ React ⬡ Tailwind CSS
FluxTest

Ready to test your own server?

Deploy in one command. No accounts, no data sent to third parties.