Network Doctor

Installation details

README.md gives the one command per platform that installs netdoc. This page covers what comes after that: how each install method upgrades, which trust root signs it, what a Linux package contains, and how to verify a downloaded artifact. The wiki’s Getting Started page walks through the first run instead.

The project is network-doctor; the installed binary is netdoc. Check what you are running with netdoc --version.

Windows

Scoop installs from the project’s own bucket:

scoop bucket add heymaikol https://github.com/heymaikol/scoop-bucket
scoop install network-doctor

A release reaches the bucket as soon as it publishes, so scoop update network-doctor picks it up like any other app.

macOS and Linux (Homebrew)

brew install network-doctor

This is the Homebrew Core formula, bottled for both platforms, so brew upgrade picks up releases like any other formula. It installs netdoc alone. For netdoc-sim as well, take a Linux package below, or run the simulator from a container.

Linux

Every Linux package (COPR, .deb, .rpm, .apk) installs two commands at the same version: netdoc, and netdoc-sim, the simulator behind Challenge Mode. Confirm both:

netdoc --version
netdoc-sim help

netdoc-sim is Linux-only: it builds its networks out of Linux namespaces, so the macOS and Windows downloads ship netdoc alone. Those hosts run the same simulator from a container instead.

Fedora stable: the prebuilt release RPM

Download the .rpm for your architecture from the latest release, then install it locally:

sudo dnf install ./network-doctor_X.Y.Z_linux_ARCH.rpm    # ARCH is amd64 or arm64

The release RPM is prebuilt, so the Go-version limitation that prevents COPR source builds on Fedora 43, 44, and 45 does not apply. It is a standalone package: installing it does not add a Network Doctor repository, and dnf will not automatically pull the next release.

Fedora Rawhide: the COPR repository

The COPR repo builds from source and publishes only for Fedora Rawhide on x86_64 and aarch64:

sudo dnf copr enable heymaikol/network-doctor
sudo dnf install network-doctor

This repository-backed install upgrades normally through dnf. A new COPR package appears after its Rawhide builds finish, so it may trail the GitHub release. COPR signs with its own per-project key, a separate trust root from the GitHub attestation below, which dnf copr enable installs for you.

Other Linux distributions

Prebuilt .deb, .rpm, and .apk packages are on the latest release, for amd64 and arm64. Download one and install it locally:

sudo apt install ./network-doctor_X.Y.Z_linux_amd64.deb    # Debian, Ubuntu, Mint
sudo dnf install ./network-doctor_X.Y.Z_linux_amd64.rpm    # RHEL, Rocky, Alma
sudo apk add --allow-untrusted ./network-doctor_X.Y.Z_linux_amd64.apk    # Alpine

These standalone packages do not add an update repository, so dnf/apt will not pull the next version for you. After downloading a newer Debian package, install it over the existing version and confirm the upgrade:

sudo apt install ./network-doctor_X.Y.Z_linux_amd64.deb
netdoc --version
netdoc-sim version
dpkg-query -W network-doctor

Prebuilt binaries, go install, and building from a clone

Prebuilt binaries are on the latest release; Windows ships as a .zip, the rest as bare binaries. With Go 1.27 or newer:

go install github.com/heymaikol/network-doctor/cmd/netdoc@latest

That entrypoint exists so the installed command is named netdoc. A plain go install github.com/heymaikol/network-doctor@latest would name it network-doctor instead, which is the same program under a different name.

To build from a clone:

git clone https://github.com/heymaikol/network-doctor
cd network-doctor
go build -o netdoc .

A local build reports its version as dev unless the version is injected with -ldflags "-X main.version=...", which is what release builds do.

Verify your download

Releases carry a signed attestation binding each artifact to the workflow run that built it (not available for v1.8.4 and earlier). With the GitHub CLI installed and gh auth login done:

VERSION=X.Y.Z
gh attestation verify "./netdoc_${VERSION}_linux_amd64" \
  --repo heymaikol/network-doctor \
  --signer-workflow heymaikol/network-doctor/.github/workflows/release.yml

This proves the bytes were built from the tagged commit by the release workflow. The source tarball, the .deb/.rpm/.apk packages, and the Windows .zip are attested too, so pass whichever filename you downloaded. The vendored-dependency tarball (*-vendor.tar.gz, which lets COPR build offline) is attested as well; COPR packages themselves are rebuilt on Fedora’s own builders and carry COPR’s signature instead.