LagerLager

open source · apache 2.0

latest · v0.32.1 · July 21, 2026

Infrastructure for modern embedded software development.

Real hardware on the network, not on your desk — scriptable, versioned, wired into CI, and ready for AI agents.

new · lager-net on crates.io — write your entire HIL test suite in pure Rust

Develop embedded software in your pajamas.

~/lager $ cat README.md

Embedded software development that behaves like modern software development.

// the bench is just another fixture.

Lager is open source infrastructure for embedded software development — also known as firmware, or device software. It lets any engineer on your team flash firmware, control instruments, and run automated tests against real devices, all through a Lagerbox — a service you run on any Linux machine on your network.

Your bench becomes a programmable surface: scriptable, versioned, reproducible, and wired into CI. Embedded development moves at the speed of modern software development.

~/lager $ cargo test

Tests are just code.

// real volts. real pins. real asserts.

Power the board, wait for a pin, assert. The same test drives real instruments from your desk, from CI, or from an agent — in pure Rust or Python.

use lager::{LagerBox, Level};

#[test]
fn dut_boots_at_3v3() -> lager::Result<()> {
    let lager = LagerBox::from_env()?;
    let supply = lager.supply("vdd");
    let boot_ok = lager.gpio("boot_ok");

    supply.set_voltage(3.3)?;
    supply.enable()?;

    // Hardware-timed wait on the box; returns elapsed seconds.
    let t = boot_ok.wait_for_level(Level::High, 5.0)?;
    println!("booted in {t:.3}s");
    supply.disable()
}

Rust crate docs (docs.rs)

~/lager $ lager --help

What's in the box.

// real devices. real instruments. real test runs.

A programmable surface for devices, instruments, and CI — not another glue layer around a single bench rig.

  • Connect real devices and instruments

    Drive power supplies, oscilloscopes, debug probes, UART, I2C, SPI, and GPIO through one CLI, a Rust crate, or a Python library. Built-in support for Rigol, Keysight, Keithley, J-Link, LabJack, and more.

  • Automate hardware-in-the-loop workflows

    Run embedded software against real devices on every commit, not only when the lab is free. Wire Lager into GitHub Actions and catch timing, power, and peripheral regressions in minutes.

  • Make embedded environments reproducible

    Define named connections, setups, and test flows as code. Share one Lagerbox across a team over the network or VPN — from a single desk rig to dozens of boxes across labs.

  • AI agents that work against real devices

    Because device access is programmable, the same workflows that power CI give AI agents a safe, inspectable surface for diagnosing embedded software issues and running grounded experiments on real hardware.

~/lager $ lager install --ip 10.0.1.42 --name RED-2

From bench to CI in four steps.

// then it's just engineering.

  1. 01

    Install Lager

    Install the CLI anywhere — Linux, macOS, or Windows. Then provision your Lagerbox on any Linux machine on your network. Self-hosted, no SaaS, no data leaving your network.

  2. 02

    Configure your setup

    Define named connections (nets) for your instruments and devices.

  3. 03

    Write tests in pure Rust or in Python

    Tests are plain cargo tests or Python scripts that drive your hardware — or drive it interactively from the CLI.

  4. 04

    Run it in CI/CD

    Wire Lager into GitHub Actions to test real hardware on every commit.

~/lager $ cat LICENSE

Apache 2.0. Self-host it. Improve it. Own it.

// no per-seat pricing. no telemetry. no lock-in.

The Lager core is open source under Apache 2.0. Read the drivers, run it on your own Linux box, contribute upstream, and keep test data inside your network.

Start with the docs.

The fastest way to understand Lager is to read the docs and try it on your own bench.