heater

A professionally engineered solution for converting electricity into heat.


heater in action

Install

Prebuilt Binary

Grab the latest release from the releases page. No dependencies required.

Cargo Install

cargo install --git https://github.com/evindor/heater

Build from Source

git clone https://github.com/evindor/heater
              cd heater
              cargo build --release
              ./target/release/heater

Usage

# CPU mode — uses half your cores by default
            heater

            # Explicit core count
            heater --cores 8

            # GPU mode at 80% utilization (default)
            heater --gpu

            # GPU at a specific utilization
            heater --gpu 90

            # Target a wattage
            heater --watts 250
            heater --gpu --watts 300

            # Target a temperature
            heater --temp 75

            # Show live sensor readings
            heater --stats
heater CPU mode, half your cores
heater --cores 8 Explicit core count
heater --gpu GPU mode, 80% utilization
heater --gpu 90 GPU at 90% utilization
heater --watts 250 Target 250W power draw
heater --temp 75 Target 75°C
heater --stats Show live sensor readings and exit

Configuration Reference

Flag Description Default
--cores <N> Number of CPU worker threads to spawn Half of available cores
--gpu [%] Enable GPU mode; optional target utilization percentage 80% when flag is present
--watts <W> Target power draw in watts; enables PID control loop —
--temp <°C> Target temperature in Celsius; enables PID control loop —
--stats Print live sensor readings (CPU temp, GPU temp, power) and exit —

How It Works

CPU Mode

Keeps your cores busy by computing prime numbers in tight loops — simple, portable, and reliably hot. Each worker thread spins independently, so --cores 8 means 8 threads pegged at 100%.

GPU Mode

Dispatches a compute shader via wgpu that runs a workload calibrated to hit your target utilization. The shader does real arithmetic so the driver can't optimize it away.

PID Controller

When targeting watts or temperature, a PID controller adjusts worker load every second based on sensor feedback. It converges quickly and stays locked on target without oscillating.

Fire Animation

The classic ASCII fire simulation from the demoscene — rendered in your terminal at a tasteful framerate. Because staring at a blank terminal while your room heats up is depressing.

FAQ

Why is my room hot?

It's a heater.

Is this wasteful?

Thermodynamically? No. Every watt becomes heat. You're running a 100% efficient space heater.

Can I use this as my primary heating?

We are not liable.

My GPU is expensive, won't this wear it out?

No. Silicon doesn't degrade from compute workloads. The fans were spinning anyway.

Why Rust?

Maximum heating efficiency requires zero-cost abstractions.