On a 3D printer, acceleration paces every move and matters far more for print time. Jerk only sets corner speed. Current Marlin sets that with junction deviation instead, and Klipper with square corner velocity.
What is the difference between jerk and acceleration?
Acceleration is how fast the print head’s speed rises or falls during a move, in mm/s² (Marlin’s default is 3,000 mm/s²). In printer firmware, jerk is the speed change in mm/s that the head may make instantly, with no acceleration (Marlin’s classic default is 10 mm/s). Acceleration shapes every move; jerk only matters at corners.
| Setting | Unit | What it limits | Default | Set with |
|---|---|---|---|---|
| Acceleration | mm/s² | How fast speed rises and falls along every move | 3,000 (Marlin) | M204 P and T; Klipper max_accel |
| Classic jerk | mm/s | The speed change an axis may make instantly | 10 X and Y (Marlin, when CLASSIC_JERK is on) |
M205 X Y |
| Junction deviation | mm | Corner speed, from the corner angle and the move’s acceleration | 0.013 (Marlin 2.x) | M205 J |
| Square corner velocity | mm/s | Speed through a 90° corner; other angles follow from it | 5 (Klipper) | square_corner_velocity, SET_VELOCITY_LIMIT |
Firmware jerk is not physics jerk
In physics, jerk is the rate of change of acceleration (the third derivative of position). Marlin’s “jerk” is a speed: Configuration.h calls it “the minimum speed change that requires acceleration.” Marlin’s option for smoothing acceleration itself is S_CURVE_ACCELERATION, off by default.
Classic jerk, junction deviation and square corner velocity
Marlin’s documentation says classic jerk “applied the same fixed speed change to every corner, regardless of angle.” At a 90° corner each axis changes by the whole corner speed, so the corner speed equals the X/Y jerk. Junction deviation (Marlin’s default since 2.0) treats each corner as a small arc and takes it at the highest speed the move’s acceleration allows. Shallow corners stay fast; sharp ones slow down. For a 90° corner:
corner speed² = acceleration × junction deviation × 2.414
Klipper uses the same method, taken from Grbl. You set the 90° speed, and Klipper derives the deviation from it each time M204 or SET_VELOCITY_LIMIT changes the acceleration. With a fixed junction deviation, corners get faster as acceleration rises.
Speed through a 90° corner, in mm/s:
| Print acceleration | Classic jerk 10 mm/s | Junction deviation 0.013 mm | Klipper, 5 mm/s square corner velocity |
|---|---|---|---|
| 500 mm/s² | 10 | 4.0 | 5 |
| 1,000 mm/s² | 10 | 5.6 | 5 |
| 3,000 mm/s² | 10 | 9.7 | 5 |
| 10,000 mm/s² | 10 | 17.7 | 5 |
Marlin’s documentation gives the first three junction deviation figures; the 10,000 row uses the same formula.
How do you convert jerk to junction deviation?
Use Marlin’s formula: junction deviation = 0.4 × jerk² ÷ print acceleration, with jerk in mm/s and the M204 P acceleration in mm/s². Marlin’s own defaults check out: 0.4 × 10² ÷ 3,000 = 0.0133 mm, which Marlin ships as 0.013 mm. The exact factor for a 90° corner is 0.414 (√2 − 1).
junction deviation (mm) = 0.4 × jerk² ÷ acceleration
90° corner speed (mm/s) = √(junction deviation × acceleration ÷ 0.414)
Klipper's internal deviation = square_corner_velocity² × 0.414 ÷ acceleration
Use your X and Y jerk and your print acceleration, not the M201 maximum.
Junction deviation for each jerk and print acceleration, in mm:
| X/Y jerk | 500 mm/s² | 1,000 mm/s² | 3,000 mm/s² | 4,000 mm/s² | 10,000 mm/s² |
|---|---|---|---|---|---|
| 5 mm/s | 0.020 | 0.010 | 0.0033 | 0.0025 | 0.0010 |
| 8 mm/s | 0.051 | 0.026 | 0.0085 | 0.0064 | 0.0026 |
| 10 mm/s | 0.080 | 0.040 | 0.013 | 0.010 | 0.0040 |
| 15 mm/s | 0.180 | 0.090 | 0.030 | 0.023 | 0.0090 |
| 20 mm/s | 0.320 | 0.160 | 0.053 | 0.040 | 0.016 |
M205 J only accepts 0.01 to 0.3 mm. Marlin answers anything else with “?J out of range (0.01 to 0.3)”, though its LCD menu goes down to 0.001.
Worked examples
- Marlin’s defaults: 0.4 × 10² ÷ 3,000 = 0.0133 mm, rounded to 0.013 in Configuration.h. Back the other way, √(0.013 × 3,000 ÷ 0.414) = 9.7 mm/s at a 90° corner.
- Creality’s stock Ender-3 V2 firmware (classic jerk 5 mm/s, printing at 500 mm/s²): 0.4 × 5² ÷ 500 = 0.020 mm. On a junction deviation build, send
M205 J0.02for 4.9 mm/s through a 90° print corner. - Prusa MK4S (jerk 8 mm/s, 4,000 mm/s²): 0.4 × 8² ÷ 4,000 = 0.0064 mm, below the 0.01 floor. Prusa’s profile also sends
M205 J0.010, the firmware default: √(0.01 × 4,000 ÷ 0.414) = 9.8 mm/s at a 90° corner.
Converting jerk to Klipper’s square corner velocity
There is nothing to convert: square_corner_velocity is a 90° corner speed in mm/s, the same quantity as classic X/Y jerk. Bambu Studio and OrcaSlicer send their jerk setting to Klipper printers as SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=.
What jerk and junction deviation do 3D printers use?
Klipper defaults to a square corner velocity of 5 mm/s and Marlin to a junction deviation of 0.013 mm, about 9.7 mm/s through a 90° corner at 3,000 mm/s². Creality’s stock Ender-3 V2 firmware uses 5 mm/s classic jerk, Prusa’s MK4S profile sends 8 mm/s jerk and 0.01 mm, and Bambu Studio’s X1 Carbon profile sends 9 mm/s.
| Printer or firmware | Acceleration (mm/s²) | Corner setting | Source |
|---|---|---|---|
| Marlin 2.1.2.9 | 3,000 print, travel and retract | Junction deviation 0.013 mm; classic jerk off (10 mm/s X/Y if turned on) | Marlin Configuration.h |
| Klipper | max_accel, no default |
square_corner_velocity 5 mm/s |
Klipper config reference |
| Voron 2.4 | 3,000 | square_corner_velocity 5.0 mm/s |
Voron reference printer.cfg |
| Creality Ender-3 V2, stock Marlin | 500 print, 1,000 travel | Classic jerk 5 mm/s X/Y | Creality’s firmware source |
| Creality Ender-3 V2, Klipper example | 3,000 | Not set, so 5 mm/s | Klipper example config |
| Prusa i3 MK3S and MK3S+ | 1,000 X/Y, 1,250 extruding | Jerk 8 mm/s X/Y | PrusaSlicer printer profile |
| Prusa MK4S | 4,000 X/Y (2,500 Stealth) | Jerk 8 mm/s X/Y and junction deviation 0.01 mm | PrusaSlicer profile; Prusa firmware (classic jerk off, 0.01 mm) |
| Prusa CORE One | 10,000 X/Y, 7,000 extruding | Jerk 10 mm/s X/Y (8 in Stealth) and junction deviation 0.01 mm | PrusaSlicer profile; Prusa firmware (classic jerk off, 0.01 mm) |
| Bambu Lab X1 Carbon and P1S | 20,000 X/Y | Jerk 9 mm/s X/Y, written as M205 X9.00 Y9.00 |
Bambu Studio printer profiles |
| UltiMaker Cura, Enable Jerk Control on | 3,000 print (Enable Acceleration Control on) | Print Jerk 20 mm/s, Travel Jerk 30 mm/s | Cura fdmprinter.def.json |
Prusa’s MK4S and CORE One firmware runs junction deviation with classic jerk off, and Marlin reads M205 X and Y only when classic jerk is compiled in. On those printers the jerk values do nothing; the 0.01 mm sets the corner speed.
Which acceleration and jerk settings fix ringing and corners?
Tune acceleration first, then junction deviation or jerk. Marlin’s documentation calls acceleration “the main cause of ringing” and says junction deviation only controls corners. Change one setting at a time; the symptoms overlap. Marlin’s troubleshooting table:
| What you see | What to change |
|---|---|
| Ringing along whole walls, not only after corners | Lower acceleration (M204 P) or tune input shaping |
| Ringing that starts right after a corner and fades | Lower junction deviation |
| Rounded or bulging corners | Lower junction deviation, and check Linear Advance |
| Blobs or zits at corners | Raise junction deviation a little, and check Linear Advance |
| Stutter or slow motion on curves and detailed models | Raise junction deviation, and keep JD_HANDLE_SMALL_SEGMENTS on |
| Skipped steps on fast direction changes | Lower junction deviation and/or acceleration |
On Klipper with input shaping, keep square_corner_velocity at 5 mm/s. Raising it adds smoothing to parts, and Klipper’s docs say “it is better to use higher acceleration value instead.” The max acceleration test finds your frame’s ceiling.
Marlin’s documentation tunes junction deviation on a hollow square tower (one perimeter, no top layer). Raise M205 J from 0.010 by 0.005 mm every 5 mm of height, up to 0.050. Save the highest step with clean corners: M205 J<value>, then M500.
Acceleration matters more for print time
On a 20 mm wall at 300 mm/s and 3,000 mm/s², taking the corners at 5 mm/s instead of stopping lifts the average speed from 122.5 to 125.0 mm/s. Raising acceleration to 10,000 mm/s² gets it to 206.9 mm/s, even with full stops. Try your own moves in the acceleration calculator, or time a whole sliced file in the G-code time estimator.
Where to set jerk and junction deviation
- Marlin: send M503. An M205 line with J means a junction deviation build; X and Y mean classic jerk. Set it with
M205 J0.02orM205 X8 Y8, then save withM500. On the LCD: Configuration > Advanced Settings > Junction Dev. - Klipper:
square_corner_velocityunder[printer]in printer.cfg, orSET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=while printing. Klipper’s list of supported G-codes has M204 but no M205. - PrusaSlicer 2.9: Printer Settings > Machine limits > Jerk limits holds Maximum jerk X, Y, Z and E, plus Maximum junction deviation for the Marlin 2 G-code flavor. Set “How to apply limits” to Emit to G-code to send them as M205 X Y and M205 J.
- Bambu Studio 2.8: Process > Speed > Jerk(XY) in Advanced mode, shown only for third-party printers (Default 0 leaves jerk alone). Printer limits sit under Motion ability > Jerk limitation.
- OrcaSlicer 2.4: Process > Speed has a Junction Deviation group (Marlin 2 printers only) and a Jerk(XY) group, where Default 0 keeps the printer’s jerk. On a classic jerk printer, set Printer Settings > Motion ability > Jerk limitation > Maximum Junction Deviation to 0 so the Jerk(XY) values apply.
- UltiMaker Cura 5.13: Speed > Enable Jerk Control, off by default. Cura writes jerk as M205 X Y, which a Marlin junction deviation build ignores.
Written by 3D Calculators Team· Published · Figures last checked
Sources
- Marlin 2.1.2.9, Configuration.h (DEFAULT_ACCELERATION 3000, CLASSIC_JERK off, DEFAULT_XJERK/YJERK 10, JUNCTION_DEVIATION_MM 0.013, S_CURVE_ACCELERATION) (accessed 2026-10-30)
- Marlin 2.1.2.9 source, M200-M205.cpp (M205 J accepted from 0.01 to 0.3, M205 X/Y read only with classic jerk) (accessed 2026-10-30)
- Marlin 2.1.2.9 source, planner.cpp (junction deviation corner speed) (accessed 2026-10-30)
- Marlin documentation, M205: Set Advanced Settings (accessed 2026-10-30)
- Marlin documentation, Junction Deviation (conversion formula, 90° corner speed table, tuning, troubleshooting) (accessed 2026-10-30)
- Synthetos TinyG wiki, Jerk Controlled Motion Explained (jerk as the third derivative of position) (accessed 2026-10-30)
- Klipper v0.13.0 documentation, Config_Reference.md ([printer] max_accel, square_corner_velocity default 5) (accessed 2026-10-30)
- Klipper v0.13.0 documentation, Kinematics.md (look-ahead and square corner velocity) (accessed 2026-10-30)
- Klipper v0.13.0 source, klippy/toolhead.py (junction_deviation = scv² × (√2 − 1) ÷ max_accel, recalculated on M204) (accessed 2026-10-30)
- Klipper v0.13.0 documentation, Resonance_Compensation.md (keep square_corner_velocity at 5 with input shaper) (accessed 2026-10-30)
- Klipper v0.13.0 documentation, G-Codes.md (supported standard G-codes, SET_VELOCITY_LIMIT) (accessed 2026-10-30)
- Klipper v0.13.0 example config, printer-creality-ender3-v2-2020.cfg (max_accel 3000) (accessed 2026-10-30)
- Voron Design, Voron 2.4 reference printer.cfg (max_velocity 300, max_accel 3000, square_corner_velocity 5.0) (accessed 2026-10-30)
- Creality, Ender-3 V2 Marlin source, Configuration.h (CLASSIC_JERK, X/Y jerk 5, acceleration 500 print and 1,000 travel) (accessed 2026-10-30)
- PrusaSlicer 2.9.6 profiles, PrusaResearch.ini (machine_max_jerk_x/y and machine_max_junction_deviation for MK3S, MK4S, CORE One) (accessed 2026-10-30)
- PrusaSlicer 2.9.6 source, PrintConfig.cpp (Maximum jerk, Maximum junction deviation) (accessed 2026-10-30)
- PrusaSlicer 2.9.6 source, Tab.cpp (Machine limits page, Jerk limits group) (accessed 2026-10-30)
- PrusaSlicer 2.9.6 source, GCode.cpp (machine limits written as M205 X Y and M205 J) (accessed 2026-10-30)
- Prusa-Firmware-Buddy 6.10.3, Configuration_MK4.h (CLASSIC_JERK off, JUNCTION_DEVIATION_MM 0.01) (accessed 2026-10-30)
- Prusa-Firmware-Buddy 6.10.3, Configuration_COREONE.h (CLASSIC_JERK off, JUNCTION_DEVIATION_MM 0.01) (accessed 2026-10-30)
- Prusa-Firmware-Buddy 6.10.3 source, M200-M205.cpp (M205 J with classic jerk off, X/Y only with classic jerk) (accessed 2026-10-30)
- Bambu Studio 2.8.4 profiles, Bambu Lab X1 Carbon 0.4 nozzle (machine_max_jerk_x/y 9, acceleration 20,000) (accessed 2026-10-30)
- Bambu Studio 2.8.4 profiles, Bambu Lab P1S 0.4 nozzle (machine_max_jerk_x/y 9, acceleration 20,000) (accessed 2026-10-30)
- Bambu Studio 2.8.4 source, Tab.cpp and ConfigManipulation.cpp (Speed page Jerk(XY) group hidden for Bambu Lab printers, Motion ability Jerk limitation) (accessed 2026-10-30)
- Bambu Studio 2.8.4 source, GCode.cpp and GCodeWriter.cpp (M205 X Y machine envelope, jerk as SQUARE_CORNER_VELOCITY for Klipper) (accessed 2026-10-30)
- OrcaSlicer 2.4.2 source, PrintConfig.cpp and ConfigManipulation.cpp (Junction Deviation and Jerk(XY) settings) (accessed 2026-10-30)
- OrcaSlicer 2.4.2 source, Tab.cpp (Speed page groups, Motion ability Jerk limitation) (accessed 2026-10-30)
- OrcaSlicer wiki, Jerk XY (jerk definition, JD = 0.4 × Jerk² ÷ Accel) (accessed 2026-10-30)
- UltiMaker Cura 5.13.0, fdmprinter.def.json (Enable Jerk Control, Print Jerk 20, Travel Jerk 30) (accessed 2026-10-30)
- CuraEngine 5.13.0 source, gcodeExport.cpp (jerk written as M205 X Y) (accessed 2026-10-30)