Klipper has several compelling features:

* High precision stepper movement. Klipper utilizes an application
  processor (such as a low-cost Raspberry Pi) when calculating printer
  movements. The application processor determines when to step each
  stepper motor, it compresses those events, transmits them to the
  micro-controller, and then the micro-controller executes each event
  at the requested time. Each stepper event is scheduled with a
  precision of 25 micro-seconds or better. The software does not use
  kinematic estimations (such as the Bresenham algorithm) - instead it
  calculates precise step times based on the physics of acceleration
  and the physics of the machine kinematics. More precise stepper
  movement translates to quieter and more stable printer operation.

* Best in class performance. Klipper is able to achieve high stepping
  rates on both new and old micro-controllers. Even an old 8bit AVR
  micro-controller can obtain rates over 175K steps per second. On
  more recent micro-controllers, rates over 500K steps per second are
  possible. Higher stepper rates enable higher print velocities. The
  stepper event timing remains precise even at high speeds which
  improves overall stability.

* Klipper supports printers with multiple micro-controllers. For
  example, one micro-controller could be used to control an extruder,
  while another controls the printer's heaters, while a third controls
  the rest of the printer. The Klipper host software implements clock
  synchronization to account for clock drift between
  micro-controllers. No special code is needed to enable multiple
  micro-controllers - it just requires a few extra lines in the config
  file.

* Configuration via simple config file. There's no need to reflash the
  micro-controller to change a setting. All of Klipper's configuration
  is stored in a standard config file which can be easily edited. This
  makes it easier to setup and maintain the hardware.

* Portable code. Klipper works on ARM, AVR, and PRU based
  micro-controllers. Existing "reprap" style printers can run Klipper
  without hardware modification - just add a Raspberry Pi. Klipper's
  internal code layout makes it easier to support other
  micro-controller architectures as well.

* Simpler code. Klipper uses a very high level language (Python) for
  most code. The kinematics algorithms, the G-code parsing, the
  heating and thermistor algorithms, etc. are all written in Python.
  This makes it easier to develop new functionality.

* Klipper uses an "iterative solver" to calculate precise step times
  from simple kinematic equations. This makes porting Klipper to new
  types of robots easier and it keeps timing precise even with complex
  kinematics (no "line segmentation" is needed).

Additional features
===================

Klipper supports many standard 3d printer features:

* Klipper implements the "pressure advance" algorithm for extruders.
  When properly tuned, pressure advance reduces extruder ooze.

* Works with Octoprint. This allows the printer to be controlled using
  a regular web-browser. The same Raspberry Pi that runs Klipper can
  also run Octoprint.

* Standard G-Code support. Common g-code commands that are produced by
  typical "slicers" are supported. One may continue to use Slic3r,
  Cura, etc. with Klipper.

* Support for multiple extruders. Extruders with shared heaters and
  extruders on independent carriages (IDEX) are also supported.

* Support for cartesian, delta, and corexy style printers.

* Automatic bed leveling support. Klipper can be configured for basic
  bed tilt detection or full mesh bed leveling. If the bed uses
  multiple Z steppers then Klipper can also level by independently
  manipulating the Z steppers. Most Z height probes are supported,
  including servo activated probes.

* Automatic delta calibration support. The calibration tool can
  perform basic height calibration as well as an enhanced X and Y
  dimension calibration. The calibration can be done with a Z height
  probe or via manual probing.

* Support for common temperature sensors (eg, common thermistors,
  AD595, PT100, MAX6675, MAX31855, MAX31856, MAX31865). Custom
  thermistors and custom analog temperature sensors can also be
  configured.

* Basic thermal heater protection enabled by default.

* Support for standard fans, nozzle fans, and temperature controlled
  fans. No need to keep fans running when the printer is idle.

* Support for run-time configuration of TMC2130, TMC2208, TMC2224, and
  TMC2660 stepper motor drivers. There is also support for current
  control of traditional stepper drivers via AD5206 and MCP4451
  digipots.

* Support for common LCD displays attached directly to the printer. A
  default menu is also available.

* Constant acceleration and "look-ahead" support. All printer moves
  will gradually accelerate from standstill to cruising speed and then
  decelerate back to a standstill. The incoming stream of G-Code
  movement commands are queued and analyzed - the acceleration between
  movements in a similar direction will be optimized to reduce print
  stalls and improve overall print time.

* Klipper implements a "stepper phase endstop" algorithm that can
  improve the accuracy of typical endstop switches. When properly
  tuned it can improve a print's first layer bed adhesion.

* Support for limiting the top speed of short "zigzag" moves to reduce
  printer vibration and noise. See the [kinematics](Kinematics.md)
  document for more information.

* Sample configuration files are available for many common printers.
  Check the [config directory](../config/) for a list.

To get started with Klipper, read the [installation](Installation.md)
guide.

Step Benchmarks
===============

Below are the results of stepper performance tests. The numbers shown
represent total number of steps per second on the micro-controller.

| Micro-controller            | Fastest step rate | 3 steppers active |
| --------------------------- | ----------------- | ----------------- |
| 16Mhz AVR                   | 151K              | 100K              |
| 20Mhz AVR                   | 189K              | 125K              |
| Arduino Zero (ARM SAMD21)   | 234K              | 217K              |
| STM32F103                   | 333K              | 300K              |
| Arduino Due (ARM SAM3X8E)   | 410K              | 397K              |
| SAM4S8C ARM                 | 455K              | 455K              |
| Smoothieboard (ARM LPC1768) | 487K              | 487K              |
| Smoothieboard (ARM LPC1769) | 584K              | 584K              |
| SAMD51 ARM                  | 630K              | 630K              |
| SAM4E8E ARM                 | 638K              | 638K              |
| Beaglebone PRU              | 680K              | 680K              |

On AVR platforms, the highest achievable step rate is with just one
stepper stepping. On the STM32F103, Arduino Zero, and Due, the highest
step rate is with two simultaneous steppers stepping. On the PRU,
SAMD51, SAM4S8C, SAM4E8E, and LPC176x the highest step rate is with
three simultaneous steppers.
