Skip to content

v0.3.2

Choose a tag to compare

@github-actions github-actions released this 21 Sep 14:38
· 27 commits to main since this release
3802564

Repairs the Linux packaging. The AUR desktop package installed a file that could not start, and the AppImage aborted before opening a window on any host with a recent Mesa. A desktop window that opens blank now recovers by itself, netscli with no arguments no longer hangs where there is no terminal, and discover names devices from mDNS when reverse DNS comes back empty.

Added

  • Discover names hosts from mDNS when reverse DNS cannot. Consumer routers
    do not serve PTR records for their own DHCP clients, and appliances ignore
    LLMNR and NetBIOS, so reverse lookup returned nothing for exactly the devices
    someone opened the app to identify. Those devices announce their names over
    mDNS constantly, and netscli has shipped an mDNS browser all along as a
    separate operation that discover never consulted. It does now, filling only
    the blanks, so nothing that resolves today changes. On one ordinary /24 that
    named 3 more of 26 hosts, taking 21 named to 24. Results carry a
    hostname_source of reverse or mdns, since a name from a device's own
    announcement is a different kind of claim from one in DNS.
  • The desktop app says the MCP server exists. Someone who only ever opens
    the app had no way to learn that netscli ships an MCP server, let alone
    connect an agent to one. There is now a panel that looks for a netscli binary
    and gives you the client configuration to paste, including what to do when it
    cannot find one — the desktop installers do not carry the CLI.

Fixed

  • netscli with no arguments no longer hangs when there is no terminal.
    With no subcommand it opens the TUI, which needs a terminal to draw on and
    read from. Without one it did not fail, it blocked forever: raw mode was
    entered and the runtime then waited on input that could never arrive. So
    netscli | head, or netscli from a script or a CI job, ran until
    something killed it. It now prints what --help prints and exits 0. The TUI
    is unchanged wherever there is a terminal.

    This has been the behaviour since 0.1.0, and it is what has kept the CLI's
    winget package on 0.2.6. Winget's validation runs the executable and waits
    for it, so the 0.3.1 submission has sat since 12 September carrying
    Validation-Executable-Error while the desktop app's went through the same
    day.

  • The docs site lost its navigation and its theme switch between 800px and
    1152px wide, and the search button sat stranded beside the wordmark.
    The
    header links — Features, Install, FAQ, Docs, Changelog, GitHub — and the
    light/dark control were both hidden across that range, on the understanding
    that the mobile menu carried them from there down. The button that opens
    that menu only appears below 800px, so for 352px of width there was nothing
    to press and no way to reach any of it. The docs sidebar is not a
    substitute: it lists the pages of the docs and carries five of those six
    links nowhere.

    The search button had a second fault behind it. The width at which the links
    hide moved from 900px to 1152px and two rules that depended on that number
    stayed put, so the layout seam ended up on a hidden element, which takes no
    part in the layout. Search fell back to the left with up to 861px of empty
    bar beside it.

    A new check measures where the header's controls sit at seventeen widths.
    Neither fault was visible to the existing accessibility, contrast or
    performance gates, because both are about position rather than markup,
    colour or speed.

  • netscli-gui-bin on the AUR installed a desktop app that could not
    start.
    The PKGBUILD did not set options=('!strip'), and strip is in
    makepkg's default options. An AppImage is the AppImage runtime — an
    ordinary static ELF — with a squashfs image appended after everything the
    ELF headers describe, so stripping it rewrote the file from its section
    table and threw the appended image away. What reached /usr/bin was the
    944,632-byte runtime out of a 79 MB download, and running it said only
    "This doesn't look like a squashfs image". The package built, installed and
    verified its checksum at every step, because the truncation happened after
    the checksum was checked. Reported in #377.

  • The Linux desktop AppImage no longer aborts on hosts with a newer Mesa.
    It failed with Could not create default EGL display: EGL_BAD_PARAMETER
    before any window appeared. The AppImage carried its own copies of nine
    display-stack libraries — the wayland client stack, libxkbcommon, and
    part of the xcb/X11 stack — and put them ahead of the host's, so the host's
    Mesa was made to talk to the wayland client library from the machine the
    release was built on. Those libraries are now removed from the image after
    it is built. Reported in #378 against v0.2.6 on Mesa 26.2.2; v0.3.1 bundled
    the same nine.

  • A desktop window that opens black or blank now recovers on the next
    launch.
    WebKitGTK's hardware compositing can fail against a driver that
    only partly supports it, and it fails silently: the window opens, nothing
    paints, and there is nothing on stderr to go on. Seen on virtual machines
    using vmwgfx. The app now marks each launch and clears the mark once the
    UI has actually drawn a frame, so a launch that never drew one is noticed by
    the next, which turns hardware compositing off and says why.

    This could not be a setting in the app. Every GUI preference lives in the
    webview's localStorage, and the webview is the part that is not rendering,
    so someone looking at a blank window cannot reach any of it. Alongside the
    automatic recovery there are now --disable-gpu-compositing and
    --gpu-compositing flags, which are remembered across launches. Linux only:
    the other two platforms use a web engine with neither the fault nor the
    setting. Also reported in #378.

  • Text in the desktop app's result tables can be selected again. Both the
    table and its wrapper set user-select: none, so a port, MAC address,
    vendor string or banner could not be dragged over with the mouse — and those
    values are on screen precisely so they can go somewhere else. The only route
    out was the detail pane. Selecting rows is a click, not a drag, so nothing
    was gained by it. Reported in #417.

  • The website's release notes lost their paragraph breaks, and the fade over
    a long entry read navy rather than matching the page.
    Both on the changelog
    page.

Changed

  • The website and docs got another pass. The install section's two
    controls line up and its alternatives stopped shouting; the hero badge shows
    the released version; the interfaces are shown rather than described; the
    README says only what a README can and its TUI screenshots work again; the
    comparison with nmap and the other scanners is fairer in both directions.
    Docs pages carry structured data, and the docs shell picked up a Lighthouse
    gate and two fixes it found.

Security

  • Three open advisories cleared. rustls 0.23.40 → 0.23.45
    (RUSTSEC-2026-0285, medium), which was in 0.3.1's lockfile and so is in the
    binaries that release produced. The other two are the website's build
    dependencies rather than anything in a release artifact: adm-zip ≤0.6.0
    (GHSA-vwc7-r8mq-g2x9 and GHSA-7q85-xj36-vmfc, high) and devalue <5.9.1
    (GHSA-9rgm-9g3h-6x36, moderate).

Full changelog: v0.3.1...v0.3.2