Repository navigation
Releases: MartenH/blobly_net
Release list
Blobly Net v2026.09.01
What this version's claims rest on. The protocol engine and the virtual paths
(simulation, the in-process bus, DoIP, replay) are unit-tested and run in CI on every push.
SocketCAN I/O is exercised on the maintainer's bench (vcan and real adapters), not in
CI — the CI environment has no vcan. The Windows vendor CAN backends (Vector, PCAN,
Kvaser) and the CANsub backend (a USB network adapter, both platforms) are hand-verified
on real hardware — Vector on a VN1630A at bus saturation — see
windows_can_hardware.md.
Vendor DLLs (vxlapi64.dll,PCANBasic.dll,canlib32.dll) are not bundled — they
come with the vendor's driver install, and the Vector XL terms forbid redistributing theirs.The Linux tar.gz needs the distro runtime:
sudo apt install libglfw3 libfreetype6 libgl1.
The Windows zip is self-contained.
What's Changed
- vgui: the GCC runtime does travel, and the comment said otherwise by @MartenH in #321
- release: an AppImage, so a Linux user does not have to apt-install anything first (#322) by @MartenH in #323
- release: v.mod 2026.09.01 by @MartenH in #324
Full Changelog: v2026.09.00...v2026.09.01
Blobly Net v2026.09.00
What this version's claims rest on. The protocol engine and the virtual paths
(simulation, the in-process bus, DoIP, replay) are unit-tested and run in CI on every push.
SocketCAN I/O is exercised on the maintainer's bench (vcan and real adapters), not in
CI — the CI environment has no vcan. The Windows vendor CAN backends (Vector, PCAN,
Kvaser) and the CANsub backend (a USB network adapter, both platforms) are hand-verified
on real hardware — Vector on a VN1630A at bus saturation — see
windows_can_hardware.md.
Vendor DLLs (vxlapi64.dll,PCANBasic.dll,canlib32.dll) are not bundled — they
come with the vendor's driver install, and the Vector XL terms forbid redistributing theirs.The Linux tar.gz needs the distro runtime:
sudo apt install libglfw3 libfreetype6 libgl1.
The Windows zip is self-contained.
What's Changed
- A spawned open hands its bus over by value, not by the address of its own stack by @MartenH in #244
- A CANsub monitor is judged by its receive counter, and the device name is resolved once per process by @MartenH in #243
- The Buses tick is a project edit, and a CANsub name is looked up when the project loads, not at Start by @MartenH in #249
- The CANsub connection stays open: one TLS connection per device, a reader that stops at the end of the reply by @MartenH in #248
- One Save: Ctrl+S from anywhere, the menu, and a "saved" the eye can see by @MartenH in #250
- A CANsub write is bounded, so a Stop behind a hung send is too by @MartenH in #251
- Normal is the default: listen-only is a tick, off is the row tick, monitor is normal, and the Log follows by @MartenH in #253
- Kvaser echoes its own sends to its sibling handles, so wiretap claims them by @MartenH in #255
- Quick send has a Send and one field per line; the Log has a clock and a Clear; every row says it is open by @MartenH in #256
- Start opens the transmit taps on a worker, so a slow CANsub open no longer freezes the window by @MartenH in #257
- A session log file: every Log line, everything that went to stderr, and the facts a bug report needs by @MartenH in #259
- The transmit-tap lifecycle is four tested rules, and the GUI calls them by @MartenH in #261
- A CANsub name is asked of the device by mDNS, and the Log says how it was found by @MartenH in #262
- Bus load: a strip and a number per wire, and the busiest wire on the toolbar by @MartenH in #263
- gui: narrate "bus ok" when the wire first answers, not a second later by @MartenH in #265
- transport(cansub): survive a TLS handshake a signal interrupted by @MartenH in #264
- gui(trace): the cycle window restarts at a Start and at a dropout by @MartenH in #266
- gui(config): point an existing bus at a detected interface by @MartenH in #267
- gui(config): don't let a Buses-tab Save silently drop .blobnet comments (#80) by @MartenH in #268
- docs(roadmap): the "kept last" line goes last by @MartenH in #274
- project(test): the unreadable-rows test holds on a Windows bench with a Vector driver (#252) by @MartenH in #276
- script(doip): doip.listen honours
from— the channel's own port, refusing a contradiction (#233) by @MartenH in #275 - gui(gen): generator signals can sweep — share the value source with the simulator by @MartenH in #269
- gui: a late rx_loop write checks that the row is still its own, not only the run (#140) by @MartenH in #277
- replay: a classic channel says how many CAN-FD frames it is about to refuse (#184) by @MartenH in #279
- vectorcheck: a failed channel restore fails the command, exit 3, naming the way back (#197) by @MartenH in #278
- ci: pin V to the last master commit a green run built (master is V3-only now) by @MartenH in #282
- codex watcher: identify a body-only review by its /blob/ link when it carries no marker by @MartenH in #281
- candb: read AUTOSAR ARXML as a database; arxml2dbc export (#272) by @MartenH in #273
- candb(arxml): the leaf table — one schema-like check over every leaf the reader depends on (#280) by @MartenH in #283
- ci: pin the V bootstrap (.vc-version), because pinning .v-version alone never was a pin by @MartenH in #285
- restbus: the transmit loop gets its own frame, and why -prod is not on yet by @MartenH in #284
- stop() waits for its workers, and a run restores which buses the project enables (#107, #125) by @MartenH in #286
- isotp: honour Flow Control — CTS/WAIT/OVERFLOW, block size and STmin (#226) by @MartenH in #290
- isotp(test): stop two flow-control tests depending on seventeen timed reads by @MartenH in #291
- Say when a
verify:entry describes traffic we send ourselves (#95) by @MartenH in #289 - Settle line endings: .gitattributes, and one renormalising commit (#207) by @MartenH in #292
- gui: bus topology is fixed at Start; the workload stays live (#120) by @MartenH in #294
- chore: .git-blame-ignore-revs for the renormalising commit (#207 follow-up) by @MartenH in #293
- project: a generator's
bus:is a channel NAME (#97) by @MartenH in #295 - test(isotp, transport): a deadline on an event that MUST happen is a hang-breaker by @MartenH in #298
- telem: TraceRsp cause 3 (full) — a oneshot that completed on its own by @MartenH in #301
- wiretap: evict in place — the ring rebuilt itself on every emitted frame, and replay stuttered by @MartenH in #299
- replay: the hot paths stop allocating, the worker stops spinning, and the trace draws from buffers it keeps by @MartenH in #300
- replay: the arena — a loaded recording as pointer-free rows the collector never walks, played through views by @MartenH in #303
- gui: the picker's grammar and drives, content-sized tables, the Script panel's Browse/Edit/output (#270) by @MartenH in #305
- gui: dialogs that do not dock, a drive row with WSL, Preferences with an external editor, the Script panel's divider and discard (#306) by @MartenH in #307
- gui: the settings file is last-writer-wins, like the layout file beside it (#309) by @MartenH in #310
- gui: the app writes the layout file, so a half-written one is not what the next start reads (#308) by @MartenH in #311
- test(transport): scheduling and the wake-up are two events, so they get two deadlines (#304) by @MartenH in #312
- isotp(software): the dirty window ends at a successful recv, and a skipped orphan explains the silence (#296) by @MartenH in #314
- probe: the group-failure count loaded, and the interval that crosses the endpoint kept (#302) by @MartenH in #313
- test(isotp): measure a 60 ms pacing claim with a clock finer than 15.6 ms by @MartenH in #316
- ci: keep the Linux binary this job already builds by @MartenH in #317
- packaging: stop statically absorbing GLib, and ship the licence texts (#318) by @MartenH in #319
- release: audit, and v.mod 2026.09.00 by @MartenH in #320
Full Changelog: v2026.08.01...v2026.09.00
Blobly Net v2026.08.01
What this version's claims rest on. The protocol engine and the virtual paths
(simulation, the in-process bus, DoIP, replay) are unit-tested and run in CI on every push.
SocketCAN I/O is exercised on the maintainer's bench (vcan and real adapters), not in
CI — the CI environment has no vcan. The Windows vendor CAN backends (Vector, PCAN,
Kvaser) and the CANsub backend (a USB network adapter, both platforms) are hand-verified
on real hardware — Vector on a VN1630A at bus saturation — see
windows_can_hardware.md.
Vendor DLLs (vxlapi64.dll,PCANBasic.dll,canlib32.dll) are not bundled — they
come with the vendor's driver install, and the Vector XL terms forbid redistributing theirs.The Linux tar.gz needs the distro runtime:
sudo apt install libglfw3 libfreetype6 libgl1.
The Windows zip is self-contained.
What's Changed
- The Discover dialog finds CANsub devices by mDNS (#235) by @MartenH in #236
- Release 2026.08.01: v.mod bumped by @MartenH in #237
Full Changelog: v2026.08.00...v2026.08.01
Highlights
- CANsub devices appear in the Discover dialog (#235, #236). A CANsub is a USB network adapter, so no interface listing ever saw it; the dialog now browses mDNS for
_cansub._tcpon every IPv4 interface (about 0.7 s, off the render thread) and offers a row per channel. "Could not look" — port 5353 refused, no interface, a query that could not be sent — is said in the dialog rather than shown as an empty list. Bench-verified from Linux/WSL against a CANsub.4; the Windows half is type-checked only, so if the device does not appear there, check that Windows Firewall allows blobly_net.exe inbound UDP 5353.
Blobly Net v2026.08.00
What this version's claims rest on. The protocol engine and the virtual paths
(simulation, the in-process bus, DoIP, replay) are unit-tested and run in CI on every push.
SocketCAN I/O is exercised on the maintainer's bench (vcan and real adapters), not in
CI — the CI environment has no vcan. The Windows vendor CAN backends (Vector, PCAN,
Kvaser) and the CANsub backend (a USB network adapter, both platforms) are hand-verified
on real hardware — Vector on a VN1630A at bus saturation — see
windows_can_hardware.md.
Vendor DLLs (vxlapi64.dll,PCANBasic.dll,canlib32.dll) are not bundled — they
come with the vendor's driver install, and the Vector XL terms forbid redistributing theirs.The Linux tar.gz needs the distro runtime:
sudo apt install libglfw3 libfreetype6 libgl1.
The Windows zip is self-contained.
Highlights
- CSS Electronics CANsub — a fourth hardware backend, and the first that is neither a vendor DLL nor platform-gated: a USB network adapter reached over REST + WebSocket, the same
cansub:<device-id>/<channel>string on Linux and Windows, no driver. Hand-verified on a CANsub.4: classic, extended, 64-byte CAN-FD with BRS at a 2 Mbit/s data phase, listen-only reaching the controller (#204, #223). - Rest bus from a real recording — replay an
.mf4or candump capture onto live buses with the ECU under test subtracted by DBC sender, several recorded buses mapped onto several live channels from one clock, and a Scan dialog that picks both from the file;cmd/restbusheadless (#98). Bus.diagnostics()— dropped, controller-error and undecodable records on every backend, beside health: a chip on the Buses row, narrated by the Log, printed by the headless runner (#213).- One reader per shared wire — a second open of a PCAN or CANsub wire is a subscriber, not a competitor for frames (#212); the first open reserves the wire and runs its factory outside the process-wide lock, so a stalled device stalls only its own openers (#211).
- CAN-FD everywhere — PCAN completes the set; framing is declared per wire and stamped once, replay reproduces what was recorded (#217, #185).
- Numbering is calendar-based from this release —
YYYY.MM.PATCH, sov2026.08.00; seedocs/releasing.md. Formats and the.blobnetschema are still not a compatibility promise.
What's Changed
- A channel that fails to open says so in the Log, on every platform by @MartenH in #141
- Bus-off can reach the screen, and the trace never claims a send that did not happen by @MartenH in #143
- A logo for the README, keyed for both GitHub themes by @MartenH in #144
- One build recipe, and nothing to fetch: the Windows build works from a clone by @MartenH in #145
- One wire, one handle: PCAN opens share a refcounted bus by @MartenH in #148
- The grouped trace reads in milliseconds, the unit CAN is specified in by @MartenH in #151
- Loop is a control, not a setting, and the position is drawn once by @MartenH in #160
- A bus warning degrades a wire; it must not remove it by @MartenH in #162
- Four panels of output you can finally get out of the app by @MartenH in #163
- listen-only is a promise the wire keeps, not one each emitter remembers by @MartenH in #164
- A channel's configuration belongs to its open ports, so ask them before enabling a row by @MartenH in #166
- A wire that goes quiet says so, where the operator is looking by @MartenH in #159
- A focused window says so, and a tab admits it can be dragged by @MartenH in #169
- The review tooling could not run on Windows at all by @MartenH in #168
- Two application channels on one transceiver is a configuration, and it is refused by @MartenH in #173
- Vector hands our own frames back, so stop filing them as the ECU's by @MartenH in #174
- The module suite could not pass on Windows, and said so twice by @MartenH in #176
- An mf4 remote frame is a frame, not a group to skip by @MartenH in #175
- No test may own a port that another run might want by @MartenH in #178
- A test says which project it needs, instead of CI remembering by @MartenH in #180
- CAN-FD on Vector: the data rate in the address is what asks for it by @MartenH in #182
- CAN-FD in the app: a data-rate field, and a row that says what its adapter cannot do by @MartenH in #183
- Say which Vector channels can carry CAN-FD, because the driver knows by @MartenH in #189
- Assign Vector hardware from the Discover dialog, and say when the application is missing by @MartenH in #192
- How a Vector bench is set up, and where the CAN-FD data rate actually lives by @MartenH in #188
- An unreadable Vector channel is not an unused one, and vectorcheck reports a rate the wire could produce by @MartenH in #199
- CAN-FD on Kvaser, proved on the bench rather than in a comment by @MartenH in #200
- The channel's format reaches the frames we build, not just the ones we replay by @MartenH in #202
- A Kvaser remote frame arrives as a remote frame, not as data by @MartenH in #205
- The Replay panel command protocol moves to where a test can reach it by @MartenH in #209
- A remote frame asks for a message; it does not send one by @MartenH in #210
- A CANsub is a Bus, and a bitrate means the same thing to two vendors by @MartenH in #204
- Remote frames: drop transmit support, keep decoding by @MartenH in #216
- CAN-FD on PCAN, and a parity table to say what finished means by @MartenH in #217
- A listen-only PCAN or Kvaser was still acknowledging every frame it saw by @MartenH in #219
- Give every shared-wire handle its own receive cursor (#212) by @MartenH in #221
- A CANsub cannot change listen-only mid-run, and had been failing to in silence by @MartenH in #223
- An idle PCAN wire cost a thousand driver reads a second; now it costs none by @MartenH in #224
- isotp.open exists on every platform, and CI type-checks every cmd/ tool for both by @MartenH in #225
- A failed raw write keeps its pending TX ack entry for a grace, and the hub-test fakes are per instance (#227) by @MartenH in #228
- The in-process diagnostics test's server runs until told to stop, not for 3000 ms (#191) by @MartenH in #229
- The first open of a shared wire runs its factory outside the registry lock, behind a reservation (#211) by @MartenH in #230
- Bus.diagnostics(): what a backend knows that is neither a frame nor a health rung (#213) by @MartenH in #231
- CI skips V's experimental V3 compiler, which was building every test program twice and phoning home by @MartenH in #232
- Release 2026.08.00: the documentation audited against the code, CalVer adopted, v.mod bumped by @MartenH in #234
Full Changelog: v0.1.0...v2026.08.00
Blobly Net v0.1.0
What this version's claims rest on. The protocol engine and the virtual paths
(simulation, the in-process bus, DoIP, replay) are unit-tested and run in CI on every push.
SocketCAN I/O is exercised on the maintainer's bench (vcan and real adapters), not in
CI — the CI environment has no vcan. The Windows vendor CAN backends (Vector, PCAN,
Kvaser) are hand-verified on real hardware — Vector on a VN1630A at bus saturation — see
windows_can_hardware.md.
Vendor DLLs (vxlapi64.dll,PCANBasic.dll,canlib32.dll) are not bundled — they
come with the vendor's driver install, and the Vector XL terms forbid redistributing theirs.The Linux tar.gz needs the distro runtime:
sudo apt install libglfw3 libfreetype6 libgl1.
The Windows zip is self-contained.
First release — every PR in this history
- A version the binary answers with, and a tag that publishes it (#137)
- The stopped Replay panel shows the fan-out: one recording, one clock, its wires beneath it (#136)
- Scan the recording: bus: and exclude: picked from facts, not typed from memory (#135)
- Add codex review watcher scripts (#134)
- Replay panel: transport controls for running replay channels (#133)
- DBC Editor: floats by default, and its panes finally slide (#132)
- A remote frame is its own trace row, and a trimmed import keeps the file's frame numbers (#130)
- A bigger fixed window, not a maximized one — and Reset Layout (#129)
- Every capture control lives with the capture, and the trace says what it shows (#128)
- Trace: idx, µs timestamps, len, flags and fps columns; start maximized (#127)
- Closes #123: split main.v into per-concern files — move code, change nothing (#126)
- Read the current CLAUDE.md, not the one the checkout happens to hold (#124)
- One script to get a virtual bus back: setup_vcan.sh (#122)
- Docs: describe the current state, and say what "verified" means (#118)
- Say what to do when review findings repeat in one path (#116)
- Vector XL backend: a VN channel is a bus like any other (#114)
- Closes #98: a replay channel plays, and every channel of one recording shares its clock (#113)
- Replay several recorded buses at once, on one clock (#111)
- The codex verdict is a review, not an issue comment (#110)
- CAN-FD: carry the frame the recording actually captured (#109)
- Read the CAN-FD captures whose payloads live in an SD block (#108)
- Closes #105: TX 3 · TX-S 1376 — the header counts what we sent, split by origin (#106)
- The overview screenshot shows what origin is for (#104)
- perf(wiretap): stop rebuilding the pending ring on every claim (#103)
- Closes #90: read the one piece of provenance a recording can carry (#102)
- Closes #96: one injective key, tested where it can be (#101)
- Anchor the replay work (#98) where people meet it (#100)
- The origin column speaks CAN: TX, TX-S, RX (and REP) (#99)
- An imported recording keeps its buses apart (#94)
- Clean up what the announcement-trigger removal left behind (#93)
- The trace says whose frame it is: TST / SIM / REP / BUS (#92)
- The DoIP entity announces itself at Start (#89)
- check-runs are descending, and a force-push answers for the old sha (#88)
- A failing gh must not read as "nothing waiting" (#87)
- The clean verdict is a reaction — polling docs, part 2 (#86)
- Start hosts the DoIP entity the projects have been promising (#84)
- A DoIP ECU can have its own identity, and sim-demo has one (#83)
- Reach DoIP entities from Lua, and actually host one headless (#81)
- feat(gui): edit the .blobnet in the app, and make Cfg open the editor that edits (#79)
- feat(sim): verify counter and checksum on received frames (#77)
- feat(sim): fault injection — drop, corrupt, freeze and range-violate on purpose (#76)
- fix: headless runner resolves DBC paths and bitrates like the GUI (#75)
- feat(sim): a UDS server per simulated ECU, with its own addresses and content (#74)
- docs: a simulation user manual (folds in restbus) (#73)
- feat(sim): end-to-end protection — alive counter and checksum for rest-bus frames (#72)
- docs: record the commit-identity review artifact as a known non-finding (#71)
- docs: a DoIP user manual, and point Help at it (#70)
- fix(dbc-editor): apply bit-endpoint edits on commit, not on every keystroke (#69)
- docs(roadmap): plan the cmd/blobly_net/main.v split (#67)
- guard: reject email addresses in commit messages, not just identities (#66)
- cockpit: system_full launch UX + multi-monitor fix + System panel ECU master-detail (#65)
- telem: place multi-core trace lanes on one timeline (emb REQ-TRACE-011) (#61)
V toolchain (de365a1) for Windows CI
Prebuilt V de365a1 (has vlib/yaml) for the Windows CI; built locally via makev.bat. Consumed by .github/workflows/windows.yml.