Skip to content
BenchMesh

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.

  1. 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.

    USB-serial · RS-232/dev/ttyUSB0 · COM3USB-TMCIEEE 488.2 over USBLANSCPI :5555 · VXI-11 / LXIBenchMeshdesktop app
  2. 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 serial
      identified by USB serial
    • TENMA 72-2540Add
      /dev/ttyACM0USB serial
      identified by adapter type
    • RIGOL DHO804Add
      /dev/usbtmc0USBTMC · 1ab1:044d
      identified by serial number
    • OWON OEL1515Add
      /dev/ttyUSB1USB serial
      identified by USB serial
  3. 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 CPX400DP
    VOUT12.000V
    IOUT1.482A
    CVCCOUTREM
    VSET 12.00 VISET 3.000 A● Output
  4. 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.003V
    right-click (or the menu key) on any reading
  5. 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\n
    Copy→ 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.

  1. 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.

  2. 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.

  3. 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.

SetpointVSET
13.50 Vread-back12.00 V
sent · waiting for the instrument to report 13.50 V…
SwitchOutput
OutputreportedOFF
switching on… 6 s

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.

Recording · “Buck converter load test”interval 1 scursor
At the cursor
14:02:36
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.

Multi-instrument data logging in depth →

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.

API in the docs →AI assistants (MCP) →

sweep.py
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+00
$ python sweep.py
4.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.

MATLAB · Command Window
>> 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
Python · Jupyter
$ 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.

MATLAB, LabVIEW, PyVISA →Python package →

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.
Console · OSC · RIGOL DHO804
  1. 12:04:37.000•opened /dev/usbtmc0 (USBTMC)
  2. 12:04:37.600→*IDN?\n
  3. 12:04:38.000←RIGOL TECHNOLOGIES,DHO804,DHO8A123456789,00.01.03\n
  4. 12:04:38.800→:TIMebase:MAIN:SCALe?\n
  5. 12:04:39.100←1.000000E-06\n
  6. 12:04:39.700→:CHANnel1:SCALe?\n
  7. 12:04:40.000←1.000000E-02\n
  8. 12:04:40.700→:MEASure:ITEM? VPP,CHANnel1\n
  9. 12:04:41.100←4.890000E-02\n
  10. 12:04:41.800→:MEASure:ITEM? FREQuency,CHANnel2\n
  11. 12:04:42.200←4.000120E+05\n
  12. 12:04:42.900→:TRIGger:STATus?\n
  13. 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

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.

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.

Sign in or create an account →See the roadmap →

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.

All questions →

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

One app for all three, built with Rust and Tauri. It checks for a newer signed release once per start and offers it; you decide when.

Works offline

No account, no sign-in, no internet needed at the bench. Configuration and recordings stay in your home folder, recordings in a local SQLite database.

Open source, MIT

Read it, build it, change it. Device definitions are plain files anyone can review and improve. GitHub

Scriptable

Everything the UI does goes through a local REST and WebSocket API with OpenAPI docs - drive the bench from Python, Node-RED or any HTTP client, with built-in flows and MCP for AI assistants. Docs · Developers

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