Why does Klipper say extrude below minimum temp?

By Asked 3D Content TeamPublished Last verified

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
An extruder's two drive gears gripping a filament strand above a cold hotend, cut open to show the strand still solid through the heat break and into the nozzleBelow min_extrude_temp the filament is still solid down into the nozzle, so Klipper refuses any move that would drive the gears against it.2Filament still solid in the heat break3Cold nozzle1Drive gears grip the filament4Heater block below min_extrude_temp
  1. Drive gears grip the filament
  2. Filament still solid in the heat break
  3. Cold nozzle
  4. Heater block below min_extrude_temp
Below min_extrude_temp the filament is still solid down into the nozzle, so Klipper refuses any move that would drive the gears against it.

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:

  1. Start G-code extrudes too early. M104 sets the target and moves on; M109 waits. A purge line after M104 hits the check.
  2. A load or purge macro runs cold. Give it its own M109 before the first E move, or have it check printer.extruder.can_extrude.
  3. The print resumes after a long pause. After 600 s idle, Klipper’s idle timeout runs TURN_OFF_HEATERS, so RESUME extrudes into a cooling nozzle. Send M109 before RESUME.
  4. The reading is low. Review sensor_type and sensor_pin, as Klipper’s configuration checks advise. A dead reading gives ADC out of range instead (MINTEMP errors).
  5. The print temperature is under 170 °C. M109 finishes, 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.cfg for min_extrude_temp, since a printer maker’s config can set its own.

Sources

  1. Configuration reference, Klipper v0.13.0 (accessed October 20, 2026)
  2. klippy/kinematics/extruder.py at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
  3. klippy/extras/heaters.py at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
  4. klippy/toolhead.py at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
  5. klippy/extras/virtual_sdcard.py at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
  6. klippy/extras/idle_timeout.py at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
  7. G-Codes, Klipper v0.13.0 (accessed October 20, 2026)
  8. config/sample-macros.cfg at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
  9. Configuration checks, Klipper v0.13.0 (accessed October 20, 2026)
  10. Status reference, Klipper v0.13.0 (accessed October 20, 2026)
  11. Configuration.h, Marlin 2.1.2.5, MarlinFirmware on GitHub (accessed October 20, 2026)
  12. planner.cpp, Marlin 2.1.2.5, MarlinFirmware on GitHub (accessed October 20, 2026)
  13. language.h, Marlin 2.1.2.5, MarlinFirmware on GitHub (accessed October 20, 2026)
  14. Extruder noises, Prusa Knowledge Base (accessed October 20, 2026)
  15. BioFil - PCL, FormFutura (accessed October 20, 2026)