Skip to main content

texas2step

Throughput, latency, jitter and packet loss between endpoints, measured from a web browser. Open the page and press Start. texas2step measures the path between you and the server with multi-stream HTTP transfers, latency probes idle and under load, and real UDP packet loss over WebRTC, then shows every figure as discrete metrics and graphs. The same measurements are available as a REST API, a Python CLI, and server-to-server functions.

Download in progress

Inspired by speed.cloudflare.com (cloudflare/speedtest), but self-hosted: a Python server, a dependency-free TypeScript client, and no third-party services, so it works on air-gapped and internal networks.

What it measures

Metric How Transport
Latency 20 keep-alive pings, timed with Resource Timing, server time removed HTTP
Jitter Mean absolute difference between consecutive RTTs HTTP
Download / upload N parallel streams for T seconds, 100 ms timeline, ramp-up excluded HTTP
One stream One stream's download for the same time: what a single file copy gets HTTP
Latency under load Probes every 250 ms on a separate connection during each transfer, graded A+ to F WebSocket
Packet loss Numbered probes on an unreliable data channel, echoed and stamped by the server; each direction's loss and delay apart UDP (WebRTC)
Stream fairness Per-stream rates and Jain's index HTTP
Call quality A G.711 call's MOS (1 to 5) each way, from the ITU-T E-model: delay, and packets lost, late or in bursts derived
Responsiveness Round trips per minute under load, on new connections and the loaded one, as the IETF draft and macOS's networkQuality count them HTTP, WebSocket
Readiness Grades for streaming, video calls, reaction time/VDI/SSH and bulk transfers derived

Details and definitions: docs/methodology.md. What the scores mean to the people using a connection: docs/experience.md.

Results

The UI has five views: Test (gauge, live link animation, charts, exportable and shareable results), Monitor (continuous UDP probing with a scrolling RTT and loss trace, to one server or to two at once for a side-by-side comparison, or a voice or video call's packets scored every 10 seconds), Diag (HTTPS, WebSocket and UDP over IPv4 and IPv6, tried once a second, with your addresses, NAT, TLS and an event log), History (saved runs and trend), and API (copy-ready examples). A site can hide any of them (page_test, page_monitor, page_diag, page_history, page_api). Every chart has a hover readout and a table equivalent.

Visitors pick a theme from the header: Light, Dark, America, Energy, Federal, Military or Texas, or one that follows the OS. A page-size drop-down beside it (70% to 125%) fits more on smaller screens. Operators can rename the site, add their logo, organization and support links, show a notice on every page and set the default theme; see Branding and themes.

Install

On an Ubuntu 26.04 LTS server that already runs nginx, install the Debian package from the releases page and add one line to your site's server { } block:

sudo apt install ./texas2step-*-amd64.deb        # the package from the releases page
#   in /etc/nginx/sites-available/<your site>:  include snippets/texas2step.conf;
sudo nginx -t && sudo systemctl reload nginx     # → https://www.example.net/texas2step/

Or let texas2step-setup, which ships next to the .deb, check the server first. It reports what it will change and what you must fix, then writes an install script for that server. The script installs, reinstalls or upgrades texas2step, merges your settings into the new template, publishes it through nginx and opens the UDP range:

sudo ./texas2step-setup --id houston --name "houston.example.net" --location "Houston, TX"
sudo ./texas2step-install.sh                     # after reading it

Once installed, sudo texas2step update upgrades it to the newest release, and a timer can do that unattended. On a server without internet access, sudo texas2step update --from <directory> installs a release whose two files you put there. The install guide covers the rest: the setup tool's options, the optional /speedtest address, configuration, the firewall rule for the UDP test, updates, clearing saved results, cloning a server and removal.

To run it from source instead:

uv sync && uv run texas2step serve      # http://localhost:8080

Building, testing, the docs site and packaging are covered in docs/development.md.

Command line

The CLI runs the same engine from any host toward a texas2step server. The package installs it as /usr/bin/texas2step; elsewhere, uv tool install texas2step (or pipx install texas2step) installs it from PyPI.

texas2step run https://www.example.net/texas2step              # full test, human-readable
texas2step run https://www.example.net/texas2step --json --save
texas2step latency  https://www.example.net/texas2step --count 50
texas2step download https://www.example.net/texas2step --streams 8 --seconds 15
texas2step upload   https://www.example.net/texas2step
texas2step loss     https://www.example.net/texas2step --packets 1000 --interval 5
client 127.0.0.1 (IPv4, HTTP/1.1)
this computer 127.0.0.1

  Latency               1.85 ms   jitter 0.08 ms   (min 1.63 · p90 2.03 · 20 samples)
  Download         4,893.9 Mbps   peak 5,554.3   (2 streams · loaded -0.8 ms)
  One stream       5,720.1 Mbps   peak 6,167.7   (a single file copy · 117 % of 2 streams)
  Upload           8,681.2 Mbps   peak 11,391.7   (2 streams · loaded +0.1 ms)
  Loss                   0.00 %   (0/200 lost · ↑ 0.00 % ↓ 0.00 % · UDP RTT 1.19 ms · jitter 0.12 ms)
  Call quality          4.4 MOS   excellent   (you hear 4.4 · they hear 4.4 · longest gap ↓ 0 ↑ 0 ms · late ↓ 0.00 % ↑ 0.00 %)
  Responsiveness     28,501 RPM   (↓ 50,014 · ↑ 28,501 · a new connection 1.0 ms idle, 4.7 ms under load)
  Bufferbloat                A+

client is the address the server sees; this computer is the CLI's own on that connection, before any NAT, with the interface's MAC address on Linux. --save stores both with the result, and --no-local leaves them out.

API

Every primitive is a plain HTTP endpoint (/api/v1/ping, /down, /up, /ws, /rtc/offer), and a server can measure toward another server on request:

curl -o /dev/null 'https://www.example.net/texas2step/api/v1/down?bytes=1000000000'
curl -s -X POST https://dallas.example.net/texas2step/api/v1/measure/full \
     -H 'content-type: application/json' -d '{"target": "https://houston.example.net/texas2step"}'

Full reference: docs/api.md, or /api/docs on a running server.

Several locations

List other texas2step servers in the config and they appear in the header's server picker. The browser tests the chosen server directly (cross-origin), and each server can measure the others through the API. See docs/configuration.md. For servers open to the Internet, see Access codes.

Documentation

  • Install: the Ubuntu package, nginx, firewall, upgrades.
  • Configuration: every setting.
  • Access codes: servers open to the Internet, a code from the service desk, and the desk's tools kept to your networks.
  • Traffic limits: a daily and monthly cap on what the tests move, for servers whose traffic is billed.
  • Security: the security controls, what each guards against, and what is left to the operator.
  • Methodology: what is measured, and how.
  • Quality and user experience: what the call-quality score and responsiveness mean to the people using a connection, the adjustments texas2step makes to match what they notice, and the sources.
  • API: endpoints and the UDP probe protocol.
  • Development: running from source, tests, docs site, packaging, releases.
  • Roadmap: ideas for future work.

The same pages are published at robert-patrick-texas.github.io/texas2step.

License

Copyright 2026 Robert Patrick. Licensed under the Apache License 2.0.

Metadata

Release files for texas2step 2.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for texas2step 2.2.1
File Size Uploaded Provenance
texas2step-2.2.1.tar.gz 1.4 MB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for texas2step 2.2.1
File Interpreter ABI Platform
texas2step-2.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 2.1 MB

Release files / texas2step-2.2.1.tar.gz

Download URL texas2step-2.2.1.tar.gz
Size 1.4 MB
Tags Source
SHA-256 checksum
How to use checksums
fd7fe7656832c7637212824675ae611a6274128bcbde9630a957066f246ddb81
BLAKE2b-256 checksum
How to use checksums
463986f8fbb82c5b7a81e13f85bf65a611a0c1b55dd1365d1b98fda66dec2d34
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / texas2step-2.2.1-py3-none-any.whl

Download URL texas2step-2.2.1-py3-none-any.whl
Size 668.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3597d2a8c31a4d33ebe435d113992ae5de1d4322b8bbd23c6ff33a978835a004
BLAKE2b-256 checksum
How to use checksums
44797775e3f75bb7c17bbee411cc2fafda63874d7c1cc25dba60ce5a39a644be
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Security for texas2step 2.2.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for texas2step-2.2.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page