Skip to content

Changelog¤

1.10.0 (2026-08-13)¤

Features¤

  • awg: add burst to awg (#367) (27fea81)
  • dmm: json config-driven instrument creation (#387) (6b6789f)
  • instrodaq: unified read and write functions (#303) (22abe49)
  • lib: transport base class that implements shared ownership of transport (#336) (80841e0)
  • psu: implement get_voltage_setpoint()/get_current_setpoint() for SiglentSPD3303 (#377) (653a6db)

1.9.1 (2026-08-10)¤

Bug Fixes¤

  • awg: change check_errors() from required to optional in awg (#374) (753ecd5)
  • awg: move check_errors() into driver level instead of outer abstraction (#381) (bc461b7)

1.9.0 (2026-08-07)¤

Features¤

  • instrodaq: add support for sw timed background daemon (#325) (81f3784)

Bug Fixes¤

  • ljm: expose stream buffer byte size configuration (#366) (4cc6d14)

1.8.0 (2026-08-06)¤

Features¤

  • lib: add VISA instrument discovery API, consolidate CLI onto it (#341) (d922c0d)

Bug Fixes¤

1.7.0 (2026-08-05)¤

Features¤

Bug Fixes¤

  • publishers: fix BufferedPublisher retains its buffer after close (#345) (fe2d160)

1.6.0 (2026-08-04)¤

Features¤

  • add gen-examples to fix step in justfile, closing #326 (#327) (c9f992b)
  • add support for alicat mc flow controller and the concept of an instro flow controller. First pass. Aimed for future compatibility for different flow control types and different vendors but expect to adapt as new vendors supported. (d897ee2)
  • add support for alicat mc flow controller and the concept of an InstroFlowController (#132) (d897ee2)
  • awg: add Rigol-DG1022Z driver (#307) (168be78)
  • cli: add scopes to idn map (#330) (f44cf77)
  • dmm: add Keysight 34461A Truevolt driver (#263) (f00ff08)
  • psu: add get_voltage_setpoint() and get_current_setpoint() to PSUDriverBase (#308) (c487dcd)
  • psu: config-driven InstroPSU initialization from JSON and dict (#131) (73c1415)
  • psu: implement get_voltage_setpoint()/get_current_setpoint() for RigolDP800 (#314) (5ec23ed)

Bug Fixes¤

  • scope: remove loop from scope check_errors() (#340) (719aff4)

1.5.0 (2026-07-26)¤

Features¤

  • add espec gl controller environmental chamber driver (#299) (6cfb658)
  • awg: adding AWGDriverBase and InstroAWG (#159) (71baa7e)
  • opcua: implement browse paths (#161) (8b2ea1c)
  • opcua: support bytestring and guid node ids (#162) (5365856)
  • scaling: add inverse thermocouple scaling (#294) (3e5078c)
  • transports: add composable ModbusDriver transport (#295) (1eed6f6)

Bug Fixes¤

  • daq: standardize internal analog reads on lists (#280) (efb9283)
  • nidaqmx: validate digital port width (#284) (980bc7d)

1.4.0 (2026-07-13)¤

Features¤

Bug Fixes¤

  • instrument: remove flaky channel names test (#268) (bb3b2e5)

1.3.0 (2026-07-08)¤

Features¤

  • instrument: add channel_names property (#243) (6936ac8)

Bug Fixes¤

  • close #219 by adding additional rules for properly listing out available contrib drivers (#230) (6f81dd0)

1.2.0 (2026-07-07)¤

Features¤

  • dmm: add Keithley 2750 DMM driver (unstable) (#237) (ff01368), closes #193

Bug Fixes¤

1.1.0 (2026-07-06)¤

Features¤

  • cli: add --version listing installed instro packages (#228) (baea5fd)
  • cli: report backend and interface coverage in discover (#226) (abe1b1b)
  • publishers: add jsonl format and deprecate the array-JSON writer (#227) (ce5a1b9)
  • rearrange README, add badges, and add unstable extra (#207) (98c4103)

Bug Fixes¤

1.0.1 (2026-07-02)¤

Bug Fixes¤

  • visa: quiet pyvisa-py fallback on the healthy path (#192) (e3c675d)

1.0.0 (2026-07-02)¤

Miscellaneous¤

0.14.0 (2026-06-30)¤

⚠ BREAKING CHANGES¤

  • scope: graduate InstroScope from instro-unstable to core (#167)

Features¤

  • ethernetip: graduate EtherNet/IP out of unstable into a dedicated package (#178) (4f716e4)
  • psu: add support for matrix WPS300s [closes #124] (#125) (5e84286)
  • scope: graduate InstroScope from instro-unstable to core (#167) (787a8ba)

Bug Fixes¤

  • ethernetip: kill cpppo simulator process tree on test teardown (#174) (f9e00e8)

0.13.0 (2026-06-25)¤

⚠ BREAKING CHANGES¤

  • 149 bug documentation for get channel does not match behavior (#151)

Features¤

  • cli: add instro discover command (#99) (699648c)
  • instrument: auto-prepend instrument name in get_channel (#152) (e807209), closes #147

Bug Fixes¤

  • 149 bug documentation for get channel does not match behavior (#151) (f4f3966)
  • closes #149. First, updates documentation about timeout behavior. (f4f3966)
  • transports: disable Nagle on raw TCP sockets for pyvisa-py (#157) (e1ce26a)

0.12.1 (2026-06-24)¤

Bug Fixes¤

  • dmm: apply Agilent34401A manual range without requiring set_digits (#148) (563aabb)
  • dmm: record measurement function only after driver accepts it (#146) (d720cf1)
  • ethernetip: disable cpppo UDP in simulator tests (#137) (4048fbf)
  • ethernetip: remove strings from Python EIP surface (#128) (c133d81)
  • visa: catch pyvisa errors so @ivi to @py fallback fires correctly (#136) (9329df6)

0.12.0 (2026-06-22)¤

Features¤

0.11.0 (2026-06-17)¤

⚠ BREAKING CHANGES¤

  • psu: update bk 914X with OVP, OCP, and remote sense (#93)
  • psu: remove default channel selection from psu drivers (#106)

Features¤

  • psu: add OVP, OCP, remote sense to bk 9115 (#94) (783f753)
  • psu: add Rigol DP800 ovp, ocp, and remote sense (#114) (d1f1587)
  • psu: update bk 914X with OVP, OCP, and remote sense (#93) (df0e28f)
  • psu: update tdk genesys with ovp, ocp, remote sense (#104) (1bd22a0)

Bug Fixes¤

  • build: resolve Git Bash for just recipes on Windows (#110) (8c8ae6b)
  • daq: guard NI fetch_analog against fetch before start() (#116) (2e2f4bc)
  • daq: make close() tolerant of double-close and failed open (#108) (5474c98)
  • daq: mcc fetch path integrity fix (#113) (aa68289)
  • daq: raise clear error when DAQ methods are called before open() (#97) (9f9ed5d)
  • lib: bundle every pyvisa-py backend for clean-install VISA support (#103) (60604dc)
  • psu: remove default channel selection from psu drivers (#106) (45c6423)

0.10.0 (2026-06-12)¤

⚠ BREAKING CHANGES¤

  • psu: support simulated protection and sense (#47)
  • psu: add tui for sim and refactor command set for ovp ocp and remote sense (#30)

Features¤

  • ethernetip: batch reads (#68) (0afb900)
  • psu: add tui for sim and refactor command set for ovp ocp and remote sense (#30) (16f89b2)
  • psu: support simulated protection and sense (#47) (0ad4cf0)

Bug Fixes¤

  • test: bind ephemeral port in simulated PSU socket test (#98) (0658721)

0.9.0 (2026-06-10)¤

⚠ BREAKING CHANGES¤

  • daq: decouple acquisition start from the daemon thread (#62)
  • daq: make driver channel/timing state private and read-only (#56)

Features¤

  • daq: make driver channel/timing state private and read-only (#56) (c34cf0d)
  • psu: add Keysight E36100 support (#48) (417035e)
  • psu: update Siglent SPD3303X driver and tests (#55) (a07f0f3)
  • scope: add hardware-validated Siglent SDS1104X-E driver (#74) (b572a87)

Bug Fixes¤

  • daq: stop kwarg crash and samples_per_channel=0 below 10 Hz (#83) (6539284)
  • dmm: accept the Keithley 2400 signed +0 no-error reply (#85) (2af65da)
  • lib,daq: make Instrument start/stop/start restartable (#81) (eb60201)
  • lib: stop closing the shared pyvisa ResourceManager in VisaDriver (#79) (1865d61)

Miscellaneous¤

  • daq: decouple acquisition start from the daemon thread (#62) (52c9f8b)

0.8.0 (2026-06-02)¤

⚠ BREAKING CHANGES¤

  • daq: split digital line and port configuration into separate methods (#36)
  • daq: require fully-qualified NI physical channel names (#41)
  • daq: remove InstroDAQFacade; driver owns channel/timing state (#19)

Features¤

  • daq: implement digital port read/write for NI and Keysight drivers (#50) (3150ae0)
  • daq: require fully-qualified NI physical channel names (#41) (a9dbdfd)
  • psu: add ovp, ocp, and remote sense method signatures (#31) (ecd4071)

Bug Fixes¤

  • psu: expect "+0" from TDK Lambda SYST:ERR? response (#54) (5f9e4a9)
  • tests: add tests/init.py so pyaardvark's bundled tests package stops shadowing (#44) (d755f95)

Miscellaneous¤

  • daq: remove InstroDAQFacade; driver owns channel/timing state (#19) (cd43847)
  • daq: split digital line and port configuration into separate methods (#36) (52c8c44)

0.7.0 (2026-05-27)¤

Features¤

0.6.0 (2026-05-01)¤

Features¤

  • add CD workflow to publish instro-unstable to GemFury (#167) (b210ccd)
  • add core logging capabilities (#148) (98c7c05)
  • add experimental workspace package for in-development features (#154) (e1a4b82)
  • add mccdaq driver (#82) (c6acfee)
  • add instro-unstable package alongside experimental (#165) (e57c218)
  • ethernetip: add experimental rust bindings (#164) (6ec03b0)
  • modbus: add config types foundation for InstroModbus (#155) (0aab181)
  • modbus: add config validation for swaps, scale, and overlaps (#157) (2c5d86b)
  • modbus: add InstroModbus core read/write (#156) (97a18f7)
  • modbus: add read groups, bitmap extraction, background polling (#159) (8ddc7a0)
  • modbus: add write safety — value maps, limits, type checking (#158) (1cf0301)
  • scope: add Keysight 1200X oscilloscope driver (#175) (34bfb2e)
  • scope: add InstroScope instrument class (#172) (5e21937)
  • scope: add oscilloscope types and driver base classes (#171) (ce666f2)
  • scope: add scope public API and driver discovery (#173) (502b259)
  • scope: add Tektronix 2 Series MSO driver (#174) (855a61e)
  • use absolute timestamps for fetch waveform data (#187) (ddced95)

Bug Fixes¤

  • add actions read permission (#153) (dc696eb)
  • dmm: don't start reading from DMM if not fully configured (#145) (e56db93)

0.5.2 (2026-03-20)¤

Bug Fixes¤

  • daq: fix DAQ data integrity due to poor timestamp algorithm (#134) (db67690)

0.5.1 (2026-02-23)¤

Features¤

  • adding relay for the keysight_34980a (#114) (0f25773)
  • reduce NominalConnectPublisher import path (#120) (d6ca816)

Bug Fixes¤

  • dmm: fix InstroDMM daemon not starting (#93) (51cadee)

  • daq: raise exceptions with verbose messages instead of failing silently, including for unconfigured channels in write_digital_line() (#118) (ce6cf81)

  • daq: support multiple channels with same physical channel (#87) (aa069b6)
  • keysight: correct logic polarity comparison in digital channel config (#116) (976800b)

0.5.0 (2026-02-04)¤

Features¤

0.4.0 (2025-12-19)¤

Features¤

  • Handle bad network conditions by writing to fallback file (#66) (b7c3e4c)
  • add .avro file logging capabilities (#70) (7b0c9a9)
  • add package name and version tag to measurements/commands(#74) (d2e018a)
  • add support for terminal config in InstroDAQ (#62) (f92a712)
  • add configuration selection for visa backends (#63) (ab3051e)
  • data access from main thread to background daemons (#68) (0a04d6f)
  • software timed analog output for daq (#72) (1a5f443)

Bug Fixes¤

  • labjack STREAM_ACTIVE and segfault (#77) (c9b7551)
  • prevent nominal core publisher from raising rust runtime error on exit (#76) (510decb)
  • remove analog input channels to avoid multiple channels with same physical channel (#65) (5d5ed50)
  • nominaldaq loop rate lies when background enable is false (#75) (ca48db6)

Documentation¤

  • add example and reference documentation (#56) (6f7d307)

0.3.0 (2025-11-20)¤

Features¤

0.2.0 (2025-11-05)¤

Features¤

  • i2c (#33) (d61c69f)
  • interface for drivers to HAL (#48) (02ecafe)
  • public abilities to define background daemon functions (#50) (36a155d)
  • unifying the instrument, driver, data_handler and factory patterns across HALs (#45) (a8c720f)

Bug Fixes¤

0.1.0 (2025-10-15)¤

Features¤

Bug Fixes¤