Skip to main content

spdtst

A small, private-by-default internet speed test for the terminal.

spdtst measures download speed, upload speed, latency, and jitter. test_full also reports the public IP, ISP, and approximate location that the selected test endpoint can provide. It automatically finds a responsive public LibreSpeed-compatible server, or can use a server you provide.

Terminal demo

Why spdtst?

  • Simple: one command, readable output.
  • Portable: Python 3.10+ with a small MIT-licensed system-certificate helper.
  • Private by default: no accounts, telemetry, or result sharing. Connection details are requested only by test_full.
  • Open: MIT-licensed project code and no dependency on a proprietary test client.
  • Scriptable: use JSON output or save newline-delimited JSON locally.

Install

Use pipx to install the current release in an isolated environment:

pipx install https://github.com/brunozapico/spdtst/releases/download/v0.1.0/spdtst-0.1.0-py3-none-any.whl

Homebrew users can install the same release with:

brew tap brunozapico/tap
brew install spdtst

To install directly from the repository instead:

pipx install git+https://github.com/brunozapico/spdtst.git

Verify the installation:

spdtst --version

Usage

Run the standard network test (download, upload, latency, and jitter):

spdtst test

Run the extended test, which adds public IP, ISP, and approximate location when the endpoint supports it:

spdtst test_full

test-full is also accepted as a shell-friendly alias.

Commands and options

Command Description
spdtst test Finds a responsive public server, then measures download, upload, latency, and jitter.
spdtst test_full Runs the network test plus public IP, ISP, and approximate location.
spdtst test-full Alias for test_full.
spdtst --version Prints the installed version.
spdtst --help Shows command help.

Both test commands accept:

Option Description
--server URL Use this LibreSpeed-compatible backend instead of automatic discovery.
--duration SECONDS Set the duration of each transfer measurement; default: 5 seconds.
--output json Print a machine-readable JSON result.
--save Append the result to the default local history file.
--save-to PATH Append the result to a chosen JSONL file; also enables saving.

Examples:

spdtst test_full --save
spdtst test --server https://speed.example.com/backend
spdtst test_full --output json
spdtst test --duration 10 --save-to ./speed-history.jsonl

Saved results

--save stores one JSON object per line (JSONL), which is easy to inspect or process with other tools. Its default location is platform-aware:

Platform Default file
macOS ~/Library/Application Support/spdtst/results.jsonl
Linux $XDG_STATE_HOME/spdtst/results.jsonl, or ~/.local/state/spdtst/results.jsonl
Windows %LOCALAPPDATA%\\spdtst\\results.jsonl

No results are saved unless --save or --save-to is supplied.

How server discovery works

Without --server, spdtst retrieves the public server directory maintained by LibreSpeed and probes its available entries in parallel. It runs the test against the responsive server with the lowest observed latency. Public servers are external services, so availability and their terms can change; --server is the deterministic option for personal or organizational use.

spdtst implements its client protocol itself with Python's standard library. It does not vendor LibreSpeed code or use Speedtest by Ookla services, brands, or APIs. LibreSpeed-compatible endpoints are a protocol choice, not a bundled dependency. test_full asks the selected endpoint for connection details; because this data is controlled by that endpoint, some fields may be unavailable or only approximate.

Stack

  • Python 3.10+
  • Python standard library (argparse, urllib, concurrent.futures)
  • truststore (MIT) to use the operating system's trusted certificates
  • setuptools for packaging
  • unittest for the included test suite

License

The spdtst source code is available under the MIT License.

This is an independent project and is not affiliated with LibreSpeed or Ookla.

Metadata

Release files for spdtst 0.1.0

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

Source distribution (sdist)

Source distribution for spdtst 0.1.0
File Size Uploaded
spdtst-0.1.0.tar.gz 10.9 kB Details

Built distribution (wheel)

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

Total release size: 21.2 kB

Release files / spdtst-0.1.0.tar.gz

Download URL spdtst-0.1.0.tar.gz
Size 10.9 kB
Tags Source
SHA-256 checksum
How to use checksums
f7caf6cfab7927ac95d796f4883fe1d8f709113ba640947b9e3bd57cfb3f5f66
BLAKE2b-256 checksum
How to use checksums
71ab12b076938aaad13662de04e980a5440bf5df21d96653fd3481478aad5017
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Sep 29, 2026.

Transparency log

Release files / spdtst-0.1.0-py3-none-any.whl

Download URL spdtst-0.1.0-py3-none-any.whl
Size 10.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8d734f8d0f8303d0c8a266c830ed5af036d7c16c85399606bcdb2327dc9e6713
BLAKE2b-256 checksum
How to use checksums
8ce2e5e3906f52b1db3cc886912f5581ab7db91435869f6673eb8aa15ade2d2f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Sep 29, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

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