KlipperLab
Two black 3D printers with blue filament spools side by side, the left wired to a Raspberry Pi and control board, the right to a single mainboard
comparisons

Klipper vs Marlin Firmware: Setup, Input Shaping, Tradeoffs

Klipper plans motion on a Linux host, Marlin on the printer board. See how config, input shaping and reliability differ, and which suits your printer.

By KlipperLab Editorial · ·Updated · 12 min read

Klipper is the better pick if you want to push acceleration, tune input shaping from accelerometer data, and change settings by editing a text file. Marlin is the better pick if the printer should run standalone from its own board and screen, with no second computer to power and maintain.

Feature lists hide the one difference that decides that answer. Marlin is a single program running on the printer’s own microcontroller. Klipper is two programs: a host process on a Linux computer that does the planning, and a thin firmware on the microcontroller that executes step timings the host already worked out.

Every other difference follows from that one, including the ones that will annoy you.

What the Split Actually Changes

Marlin has to parse G-code, run the planner, compute step timings, drive the display, and service interrupts, all inside whatever budget the printer’s chip has. That budget is the ceiling on how sophisticated the motion math can be. Klipper moves the expensive parts to a machine with orders of magnitude more compute, which is why features like a general iterative kinematics solver and per-axis resonance compensation are practical there.

The cost is a second computer that has to be powered, updated, and kept alive for the whole print. Klipper’s own feature documentation describes the host as the machine that decides when each stepper motor steps and transmits those events to the microcontroller, so the host is not an accessory and a print does not continue without it.

Side by Side

KlipperMarlin
Current version (checked October 2026)0.13.0, tagged April 11, 20252.1.2.8 stable, 2.1.3-b3 in public beta
Where motion is computedLinux host, streamed to the MCUOn the printer’s MCU
What it runs onPython host on Linux; MCU firmware for ARM, AVR, PRU and other chips8-bit AVR through 32-bit ARM boards
Configuration formatprinter.cfg, plain text on the hostConfiguration.h / Configuration_adv.h, compiled in
Changing a settingEdit text, restart firmwareRecompile and reflash, unless the setting has an M-code
Reflashing the boardOnly on MCU change or a protocol-breaking upgradeFor every compile-time change
Input shapingSix shaper types (zv, mzv, zvd, ei, 2hump_ei, 3hump_ei), driven by a measured resonance profileZV only in 2.1.2.x, enabled at compile time, tuned at runtime with M593; more shapers via M493 in the 2.1.3 beta
Resonance measurementBuilt in, using a supported accelerometerNot built in; frequency comes from a calibration print or ringing tower
Extrusion pressure modelPressure advanceLinear advance (M900)
Scripting[gcode_macro] blocks with full template logicLimited user G-code slots and menu items
User interfaceWeb front end, optional touchscreen, or a supported LCD with a customizable menuOn-board LCD menu (character and graphic LCDs), standalone
Prints with no host attachedNoYes, from SD or USB media
Extra hardware neededHost SBC, power, storageNone
Exotic kinematicsIterative solver covers delta, polar, cable winch, and hybrid layoutsSupported per kinematic, hand-written

The platform rows follow Klipper’s feature list and Marlin’s introduction, which also confirms Marlin prints from an SD card with no host connected.

Configuration Workflow Is the Day-to-Day Difference

Marlin’s configuration lives in C headers that are compiled into the binary. Changing a stepper current default, a thermistor table, or a homing direction means editing source, building, and flashing. Marlin exposes a lot at runtime through M-codes and M500 EEPROM saves, which softens this considerably, but the shape of the machine is decided at compile time.

Klipper’s configuration is a text file on the host, applied with a firmware restart that takes seconds. That makes it diffable, backupable, and trivially reversible, which matters more than it sounds during a tuning session where you are changing one number at a time and want to know exactly what you changed. Keep printer.cfg in version control before you start; it is the cheapest insurance in the whole project.

The flip side is that Klipper gives you no menu-driven safety net for the configuration itself. It can drive a printer LCD (the [display] section supports hd44780, st7920, uc1701, ssd1306, sh1106 and a few other controller chips) with a customizable [menu], but nothing on that screen edits printer.cfg. A syntax error means Klipper refuses to start, and you fix it in a text editor.

Tuning Features Are Not Symmetric

Both firmwares now have an extrusion pressure model and both now have input shaping, so a feature checklist makes them look closer than they are. The asymmetry is in how you arrive at the numbers.

Marlin’s M593 lets you set an input shaping frequency and damping per axis at runtime, once the feature is compiled in. Finding the frequency is left to you: Marlin’s input shaping page recommends a calibration print or a ringing tower, and the M593 reference states that Marlin has no accelerometer-based tuning.

Klipper measures the machine directly. An accelerometer on the toolhead produces a resonance profile per axis, and the calibration script recommends both a shaper type and a frequency from that data, along with an acceleration ceiling implied by the smoothing each shaper costs. That is a different quality of answer than reading a number off a print, and it is the single strongest argument for the extra hardware. The procedure is set out in Klipper input shaper setup with an ADXL345; the relationship between measured frequency, shaper choice, and usable acceleration is what the input shaper and acceleration sizer exists to make visible.

Shaper choice is a trade, not a free win. More aggressive vibration suppression costs more smoothing, and smoothing costs effective acceleration and fine detail. Neither firmware removes that trade; Klipper just gives you the data to make it deliberately.

Does Marlin Have Input Shaping?

Yes. Marlin 2.1.2 added an integrated ZV input shaper: you enable INPUT_SHAPING_X and INPUT_SHAPING_Y at compile time, then set frequency and damping at runtime with M593. It is efficient enough to run on 8-bit AVR boards, but it offers one shaper type and no accelerometer tuning. More shaper types arrive with Fixed-Time Motion in the 2.1.3 beta.

Marlin ZV (M593)Marlin Fixed-Time Motion (M493)Klipper [input_shaper]
StatusStable since 2.1.22.1.3 betaStable
Shaper typesZVZV, ZVD, ZVDD, ZVDDD, EI, 2HEI, 3HEI, MZVZV, MZV, ZVD, EI, 2HUMP_EI, 3HUMP_EI
Runtime commandM593 X F<Hz> D<zeta>M493 S1 XY C<mode> A<Hz>SET_INPUT_SHAPER
Frequency sourceTest printTest printAccelerometer or ringing tower
Pressure modelLinear Advance (M900)Its own Linear Advance gain, still set with M900 KPressure advance

Fixed-Time Motion, listed in the 2.1.3 beta 1 release notes alongside a new INPUT_SHAPING_Z option, is a separate motion system rather than an upgrade to M593. The M493 reference limits it to Cartesian and Core kinematics so far, lets it run alongside the ZV shaper without sharing settings, and carries an under-construction warning. Its Linear Advance gain is separate too, per the M900 page.

Tuning Marlin input shaping without an accelerometer

  1. Build and flash Marlin with INPUT_SHAPING_X and INPUT_SHAPING_Y enabled.
  2. Print Marlin’s single-layer zigzag calibration pattern, or its Ringing Tower STL; the tower macros on the M593 page sweep 15 to 60 Hz. On CoreXY, rotate the tower 45 degrees to isolate the A and B motors.
  3. Read the frequency. On the zigzag, halve the distance in mm where the pattern breaks (62 mm means 31 Hz). On the tower, compute 15 + 45 * (z / 0.2 - 2) / 297 for the height z of the cleanest layer (20 mm gives about 29.8 Hz).
  4. Apply it per axis with M593 X F31, adding the damping factor from the most uniform zigzag pass with D. M593 F0 turns shaping off.
  5. Save with M500 and recheck the Linear Advance K factor, which the sweep disables.

Klipper can be tuned the same way. Its resonance compensation guide computes frequency from a ringing tower as print velocity times oscillation count over measured distance (100 × 6 / 12.14 ≈ 49.4 Hz in its example), recommends trying MZV first, and treats frequencies below about 20 to 25 Hz as a sign the frame needs stiffening, a check that applies equally on Marlin.

Reliability and Failure Surface

Marlin has fewer parts that can fail. The board boots, the print runs, and nothing depends on a network stack or a filesystem that gets written to continuously.

Klipper adds a host, and with it a set of failure modes that are not firmware problems at all: a worn microSD card, an undervolted 5V supply, a USB port that renumbers on boot, a web front end update that breaks an API contract. Most of these are solved once and stay solved, but they are real, and they are the reason a Klipper install is genuinely more work than flashing Marlin. The hardware choices that avoid the common ones are covered in Klipper hardware requirements.

There is a mitigating factor worth knowing: Klipper fails loudly rather than quietly. A configuration error stops the firmware from starting instead of leaving a bad value silently in effect, and a connection or communication problem surfaces as a named error in the console rather than as a print that slowly goes wrong. The Klipper FAQ calls this deliberate: transient faults are retried, and an error is raised only when recovery fails.

Who Should Run Which

Run Marlin if the printer is a single-purpose appliance, the current speeds are acceptable, nobody wants to maintain a Linux machine, or the printer needs to run from its own screen with no other computer in the room. A well-configured Marlin machine is not a compromise; it is the correct answer for a large share of printers.

Run Klipper if you intend to push acceleration and want the resonance data to justify it, you want configuration you can diff and roll back, you run unusual kinematics, you want real scripting in your macros, or you already have a spare single board computer and the marginal cost is an afternoon.

Run neither if what you actually want is fast prints rather than a motion-control project. A closed-ecosystem CoreXY machine that ships already tuned removes the entire question: no printer.cfg, no accelerometer, no host to maintain. The Bambu Lab P1S is the common example of that trade, and it is a real trade rather than a lesser choice. What you give up is the thing this site is about: the firmware is the vendor’s, the tuning is the vendor’s, and the configuration surface is whatever they chose to expose.

Marlin Alternatives Besides Klipper

Klipper is the alternative most Marlin users mean, but not the only one. RepRapFirmware, the firmware for Duet3D controllers, runs on the board like Marlin yet has a wider shaper set: its M593 covers MZV, ZVD, EI2 and EI3, and its M955 and M956 commands configure an accelerometer and collect resonance data. Check board support first; Klipper’s host-side planning is what lets it reuse most existing boards. The third route is the closed, vendor-tuned machine above.

Switching Costs

Going from Marlin to Klipper is not a one-evening job, and it is more honest to say so. You will rebuild the machine’s configuration from scratch in a new format, re-derive rotation distance and extruder calibration, and re-tune pressure advance, because none of those values transfer cleanly. Budget a weekend for a machine you know well and longer for one you do not.

The host hardware costs little next to that time. Raspberry Pi lists the Zero 2 W at $15 and the Pi 4 from $35 (checked October 2026), before a power supply and storage.

Two Marlin habits do not carry over. Klipper uses the microcontroller’s own pin names rather than Marlin’s Arduino pin numbers, and the Klipper FAQ explains the conversion. It also notes Marlin typically steps at around 10,000 steps per second while Klipper can step faster than the motor has torque for, so a Z axis that screeches on first homing usually needs a lower max_z_velocity.

The switch, step by step

  1. Find a printer-*.cfg for your printer, or a generic-*.cfg for its board, in Klipper’s config directory, per the installation guide.
  2. Install a Lite OS image or MainsailOS on the host; KIAUH can add Klipper and a web interface.
  3. Run cd ~/klipper/, then make menuconfig with the settings from the comments at the top of that config file, then make.
  4. Flash as the config file describes: SD card for most STM32 and LPC boards, make flash with FLASH_DEVICE set (service stopped) for ATmega and RP2040.
  5. Put the output of ls /dev/serial/by-id/* in the serial line of [mcu] and restart; ~/printer_data/logs/klippy.log explains a failure to reach ready.
  6. Run Klipper’s configuration checks, then calibrate in the order below.

Going back is easier, since the Marlin build you flashed away from still exists, but the printer will not be tuned to the same standard unless you kept those numbers.

The order that works is the same either way: mechanical soundness first, then extruder calibration, then pressure advance, then resonance measurement, then speed. The firmware you pick changes how comfortable each step is. For the host/MCU split and the distinction between configuration changes and firmware updates, see how Klipper works.

FAQ

is klipper faster than marlin

Not by itself. Klipper’s resonance documentation says input shaping does not change print time; max_accel does. Klipper raises the ceiling instead: its FAQ puts typical Marlin step rates around 10,000 steps per second, its own benchmarks show 157K steps per second on a 16 MHz AVR, and measured shaping shows how much acceleration the frame tolerates before ringing.

can marlin use an adxl345 for input shaping

No, not natively. Marlin’s M593 and M493 references both state that Marlin has no accelerometer-based tuning, so an ADXL345 cannot hand a frequency to either command. The frequency comes from a calibration print or ringing tower. Measuring with an accelerometer means using an outside tool, or moving the printer to Klipper or RepRapFirmware.

does klipper work with my printer’s stock screen

Only if its display controller is one Klipper’s [display] section supports: hd44780, hd44780_spi, aip31068_spi, st7920, emulated_st7920, uc1701, ssd1306 or sh1106. Those screens get Klipper’s customizable menu. A screen built on any other controller will not work through that module, and a Mainsail or Fluidd browser tab replaces it.

what happens if the klipper host crashes mid-print

The print stops, and the heaters switch off. Klipper’s FAQ explains that the host must reconfirm every enabled heater every 3 seconds; if the microcontroller misses that confirmation, it enters a shutdown state that turns off heaters and stepper motors. The part is lost, but the hotend is not left heating unattended.

Sources

  1. Klipper: Features
  2. Klipper: FAQ
  3. Marlin: Configuring Marlin
  4. Marlin: M593 Input Shaping
  5. Marlin: Input Shaping
  6. Marlin: M493 Fixed-Time Motion
  7. Marlin: M900 Linear Advance Factor
  8. Marlin: Introduction
  9. Marlin: Download
  10. Marlin: GitHub Releases
  11. Klipper: Releases
  12. Klipper: Resonance Compensation
  13. Klipper: Configuration Reference
  14. Klipper: Installation
  15. Raspberry Pi Zero 2 W
  16. Raspberry Pi 4 Model B
  17. RepRapFirmware: Changelog RRF 3.x
#klipper #firmware-tuning #3d-printing#input-shaping#marlin

Related