Skip to main content
Lager is an open-source platform for embedded software development. It gives you one programmable interface to your embedded hardware. Firmware engineers use it to build repeatable development and validation workflows. The same workflow runs on your desk, in CI, and under the control of an AI agent. Lager replaces one-off scripts and manual bench procedures with reusable automation. Your team builds more reliable embedded software with less effort.

How Lager Works

A Lager setup has three components that together expose your hardware through a single, programmable interface:

1. Lager Box

The Lager Box is any x86-64 machine that runs Ubuntu 22.04 or newer, such as a compact mini PC. It sits next to your hardware. You connect it to your test equipment and to your Device Under Test (DUT). To turn a machine into one, see Setting Up a Lager Box. After you connect the instruments and the DUT, the Lager Box exposes them through one consistent programmable interface. You can drive that interface from your desk, from CI, or from an AI agent.

2. Lager CLI & Client Libraries

To interact with a Lager Box, you’ll need the Lager CLI - a command-line tool you install on your computer. It gives you a unified interface for working with your instruments and DUT. Beyond interactive CLI use, there are three equal ways to automate against a box — pick whichever fits your team:
  • Python library - automate test suites as Python scripts, run with lager python
  • Rust crate - write your HIL suite as ordinary Rust integration tests. Run it with cargo test, next to your firmware
  • MCP server - let AI agents discover your bench and run test scenarios directly
Common workflows:
  • Flash and debug embedded devices
  • Control power supplies, battery simulators, and electronic loads
  • Monitor serial/UART output with interactive test runners
  • Capture oscilloscope waveforms and logic analyzer traces
  • Communicate with devices over I2C and SPI buses
  • Automate full regression test suites
The CLI also includes Lager Terminal, an interactive REPL with tab completion and command history. Run lager terminal or just lager with no arguments to launch it.

3. Bench Equipment & Devices

The Lager Box supports a wide range of professional test equipment that you connect with:
  • Power supplies, battery simulators, and electronic loads
  • Debug probes (J-Link, CMSIS-DAP, ST-Link)
  • Oscilloscopes and logic analyzers
  • ADC/DAC/GPIO modules (LabJack T7, MCC USB-202)
  • I2C/SPI adapters (Total Phase Aardvark, LabJack T7)
  • Power meters (Yocto-Watt, Joulescope JS220)
  • And more (see full list below)

Lager Nets

You must configure a Lager Box with a set of Nets before you can use it. Each Net names one instrument, one instrument channel, one serial port, or one other interface that you control. For example, your DUT draws power from channel 1 of a power supply. You create a Power Supply Net called DUT_POWER that maps to that channel. The net can then switch the DUT on and off, and use any other function that the supply supports.

Next Steps

Ready to get started? Already set up and ready to automate? Jump to the Python API or the Rust API.