Introduction

Introduction

Hover is a co-simulation language that combines logic — software-style computation — with physical circuit descriptions in a single source file. A .hvr file describes nodes, resistors, capacitors, sources and semiconductor models alongside the control logic around them, and the compiler turns the whole thing into one native binary that runs the simulation and writes results to CSV.

The execution model

The compiler flattens a module hierarchy into a netlist, solves the circuit with Modified Nodal Analysis at each timestep, and executes the logic blocks between steps. There's no runtime module overhead — modules exist at compile time only, and what survives elaboration is nets and logic objects.

The compiler itself is written in Go: it lexes and parses each file, resolves imports, runs semantic analysis, elaborates the circuit graph, then generates C++ (sim.cpp) that's compiled with Zig against a prebuilt runtime — an Eigen-based MNA solver plus a small VM — into a native executable.

Three module domains divide the work: analog for continuous device physics solved inside the MNA loop, digital for discrete state and control that runs outside it, and plain module for wiring. That split is the central idea in the language — see Modules & domains.

Status

Hover is v0.8.0, under active development — the source is still the most complete reference. This release makes imports name directories rather than files, adds native struct types, and ships hpm, a package manager — the standard library itself is now an ordinary installable package, fetched by hover --setup. That library has since grown SPICE-level MOSFET models and a set of part cards for real devices, and .tran dropped to three arguments.

Where to start