Free·open source·Windows · Linux · macOS
Every instrument on your bench.
One screen. One timeline.
BenchMesh is a desktop app that connects your power supplies, multimeters, oscilloscopes, electronic loads, signal generators, LCR meters and spectrum analyzers over USB, serial and LAN, gives every instrument the same clear panel, and records every reading from every instrument on one shared time axis.
98 instrument families · 426 models · 22 manufacturers · no account, works offline
Live demo, simulated readings: a 12 V → 5 V buck converter under a stepping load. Switch the skin, switch the supply’s output off and on again (on takes two presses), turn the meter’s dial - every change waits for the instrument to report it.
How it works
From cable to cockpit in five steps
BenchMesh talks to each instrument in its own language, then shows all of them the same way.
- 01
Plug in
USB-serial and RS-232, USB-TMC, or the network - a raw SCPI socket or VXI-11 (LXI). No vendor software, no VISA install needed on Linux; on Windows and macOS BenchMesh speaks USB-TMC itself, or uses a VISA you already have.
- 02
Detect identifies it
Press Detect: every USB port nobody is using gets identify queries only, one probe at a time, and you see what it found and how certainly. From then on an instrument is found by who it is - USB IDs, serial numbers - on whatever port it is plugged into, on Linux, Windows and macOS, without per-port rules or symlinks. A Windows USB-TMC instrument without a usable driver gets an Install driver button.
Detect instruments4 instruments found on 4 ports- OWON XDM1241Add/dev/ttyUSB0USB serialidentified by USB serial
- TENMA 72-2540Add/dev/ttyACM0USB serialidentified by adapter type
- RIGOL DHO804Add/dev/usbtmc0USBTMC · 1ab1:044didentified by serial number
- OWON OEL1515Add/dev/ttyUSB1USB serialidentified by USB serial
- 03
One bench, one panel per instrument class
Every power supply gets the same power supply panel, every multimeter the same multimeter panel - whoever made it. Limits, steps, ranges, modes and optional controls come from the instrument’s definition. Arrange the rack, fold panels, or pop one out into its own always-on-top window.
PSUAim-TTi CPX400DPVOUT12.000VIOUT1.482ACVCCOUTREMVSET 12.00 VISET 3.000 A● Output - 04
Record any reading
Right-click any reading and add it to a running recording, or start a new one. Readings from all instruments land on the same whole-second timeline - see why that matters.
VOUT12.003Vright-click (or the menu key) on any reading - 05
See the wire, share the evidence
Each panel can open a console showing every byte sent and received. One click copies it as paste-ready evidence with instrument, model and app version - for a bug report or to confirm an instrument for the community.
→ *IDN?\n← OWON,XDM1241,…\r\n→ MEAS1?\n← +3.14520E+01\r\nCopy→ paste into an issue or a community report
More detail: Detect & identity · bench & panels · transports
How reading works
Numbers you can trust at a glance
A bench app is only useful if the number on the screen is the number on the instrument. BenchMesh is built around that.
- 01
Polled, not guessed
Each instrument has its own connection that keeps asking it for its status - at the pace that instrument can handle - and reconnects by itself if the cable is pulled. The latest status of every instrument sits in one live registry.
- 02
What you see is what it reported
Panels, recordings and the API all read that same registry: a readout always shows the value the instrument sent back, never a value the app assumed. Readouts keep a fixed number of digits, so nothing jumps while numbers change.
- 03
Every change is confirmed
Set 13.50 V and the setpoint pulses until the instrument’s read-back says 13.50 V. If it never does, a small red dot after 6 s tells you the command was sent but not carried out. Anything that switches an output or input on takes two presses.
Replay with real timings: read-back confirmation, and the 6 s timeout.
Recording · the reason BenchMesh exists
Record everything on one timeline
Your instruments don’t share a clock - BenchMesh does. A load step, the supply current it draws, the temperature that follows and the ripple on the scope land on the same second of the same chart, from four instruments of three brands.
- Load currentOWON OEL1515 · IIN
- 2.999 A
- Supply currentTENMA 72-2540 · IOUT
- 1.434 A
- Inductor temperatureOWON XDM1241 · MEAS
- 37.3 °C
- Output rippleRIGOL DHO804 · VPP
- 48.2 mV
Same second, every instrument. Move over the chart to scrub the timeline.
One sampler, whole seconds
A single sampler ticks on whole seconds and takes every recorded reading of every instrument at the same instant. Intervals from 1 s to 1 h; recordings running side by side share their timestamps.
Right-click to record
Any reading on any panel - supply voltage, load current, the meter, scope measurements, generator frequency - goes into a recording from its context menu. Recorded readings carry a small red dot.
Change it while it runs
Add or remove readings in a running recording, pause and resume, run several recordings in parallel, let them run for hours.
Gaps, never stale values
If an instrument stops answering, its series gets a gap - never a repeated old value. Recording adds no traffic: it reads what the instruments are polled for anyway.
Zoom, compare, export
Every recording is kept in a local database. Zoom into the chart with one axis per series, rename, delete, and export CSV with one row per second for your spreadsheet or script.
Cause and effect, finally aligned
Did the ripple grow before or after the temperature rose? Did the supply sag when the load stepped? On one time axis you see it instead of guessing.
Instrument API
Add an instrument, get its API
The moment an instrument is configured in the app, it is also on BenchMesh’s local REST and WebSocket API - every setting and every reading the panel has. Script it from Python, a test rig, Node-RED, a CI job or an AI assistant, while the panel keeps showing what happens.
Nothing to write
Add an instrument in the app and its API exists: no driver, no SDK, no VISA layer. The same definition drives the panel and the endpoints.
Self-describing
Every instrument lists its operations with type, min / max, unit and allowed values from its definition, and flags the ones that energise an output.
Safe by design
GET only runs queries and POST only runs setters - no arbitrary commands through the API. Other web sites cannot reach it from your browser.
Live and documented
WebSockets push live status and recordings; the app serves its OpenAPI spec and interactive docs at /docs.
import requests
bm = "http://127.0.0.1:57666/instruments"
requests.post(f"{bm}/PSU/psu-1/1/voltage/5.0")
requests.post(f"{bm}/PSU/psu-1/1/output/ON")
r = requests.get(f"{bm}/DMM/dmm-1/1/measurement").json()
print(r["value"]["sci"]) # 4.99870E+004.99870E+00
Connectors
Your bench in MATLAB, LabVIEW and Python
Switch on the virtual SCPI ports and every instrument answers SCPI like a LAN instrument - even a serial supply that never spoke SCPI. Open it from the tools your lab already uses, or pip install benchmesh and work with the bench in a notebook.
>> psu = visadev("TCPIP0::127.0.0.1::5025::SOCKET");>> writeline(psu, "*IDN?"); readline(psu)ans = "BenchMesh,72-2540,tenma-72-2540,0.1.12">> writeline(psu, "VOLTAGE 5.0");>> writeline(psu, "FETCH:VOUT?");>> vout = str2double(readline(psu))vout = 4.9987$ pip install benchmesh>>> import benchmesh>>> bench = benchmesh.connect()>>> bench["owon-oel1515"].set("curr", 0.5)>>> bench["owon-xdm1241"].read("MEAS")4.9987>>> bench.recordings()[0].to_pandas().plot()Every instrument speaks SCPI
A serial supply or a USB meter that has no SCPI of its own answers *IDN?, VOLTAGE 5 and FETCH:VOUT? on its virtual port, the same as a LAN instrument.
Your tools, unchanged
MATLAB visadev, LabVIEW VISA Open, PyVISA, TestStand: a VISA address and the code you already have. No driver, no toolbox required.
Python in one line
pip install benchmesh - read and set instruments by name, follow live values, recordings straight into pandas. No dependencies.
Through the bench, not around it
Commands go through BenchMesh: the panels show every change, values are checked against the instrument’s limits, ports are off until you switch them on and open to this computer only.
Remote access
Control your instruments from behind the wall
The test runs in the lab, you are at your desk. Switch on remote access and open the bench in any browser on your local network - the same panels, live, with full control.
Off until you switch it on
Set a password in the app and switch remote access on. Nothing else on your network can reach the instruments before that.
HTTPS, a password, your network only
Every connection is encrypted with the app’s own certificate (its fingerprint is shown in the app). Repeated wrong passwords are slowed down, and only addresses of your home or lab network are accepted.
Look, don’t touch
A second, view-only password lets a colleague, a student or a screen on the wall follow the bench live - panels, recordings, flows - without changing anything. The server refuses every change from it.
The whole bench, in parallel
Panels, recordings, automation and instrument setup work in the browser while the app window keeps working on the bench.
You stay in charge at the bench
The app shows who is connected and from where. One click disconnects everyone and switches remote access off; outputs still need two presses to switch on.
Sensitive settings stay local
Remote access itself, the password, AI client (MCP) access and assistant API keys can be changed only in the app on the bench computer.
Instrument console
When something is off, look at the wire
Open the console on any panel and watch exactly what goes to the instrument (→) and what comes back (←), plus port events (•) - live, from the app’s own log of each link.
- Auto, Text or Hex. Line endings and odd bytes are shown as
\r \n \xNN, nothing hidden. - Pause and read. The last 2000 entries per instrument are kept while you look.
- Copy as evidence. One click gives paste-ready text with the instrument, model, identify reply, link and app version - attach it to a GitHub issue or a community confirmation.
- 12:04:37.000•opened /dev/usbtmc0 (USBTMC)
- 12:04:37.600→*IDN?\n
- 12:04:38.000←RIGOL TECHNOLOGIES,DHO804,DHO8A123456789,00.01.03\n
- 12:04:38.800→:TIMebase:MAIN:SCALe?\n
- 12:04:39.100←1.000000E-06\n
- 12:04:39.700→:CHANnel1:SCALe?\n
- 12:04:40.000←1.000000E-02\n
- 12:04:40.700→:MEASure:ITEM? VPP,CHANnel1\n
- 12:04:41.100←4.890000E-02\n
- 12:04:41.800→:MEASure:ITEM? FREQuency,CHANnel2\n
- 12:04:42.200←4.000120E+05\n
- 12:04:42.900→:TRIGger:STATus?\n
- 12:04:43.200←TD\n
Try Hex and Copy - the copied text is what the app produces.
Supported instruments
Hundreds of models, one way of working
Instruments are described by declarative device definitions - commands, replies, limits and modes, written from each manufacturer’s programming manual and interpreted by one generic driver. No per-device code, and a new instrument is a new definition.
- instrument families
- 98
- models
- 426
- manufacturers
- 22
- instrument classes
- 7
- PSU · 25 familiesPower suppliesSet voltage and current limits, switch outputs, watch V, A and W live and log them.
- DMM · 20 familiesMultimetersPick functions and ranges from the PC, read stable values with min / max / average and record them.
- OSC · 14 familiesOscilloscopesTimebase, vertical scale, trigger and measurements from one screen, next to every other instrument.
- ELL · 6 familiesElectronic loadsCC / CV / CR / CP modes, input on and off, battery and supply tests logged against time.
- AWG · 24 familiesFunction / waveform generatorsWaveform, frequency, amplitude and offset per channel, with a preview of what comes out.
- LCR · 5 familiesLCR metersL / C / R / Z with secondary parameters, test frequency and level, open / short correction.
- SAL · 5 familiesSpectrum analyzersSpan, RBW, reference level, markers and the trace itself, recorded with the rest of the bench.
- Browse all 426 models →
What the status labels mean
- Bench-tested6
Verified on the maintainers’ bench with the real instrument.
- Community-confirmed0
BenchMesh users ran it on the real instrument and it worked.
- Awaiting confirmation420
Written from the manufacturer’s programming manual; not yet confirmed on a real instrument. Own one? Help confirm it.
BenchMesh Online
BenchMesh Online is live
The desktop app stays free, local and complete on its own. The website is its optional companion, and it keeps growing.
- Live
Your account, linked to the app
Press Link to benchmesh.online in the app (System tab), sign in with GitHub, Google, Microsoft or a link by e-mail, and the app and the website know each other. Still optional: the app keeps working without it.
- Live
Feedback per instrument
Confirm that your model works, or report what does not, straight from its panel - with the console evidence attached - and follow the fix by e-mail. Confirmations move a model from Awaiting confirmation to Community-confirmed.
- Coming
Live readings, shared from your bench
Publish chosen readings from your bench to a public page and let a colleague, a customer or a class watch them live - powered by PushFlo.
Questions
Frequently asked
Is BenchMesh free?
Yes. The desktop app is free and open source under the MIT license, with no account and no paid tier.
Does it need the internet or a cloud account?
No. It runs entirely on your computer and talks to your instruments directly over USB, serial or your local network. Online features will be optional.
My instrument is marked “Awaiting confirmation”. Will it work?
Its definition was written from the manufacturer’s programming manual, so it should - but nobody has confirmed it on the real instrument yet. Try it, and tell the community how it went; the instrument console gives you the evidence to paste.
Do I need VISA or vendor drivers?
No VISA is needed: serial and LAN instruments work directly, and USB-TMC works through the Linux kernel driver or BenchMesh’s own USB-TMC support on Windows and macOS (an installed VISA is used if you have one). On Windows, Install driver binds Microsoft’s built-in WinUSB driver with one admin prompt.
Desktop · offline · open
Yours, on your machine
A small native desktop app. Your instruments, your data, your computer - no cloud in the loop.
Windows, Linux, macOS
Works offline
Open source, MIT
Scriptable
Put your whole bench on one screen
Free download. Plug in an instrument, press Detect, and see it on your bench in a minute.
Windows installer · macOS for Apple silicon and Intel · Linux AppImage and .deb