All notable changes to NetMedic will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Preview release. First step toward cross-platform support and pip distribution; do not use on production-critical machines yet.
pyproject.tomlwith two console-script entry points:netmedicandnmso the tool can be installed viapip install netmedicand invoked from anywhere on PATH.- Cross-platform user-data layout: language / country / scope /
IPv6 preference and DNS backups now live in
$NETMEDIC_HOME(default~/.netmedic). Survivespip install -Uupgrades and works afterpip installinto a non-writable site-packages. - Bundled locale files:
locales/moved tonetmedic/locales/so the JSONs ship inside the wheel. - POSIX privilege check:
is_admin()now also checksgeteuid() == 0on macOS / Linux so the helper works on every supported platform once the backends land. nmshort alias for the launcher:nmandnetmedicare exact synonyms.
- Banner shows only the active locale's tagline instead of all six.
app.taglineis read from the currently-loaded locale JSON. - Banner version label now uses the human-friendly
__display_version__(1.0.1 preview beta1) while the PEP 440__version__(1.0.1b1) is what wheels / PyPI see.
- NRPT rule listing previously serialized
System.Net.IPAddressobjects as raw CIM dicts ({"Address": 84215263, ...}) which was unreadable. Bothfix.nrpt.list_rulesandfix.backup.backup_dnsnow projectIPAddressToStringso the JSON we emit and store is plain dotted-quad strings.
Still Windows-only at runtime; macOS / Linux backends remain stubs (see ROADMAP.md). The package itself imports cleanly on every OS so contributors can develop the cross-platform bits without a Windows VM.
First public release.
- Interactive Rich-rendered launcher (
python run.pywith no args). First-run wizard asks for UI language and country/region; subsequent runs reuse the saved choice (Enter accepts current). - Auto dependency bootstrap. If
dnspython / rich / typer / httpx / h2are missing,run.pyprompts, pip-installs, and re-execs itself. - 14-item numbered menu with localized name + summary + admin badge per item.
- Country / region presets (
netmedic/data/countries.py): AUTO, CN, JP, TW, HK, KR, US, EU, RU, SG. - DoH scope selector (
country/country+majors/all) with persistent default in user config. - IPv6 DoH consent prompt when v6 is reachable — gives the user a chance to skip even when v6 works.
- Router DNS hijack detector (
netmedic/detect/hijack.py). - Five-layer outage diagnosis chain (
netmedic/detect/outage.py) — Loopback → Gateway → Internet → DNS → HTTPS. - hosts file repair (
netmedic/fix/hosts_repair.py) — duplicate / blackhole / malformed cleanup that respects marker blocks. - Cross-platform abstraction stub (
platform_adapter.py) — Windows fully wired, macOS / Linux planned (see ROADMAP.md). - More uncensored DoH providers: ControlD (free unfiltered), Mullvad encrypted-only, DNS.WATCH (DE), Vercara UltraDNS, DNS.SB, BaiduDNS (v6), CFIEC IPv6-only, Yandex (RU).
- Multilingual READMEs:
README.md(English default),README-zh-CN.md,README-zh-TW.md, with cross-language switcher. - Locale files extended with menu / feature / wizard strings for all six supported languages (zh-TW / ja / ko / ru pending the new scope+IPv6 keys — tracked in ROADMAP.md).
--scopeCLI flag onforce-dohfor scripting.- Persistent user config at
.netmedic_config.jsonnow stores language, country, scope, and IPv6 preference. - ROADMAP.md publishing planned cross-platform, ipconfig, and diagnostic-depth work.
- IPv6 DoH IPs verified against the curated 2026-05-01 dataset
(Quad9 v6 corrected, AdGuard v6 updated to
:ad1:ff). - Minimum Python version raised to 3.10 (driven by dnspython 2.8 and typer 0.25 — both require 3.10+).
- CI bumped to latest LTS actions:
actions/checkout@v6(Node 24 native) andactions/setup-python@v6(Node 24 native). - CI matrix expanded to Python 3.10 / 3.11 / 3.12 / 3.13.
launcher.pysplit into single-responsibility files undernetmedic/ui/(widgets,wizard,menu,actions).- pyflakes is enforced in CI.
NetMedic is built with JetBrains PyCharm (under their Open Source Development License program), Anthropic Claude Code, and OpenAI Codex. See README for full credits.