The energy-aware systems programming language

Every Joule Counts.

Systems programming with energy accounting at the instruction level. Formally verified. Memory safe. Every operation metered in picojoules.

Scroll
I · The Problem

Systems software has
no idea what it costs to run.

C, C++, Zig, and Rust produce fast binaries. But none of them tell you the energy cost of a function call, a memory allocation, or a loop iteration. You optimize for cycles. The planet pays in watts.

0
Languages that meter
energy per instruction
415 TWh
Data center energy
consumption / year
70%
Compute wasted on
unoptimized workloads
$0
Energy visibility
at compile time
"You can't optimize what you can't measure. No systems language measures energy. So no systems language optimizes for it." The blind spot
II · The Language

Joule makes energy
a first-class citizen.

Every function carries an energy signature. Every allocation is metered. The compiler knows the cost before the code ever runs.

main.joule
use energy::{Budget, Receipt};
use io::stdout;

// Energy budget: 50 microjoules max
#[energy_budget(50_uJ)]
fn process_sensor_data(readings: &[f32]) -> Receipt {
    let avg = readings.iter()
        .sum::<f32>() / readings.len() as f32;

    stdout.write_line("avg: {avg:.2} pJ");

    // Compiler rejects if this exceeds 50 uJ
    Budget::receipt()
}
Picojoule Precision
u64 picojoule accounting. No floating-point epsilon. Exact energy math from instruction to deployment.
Compile-Time Budgets
Energy budgets enforced at compile time. If a function exceeds its budget, it doesn't compile. No runtime surprises.
Energy Signatures
Every function carries worst-case and best-case energy bounds. Callers see the cost before they call.
III · Verified

Not tested.
Proven.

The Joule compiler is formally verified using bounded model checking. Critical subsystems are proven correct for all possible inputs — not sampled, not tested, proven.

Tier 1
Kani Proofs
Bounded model checking. Exhaustive verification of all inputs within bounds. 182+ proofs across 10 compiler crates.
VERIFIED
Tier 2
Property Tests
Proptest-driven property-based testing. Statistical coverage on larger input spaces. 29+ properties.
PASSING
Tier 3
Design by Contract
Postconditions on critical functions. Monotonicity, bounds, invariant preservation checked at every call.
ENFORCED
Tier 4
Type System
Ownership, borrowing, lifetime verification. Memory safety without garbage collection. Effect tracking.
STATIC
joule-eir
33
proofs
joule-typeck
19
proofs
tf-optim
19
proofs
joule-common
21
proofs
joule-mir
20
proofs
joule-hir
16
proofs
joule-borrowck
15
proofs
joule-resolver
15
proofs
joule-egraph
12
proofs
joule-codegen
12
proofs
IV · The Receipt

Every build produces an
energy receipt.

Not an estimate. Not a benchmark. An exact accounting of the energy your program will consume, broken down by function, module, and hardware target.

Energy Receipt — sensor_pipeline v0.3.1
total_energy42.7 µJ
  compute28.1 µJ
  memory11.3 µJ
  io3.3 µJ
operations1,847
avg_pj_per_op23,118
budget_remaining7.3 µJ
targetaarch64-unknown-linux-gnu
thermal_statenominal
sci_scoreA+
V · The Ecosystem

175 crates.
One compiler.

The status quo
Energy visibilityNone
Formal verificationManual
Memory safetyPartial *
Build toolchainFragmented
Heterogeneous computeExternal SDKs
Compliance reportingNone
* Rust only. C/C++/Zig are unsafe by default.
Joule
Energy visibilityPicojoule precision
Formal verification182 Kani proofs
Memory safetyOwnership + borrowck
Build toolchainUnified
Heterogeneous computeCPU/GPU/TPU/NPU
Compliance reportingSCI + CSRD + RGESN
VI · Get Started

Start counting joules.

Install the Joule compiler and write your first energy-metered program in under a minute.

terminal
$ curl -fsSL https://joule-lang.dev/install.sh | sh
$ joule new my_project
$ cd my_project && joule build
  Energy receipt: 12.4 μJ total (compute: 8.1, memory: 3.2, io: 1.1)
  SCI score: A+
Embedded SystemsEdge AIFirmwareIoTRoboticsReal-TimeMCUWASMCloud Native
ISO/IEC 21031 SCICSRD Scope 3RGESNMISRA-safeDO-178C ready