Release notes
What's new in BadHop
Generated from the same changelog the application shows in its What's New window — this page can't say something the app doesn't.
Version 1.2.0 (current)
August 2026
ChangedThe paused band is a light-grey diagonal hatch rather than a solid colour block — texture, not hue, is what says 'deliberately not monitoring', so the band stays readable over every colour theme instead of blending into the Default theme's own blue fill. It also now starts exactly at the last datapoint rather than leaving a sliver of bare background, and pop-out windows finally honour the theme's fill colour instead of always painting blue
FixedPausing a target now shows the PAUSED band within a second or two instead of hiding it beyond the graph's trailing edge for several seconds, and resuming no longer makes the graph rubber-band backwards then forwards — the live window's scroll lag is now estimated from several recent samples and glides through changes instead of chasing a single gap that briefly measured as the whole pause. A ping already in flight when you click Pause is also no longer recorded after the pause point
ChangedPreset roster refreshed — three new built-in themes: Fern (a status-green family), Aurora (violet) and Clarity (the Okabe–Ito colour-blind-safe palette, giving colour-blind users a full theme rather than just a mode). Forest retires to make room; targets already using its colours keep them
NewCustom graph themes can now recolour the Warning line, the Alert loss red and the Paused band alongside the four series colours — three new pickers in the theme editor, with a live preview showing all of them. Built-in presets keep the classic colours
FixedThe three-dots menu beside a custom theme (Rename / Edit colours / Duplicate / Delete) opens properly now — it was rendering invisibly behind the Settings and Appearance panels, and the click that opened it was simultaneously closing the panel it lived in
FixedCreating a new custom theme from a target's Appearance panel now applies it to that target immediately, as the dialog says it will
ChangedPausing now shows on the graphs as it happens — a hatched PAUSED band grows live over the gap from the moment you pause, on the RTT and loss graphs and in pop-out windows (which previously showed nothing at all). Previously the band only appeared after an unrelated redraw, and at an opacity that made it invisible anyway
ChangedCompare graphs no longer jump sideways as new data arrives — the live window now tracks each target's own ping cadence and glides through changes, on both the Compare page and its pop-out window. The stats table also stops rewriting itself under your scrollbar every second, so scrolling it stays put
ChangedExports now default to timestamped filenames (badhop_targets_2026-08-29_1432.txt and the like) — target lists, CSV data, sessions, packet captures and graph images — so a second export never offers to overwrite the first
ChangedRemove Licence button in About is now red, matching the confirmation it leads to
ChangedPacket capture rewritten — BadHop now talks to Npcap directly instead of going through a second program, so it ships as a single self-contained executable with nothing to install alongside it. Capture still needs the Npcap driver; everything else (ping, jitter, loss, alerts, traceroute) uses Windows' own APIs and needs neither Npcap nor administrator rights
NewFull third-party licence texts now ship with BadHop and are reachable from About → Licence texts — previously the portable download carried none at all
ChangedMinimize to system tray removed — the feature had never actually worked (its library was missing), and with the tray setting enabled, closing the window could exit without offering to save your session
NewLicensing — BadHop is free for 3 concurrently monitored targets with every feature available; a two-part code (a name and a key) removes the limit. Verification is entirely offline, so no internet connection is ever needed and nothing about your licence leaves the machine
NewLicence status is visible where you need it — a Licence section in About, a card in Settings › System › Preferences, an 'Activate Licence' button in the status bar while unlicensed, and a target counter in the sidebar showing how much of the free limit you have used
NewLicence term shown as a countdown — the About badge reads '90 days left' and turns amber inside the last 14 days, perpetual licences simply say 'Perpetual', and an upcoming expiry is announced once at startup
NewSettings rebuilt from the ground up — a navigation rail with 14 panes across 6 categories, live preview as you adjust, per-field highlighting of unsaved edits, and Save-and-close / Cancel-reverts behaviour throughout
NewInheritance badges in the Alert popover, Warning popover and Edit Target — every field shows whether it is on the Default or Overridden, with one-click revert and an 'Edit defaults' link straight into the matching Settings pane
NewExpert Advice tab — a short list of computed findings for the selected target, covering things no single reading shows: a route change since the last traceroute, where packet loss begins along the path, latency trending upward across the window, a hop that is unstable behind a healthy-looking average, and breaching while notifications are muted. When nothing is wrong it lists the checks it ran, so a clear panel reads as 'all clear' rather than as a failure
NewPer-target notes — free text saved with the target, editable from the detail view's Notes tab, a Notes column in the Compare table, or a shared notes editor opened by double-click
NewGraph export — right-click any graph in the detail view, a pop-out window or the Compare page for Copy Image or Save Image As
NewPer-target Appearance popover — session-only overrides for colour theme, RTT line thickness and gridline faintness, all previewing live as you adjust them
NewCustom graph theme library — save as many named colour themes as you like, shared between Settings › Display and the Appearance popover, with changes appearing live in other open windows
NewConfigurable trend sparkline — Settings › Display & Graphs › Trend Graph offers 8 visual styles, an optional taper for the bar styles, and combinable caps on maximum readings and maximum time window
NewCustom time windows — the detail view and Compare page each accept several session-only custom windows, entered with Hours/Minutes/Seconds fields, with an 'Add permanently' option that saves the window into Settings
NewCompare table columns and rows can both be dragged to reorder, and columns dragged to resize, each with its own reset that appears only once you have changed something
NewCompare now works with a single selected target — it previously required at least two
NewRight-click context menu gains 'Alert config…', 'Warning config…' and 'Appearance…', so these are reachable from the sidebar, table and grid rather than only from the detail view
New'Windowed' button in the Detail header opens the floating detail popup
NewKeyboard shortcuts reference added to Settings › Help
NewPacket capture handles long sessions — rows are virtualised so a large capture stays responsive, and 'timed out' packets can be matched in both the quick and advanced filters
ChangedTraceroute and Hops merged into a single Traceroute tab — the two shared five identically-calculated columns. One table now shows HOP, IP, HOSTNAME, RTT, MIN, AVG, MAX, LOSS %, Δ PREV and STATUS, keeping Re-run, Auto (60s), hop selection and the hop RTT graph
ChangedDetail view regrouped — the header is organised into Thresholds, View and Presentation clusters, the 'Monitor' tab is now called 'Graph', and the Application Impact tab has been removed
ChangedLicence agreement updated to a trial-plus-licence model, with a seat defined as a per-device installation; the About modal and the launch reminder now take their wording from that single source rather than keeping their own copies
ChangedRemoving a licence takes effect immediately rather than at the next restart — the confirmation warns how many targets will stop, and names them afterwards
ChangedTargets over the free limit are parked rather than discarded — they stop running but are kept, and start again the moment a licence is entered
ChangedBeing blocked from adding a target now shows a self-dismissing banner with an Enter Licence button, instead of interrupting with a dialog on every attempt
Changed'Default' and 'Reset' in the quick editors now restore your own saved global defaults, rather than BadHop's built-in factory values
ChangedEdit Target restructured into Identity, Loss Alert, Warning and Monitoring sections, mirroring the quick-edit popovers
ChangedThe Warning popover's graph-style dropdown has been removed — it was presented as a per-target setting but silently wrote a global one, and now appears only in Settings
ChangedCompare colour palette rebuilt — 20 curated colours (16 solid, 4 striped) chosen to avoid clustering in the greens, with striped lines drawn as fixed-width vertical bands so the pattern stays consistent whatever the line's slope
ChangedLive graphs glide smoothly between updates in the detail view and pop-out windows, rather than stepping once per data push, and x-axis tick spacing is now consistent across every view
ChangedThe Avg trend line is now always solid black rather than a theme-tinted grey that turned orange during warn periods, and draws from up to 300 readings rather than 60
ChangedCustom ping interval now has a floor of 0.5 s — the 0.1 s advertised in 1.1.2 was below the engine's documented minimum and was never honoured
ChangedThe main window can no longer be shrunk below the width the interface actually needs
FixedSave Image As, Save/Load Session, Export CSV, Export Targets, Export pcap and the Wireshark/Npcap pickers all silently did nothing — every file dialog now opens correctly
FixedPacket capture, pcap export and the Wireshark handoff silently failed in the installed application — all three now work in a packaged build
FixedThe licence reminder appeared at launch even when licensed, and 'Enter Licence' seemed to do nothing because About opened behind it — dialogs now always come to the front, and Escape closes whichever is visually on top
FixedQuitting while unlicensed with a saved session larger than the free limit permanently discarded the extra targets
FixedThe Compare page's graph and stats table appeared right-aligned and overflowed the window
FixedGrid-view target cards failed to render
FixedApplying the Warning popover corrupted a target's thresholds — it wrote the jitter value into the RTT threshold and reset the recovery and notify counts on every apply
FixedQuick-edit popovers acted on whichever target the detail view was showing rather than the one you right-clicked, and could open off the edge of the window
FixedColumn sorting in All Targets did nothing — the arrow appeared but the rows never reordered
FixedSidebar rows showed the wrong target's name, IP, RTT and badges while a search filter was active, and the Detail status pill froze on the first target opened
FixedThe per-target ping rate limit and the global packets-per-second ceiling were not enforced at runtime, so a very fast local target could pin a CPU core and flood it with ICMP
FixedPausing and resuming a target repeatedly left extra ping loops running alongside the new one, doubling traffic and skewing sequence numbers
FixedSaved sessions lost settings and detail — rolling-window loss alerting was switched off on every reload, sequence numbers and TTL came back as 0 and blank, a paused target reloaded as running, and packets-sent was under-reported
FixedThe alert rate limit and bad-hop RTT threshold did not survive a restart — Settings showed your saved value while the engine quietly used the built-in default
FixedDetail pop-out windows ignored your warning-line settings, graph colour theme and colour-blind mode, and switching theme left every open window on the old one until it was reopened
FixedThe RTT graph's 'Warning' legend tick box only worked one way and was undone on the next redraw, and the warning-line auto-show setting did not default to on as intended
FixedThe Appearance popover's live preview never worked — per-target overrides were saved under a key that could not be read back — and its footer buttons were squashed
FixedCompare graphs jolted once a second, older data jumped rather than scrolling off, and the Min/Avg/Max/Loss figures included history from outside the selected window
FixedCapture 'Copy CSV' exported only the rows currently on screen rather than the whole capture
FixedPasting an IPv6 address could silently monitor the target's IPv4 address instead, with no warning that there was no IPv6 route
FixedTarget names containing characters such as < or " broke the sidebar and table rows — most likely to bite when importing a target list from a file
FixedEscape closed every open dialog at once and triggered a full Settings revert; it now closes only the topmost, and works while the cursor is in a text field
FixedInstaller shortcuts pointed at a file that did not exist, and uninstalling left the program files behind
FixedThe Feedback button and the About window's email link did nothing instead of opening your mail client
FixedA rejected Edit Target partly applied — the destination is now validated before any change is committed
FixedSmall text on amber warning badges and the text on danger buttons were too low-contrast to read comfortably, in both light and dark themes
Version 1.1.3
July 2026
NewResizable columns — drag handles on the All Targets column headers let you set column widths to suit; a Reset widths button appears when any column has been adjusted
ChangedDensity preference now persists across restarts — setting is saved to preferences.json rather than relying on browser storage alone
ChangedLogo refreshed — new 'Latency Mountain' SVG mark with blue→amber→green gradient used across topbar and About
ChangedCompare view renamed to 'Compare Targets' throughout
ChangedAll Targets panel title simplified from 'All Targets — Live Summary' to 'All Targets'
FixedSidebar mute and pause icons now sit inline with the target name — previously they dropped below the name line
FixedPin button unreliable — drag subsystem was occasionally swallowing clicks; now reliably toggles on first click
FixedCompare stats table column widths — fixed-width columns with overflow ellipsis prevent horizontal overflow in the stats panel
Version 1.1.2
July 2026
NewPacket capture traceroute filter — outbound Echo Requests with TTL ≤ 25 (traceroute probes) and their corresponding replies are suppressed at the pcap level before being written to disk
NewCustom ping interval — 'Custom…' option in the interval selector opens an in-app prompt; accepts any value between 0.1 s and 3600 s
ChangedTopbar Import/Export split into dropdowns — 'Import ▾' and 'Export ▾' each offer 'Target list' and 'Graph data' sub-items
ChangedInterval selector — label removed; compact option labels (e.g. '2.5s'); non-selectable 'Interval' optgroup header
ChangedStop All / Start All icons — replaced Unicode pause/play characters with SVG icons to eliminate dark rendering artefacts on disabled state
ChangedDark/light toggle moved to topbar — moon/sun SVG button replaces hidden system-follow behaviour; preference persists across sessions
ChangedAbout moved to ? icon button at far right of topbar — removed as standalone text button
ChangedSidebar header removed — 'All Targets' label and '+' button eliminated; both functions covered by the topbar home and Add Target buttons
Version 1.1.1
July 2026
NewMute button dropdown — hover or click Mute to choose 'This target' or 'All targets'; labels reflect current mute state
NewRight-click 'All Targets' in sidebar — context menu with Add Target and Delete All options
NewHover-to-open popovers — Alert, Warning, Reset, and Mute buttons open their panels after a 450 ms hover; panels close automatically when the mouse leaves
NewCompare view resizable — drag handle lets you set the comparison graph height
NewCompare colour palette expanded to 20 distinct colours with a hard cap of 20 simultaneous targets
NewReset graph sizes now a single button with a 'This target' / 'All targets' sub-menu
NewSparkline redesign — thinner line, subtle background frame, gaps at lost-packet positions; no heavy fill
ChangedTrend line renamed 'Avg' and changed from EMA to a 20-sample rolling average in both main and popup views
ChangedHover tooltip now includes the rolling average value alongside RTT and jitter
ChangedSidebar scrollbar widens on hover for easier click-drag on large target lists
ChangedReset and Compare buttons in detail header now carry icons (🔄 / 📊) to match Alert and Warning
FixedPopover/dropdown stayed open when navigating between targets — all panels now close on target switch
FixedReset dropdown was always visible — missing CSS rule meant .hidden had no effect
FixedAlerts firing after a target was deleted — ping loop now checks stop flag before evaluating alerts
FixedJitter plotted on missed-ping samples — jitter is now null (not 0) when a packet is lost
FixedClick-opened dropdowns self-closing — hover-close now only applies to hover-opened panels; click-opened panels require explicit dismiss
FixedMuting now suppresses both loss-alert and warning toasts (was already correct — confirmed by code review)
Version 1.1.0
July 2026
NewCompare modal — overlay up to six targets on a shared RTT graph for side-by-side comparison, with per-target min/avg/max/loss stats
NewSearch/filter bar — live filtering of sidebar and summary cards by target name or IP
NewResizable sidebar — drag handle between sidebar and main content to widen or narrow
NewPause gap visualisation — graphs now show a shaded band and line break across any period monitoring was paused
NewIPv4/IPv6 chips — dual-stack targets show clickable chips; clicking the inactive version adds it as a new independent target
NewSidebar drag-and-drop — targets can be reordered by dragging; order persists across sessions
NewSummary view drag-and-drop — reorder targets directly from the All Targets summary table
NewTraceroute auto-refresh toggle — run traceroute automatically every 60 seconds or trigger manually
NewIndividual packet loss events — a single dropped ping is now recorded in the Events tab immediately
FixedGraph right-edge gap — live graphs now sit flush with the most recent data point at all ping intervals
FixedRTT graph invisible below 15 ms — y-axis floor is now computed dynamically from live data
FixedLeft-edge line stitching — RTT line no longer floats disconnected as old data scrolls out of the window
FixedCompare modal — all selected targets now render as separate coloured lines (previously only the first line was drawn)
FixedEvents tab auto-refresh — Events and Trace tabs now refresh every 3 seconds when active
FixedIPv4/IPv6 chip — clicking a green chip (already-added target) now navigates to that target instead of doing nothing
NewIPv4/IPv6 'not found' chip — when only one IP version resolves, the missing version shows a greyed-out disabled chip rather than hiding the toggle
ChangedSpace Grotesk logo typeface — updated header typeface for a cleaner, more contemporary look
ChangedPing thread priority — ping threads now run at above-normal priority for more consistent timing
Version 0.1 (beta)
March 2026
NewLive ping monitoring (RTT, jitter, packet loss) for multiple simultaneous targets
NewTraceroute with per-hop RTT history and loss tracking
NewReal-time sparkline graphs in sidebar and summary table
NewDetail view with Ping Monitor, Traceroute, Traffic Impact, and Events tabs
NewTime window selector: Live 120s / 10 min / 1 hr / 2 hr / 6 hr / 12 hr / 24 hr / All Data
NewRTT graph with semi-transparent red shading during packet loss periods
NewPacket loss graph: flat baseline with event markers on a 0–100% scale
NewTraffic Impact analysis: suitability ratings for VoIP, video, RDP, gaming, streaming, and more — with cited context from ITU-T, RFC, and vendor sources
NewIPv4 and IPv6 support — automatic detection with user-controlled fallback confirmation
NewDesktop notifications (Windows toast) for RTT, loss, and hop threshold crossings
NewBulk import targets from .txt file (host, display name format)
NewSession save and load to SQLite database
NewDark mode with persistent preference
NewConfigurable ping intervals from 0.5s to 60s
NewPinnable targets — float any target to the top of the summary view
NewAdjustable graph heights per target — drag the resize handle at the bottom of each graph
NewPer-target alert thresholds: RTT, loss, hop RTT, hop loss
NewSortable summary table with multi-select, bulk delete, and aggregate row
NewResizable sidebar with drag handle
NewHop click-to-select in traceroute table with per-hop RTT history graph