Skip to content

Network speed tester including server discovery, latency measurement, download and upload speed testing.

License

Notifications You must be signed in to change notification settings

FrankRay78/NetPace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

69 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NetPace

NuGet Build & Tests

Network speed tester including server discovery, latency measurement, download and upload speed testing.

Built with .NET 8.0 — runs on Windows, Linux, and macOS.

Report Bug - Request Feature


Features

  • 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 formats).
  • Highly configurable traffic profiles (see DownloadTestSettings and UploadTestSettings).
  • Highly reliable, utilises Ookla's Speedtest servers.

About The Project

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 endorsed by or related to Speedtest by Ookla in any way, although their servers are used under the hood in the OoklaSpeedtest implementation (the default speed test provider for NetPace).

The obligatory screenshot (as of 12 April 2025):

NetPace screenshot - 12 April 2025


Background

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.

Sadly, I am no longer the Spectre.Console CLI sub-system maintainer, but this project continues to be well supported.


Getting Started

Developed with Microsoft .NET 8.0 on Windows 10 using Visual Studio 2022 Community. Other modern environments should work fine.

Then clone this repository locally and build.


Usage

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.
        --csv                               Display minimal output in CSV format (always includes timestamp).
        --csv-delimiter    ,                Single character delimiter to use in CSV output.
        --no-download                       Do not perform download test.
        --no-upload                         Do not perform upload test.
    -t, --timestamp                         Include a timestamp.
        --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-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.

COMMANDS:
    servers    Show the nearest speed test servers.

Developer Use

Want to integrate network speed testing into your own app?

Install the core library via NuGet:

dotnet add package NetPace.Core

Then 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)}");

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.


Contributing

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.


License

Distributed under the MIT license. See LICENSE for more information.


Contact

Frank Ray - LinkedIn - Better Software UK

GitHub: https://github.com/FrankRay78/NetPace

Languages