Self-hosted service
xykt/NetQuality avatar
xykt/NetQuality

NetQuality: seven network check modules behind one curl command

A network quality check script.

6,052 stars434 forksShellAGPL-3.0

At a glance

What is it?
NetQuality is a single shell script that runs a seven module network check across IPv4 and IPv6, with flags for latency mode, full TCP return routes, low data runs, and JSON output. You execute it straight from a URL, and the repository publishes no tagged releases to pin.
Who is it for?
NetQuality fits someone on a Linux box, a macOS shell, or a Docker host who wants a single screen that gathers BGP records, three carrier return latency, route traces, and speed numbers before deciding whether a network problem is real. It does not fit a server deployment that needs a pinned, checksummed artifact, because there is no release to pin and the script runs whatever its host serves, nor a Windows machine without Docker.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository last received commits 11 days ago.
What is it written in?
Mainly Shell, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • xykt/NetQuality6,052 ★ · +324
Star history
Repository2026-09-242026-11-14
xykt/NetQuality5.7k6.1k

324 Stars in the last 51 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

The script runs straight from a URL, so nothing is pinned

There is no clone step in the documented usage. The entire script arrives over HTTPS and executes in place:

bash
bash <(curl -Ls https://Net.Check.Place)

The repository itself is small: a `net.sh`, a `README.md` plus `README_EN.md`, a `ref/` directory, a `res/` directory holding the sample output, a `LICENSE`, and `.github/`. That shape has a consequence worth naming. The repository publishes no GitHub releases, and the documented command fetches from a domain rather than from a commit, so there is no tag and no checksum for what you run. The changelog is a list of dated entries, ending with a JSON formatting fix on 2026/01/15. The last push to the main branch was on 2026-09-01, and the repository is not archived.

Check.Place serves the interactive menu, Net.Check.Place takes the flags

Two different hosts back the two usage modes, and the split is easy to miss. The convenient interactive interface comes from `https://Check.Place`, while every parameterised example in the docs points at `https://Net.Check.Place`. The Docker images follow the same split: `xykt/check` is the interactive image and `xykt/netquality` is the one that accepts flags. Both Linux examples clean up after themselves by removing the image in the same line:

bash
docker run --rm --net=host -it xykt/check -N && docker rmi xykt/check > /dev/null 2>&1

When parameters are needed with Docker, the documentation is explicit that they go before the `&`, which is where the Windows CMD form diverges by redirecting to `NUL` instead of `/dev/null`.

Every mode has its own single letter flag

The advanced mode is a flat flag set rather than subcommands. Stack selection is `-4` for IPv4 only and `-6` for IPv6 only, with the bare command checking both. `-P` switches to latency mode, `-L` to low data mode, and `-S 1234567` skips sections by number. `-l cn|en` picks the report language, `-j` emits JSON, and `-f` makes the report print full IP addresses. Dependency handling has its own pair: `-y` installs what the script needs, `-n` skips OS detection and dependency installation entirely.

-R accepts a province in five spellings and defaults to three cities

Full route mode is the most specific flag in the set, and its argument parsing is the clearest example of how the script handles names:

bash
bash <(curl -Ls https://Net.Check.Place) -R 广西
bash <(curl -Ls https://Net.Check.Place) -R GX

A single character abbreviation, the short Chinese name, the full provincial name such as 广西壮族自治区, and the uppercase or lowercase Latin code all resolve to the same target. Run with `-R` and no argument, and the script tests Beijing, Shanghai, and Guangdong instead. Route data itself is not gathered by the script: the project credits NextTrace for the three carrier return route testing, and states that the IP geolocation and line labels in that part of the report come from the NextTrace API.

Reports can go to a file, and -p is what keeps them off the web

By default the script produces a shareable report, including an SVG image link added in a May 2025 change, which implies an upload somewhere. The privacy flag disables online report generation entirely. You can also redirect output to a file, and the extension decides the format:

bash
bash <(curl -Ls https://Net.Check.Place) -o /path/to/file.ansi
bash <(curl -Ls https://Net.Check.Place) -o /path/to/file.json

A `.ansi` path gives the coloured terminal report, `.json` gives the machine readable form used by the sample in `res/output.json`, and any other extension yields plain text. The privacy mode was added on 2025/08/01, and a July 2025 change moved every HTTP request in the script to HTTPS.

Every number traces back to somebody else's service

The report is a roll call of third parties. BGP and access records come from BGP.TOOLS and BGP.HE.NET, and the upstream and access lines are read from those databases. Speed tests use SPEEDTEST.NET's command line client for the three mainland carriers, which the acknowledgements call the only usable command line three carrier speed test in that region. Three carrier test addresses come from a community contributor, and the international module covers five continents rather than the three carriers. If any of these services changes its interface or rate limits, the corresponding section is the one that fails, and the script's own history shows that kind of breakage: an April 2025 entry fixes mainland IP addresses failing to fetch the script resources at all.

Seventeen distributions listed, Windows reachable only through Docker

The supported platform line is long enough to be worth reading twice: Ubuntu, Debian, Linux Mint, Fedora, RHEL, CentOS, Arch Linux, Manjaro, Alpine Linux, AlmaLinux, Rocky Linux, macOS, Anolis OS, Alibaba Cloud Linux, SUSE Linux, openSUSE, and Void Linux, with Windows marked as coming via Docker. Support is not theoretical for macOS, where an April 2025 entry fixes macOS compatibility problems. The README is bilingual, with a separate English file in the repository, and the report language is chosen at runtime with `-l cn|en` rather than by picking a script.

Hosted by sponsors, and the changelog is the only history

The project is funded by hosting sponsors listed in a table in the README, including V.PS, BAGE, LisaHost, RapidProxy, and ColaProxy, with a sponsor address and a Telegram bot for contact. That arrangement is worth keeping in mind when judging what the script depends on: two of the listed sponsors sell native IP addresses, which is exactly the kind of result this tool is used to investigate. Version history lives in a plain dated list with no tags, running from the 2025/03/12 release through the Docker method in August 2025 to the JSON fix in January 2026, so the only way to know what a run used is to read that list yourself.

Editorial conclusion

NetQuality fits someone on a Linux box, a macOS shell, or a Docker host who wants a single screen that gathers BGP records, three carrier return latency, route traces, and speed numbers before deciding whether a network problem is real. It does not fit a server deployment that needs a pinned, checksummed artifact, because there is no release to pin and the script runs whatever its host serves, nor a Windows machine without Docker. Before trusting a report, read the online report behaviour and add -p, then use -j if you want machine readable JSON output.

Frequently asked questions

How do I check my network quality with NetQuality?

Run the interactive form with `bash <(curl -Ls https://Check.Place) -N`, or the parameterised form with `bash <(curl -Ls https://Net.Check.Place)` for a default dual stack check that covers IPv4 and IPv6. On Windows the script is reached through Docker rather than a native shell.

Which NetQuality flags control the IP version and the test mode?

`-4` checks IPv4 only and `-6` checks IPv6 only, while the command with no flag tests both stacks. `-P` selects latency mode, `-L` selects low data mode, and `-S` followed by digits skips the sections you name.

How do I stop NetQuality from generating an online report?

Pass `-p`, the privacy flag, which disables online report generation. You can also write the report to a local file with `-o`, where a `.ansi` path keeps the coloured output and a `.json` path gives machine readable output, and `-f` makes the report show full IP addresses.

Where does NetQuality get its BGP and routing data?

Basic records come from BGP.TOOLS and BGP.HE.NET, speed tests use the SPEEDTEST.NET command line client for the three mainland carriers, and the three carrier return route data plus its IP geolocation and line labels come from the NextTrace project and its API.

Official sources

  1. Issues
  2. License: AGPL-3.0
  3. README
  4. xykt/NetQuality on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/xykt-netquality.svg)](https://hysenlabs.com/projects/xykt-netquality)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/xykt-netquality.svg)](https://hysenlabs.com/projects/xykt-netquality)

Was this useful?