Why does Klipper say extrude below minimum temp?
Klipper refused to turn the extruder because the hotend read below min_extrude_temp, 170 °C unless your config sets another value. Most often the start G-code or a macro extruded before the nozzle finished heating, because M104 sets a temperature without waiting. Heat with M109, then extrude. No heater safety limit tripped.
The number
| What | Value |
|---|---|
min_extrude_temp default, Klipper v0.13.0 |
170 °C |
| Moves blocked | Any with an E (extruder) value, retraction included |
| Marlin 2.1.2.5 equivalent | EXTRUDE_MINTEMP 170 °C; skips the E part, logs cold extrusion prevented, keeps printing |
The Klipper values come from its v0.13.0 configuration reference and klippy source; the Marlin row from Configuration.h, planner.cpp and language.h at release 2.1.2.5.
Why does Klipper refuse to extrude when the hotend is cold?
Below its printing temperature the filament in the nozzle is solid. Gears driven into it skip, as in a clicking extruder. In Prusa’s words, they “grind away the filament, until they can’t grab it anymore.” So Klipper checks every move with an E value against the hotend’s smoothed reading and rejects a cold one:
Extrude below minimum temp
See the 'min_extrude_temp' config option for details
- Drive gears grip the filament
- Filament still solid in the heat break
- Cold nozzle
- Heater block below min_extrude_temp
Klipper keeps running. A print from file stops and runs on_error_gcode (default TURN_OFF_HEATERS), and you can start again without FIRMWARE_RESTART.
What causes it?
Check in this order:
- Start G-code extrudes too early.
M104sets the target and moves on;M109waits. A purge line afterM104hits the check. - A load or purge macro runs cold. Give it its own
M109before the first E move, or have it checkprinter.extruder.can_extrude. - The print resumes after a long pause. After 600 s idle, Klipper’s idle timeout runs
TURN_OFF_HEATERS, soRESUMEextrudes into a cooling nozzle. SendM109beforeRESUME. - The reading is low. Review
sensor_typeandsensor_pin, as Klipper’s configuration checks advise. A dead reading givesADC out of rangeinstead (MINTEMP errors). - The print temperature is under 170 °C.
M109finishes, then the first extrusion fails.
How do I fix the start G-code?
Wait for both heaters before anything extrudes. Klipper’s sample START_PRINT macro ends:
M190 S{BED_TEMP}
M109 S{EXTRUDER_TEMP}
Put the purge line after M109.
Can I lower min_extrude_temp?
Yes, for filament that prints below 170 °C, such as FormFutura’s BioFil PCL (polycaprolactone) at about 95 to 130 °C. Set it in [extruder] just under your lowest print temperature and send RESTART. It must sit between min_temp and max_temp, the safety limits that shut the printer down when a reading leaves them. Don’t lower it to hide a macro that extrudes too early.
How to check it on your own printer
- Read the temperature graph at the error. If the hotend sat below
min_extrude_temp, a macro extruded too early. If it was at temperature, suspect the sensor or the setting. - Find the first E move. Search the sliced file’s start and your macros for an E move that comes before
M109. - Check the value in use. Search
printer.cfgformin_extrude_temp, since a printer maker’s config can set its own.
Sources
- Configuration reference, Klipper v0.13.0 (accessed October 20, 2026)
- klippy/kinematics/extruder.py at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
- klippy/extras/heaters.py at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
- klippy/toolhead.py at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
- klippy/extras/virtual_sdcard.py at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
- klippy/extras/idle_timeout.py at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
- G-Codes, Klipper v0.13.0 (accessed October 20, 2026)
- config/sample-macros.cfg at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
- Configuration checks, Klipper v0.13.0 (accessed October 20, 2026)
- Status reference, Klipper v0.13.0 (accessed October 20, 2026)
- Configuration.h, Marlin 2.1.2.5, MarlinFirmware on GitHub (accessed October 20, 2026)
- planner.cpp, Marlin 2.1.2.5, MarlinFirmware on GitHub (accessed October 20, 2026)
- language.h, Marlin 2.1.2.5, MarlinFirmware on GitHub (accessed October 20, 2026)
- Extruder noises, Prusa Knowledge Base (accessed October 20, 2026)
- BioFil - PCL, FormFutura (accessed October 20, 2026)