Network speed tester including server discovery, latency measurement, download and upload speed testing.
Built with .NET 8.0 — runs on Windows, Linux, and macOS.
- Server discovery, latency measurement, download and upload speed testing.
- Command-line application and C# Microsoft .Net NuGet library for developers.
- User configurable output (eg. SI or IEC units, BitsPerSecond or BytesPerSecond, CSV and Json formats).
- Highly configurable traffic profiles (see DownloadTestSettings and UploadTestSettings).
- Highly reliable, utilises Ookla's Speedtest servers.
A cross-platform command-line application for performing network speed tests, including server discovery, latency measurement, download and upload speed testing.
The core speed test library, NetPace.Core, has been designed for developer use and can be installed via NuGet.
NetPace is not affiliated with or endorsed by Ookla or Speedtest by Ookla in any way, although their servers are used by the default speed test provider.
The obligatory screenshot (as of 29 August 2025):
This project came out of my time as the Spectre.Console CLI sub-system maintainer, having never actually used the library for myself. I wanted to gain practical experience by developing a command-line application, following best practices such as the Command Line Interface Guidelines, and then applying that experience in my maintainer role. This is also known as 'dogfooding' in the tech industry ie. using your own product before expecting others to do the same.
I am no longer the Spectre.Console CLI sub-system maintainer, but this project continues to be well supported.
Each release contains precompiled binaries you can simply download, unzip and run.
Choose from Windows, Linux and macOS; standalone (large file but includes all dependencies) or net8 (small file but requires Microsoft .NET 8.0 runtime to already be installed).
Alternatively, clone this repository locally and build.
Developed with Microsoft .NET 8.0 on Windows 10 using Visual Studio 2022 Community. Other modern environments should work fine.
For most users, running a simple speed test is as easy as:
NetPaceFor common scenarios and advanced usage (such as scripting, restricting payload size, or customising output), see the User Guide.
NetPace --help will display detailed usage instructions.
C:\>NetPace.exe --help
_ __ __ ____
/ | / / ___ / /_ / __ \ ____ _ _____ ___
/ |/ / / _ \ / __/ / /_/ / / __ `/ / ___/ / _ \
/ /| / / __// /_ / ____/ / /_/ / / /__ / __/
/_/ |_/ \___/ \__/ /_/ \__,_/ \___/ \___/
DESCRIPTION:
Network speed tester including server discovery, latency measurement, download and upload speed testing.
USAGE:
NetPace [OPTIONS] [COMMAND]
OPTIONS:
DEFAULT
-h, --help Prints help information.
-v, --version Prints version information.
--loop Performs the speed test on continuous loop.
--count Stop speed testing after this many times.
--delay Time between multiple speed tests (HH:MM:SS).
--csv Display minimal output in CSV format (always includes timestamp).
--csv-delimiter , Single character delimiter to use in CSV output.
--csv-header-units Display speed test units (eg. Mbps) in the CSV header row, not the data rows.
--unit-scale must not be <Auto> for multiple speed tests (eg. --loop or --count).
--json Display output in Json format.
--json-pretty Display output in Json format (pretty print).
--no-download Do not perform download test.
--no-upload Do not perform upload test.
--server The url of a specific speed test sever.
'NetPace servers -l' will return your nearest servers.
-t, --timestamp Include a timestamp in the output.
--datetimeformat yyyy-MM-dd HH:mm:ss The datetime format string, as defined by Microsoft.Net.
--downloadsize Stop the download test after this many megabytes (IEC MiB).
--uploadsize Stop the upload test after this many megabytes (IEC MiB).
-u, --unit BitsPerSecond The speed unit. <BitsPerSecond, BytesPerSecond>
--unit-scale Auto The speed unit scale. <Auto, Base, Kilo, Mega, Giga, Tera, Peta>
--unit-system SI The speed unit system. <SI, IEC>
SI steps up in powers of 1000 (KB, MB, GB), common in networking, while IEC uses
powers of 1024 (KiB, MiB, GiB), standard in computing and storage.
--verbosity Normal The verbosity level. <Minimal, Normal, Debug>
Minimal is ideal for batch scripts and redirected output.
-f, --file Write output to file.
--file-mode Append Determines file output behavior. <Append, Overwrite>
-q, --quiet Suppress all normal console output (file output still works).
COMMANDS:
servers Show the nearest speed test servers.
SEE ALSO:
https://github.com/FrankRay78/NetPace/blob/main/USER_GUIDE.mdWant to integrate network speed testing into your own app?
Install the core library via NuGet:
dotnet add package NetPace.CoreThen use the ISpeedTestService interface:
using NetPace.Core;
using NetPace.Core.Clients.Ookla;
var speedTester = new OoklaSpeedtest() as ISpeedTestService;
var servers = await speedTester.GetServersAsync();
var fastest = await speedTester.GetFastestServerByLatencyAsync(servers);
var downloadResult = await speedTester.GetDownloadSpeedAsync(fastest.Server);
var uploadResult = await speedTester.GetUploadSpeedAsync(fastest.Server);
Console.WriteLine($"{fastest.Server.Sponsor} ({fastest.Latency} ms)");
Console.WriteLine($"Download: {downloadResult.GetSpeedString(SpeedUnit.BitsPerSecond, SpeedUnitSystem.SI)}");
Console.WriteLine($"Upload: {uploadResult.GetSpeedString(SpeedUnit.BitsPerSecond, SpeedUnitSystem.SI)}");The example above uses the OoklaSpeedtest implementation which uses Ookla Speedtest servers under the hood. Ookla and Speedtest are trademarks of Ookla, LLC; this project is not affiliated with or endorsed by Ookla.
See the ISpeedTestService interface for full method details and overloads.
Example Console App is a minimal usage example, and NetPace command-line application is an extensive, production-quality usage example.
NetPace.Core includes test implementations of ISpeedTestService so you can test your code without making real network calls:
SpeedTestStub- Simple stub returning fixed values with configurable delaysSpeedTestMock- Fully configurable mock with injectable delegate functionsVariableSpeedTester- Returns different speeds on each call (simulates variable network conditions)FaultySpeedTester- Simulates network failures and timeouts (for testing error handling)
See the implementations in NetPace.Core.Clients.Testing and their usage throughout the solution.
Important
I'm not currently accepting pull requests for this project.
You can contribute by opening a new issue or commenting on existing ones, and you are most welcome to fork the repository for your own purposes.
But please don't be offended if I close or delete issues as I see fit.
Distributed under the MIT license. See LICENSE for more information.
Frank Ray - LinkedIn - Better Software UK