Repository navigation
v0.3.1
netscli 0.3.1
The first release since 0.2.6 in May, and a large one: four months of work on the desktop app, the shared core and the website.
The headline is the desktop app. The old dashboard-style GUI is gone. What replaces it is a different application rather than a revision of that one — a native-like shell built around operation tabs, running the same netscli-core operations as the CLI, TUI and MCP server, so its results match the rest of the tool.
- Operation tabs you can reorder by drag or keyboard, and close individually, to either side, or all at once
- Sortable and filterable result tables, row detail panes, and a preview of the CLI command each run is equivalent to
- Save a whole workspace of results to a file and reopen it later; export CSV or JSON, whole or selection-only
- Light and dark themes, and settings for probe concurrency, default and traffic interfaces, IPv4/IPv6 display preference, history and save behaviour
- Full keyboard operation
Also new
- Clear the ARP table, then discover. A chevron beside Run offers a cache-flushing variant on discover, sweep and the ARP tab — the tools where a stale neighbour entry changes the answer.
- Richer port scan results. Scans report
open,closed,filtered,error, latency, banners, and HTTP/TLS metadata, keeping the older fields intact for compatibility. - Probe concurrency is configurable in the desktop app and TUI, not just the CLI and MCP server.
Worth knowing before you upgrade
netscli scan --jsonnow reports every port, not just the open ones. Filtering to open ports made "all closed", "all filtered" and "every probe errored" the same empty array, so a script could not tell a clean scan from a host that refused every probe. Each entry carriesopenandstatus— filter for them if you only want open ports. This changes the shape of existing script output.- The MCP server now scans only local networks by default. It is the one surface driven by a model rather than by the person at the keyboard, so the instruction to scan a third party can arrive from a web page or a file someone else wrote. RFC1918, loopback, link-local and the carrier-grade NAT range are allowed; set
NETSCLI_MCP_ALLOW_PUBLIC_TARGETS=1to reach past them. winget show netsclireported a version this project never issued.v0.2.2throughv0.2.6went into the public catalog with the tag rather than the version number. Upgrades still worked — winget normalises a leadingv— and this release fixes what is displayed.
Notable fixes
- Pinging your own machine works on Windows.
ping 127.0.0.1, and the machine's own LAN address, timed out while the systempinganswered immediately. Discover and sweep both start from a ping sweep, so both returned nothing for any range covering this host. - IPv6 hosts can be pinged.
ping ::1reported total loss; there was no ICMPv6 path at all. netscli arp --clear,--addand--deletestop claiming success when they did nothing. On Windows these print an elevation warning and then exit 0, so an ordinary run printed "ARP entry added" — and"ok": truein JSON — having touched nothing.- Discover reports devices the OS already knows about, merging probe replies with the neighbour table, so a device that answers ARP but not ICMP is no longer missing.
- Safety limits are enforced in the engines, not only in
Ops. Called directly,0.0.0.0/0collected 4,294,967,294 addresses into aVecbefore sending a packet. - The MCP server no longer serialises requests, blocks runtime workers, or dies on a single invalid UTF-8 byte.
- The Windows installer verifies Npcap's signature before running it, and
install.shstops reporting success before libpcap is installed.
Full detail for every change: https://netscli.com/changelog/
What's new in 0.3.1
- Date 0.3.1 in the changelog and add its link reference (#392) by @fstubner
- Fix the crates.io preflight check, which could never pass (#391) by @fstubner
- Let release-drafter be dispatched manually (#390) by @fstubner
- Launch Windows system tools by absolute path (#389) by @fstubner
- Fix two wrong field tables in the result model (#387) by @fstubner
- Fix every finding from the engineering audit (#388) by @fstubner
- Land the two deferred dependency bumps, both verified (#386) by @fstubner
- Take the in-range fixes for six npm advisories (#384) by @fstubner
- Count cargo installs, refresh the README's desktop shots, drop a stale token file (#382) by @fstubner
- ci: check the five publishing credentials without publishing anything (#381) by @fstubner
- test(gui): give the e2e desktop window a 16:9 shape (#380) by @fstubner
- test(gui): assert destructive menu items are marked at rest, not on hover (#379) by @fstubner
- ci: run the site jobs for the files outside site/ that the build reads (#376) by @fstubner
- Drop the 0.3.0 explanation from the 0.3.1 intro, and its dead links (#375) by @fstubner
- site: cut the retrospective sentence from the 0.3.1 summary (#374) by @fstubner
- site: remove the white strip down the right of the TUI screenshot (#373) by @fstubner
- site: stop the changelog printing a release's intro prose twice (#372) by @fstubner
- docs: give the README's TUI preview the same gradient span (#364) by @fstubner
- site: give the TUI screenshot's gradient the same span as the nav wordmark (#363) by @fstubner
- site: make the theme control a real menu, and group the docs bar's buttons (#362) by @fstubner
- Say when a command was copied, and grey packet capture everywhere (#361) by @fstubner
- Collapse the unreleased notes into one 0.3.1 section (#360) by @fstubner
- site: say when the preview port is held by something on another host (#359) by @fstubner
- site: add a second landing layout, and let content pick between them (#358) by @fstubner
- site: make the landing page's section order content (#357) by @fstubner
- site: take the product's name out of the style comments (#356) by @fstubner
- site: read the 404 and changelog page copy from site-content (#355) by @fstubner
- site: keep the measurements in four comments, drop the product name (#354) by @fstubner
- site: describe the install groups without naming the product (#353) by @fstubner
- site: measure the wordmark the content names, not netscli's filename (#352) by @fstubner
- site: read the last of the product's copy from site-content (#351) by @fstubner
- site: read the docs head tags and GitHub link from site-content (#350) by @fstubner
- site: lay the hero CTA in one column when there is no desktop button (#349) by @fstubner
- site: rename the shell's style prefix from netscli- to ui- (#348) by @fstubner
- site: move the hero installers and the docs sidebar into site-content (#346) by @fstubner
- site: drop the await on the synchronous preview cleanup (#345) by @fstubner
- site: split the landing page's tier from the shared palette (#343) by @fstubner
- site: commit the cascade equivalence checker (#342) by @fstubner
- site: move the search dialog out of the stack and delete the stack (#341) by @fstubner
- site: move the docs content out of the stack (#340) by @fstubner
- site: move the docs header, sidebar, contents rail and shell out of the stack (#339) by @fstubner
- site: move the docs theme and base rules out of the numbered stack (#338) by @fstubner
- ci: skip the site preview for Dependabot PRs (#337) by @fstubner
- Light-theme and landing-page pass: two dark bands, theme-following chips, and a lot of measuring (#336) by @fstubner
- Drop the mobile docs section-nav row (#333) by @fstubner
- Darken the wordmark on a light page (#331) by @fstubner
- Make the copy buttons dark in the light theme too (#330) by @fstubner
- Fix four inaccurate claims in the site copy (#329) by @fstubner
- Dark code surfaces, a navy band, and two groups in the nav (#328) by @fstubner
- Serve the install scripts from netscli.com and say what the button downloads (#327) by @fstubner
- Give the landing page a light theme that actually works (#326) by @fstubner
- Stop the contents rail at the title band, and square up two insets (#325) by @fstubner
- Collapse the changelog's release cards before the first frame (#324) by @fstubner
- Settle the page height before sizing the capture window (#323) by @fstubner
- Draw the same theme control in both bars (#322) by @fstubner
- Collapse both nav bars at the same width (#321) by @fstubner
- Derive the wordmark's indent and start the contents rail below the hero (#320) by @fstubner
- Collapse forty text colours into a ramp of three (#309) by @fstubner
- Move the shared role tokens where both halves of the site can read them (#308) by @fstubner
- Quieten the theme control's focus ring and drop the contents rail (#307) by @fstubner
- Delete ten declarations that could never take effect, and tighten the budget (#306) by @fstubner
- Name the panel and menu surfaces (#305) by @fstubner
- Stop the visual harness reporting pages that were never really unstable (#304) by @fstubner
- Make a raised surface get darker in the light theme, not lighter (#303) by @fstubner
- Give each theme one neutral for hairlines and washes (#302) by @fstubner
- Give the light theme one accent instead of three (#301) by @fstubner
- Name the three table surfaces instead of repeating them in six files (#300) by @fstubner
- Point 38 hard-coded colours at the tokens that already held them (#299) by @fstubner
- Pin the look of the built site before the override-layer audit (#298) by @fstubner
- Drop the "On this page" marker and settle every rail bar at 1px (#297) by @fstubner
- Mark destructive menu items with a red icon before you hover them (#296) by @fstubner
- Check the Linux side of the crates from a Windows machine (#295) by @fstubner
- Run a scan or inspect opened from a result straight away (#294) by @fstubner
- Record the acceptance pass, and give every step an observable outcome (#293) by @fstubner
- Fail the build when the app links at a page the site does not have (#292) by @fstubner
- Make the warning icon quieter, the docs link work, and Stop errors readable (#291) by @fstubner
- Send Tauri command arguments under the names Tauri looks for (#290) by @fstubner
- Stop reporting a crash, and a refused stop, as a clean cancel (#289) by @fstubner
- Say so when an export, copy or open fails (#288) by @fstubner
- Walk the tab strip, and record the keyboard bug it turned up (#286) by @fstubner
- Let focus travel with the tab it moved (#287) by @fstubner
- Generate the site's design tokens too, and fix the grey it exposed (#285) by @fstubner
- Compare the token JSON with line endings normalised (#284) by @fstubner
- Bring every colour pair to 4.5:1, and keep it there (#283) by @fstubner
- Show one usable address per interface, and quiet the picker (#282) by @fstubner
- Drag a tab to reorder it, or move it with the keyboard (#281) by @fstubner
- Say how to run the desktop app, and what happens if you don't (#280) by @fstubner
- Write down the twelve changes merged since the notes were drafted (#279) by @fstubner
- Revert the preview host flags: Astro's default was already right (#278) by @fstubner
- Pin Node in one place, and have CI read it (#277) by @fstubner
- Bind the site's dev and preview servers to IPv4 (#276) by @fstubner
- Pass preferences down as one value, and drop App.tsx's size exception (#275) by @fstubner
- Assert the winget PackageVersion, and write down what shipped wrong (#274) by @fstubner
- Let the mobile search dialog fill the screen, and put Cancel by the field (#272) by @fstubner
- Even out the docs chrome: rails, headings, anchors, focus, surfaces (#268) by @fstubner
- Lead with winget, and thin the install panel (#270) by @fstubner
- Answer the two search queries the data actually shows (#271) by @fstubner
- Say what the coverage matrix actually means, in ticks and dashes (#269) by @fstubner
- Right-click a tab to close it, its neighbours, or all of them (#273) by @fstubner
- Delete 17 CSS declarations that could never take effect (#267) by @fstubner
- Say what has actually been released, and check that the page agrees (#266) by @fstubner
- Split the test and script families their own files already named (#265) by @fstubner
- Put the docs contents list back in the right-hand rail (#261) by @fstubner
- Keep the site's promises, and let the contrast gate see it (#263) by @fstubner
- Submit the right version to winget, and pin the rest of the actions (#264) by @fstubner
- Stop three commands reporting success while doing nothing (#262) by @fstubner
- Say what the parts are, where they meet, and which meeting is trusted (#260) by @fstubner
- Stop the Exit item flashing red, and grey packet capture instead of hiding it (#259) by @fstubner
- Acceptance follow-ups: product documents, dead CSS, and a server-rendered changelog (#258) by @fstubner
- Release 0.3.1 (#257) by @fstubner
- Drop an unreferenced screenshot and ignore the local plan files (#253) by @fstubner
- Let the run-options menu survive its own click (#252) by @fstubner
- Offer "clear ARP table, then discover" from a chevron beside Run (#251) by @fstubner
- Centre the settings dialog on the viewport, and repair before marking (#250) by @fstubner
- Recover installs the zero-default bug left running one probe at a time (#249) by @fstubner
- Centre the settings dialog on the workspace, and dress its number field (#248) by @fstubner
- Ping IPv6 over ICMP, and aim the keyboard test at the grid (#247) by @fstubner
- Make ping reach this machine on Windows (#246) by @fstubner
- Open a scan tab in the scan scenario instead of assuming one (#245) by @fstubner
- Announce a finished run only when its tab is out of sight (#244) by @fstubner
- Report the devices the OS already knows about (#243) by @fstubner
- Keep the main preview tracking main (#242) by @fstubner
- Fail the preview workflow when it cannot deploy, instead of passing (#241) by @fstubner
- Give the Homebrew cask its own token (#240) by @fstubner
- Add the gate tests the implementation plan referenced but did not have (#239) by @fstubner
- Record the release-pipeline hardening before re-tagging (#238) by @fstubner
- Verify all three crates before uploading any of them (#237) by @fstubner
- Resolve the draft version from tags, not from the last release (#236) by @fstubner
- Record the two fixes the moved tag will include (#235) by @fstubner
- Stop the traffic reading vanishing on tunnel and VPN interfaces (#234) by @fstubner
- Drive the app by attaching to it, so the render suite can run at all (#233) by @fstubner
- Set the 0.3.0 release date to the day it is tagged (#232) by @fstubner
- Fold the unreleased entries into 0.3.0, where they will actually ship (#231) by @fstubner
- Record the GUI and release-pipeline fixes that shipped unlogged (#230) by @fstubner
- Bound the release and publish jobs too (#229) by @fstubner
- Bound every CI job, so a stall fails in minutes not hours (#228) by @fstubner
- Harden the MCP surface against the client it actually has (#225) by @fstubner
- Enforce five limits in core that only one caller was applying (#224) by @fstubner
- Make the e2e suite able to run, and lint it so it stays that way (#222) by @fstubner
- Fix the wrong-row jump, and four ways the GUI failed quietly (#223) by @fstubner
- Verify AUR checksums, pin the mutable actions, and stop the templates looking real (#227) by @fstubner
- Correct the documentation against what the code actually does (#226) by @fstubner
- Add the unreviewed-surface warning that #220 was supposed to carry (#221) by @fstubner
- Retire the security review, keep what was still true (#220) by @fstubner
- Remove the unreferenced gui-scan.svg (#219) by @fstubner
- Retake the desktop app screenshot against the current demo data (#218) by @fstubner
- Give docs pages a share image, and add /llms.txt (#217) by @fstubner
- Fix rendering defects and three prose patterns in the site copy (#216) by @fstubner
- Stop the changelog linking to a tag that does not exist (#215) by @fstubner
- Prepare v0.3.0 and close the remaining audit findings (#210) by @fstubner
- Make the installer download a button, and stop crediting winget for it (#209) by @fstubner
- Fix the findings from the independent acceptance review (#208) by @fstubner
- Guard against dead CSS, and delete five dead selectors (#207) by @fstubner
- Keep the hero wash inside the screen on phones (#206) by @fstubner
- Sit the landing underline on the bar, and square the mobile search button (#205) by @fstubner
- Show one decimal on the hero download count (#203) by @fstubner
- Rewrite the hero and head metadata for search, and align the landing nav with the docs (#204) by @fstubner
- Align the docs nav rails, and stop the theme control filling the header (#202) by @fstubner
- Fix two layout defects found by sweeping every route across six widths (#201) by @fstubner
- Clear the packaging and docs long tail (#200) by @fstubner
- Make the e2e assertions capable of failing (#199) by @fstubner
- Enforce the safety limits in the engines, not only in Ops (#198) by @fstubner
- Make the GUI say what it actually did (#197) by @fstubner
- Stop the ARP read blocking the runtime, and the release check refiring (#196) by @fstubner
- Make docs search respond to arrow keys, and the mobile menu opaque (#195) by @fstubner
- Scope the packet-capture claims to what is actually published (#194) by @fstubner
- Keep Packet Capture visible, with setup guidance, on builds without it (#193) by @fstubner
- Copy only the commands, and give each OS its own hero commands (#192) by @fstubner
- Show phones the right OS, and truncate long commands instead of wrapping (#191) by @fstubner
- Fix the mobile menu, the copy button covering commands, the lightbox, the dead skip link, and every contrast failure (#190) by @fstubner
- Take the three open Rust dependency bumps (#189) by @fstubner
- Take ESLint 10 and react-hooks 7, and drop two dead assignments they found (#188) by @fstubner
- Move CI to Node 22 and take jsdom 30 (#187) by @fstubner
- Fix four defects an independent review found in this session's own work (#186) by @fstubner
- Make the Tauri render suite schedule-only, and stop gating releases on it (#178) by @fstubner
- Remove provably dead declarations from the site CSS stack (B-23) (#177) by @fstubner
- Close the packaging, tooling and documentation long tail (B-33, B-34, B-37, C-06/18/19/20/21/22/23/24/27/28/33/35) (#176) by @fstubner
- Move blocking work off tokio workers and fix GUI interaction defects (B-10, B-11, B-36, M-1/2/3/5/7, C-12/16/32) (#175) by @fstubner
- Fix sitemap duplication and widen the a11y gate to every route (B-24, B-26, B-38) (#174) by @fstubner
- Fix TUI unicode width handling and two data-safety issues (B-07, B-08, B-12, B-13) (#173) by @fstubner
- Fix core panic paths and OUI generator silent-corruption modes (C-01, C-02, C-10, C-36, A-09) (#172) by @fstubner
- Make the GUI keyboard-accessible and fix result-grid ARIA (H-3, B-20..B-22, C-13) (#171) by @fstubner
- Fix GUI state bugs and add React hook test coverage (A-13, B-15..B-19, M-6, B-27) (#170) by @fstubner
- Make the MCP server handle requests concurrently (A-01, C-09) (#169) by @fstubner
- Restore the winget GUI 0.2.4 reference manifests (#167) by @fstubner
- Make the GUI render failure diagnosable (does not fix it yet) (#162) by @fstubner
- Add per-PR site previews on Cloudflare Pages (#165) by @fstubner
- Reject port 0 on every surface, not just MCP (#164) by @fstubner
- Document how to get packet capture, and every publish channel (#163) by @fstubner
- Add always-reporting CI gates so branch protection can require them (#161) by @fstubner
- Restore the site redesign, and add desktop install routes for all three platforms (#159) by @fstubner
- Harden the release pipeline and fix issues that would ship in the next release (#158) by @fstubner
- Gate GitHub Pages deploy behind manual trigger only (#136) by @fstubner
- Revert site/ to pre-v0.3.0 redesign state (roll back accidental deploy) (#135) by @fstubner
- Bring details.ts and App.tsx under the size gate, prune stale exceptions (#133) by @fstubner
- Add installer script lint job, document cosign verification, prune dead dependabot group (#130) by @fstubner
- Split remaining over-cap GUI/CLI files and CSS by concern (#129) by @fstubner
- Split useWorkspace god-hook and fix requestRunRef indirection (#128) by @fstubner
- Remove duplicate TOOL_KINDS list and detailTab ternary in GUI (#127) by @fstubner
- Decompose site content/scripts and fix broken changelog rendering (#126) by @fstubner
- Decompose starlight.css and global.css into per-concern files (#125) by @fstubner
- Add MCP dispatch tests and dedupe the tool-dispatch table (#124) by @fstubner
- Fix GUI update-check CSP, DNS privacy gap, and doc drift (#123) by @fstubner
- Update TUI terminal stack (#92) by @fstubner
- Update sysinfo to 0.39 (#91) by @fstubner
- Update Rust toolchain to 1.96 (#90) by @fstubner
- Fix thiserror lockfile resolution (#89) by @fstubner
- Polish GUI release readiness (#87) by @fstubner
- packaging(winget): add v0.2.6 GUI manifest templates (#72) by @fstubner
- release(publish): wait for Windows release assets in Winget jobs (#71) by @fstubner
Maintenance
- build(deps-dev): bump typescript-eslint from 8.68.0 to 8.69.0 in /apps/netscli-gui (#369) by @dependabot[bot]
- build(deps): bump @tauri-apps/plugin-opener from 2.5.4 to 2.5.5 in /apps/netscli-gui in the tauri-js group (#366) by @dependabot[bot]
- build(deps-dev): bump @types/react-dom from 19.2.5 to 19.2.7 in /apps/netscli-gui in the react group (#365) by @dependabot[bot]
- build(deps-dev): bump @vitejs/plugin-react from 6.1.0 to 6.1.1 in /apps/netscli-gui in the vite-rollup group (#311) by @dependabot[bot]
- build(deps-dev): bump @types/react-dom from 19.2.4 to 19.2.5 in /apps/netscli-gui in the react group (#312) by @dependabot[bot]
- build(deps): bump lucide-react from 1.33.0 to 1.35.0 in /apps/netscli-gui (#313) by @dependabot[bot]
- build(deps-dev): bump typescript-eslint from 8.67.0 to 8.68.0 in /apps/netscli-gui (#314) by @dependabot[bot]
- build(deps-dev): bump @testing-library/react from 16.3.2 to 16.3.3 in /apps/netscli-gui (#315) by @dependabot[bot]
- build(deps-dev): bump eslint from 10.8.1 to 10.9.1 in /apps/netscli-gui (#316) by @dependabot[bot]
- build(deps): bump the astro group across 1 directory with 2 updates (#318) by @dependabot[bot]
- build(deps-dev): bump selenium-webdriver from 4.44.0 to 4.48.0 in /site (#319) by @dependabot[bot]
- build(deps): bump flate2 from 1.1.9 to 1.1.10 in the rust-patch group (#317) by @dependabot[bot]
- build(deps): bump flate2 from 1.1.9 to 1.1.10 in /scripts in the scripts-deps group (#334) by @dependabot[bot]
- build(deps): bump softprops/action-gh-release from 3.0.2 to 3.0.3 in the actions group (#335) by @dependabot[bot]
- build(deps): bump astro from 7.2.0 to 7.2.4 in /site in the astro group across 1 directory (#211) by @dependabot[bot]
- build(deps-dev): bump vitest from 4.1.10 to 4.1.11 in /apps/netscli-gui (#256) by @dependabot[bot]
- build(deps): bump lucide-react from 1.31.0 to 1.33.0 in /apps/netscli-gui (#255) by @dependabot[bot]
- build(deps-dev): bump the vite-rollup group in /apps/netscli-gui with 2 updates (#254) by @dependabot[bot]
- build(deps-dev): bump @axe-core/cli from 4.12.1 to 4.13.0 in /site (#212) by @dependabot[bot]
- build(deps): bump pcap from 2.4.0 to 2.5.0 in the rust-minor group across 1 directory (#214) by @dependabot[bot]
- build(deps-dev): bump the vite-rollup group across 1 directory with 2 updates (#115) by @dependabot[bot]
- build(deps): bump the tauri-js group across 1 directory with 2 updates (#111) by @dependabot[bot]
- build(deps): bump serde_with from 3.20.0 to 3.22.0 (#139) by @dependabot[bot]
- build(deps-dev): bump vitest from 4.1.7 to 4.1.10 in /apps/netscli-gui (#121) by @dependabot[bot]
- build(deps): bump lucide-react from 1.17.0 to 1.31.0 in /apps/netscli-gui (#154) by @dependabot[bot]
- build(deps): bump the rust-patch group across 1 directory with 15 updates (#168) by @dependabot[bot]
- build(deps): bump the actions group across 1 directory with 6 updates (#166) by @dependabot[bot]
- build(deps): bump mdns-sd from 0.19.2 to 0.20.3 (#99) by @dependabot[bot]
- build(deps): bump the react group across 1 directory with 4 updates (#153) by @dependabot[bot]
- build(deps): bump the scripts-deps group across 1 directory with 2 updates (#148) by @dependabot[bot]
- build(deps): bump postcss from 8.5.15 to 8.5.26 in /apps/netscli-gui (#151) by @dependabot[bot]
- build(deps): bump svgo from 4.0.1 to 4.0.2 in /site (#144) by @dependabot[bot]
- build(deps): bump js-yaml from 4.1.1 to 4.3.1 in /site (#156) by @dependabot[bot]
- build(deps): bump nanoid from 3.3.11 to 3.3.18 in /site (#157) by @dependabot[bot]
- build(deps): bump the scripts-deps group across 1 directory with 2 updates (#93) by @dependabot[bot]
- build(deps): bump reqwest from 0.11.27 to 0.13.4 in /scripts (#94) by @dependabot[bot]
- build(deps-dev): bump vite from 8.0.14 to 8.0.16 in /apps/netscli-gui in the vite-rollup group across 1 directory (#88) by @dependabot[bot]
- build(deps): bump the react group across 1 directory with 3 updates (#84) by @dependabot[bot]
- build(deps): bump devalue from 5.7.1 to 5.8.1 in /site (#81) by @dependabot[bot]
- build(deps): bump astro from 6.1.9 to 6.1.10 in /site (#80) by @dependabot[bot]
- build(deps): bump thiserror from 1.0.69 to 2.0.17 (#79) by @dependabot[bot]
- build(deps): bump openssl from 0.10.79 to 0.10.80 in /scripts (#86) by @dependabot[bot]
- build(deps): bump openssl from 0.10.78 to 0.10.79 in /scripts (#68) by @dependabot[bot]
Upgrade notes
No migration is required unless a note above says otherwise.
Full changelog: v0.2.6...v0.3.1