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.