heater
A professionally engineered solution for converting electricity into heat.
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.