Skip to main content
Lager is an open-source platform for embedded software development. It provides a unified interface for interacting with embedded hardware, allowing firmware engineers to build repeatable development and validation workflows that run consistently on a developer’s desk, in CI, or under the control of AI agents. By replacing one-off scripts and manual bench procedures with reusable automation, Lager helps teams build 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:
Your Laptop / CI / AI Agent  →  Lager Box  →  Bench Equipment + Device Under Test

1. Lager Box

The Lager Box is any x86-64 machine running Ubuntu 22.04 or newer (for example, a compact mini PC) that sits alongside your hardware, physically connected to your test equipment and Device Under Test (DUT). Once connected to your instruments and your DUT, the Lager Box exposes them through a consistent programmable interface that you can drive from your desk, from CI, or from an AI agent.

2. Lager CLI & Python Library

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. You can use the CLI interactively from the terminal or automate entire test suites with the Lager Python library. 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

In order to interact with your test environment using a Lager Box, the Lager Box must be configured with an assortment of Nets. Each Net corresponds to a specific instrument, channel of an instrument, serial port, or other interface that you may want to interact with using your Lager Box. For example, you might have your DUT powered by channel 1 of a power supply. You’d then be able to create a Power Supply Net called DUT_POWER which maps to that power supply’s first channel and allows you to toggle on/off your DUT or perform any other function that power supply supports.

Next Steps

Ready to get started? Install the CLI and connect to your first box: