via

One sentence a verified ESP32 board

Natural language → contract → design-rule moat → firmware / sim / PCB.
A pipeline that turns intent into manufacturable hardware.

18 tests pass3 chip variants10 real parts1 round to converge
↓ scroll · walk the whole pipeline
01Natural language

Start from one sentence in your head

$ via new "An ESP32-S3 air-quality monitor: read temperature & humidity from a BME280 over I²C, show readings on a 128×64 OLED on the same I²C bus, a green status LED, a button, and publish over WiFi."

No schematic, no datasheet hunting — just say what you want.

02Contract · source of truth

One contract.yaml derives everything

# grounded LLM (claude-opus-4-8) · schema check · converged in 1 round target: { chip: esp32-s3, module: wroom-1-n16r8 } power: { regulator_ma: 1000, decoupling: ✓ } nets: - { i2c0: sda=GPIO8 · scl=GPIO9 } peripherals: bme280 · oled · status_led(GPIO48) · button(GPIO4)

Firmware pin map, sim wiring, schematic — all pure projections of it; the three never drift apart.

03Design-rule moat

Deterministic linter catchesauto-repairs

Every rule cites an Espressif doc — the safety net that matters most above AI generation.

ERRVIA-FLASH-RESERVED[GPIO26] SDA on a SPI-flash-reserved pin
ERRVIA-POWER-CURRENT[power] 3.3V only 250mA < 500mA (WiFi on)
ERRVIA-PIN-CONFLICT[GPIO4] GPIO4 claimed by relay and button
WARNVIA-ADC2-WIFI[GPIO11] ADC2 unusable while WiFi is active
PASS5 errors → 0 errors · 0 warnings · contract clean ✓
04Three projections

One contract fans out into three verifiable artifacts

Circuit

schematic · fab

→ .kicad_pcb · 10 real parts

Firmware

via_pins.h · platformio

→ builds firmware.bin · 726KB

In-loop sim

wiring · firmware-in-loop

→ runs real firmware · asserts serial
05Verified output · live demo

real compile · real sim · real board

Below is a replay of a session that actually ran — firmware truly compiles, firmware-in-the-loop truly simulates, and circuit synthesis auto-picks real parts into an orderable board.

via · live replay
via new "ESP32-S3 air monitor: BME280 temp/humidity · OLED · WiFi telemetry"grounded gen (claude-opus-4-8) → schema check → design-rule lintconverged: True · rounds: 1 · contract clean ✓via build air-monitor[firmware] build → firmware.bin · 726 KB [SUCCESS] RAM 13.4% · Flash 21.7%[sim] firmware-in-loop · interrupt-driven I²C read S ADDR(0x76,W) WR=0xD0 S ADDR(0x76,R) RD=0x60 P >> IRQ @PC=0x100000C4 → ISR → semaphore → chip id 0x60 ✓[circuit] synth · auto-pick parts 10/10 [27.7s] ✓ default.kicad_pcb · real orderable BOMdone — natural language → a manufacturable board
real artifact · actual PCB
real artifact · actual PCB56.8 × 61.7 mm
RefPartLCSC
U1ESP32-S3-WROOM-1-N16R8C2913202
U2Bosch BME280C92489
C110µF 25V · SamsungC15850
R3,R44.7kΩ · I²C pull-upsC25900
SW1,SW2ALPS button · boot/resetC139797
06Self-hosted core

We even build the simulator ourselves

01
Register-accurate C3 I²C controller
command-list engine · real ESP-IDF register map
02
Real async interrupts + a minimal RTOS
Unicorn preempts → vectors to ISR · semaphore wake
03
Reads chip id 0x60
real RISC-V exec → MMIO intercept → device model

Real RISC-V execution + real async interrupts + a minimal RTOS — firmware-in-the-loop verification, locked to no hosted platform.

07Loop closed

Natural language
→ a manufacturable board

NLcontractlintcircuit · firmware · simPCB

ESP32-S3 / C3 / classic · 18 tests pass · verified end-to-end on real hardware.

via — natural language to verified hardware