v0.4.0
Skip the NuGet feed when tool@version is already cached, so a warm native tool starts in tens of milliseconds.
Cached exact versions
Like dnx's GetBestPackageVersionAsync, an exact version is the answer:
ndnx stop@2.1.0 -- --help
ndnx stop --version 2.1.0 -- --help
If that package is already in the global packages folder, ndnx does not query the feed. RID-specific hops (stop → stop.win-x64) use the same installed check.
Unspecified version or @* still resolve latest from the feed, same as dnx.
Startup time
Cold start is download + launch. Cached start is launch only, with an exact version so neither runner has to resolve latest.
| Tool | Runner | Cold (download → start) | Cached (start) |
|---|---|---|---|
stop@2.1.0 (native AOT) |
dnx |
5.6 s | 563 ms |
ndnx |
5.6 s | 33 ms | |
dotnetsay@1.0.0 (framework-dependent) |
dnx |
4.6 s | 585 ms |
ndnx |
4.8 s | 51 ms |
win-x64, .NET SDK 11.0.100-preview.6, isolated NUGET_PACKAGES, source https://pkg.kzu.app/index.json. Cold is the median of 3 empty-cache runs. Cached is the median of 10 runs after one seed.
Gzip v3 feeds
HttpClient now enables automatic decompression, so gzip-compressed NuGet v3 indexes (including static Sleet feeds such as https://pkg.kzu.app/index.json) parse instead of failing with 0x1F is an invalid start of a value.
Docs
The readme now shows side-by-side dnx / ndnx / dotnet dnx examples, shared cache and flags, and the timings above.
Sponsors
The following sponsors made this release possible: @clarius, @MFB-Technologies-Inc, @sandrock, @drivenet, @Keflon, @tbolon, @kfrancis, @rbnswartz, @jfoshee, @Mrxx99, @eajhnsn1, @Jonathan-Hickey, @KenBonny, @SimonCropp, @agileworks-eu, @arsdragonfly, @vezel-dev, @ChilliCream, @4OTC, @DominicSchell, @adalon, @torutek, @mccaffers, @SeikaLogiciel, @wizardness, @eska-gmbh, @geodata-no.
Thanks 💜