Suitable for:
 - Ender 3 with 8 bit mainboard
 - Ender 3 Pro with 8 bit mainboard

Ender3-Stock-<date>.hex - Stock Marlin firmware for the Ender 3
 - Includes SD Card Support
 - Thermal Runaway Protection Enabled
 - Adds G002 / G003 Arc support
 - Adds G010 / G011 Firmware based retraction (Use M207, M208, M209 to configure)
 - Added support for Meatpack (2020-01-27 onwards)
Name Downloads Size Modified
.. (Parent Directory) -- -- --
Ender3-Stock-20261115.hex 2 321.17 KB Membership Required
Changelog
commit 1d89f1c9155537bb63d213fc285d2c9c98378361
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sat Nov 14 02:16:07 2026 -0600

    🐛 MMU3: Fix Eject error screen and Filament Change menu timeout (#28827)
    
    * 🐛 MMU3: Don't select Retry for errors that have no Retry
    * 🐛 MMU: Keep the Filament Change menu on screen

commit 2914bfc311f928ac038d146e94a6c8e533ef00b4
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Nov 13 23:49:09 2026 -0600

    ✨ CAN bus for STM32, with Klipper toolhead discovery (#28847)
    
    * 🔨 Allow the CAN HAL module in STM32F4 variants
    * 💡 RS485_SERIAL is for RS485 devices
    * ✨ CAN bus for STM32
    * ✨ CAN pins for BigTreeTech boards
    * ✨ M960 CAN bus status and Klipper node discovery
    * ✅ CAN bus CI tests

commit 1e201e4cc91e498a9351c6271c6bb32139acefaf
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Nov 13 22:18:36 2026 -0600

    📝 Update E4d@box link

commit 5167aaa714112e4b12fa492dc0a75f5d78a23c3e
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Nov 13 04:01:45 2026 -0600

    🚸 Rename, explain probe conditionals

commit 2c50a335feaccae8447cd7afdf1c3388296bb1b5
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Nov 13 03:59:19 2026 -0600

    🐛 Fix probe pin with SPI sensorless Z
    
    Since aac19b5eb8 `NEED_Z_MIN_PROBE_PIN` also depended on `Z_SPI_SENSORLESS`, which became defined early enough to matter. A real probe on its own `Z_MIN_PROBE_PIN` combined with SPI sensorless Z homing then got no `USE_Z_MIN_PROBE`, set `HOMING_Z_WITH_PROBE` and lost sensorless Z homing. SPI sensorless Z is already excluded from `USE_Z_MIN`, and `Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN` is rejected with it, so the probe pin only depends on the latter option.
    
    Extend test mega2560ext/config-06 with a fixed probe and SPI sensorless Z.

commit 74400ae0f74d8ae8b3d7760f9c8f8c96f877b96d
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Sat Nov 14 00:28:07 2026 +0000

    [cron] Bump distribution date (2026-11-14)
Ender3-Stock-20261114.hex 0 321.17 KB Membership Required
Changelog
commit ff1550e067fe02af311aa24d458d28b07d39056f
Author: Kwon GuHyeon <127847761+guhyun9454@users.noreply.github.com>
Date:   Sat Nov 14 06:26:04 2026 +0900

    🐛 Keep MKS WiFi upload names that fit 8.3 (#28842)
    
    Without LONG_FILENAME_WRITE_SUPPORT, longName2DosName() appends "~1" after the 5th character of every name, so an upload named GECKO.GCO is stored as GECKO~1.GCO although it fits 8.3. Names that share their first 5 characters (PD30B8.GCO, PD30B9.GCO) map to the same file, and the later upload overwrites the earlier one (O_TRUNC).
    
    Keep up to 8 characters before the dot, and cut only a longer name to 6 characters plus "~1".

commit 6af31f8cf9a777c6cdeb62fc1163231c2e1a68e7
Author: Segundo Schmidt <segundoschmidt@gmail.com>
Date:   Fri Nov 13 18:20:39 2026 -0300

    🐛 Ensure mksWifiFileBuf word alignment (#28840)
    
    Without TFT_LVGL_UI, mksWifiFileBuf is a plain uint8_t array and can land at an odd address. write_to_file() hands it to MediaFile::write() 512 bytes at a time, and SdBaseFile::write() passes full blocks straight to the SDIO DMA, which needs a word-aligned address. On STM32F4 this corrupted the first byte of every 512-byte block of uploaded files (written as 0x00), producing bogus coordinates and erratic moves when the file was printed.

commit 9071a2deeac7aac3298dc899ff386998ca8804dc
Author: Kwon GuHyeon <127847761+guhyun9454@users.noreply.github.com>
Date:   Sat Nov 14 06:13:52 2026 +0900

    🐛 Set MKS UI print state to IDLE when an SD print finishes (#28841)
    
    With the MKS LVGL UI, uiCfg.print_state stays WORKING after an SD print finishes. Only the OK button of the finish dialog sets it back to IDLE.
    
    Until the button is pressed, the MKS WiFi module is told the printer is still printing (M997 PRINTING). The module then answers /upload with 409 Conflict, and the board ignores M23/M24 from WiFi, since both need IDLE. When printing remotely there may be nobody at the printer to press the button.
    
    Set the state to IDLE when the finish dialog is shown.

commit 3077ff21cd943095e6af56d554e08462796855f6
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 13 22:29:43 2026 +1300

    🚸 Update TEMP_STAT_LEDS during autotune (#28825)

commit 00949f4a3d832aa4943f7aaf1cf1a8f3ad176817
Author: Segundo Schmidt <segundoschmidt@gmail.com>
Date:   Fri Nov 13 03:48:13 2026 -0300

    STM32 SDIO DMA: Detect transfer errors, prioritize over TFT (#28836)
    
    The HAL sets State=READY even when a transfer is aborted on error (RX overrun, data CRC fail, data timeout), so a failed block read was reported as success. Check hsd.ErrorCode at the end of SDIO_ReadWriteBlock_DMA so callers can retry. Raise the SDIO DMA priority to VERY_HIGH so it outranks the FSMC TFT DMA (HIGH) sharing DMA2 on STM32F4; the tiny SDIO FIFO overruns when starved.

commit 05233b7c17b981c58b68175d21d6b6ced798ab63
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Nov 13 00:25:22 2026 -0600

    🐛 MarlinUI: Fix static line skipping in menus (#28832)

commit eb320089d2b9349118ed19f6ccd307e693ae6192
Author: Segundo Schmidt <segundoschmidt@gmail.com>
Date:   Fri Nov 13 03:21:55 2026 -0300

    🚸 Fix and explain MKS-compatible M105 report (#28838)
    
    The M105 reply builder advanced its write pointer by fixed widths, so the " T1:" label was overwritten as soon as any reading had two or more digits (e.g. "T0:27 /0 T10 /0"). Build the report with a single snprintf instead.
    
    Also reply to M105 with "ok T:..." on one line, like Marlin's serial reply. The MKS WiFi firmware passes such lines through verbatim, but handles lines starting with "T:" itself (M991 status polling). With the separate "ok" and "T:..." lines, network clients (e.g. the Cura MKS WiFi plugin) only received the bare "ok" and showed no temperatures.

commit 447f180a42178dfb5f4df23ac249436c168254ef
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Fri Nov 13 00:29:03 2026 +0000

    [cron] Bump distribution date (2026-11-13)
Ender3-Stock-20261113.hex 0 318.87 KB Membership Required
Changelog
commit 2ee67a7737fd243f75a60b9da86331c1ecc10c66
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 12 14:31:51 2026 -0600

    ✨ Mixing Extruder with FT Motion (#28829)

commit 37d06314fe53085d1d2252364fd8db007ed122cb
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 12 14:22:50 2026 -0600

    🐛 Fix M166 S0, I, J and the report of every mixing component (#28831)
    
    * 🐛 Fix M166 S0, and report every mixing component
    * 🐛 M166: I and J are limited to the last V-tool

commit 05eab9b0232b4595a802c51dbac3a3b5f4181c50
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 12 00:31:08 2026 +0000

    [cron] Bump distribution date (2026-11-12)

commit 773f63553d49264f2ac73d9acfed75abb89b6f01
Author: Ryan Erickson <rerickson1@users.noreply.github.com>
Date:   Wed Nov 11 18:23:25 2026 -0600

    🐛 Preserve MMU3 load-to-nozzle distance compensation (#28828)
    
    Apply the extra-load offset directly to the first extrusion segment.\n\nPlanner-relative E moves no longer honor the logical E-position shift\npreviously used to shorten that segment. Keep the remaining load steps\nand the ramming sequence unchanged.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ender3-Stock-20261112.hex 2 318.87 KB Membership Required
Changelog
commit 58fa15c50682e1c632218d6e9cea670af427b50b
Author: Ryan Erickson <rerickson1@users.noreply.github.com>
Date:   Wed Nov 11 14:16:07 2026 -0600

    🐛 Fix MMU3 E moves with UBL (#28783)

commit 54197a8f4c8f46bfd7f1f329b13383639fc92391
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Wed Nov 11 18:30:53 2026 +1300

    🔨 Reduce flash size 2k on STM32F103RE_creality / GD32F303RE_creality_mfl (#28530)

commit 06a5000e5054e637a84121176bf94dbc20f08bf4
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 10 22:39:53 2026 -0600

    🐛 Ender-5 S1: Reserve the bootloader's EEPROM bytes (#28822)

commit a4524489455eeac6d8472bef06dad2746fa627b4
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 10 21:54:53 2026 -0600

    ✨ LEVELING_HEAT_SOAK_TIME (2)
    
    Followup to #28520

commit 343043032bcd380c8a3729f1889bfcae714673a3
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 10 21:13:47 2026 -0600

    🐛 CREALITY_RTS build without PID heating (#28815)

commit d33131f4dde908ef140306a8fc1417de52c40fd5
Author: Kwon GuHyeon <127847761+guhyun9454@users.noreply.github.com>
Date:   Wed Nov 11 12:12:24 2026 +0900

    🐛 Fix MKS WiFi dropping G-code lines without an ok (#28820)
    
    wifi_gcode_exec() copies a G-code line from the MKS WiFi module into espGcodeFifo only when espGcodeFifo.wait_tick > 5. get_wifi_commands() sets wait_tick to 0 each time it moves data from espGcodeFifo into the command queue, then adds 1 per call. A line that arrives before six more calls is dropped: it isn't stored, no ok is sent and need_ok_later isn't set. A host that waits for ok before each line stops there, and a host that doesn't wait loses the line.
    
    Store the line whenever espGcodeFifo has room for it. The space check and the deferred ok (need_ok_later) are unchanged. get_wifi_commands() still uses wait_tick to pace moving the buffer into the queue. There a line that waits stays in the buffer, so nothing is lost.

commit def0a6088ab67a29dd120a571f6f05b47c8e0526
Author: Kwon GuHyeon <127847761+guhyun9454@users.noreply.github.com>
Date:   Wed Nov 11 12:11:19 2026 +0900

    🐛 Fix MKS WiFi M27 always reporting 0% (#28821)
    
    The MKS WiFi module asks the board for the print progress with M27. wifi_gcode_exec() answers with MKSW_TOTAL_SEND (uiCfg.totalSend with the LVGL UI, mksWifi.totalSend without it). Nothing writes that field, so the module always shows 0%.
    
    Answer with card.percentDone() instead, and remove the unused totalSend field.

commit a58929e474ffc9a357f4aa26e02d22402018047b
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Wed Nov 11 00:30:03 2026 +0000

    [cron] Bump distribution date (2026-11-11)

commit df842e1159f4f63db73f8469f34e6c72e44a9145
Author: Kwon GuHyeon <127847761+guhyun9454@users.noreply.github.com>
Date:   Wed Nov 11 09:29:08 2026 +0900

    🐛 Fix MarlinSPI leaving SPI DMA requests enabled (#28819)
    
    MarlinSPI::dmaTransfer() and dmaSend() set RXDMAEN/TXDMAEN in SPI CR2. When the transfer is done they abort and deinit the DMA channel but leave the request bits set.
    
    On STM32F1 a DMA channel serves the requests of every peripheral mapped to it. An idle SPI2 has TXE set, so it keeps requesting on DMA1 Channel 5, which the MKS WiFi module also uses for USART1 RX. When a WiFi file upload starts, that DMA transfer completes at once with no data: the ESP answers "ERROR 500: NO DATA RECEIVED" and the board stops answering the module. With TFT_LVGL_UI on an MKS Robin Nano the UI reads its images from the SPI flash on SPI2 with dmaTransfer(), so every upload fails.
    
    Clear the request bits after the transfer, as TFT_SPI::abort() already does for the TFT.

commit 5bbd466a7b20a770f06a87742388641059b0fda7
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 10 17:26:03 2026 -0600

    🧑‍💻 Tweak STM32 TFT BaudRatePrescaler save/restore

commit dc81c9f7422d230f17648f53110d1f9998072854
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Wed Nov 11 12:15:18 2026 +1300

    ✅ Fix MKS Robin Nano V2 MKS WiFi test (#28818)
Ender3-Stock-20261111.hex 2 318.87 KB Membership Required
Changelog
commit 31851a85d85362ae605fbdcbe4f064753bc2d652
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Mon Nov 9 21:54:31 2026 -0600

    📝 Fix Teensy 4.x memory sizes in AGENTS.md (#28817)

commit 96b2f48071fc67ee988928e8b560b93ac9b725b0
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Mon Nov 9 20:44:24 2026 -0600

    🐛 Include pause.h for UI abort of a parked SD print (#28816)

commit 99e331dc4fefe3c99af4b5d47dc97c3d56651d33
Author: SpankyDevil <75092373+SpankyDevil@users.noreply.github.com>
Date:   Tue Nov 10 15:42:51 2026 +1300

    🩹 Return to Pause after MMU eject (#28813)

commit e803111767db919283c8b31e9390e81299ca9a14
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Tue Nov 10 15:09:25 2026 +1300

    🔧 Delta sanity checks (#28692)

commit af4dec82c7741fbfbd6d49f268c959325b5b24f9
Author: narno2202 <130909513+narno2202@users.noreply.github.com>
Date:   Tue Nov 10 01:28:39 2026 +0100

    🩹 Disable FTM_MINIMUM_CRUISE_RATIO during resonance test (#28814)
    
    Followup to #28313

commit af23374bedf2a632098e0811ef22ddf96dda3e5f
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 10 00:27:28 2026 +0000

    [cron] Bump distribution date (2026-11-10)
Ender3-Stock-20261110.hex 0 318.87 KB Membership Required
Changelog
commit b3f2ff029d3ce83a33c0f48e1d0d3a891a43ff40
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Mon Nov 9 16:57:30 2026 -0600

    🚸 One less EEPROM reset on load error

commit 77a557725e575d30e1b8fd6b073e7da0c550b1a5
Author: lucas <268448976+aslucas-dev@users.noreply.github.com>
Date:   Mon Nov 9 18:16:13 2026 -0300

    🐛 Fix MKS WiFi M23 long filename (#28811)
    
    A file uploaded over WiFi is written under its sanitized name (8.3 when LONG_FILENAME_WRITE_SUPPORT is off), so "test-file.gcode" is stored as TEST-~1.GCO. M23 maps the long name to that form only while file_writer.fileTransfer is set, but stopEspTransfer() clears file_writer at the end of every upload, so "M23 test-file.gcode" always fails with "file.open failed". Hosts that upload and then select the file by the same name, like the Cura MKS WiFi plugin, can't start the print.
    
    If the name as given isn't found, try its sanitized form.
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit c14123a4e4db4b1271ebe186ce138a0a3dbc2d89
Author: SpankyDevil <75092373+SpankyDevil@users.noreply.github.com>
Date:   Tue Nov 10 10:14:11 2026 +1300

    🩹 Use active MMU slot for eject action (#28812)

commit c49ded2963d6c47adc65a6c5943e269ccfab223a
Author: David Buezas <dbuezas@users.noreply.github.com>
Date:   Sun Nov 8 21:50:03 2026 -0300

    ✨ FTM_MINIMUM_CRUISE_RATIO (#28313)

commit 585c575aa026f6839ebb9477fa8d5a85e553a9cb
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Mon Nov 9 00:31:23 2026 +0000

    [cron] Bump distribution date (2026-11-09)
Ender3-Stock-20261109.hex 0 318.87 KB Membership Required
Changelog
commit bc8ff4a54b38fd5360a0f8fa9b8cfe7f119e2071
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 8 15:24:30 2026 -0600

    ✅ HAL for Artery Technology AT32F403 (Wanhao 0327001) (#28488)
    
    Co-authored-by: Andy Rexx <299255+cyberman@users.noreply.github.com>

commit 8bf528ddcd7965aa2bf97fcbb5c5a2e2183a1e40
Author: Media3 <mark304188@hotmail.com>
Date:   Mon Nov 9 05:21:53 2026 +0800

    ✨ Anycubic Kobra 2 Neo board (TriGorilla Gen V4.0.1) (#28769)
    
    Co-authored-by: ellensp <530024+ellensp@users.noreply.github.com>

commit e40156f42282852cea9d4abbffed8a713fb03459
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Mon Nov 9 10:20:22 2026 +1300

    ✨ ESP32 Bluetooth serial port (#28747)

commit 2d554582dd65203c1085b5f648ac6112cdce94c3
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 8 14:40:41 2026 -0600

    🚸 Wider menu label threshold

commit 9da6a9e3d95efea544c69dd77330426fa94c1143
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 8 14:36:39 2026 -0600

    🐛 MMU3: Reload the slot that ran out, and return to the menu after Unload (#28808)

commit c7fdf41ca043cada476779a63c4c119a644739c9
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 8 14:33:54 2026 -0600

    🐛 Purge More with no purge length (#28809)
Ender3-Stock-20261107.hex 0 318.66 KB Membership Required
Changelog
commit cb555a49f8eb9c4cb9f337bb0b38960a6736a03e
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 18:00:02 2026 +1300

    📝 Update ESP32 notes on how TMC serial ports are started (#28807)
    
    Now `tmc_hw_serial_begin` starts them instead of `init_board`

commit faad0eddb6fdc15ee66c981f9626a48b8e4be85e
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 17:48:41 2026 +1300

    🔨 Enable LTO for STM32F070RB_malyan (#28750)

commit 7476c730e1c14fd8f1c6976bccc163213b25de7b
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 17:48:05 2026 +1300

    ⬆️ MKS DLC32 V2.1: espressif32 6.1.0 (arduino-esp32 2.0.7) (#28718)
    
    * ⬆️ MKS DLC32 V2.1: espressif32 6.1.0 (arduino-esp32 2.0.7)
    
    Move mks_dlc32_v2_1 from espressif32@2.1.0 (arduino-esp32 1.0.4) to espressif32@6.1.0 (arduino-esp32 2.0.7, ESP-IDF 4.4, GCC 8.4).
    
    - Declare the board's 8 MB flash. The esp32dev header says 4 MB while the env uses default_8MB.csv, and the ESP-IDF 4.4 bootloader rejects a partition table larger than the declared flash and resets in a loop.
    - With TOUCH_BUTTONS_HW_SPI the touch pins belong to the SPI bus the TFT has already started. XPT2046::init() no longer sets them with pinMode(), which on arduino-esp32 2.x routes them back to GPIO and cuts them off the bus, leaving the TFT showing garbage and touch dead.
    - Add the board to the CI build matrix, with a TS24-R touch screen test.
    
    * 🔧 Label the MKS DLC32 env with its ESP-IDF version

commit aa756a7b4bb7edaf4cdd85a77630bf0870d5129c
Author: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com>
Date:   Thu Nov 5 20:44:32 2026 -0800

    🔧 Require USB flash drive env for STM32 USE_OTG_USB_HOST (#28681)

commit 3d8d21e1e735ca8f34b941e9c2d72fab74c95a44
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 22:40:02 2026 -0600

    🐛 MMU3: Report a command the MMU keeps rejecting (#28806)

commit b0b0d9859d1df885057fcb04d65adc3ec464a4df
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 22:39:32 2026 -0600

    🐛 Fix schema.py inline block comment swallowing #endif (#28805)
    
    A /* ... */ comment that opens and closes on one (joined) line began a block comment that never closed, swallowing following lines including #endif/#else. Conditions then leaked onto later options (e.g., HAS_CHAMELEON). Strip same-line block comments before comment-start detection; add buildroot/tests/schema-test.py.

commit d76c69383d83c58688eda4e6a7201589ac53e68e
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 22:38:44 2026 -0600

    🐛 MMU3: Choose the slot to load in the Filament Change menu (#28804)

commit a492b5fb8d1d11ae9aa6468ae0531967ddf064ad
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 21:35:41 2026 -0600

    🐛 MMU3: Tighten the FINDA runout conditions (#28803)
    
    * 🐛 MMU3: Only check the FINDA runout during an active print
    * 🐛 MMU3: Don't require leveling for the FINDA runout

commit 9b57d31282fde034173745814a7064285a84e18d
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Fri Nov 6 00:29:41 2026 +0000

    [cron] Bump distribution date (2026-11-06)
Ender3-Stock-20261106.hex 2 318.66 KB Membership Required
Changelog
commit de15c7b9d4e4485cd05ed857ef8b74bd2c4de7d0
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 12:33:42 2026 -0600

    ✨ Switching Toolhead docks at either end of Y (#28802)
    
    * ✨ Switching Toolhead docks at either end of Y
    * 🦺 Warn when a Switching Toolhead slide reaches the next dock
    * ✅ Test Switching Toolheads with docks at the front and rear

commit 69fb296f731bb40d9df4a237aec3758d566e865f
Author: Novin3dp <hamidshahsavancloud1@gmail.com>
Date:   Thu Nov 5 22:02:54 2026 +0330

    ✨ Galaxy UI for 480x320 touch screens (#28702)
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit 98df59810db6d8495017165474fa09430fa18b9e
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 12:22:14 2026 -0600

    🐛 Engage the electromagnetic toolhead at the new dock (#28801)

commit b4d46c3cd2b7ca56e6b4d08ba541cbbc5f29f890
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 07:09:44 2026 +1300

    🐛 Fix MAX31865 invalid pin write and ESP32 SD pin clash (#28797)
    
    On hardware SPI, spiBeginTransaction() wrote to sclkPin, which holds the "no pin" value. On arduino-esp32 2.x each write logs an error on the host serial port.
    
    Software SPI on the SD card's pins reads all ones on ESP32 and halts at boot with MINTEMP, so make that a sanity-check error.

commit dcdd959051f4dd5332d5cf00555dc13f836ce642
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 07:09:06 2026 +1300

    🐛 Start ESP32 TMC serial once, on the board's pins (#28796)
    
    tmc_serial_begin() started UART1 on the core's default pins, then init_board() started a local copy on the board's pins. From arduino-esp32 2.x the local's destructor ends the UART, leaving TMC with no port. On 1.0.4, GPIO 10 stayed routed to UART1 TX.

commit b69948b5f870a03b79f69b82c87661bd7de11cdf
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Fri Nov 6 07:06:56 2026 +1300

    🚸 Power-loss resume prompt on FTDI EVE and PanelDue (#28794)
    
    M1000 S calls ExtUI::onPowerLossResume(), which did nothing on these displays, so a print couldn't be resumed or cancelled from them. FTDI EVE gets a Yes/No dialog, and PanelDue a Resume/Cancel message box.
    
    M1000 S also tells the host how to resume or cancel on all ExtUI displays, since Marlin can't tell whether a display shows a prompt.

commit 00c414af68ccfc47674890c6a2eaa09422226f05
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Thu Nov 5 00:29:49 2026 +0000

    [cron] Bump distribution date (2026-11-05)
Ender3-Stock-20261105.hex 0 318.66 KB Membership Required
Changelog
commit 96b799b8800992af23decae3e4e60c33893ea4b5
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Nov 4 16:47:34 2026 -0600

    🐛 Fix FT_MOTION build with multiple languages (#28793)

commit 06a43df7d5ecf57f6a493d3ac331c7b619592909
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Thu Nov 5 11:24:06 2026 +1300

    🧑‍💻 FSMC colour TFT in the simulator (#28761)
    
    The simulator has no FSMC bus. Its SPI bus hands each byte to the panel model with the DC level, so an FSMC panel can be driven as an SPI panel: the sim HAL's tft_fsmc.h is tft_spi.h, and the simulated board maps FSMC_CS_PIN / FSMC_RS_PIN onto the TFT CS and DC pins.

commit 42a07bc48dd71a2171d39188560ee3dbb3b23a45
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Thu Nov 5 11:22:48 2026 +1300

    🐛 Fix M110 with no serial port (#28798)

commit be4148bc069fc4d1d60cac92996663cf97a40130
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Nov 4 16:19:36 2026 -0600

    🐛 Fix MMU3 Spool Join slot wrap (#28800)

commit 9b0e2d2684b8cc3b879a920bbac00bb42efeaf98
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Wed Nov 4 16:17:19 2026 -0600

    🐛 Fix MMU3 FINDA runout hang and purge (#28799)

commit 9605b4308c9b9941471fac89404e5d17d005e8eb
Author: SpankyDevil <75092373+SpankyDevil@users.noreply.github.com>
Date:   Wed Nov 4 14:37:58 2026 +1300

    🚸 About > MMU Firmware version (#28788)

commit f52dd8bb7344f6ed833ddcbd3b92a5813742e11b
Author: Mihai <299015+mh-dm@users.noreply.github.com>
Date:   Wed Nov 4 03:31:28 2026 +0200

    ⚡️ Guard `time_spent_in/out_isr` with `MULTISTEPPING_LIMIT > 1` (#27147)
    
    * Guard time_spent_in_isr, time_spent_out_isr with MULTISTEPPING_LIMIT > 1
    * Fix build with RESONANCE_TEST when MULTISTEPPING_LIMIT is 1 (or OLD_ADAPTIVE_MULTISTEPPING), where time_spent_in/out_isr are no longer declared.
    
    Co-Authored-By: Scott Lahteine <thinkyhead@users.noreply.github.com>

commit ddcccc1263510fad5b7d372e471a3f157e1abca5
Author: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com>
Date:   Tue Nov 3 17:29:36 2026 -0800

    🩹 Fix RP2040 sensorless homing, servos, and M997 (#28566)
    
    * 🩹 Fix RP2040 sensorless homing and servo builds
    * 🩹 Fix RP2040 M997 bootloader entry
    * ✅ Add SKR Pico NeoPixel / servo / sensorless test

commit 5b6d22eed84a0a098896d5c8aebeb8dbd25f8ba2
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 3 19:18:56 2026 -0600

    🧑‍💻 Update axis-oriented inline macros

commit 1c204b77c916bb16b59aeb765bdca4e0fd180efa
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Wed Nov 4 00:28:41 2026 +0000

    [cron] Bump distribution date (2026-11-04)
Ender3-Stock-20261104.hex 0 318.66 KB Membership Required
Changelog
commit 02a182c0f479b24323579e344119877d257a315a
Author: DerAndere <26200979+DerAndere1@users.noreply.github.com>
Date:   Tue Nov 3 23:04:59 2026 +0100

    ✅ Ignore compile_commands.json (#28764)

commit 03421f019ac992c16ee0587669a3a2523097646d
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 3 15:55:12 2026 -0600

    ✨ 3D Chameleon Mk4 filament changer (#24247)

commit 8e3150e9bb2dc133c3939122672c42756bbfa4c6
Author: Eminy <57416756+emincan2000@users.noreply.github.com>
Date:   Wed Nov 4 00:46:56 2026 +0300

    🌐 Update Turkish language (#28791)

commit 8fca522b3c9e170b3f1ea19e54a8387afd264edb
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Wed Nov 4 10:43:45 2026 +1300

    ✨ Creality Sermoon V1 / V1 Pro: board and stock touchscreen (#28623)

commit 5f92865ac00ca30463103358b35151e9651877a0
Author: lucas <aslucas.mail@gmail.com>
Date:   Tue Nov 3 17:34:06 2026 -0300

    🐛 Don't echo MKS WiFi temperature polls to the host (#28787)
    
    The MKS WiFi module sends M991 every 5 seconds. The handler replies to the module with the temperatures, then also enqueues an M105, whose "ok T:..." reply goes to the main serial port. A host on USB gets an unsolicited "ok" every 5 seconds, which can upset hosts that count "ok" replies to pace their commands.
    
    The module already has its reply, so don't enqueue the M105.
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit bfe4efb637559071b5721ea3ca9cb3d4cd1395f7
Author: lucas <aslucas.mail@gmail.com>
Date:   Tue Nov 3 17:30:42 2026 -0300

    🐛 Fix STM32F1 SDIO hang when the card is mounted again (#28785)
    
    On F4 and F7, SD_LowLevel_Init() resets the SDIO peripheral with __HAL_RCC_SDIO_FORCE_RESET() before HAL_SD_Init(). The STM32F1 HAL has no SDIO reset macro, so the F1 branch only enables the clock, and a new init starts from whatever state the previous one left.
    
    On an MKS Robin Nano V1.2 (STM32F103VE) this hangs until the watchdog resets the board: at boot, when manage_media() mounts the card that setup() has already mounted, and on every M21.
    
    On F1, write the SDIO registers back to their reset values before init.
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit 20e22dd0a59f36f78338e92a569fe152888154f7
Author: lucas <aslucas.mail@gmail.com>
Date:   Tue Nov 3 17:29:41 2026 -0300

    🐛 Fix MKS WiFi serial init leaving RTS/CTS on PA_0 (#28784)
    
    WifiSerial::init() sets the RX and TX pins but not pin_rts and pin_cts.
    The WifiSerial object is zero-initialized, so both stay at 0, which is PA_0. uart_init() rejects an RTS pin that maps to no U(S)ART and returns without starting the UART, so the board never hears the module.
    
    Set both to NC, which is also the default in HardwareSerial::init().
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit e286cc0525dea508ba374a6ab4862255f7b84017
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 3 14:28:49 2026 -0600

    🐛 Fix RESONANCE_TEST without FT_MOTION (#28792)
    
    * 🐛 Fix RESONANCE_TEST without FT_MOTION
    * 🚸 RESONANCE_TEST requires a 32-bit CPU

commit 9a200ec1f52240af298f6a1b5287033b6b966e46
Author: lucas <aslucas.mail@gmail.com>
Date:   Tue Nov 3 17:28:11 2026 -0300

    🐛 Fix MKS WiFi M20, M23 and M28 arguments (#28786)
    
    Since #28562, wifi_gcode_exec() reads the arguments of M20 <path>, M23 and M28 from mStr, which points at the "M" of the command, instead of from the first space after it. "M23 file.gcode" tries to open "/M23 file.gcode" and always fails with "file.open failed", so a print can't be started over WiFi. The old MKS UI code read them from the space, as spStr does now.
    
    Read the arguments from spStr, and skip M23 and M28 when there is none.
    
    Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

commit 1b5fc1a8888de334eec070159ddd5f995faf0dee
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Wed Nov 4 09:27:06 2026 +1300

    🐛 Fix MKS WiFi M998 file system argument (#28789)

commit 1baacc50e2dd97bb02d1b2fb160f696a17dd89a3
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Wed Nov 4 09:26:19 2026 +1300

    ✨ EMERGENCY_PARSER for ESP32 (#28790)
    
    The Arduino-ESP32 core keeps received UART bytes in its own interrupt, so a task on Marlin's core moves them into a ring buffer, passing each to the emergency parser. The WIFISUPPORT WebSocket port parses each received frame. With EMERGENCY_PARSER disabled the build is unchanged.

commit 6e03341e0436b076f8339f0f702be18a05f81522
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Tue Nov 3 00:28:44 2026 +0000

    [cron] Bump distribution date (2026-11-03)
Ender3-Stock-20261103.hex 0 318.66 KB Membership Required
Changelog
commit 54ac92ea14a952df577e9d4652c8ea237b05e8d2
Author: narno2202 <130909513+narno2202@users.noreply.github.com>
Date:   Mon Nov 2 23:52:00 2026 +0100

    🚸 Fix M920 HOMING_CURRENT output (#28519)

commit 3cfac53ba5d4724bf2dd4cc0ebe3ee02f4092671
Author: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com>
Date:   Mon Nov 2 14:50:28 2026 -0800

    🐛 Fix FYSETC 2.42" OLED on STM32 (#28682)

commit d84f78ad8de208c698ec33454570d2701b420f9f
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Tue Nov 3 11:49:14 2026 +1300

    🐛 Fix MKS_TEST endstop pin reads (#28687)
    
    Fix LOWSTATE macro expansion

commit eee9ce1d6b05325a047d404c058e0d95fc2e02fa
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Tue Nov 3 11:47:57 2026 +1300

    🐛 Fix RGB_LED write on non-PWM pins (#28709)

commit 30ba8bd702798fd3ef5f65e4c166abbf633f8710
Author: Eminy <57416756+emincan2000@users.noreply.github.com>
Date:   Tue Nov 3 01:46:49 2026 +0300

    🐛 Fix UI abort of an SD print parked by M125 (#28752)

commit d87ccd064970190af5e8522792f5bf7909590947
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Tue Nov 3 11:43:28 2026 +1300

    🐛 Fix ESP32 WebSocket serial output (#28762)

commit 688c23a20b85d7be2f6cc1edb78024e8005d3455
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Mon Nov 2 00:10:20 2026 -0600

    🤖  Bump the actions group (#28776)

commit c68a31a12cfd7eee5b4b4877f9973915618fdd5b
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 23:51:14 2026 -0600

    🐛 MMU3: Restore temperatures after Hotend Idle Timeout (#28778)
    
    * 🐛 MMU3: Restore temperatures after Hotend Idle Timeout
    
    If Hotend Idle Timeout lowered the hotend and bed targets while an MMU3 error was waiting for the user, Retry continued with cold targets and nothing heated them again.
    
    Remember the targets when the error starts and raise them again, waiting for the hotend, when the error is resolved. Also enable HOTEND_IDLE_TIMEOUT in the rambo config-05 test.
    
    * 🐛 MMU3: Ignore clicks while waiting for the hotend after Retry
    
    Retrying after a Hotend Idle Timeout showed a blank screen, and clicking again sent Retry to the MMU while the nozzle was still cold. The wait keeps the MMU loop running, so the second click on the still-active error menu was handled inside the wait.
    
    Show the status screen while heating and ignore the error screen buttons until the hotend is ready.

commit 1296a617f1388e6a1f6c5965e99589949a7228cf
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 23:50:34 2026 -0600

    🐛 Fix MMU3 status message buffer overflow (#28780)
    
    TryLoadUnloadReporter::DumpToSerial copied the whole status message into a buffer of LCD_WIDTH + 1 bytes. The message can be longer than the display width, such as a long machine name followed by "Ready.", so the copy overwrote the stack, including the return address. Limit the copy to LCD_WIDTH and clear the buffer.

commit b76848a1fa364b240e533bbdb242bf463def1e07
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 23:37:14 2026 -0600

    🐛 Preheat for MMU menu Load to Nozzle / Unload (#28772)
    
    With a cold nozzle the MMU menu's Load to Nozzle fed the filament while Marlin dropped the extruder moves (MMU3), and Unload was refused and retried forever (MMU2).
    
    Ask to preheat (first preset), show the heating on the Status Screen, then run the action. A click or M108 stops the wait and restores the old target. The CI tests for MMU2 and MMU2S now enable MMU_MENUS so the menu code is built.

commit 74957c5063b89be7935c8cc8cadb9c203c66bd23
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 22:47:46 2026 -0600

    🚸 Less MMU3 serial output (#28779)

commit 4f78d998feea95eeb821201fdf811b8b7e4568c7
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 21:21:31 2026 -0600

    🐛 Fix M43 pin direction and protect pins in the simulator (#28777)
    
    * 🐛 Fix M43 pin direction in the simulator
    * ✨ Protect simulator-owned pins from M43

commit 9286875f57eb1cae1c1380d2ad423d7cdd8baed1
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 18:33:39 2026 -0600

    🔧 Move PANELDUE above ExtUI

commit a31874f7ddc1ede037fb2ebfbfa39221b18ad720
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Mon Nov 2 00:31:14 2026 +0000

    [cron] Bump distribution date (2026-11-02)
Ender3-Stock-20261102.hex 0 318.66 KB Membership Required
Changelog
commit 74248a4eb8528af36e8bc905cb6294d33f88132c
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 14:24:14 2026 -0600

    ♻️ Simplify M43 pin loops and add pins debugging unit tests (#28775)
    
    * ♻️ Add PinsDebug::get_pin helpers to simplify M43
    * ✅ Add unit tests for pins debugging

commit ebf7cb88c5f841f64b0c703ee1b446749a251c3d
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 23:23:52 2026 -0500

    ♻️ Remove the PinsDebug compatibility layer

commit 9e2ed52cfd28f782d70c3330841fcf2b288cc764
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 23:23:52 2026 -0500

    ♻️ Convert STM32 pins debugging to PinsDebug

commit 535286c6ee507ceb64e6e88346ca33ff1253ef66
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 23:12:16 2026 -0500

    ♻️ Convert HC32, GD32 and STM32F1 pins debugging to PinsDebug

commit f58fb0c2738389aad8316670341ff745af00da64
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 23:11:21 2026 -0500

    ♻️ Convert AVR pins debugging to PinsDebug

commit 26939aded4552f1953dfd26d8ae904ea164de4ce
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 23:00:09 2026 -0500

    ♻️ Convert ARM, ESP32, RP2040 and Teensy pins debugging to PinsDebug

commit 05060cece5e0ddc74622f2ee0865502943e3b160
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 22:57:52 2026 -0500

    ♻️ Convert NATIVE_SIM and LINUX pins debugging to PinsDebug

commit bea388c0229d6bb7153d66e15ed0c6e7c50898c5
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 22:46:46 2026 -0500

    ♻️ Add PinsDebugBase to share pins debugging code

commit 8913808dbb80bb3f0b7e167ed99c1d3cf84ae8c4
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 01:50:40 2026 -0600

    ♻️ Share pins debugging accessors and print functions (#28773)
    
    * ♻️ Share pin table accessors in pins debugging
    * ♻️ Replace pins debugging print macros with functions
    * 🩹 Parenthesize Teensy isAnalogPin macros

commit 6f961514a4398b987683caf3f54c1963f5ed849a
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Sun Nov 1 20:07:49 2026 +1300

    🐛 Recover from a failed ESP32 OTA update (#28770)
    
    onStart pauses the stepper and temperature timers for the flash write. After a failed update they stayed paused: with no temperature readings the watchdog was never refreshed again, so the board reset 4 s after onError re-armed it, and heater PWM was frozen meanwhile. Restart the timers in onError.
    
    The OTA messages used Arduino's Serial, which Marlin never opens on ESP32, so they were dropped. Send them to the host serial port: start, progress every 10%, done, or the failure.

commit a7f13a8073e5ed4a0c94fa43202c2f2d40ce4296
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Sun Nov 1 00:35:26 2026 +0000

    [cron] Bump distribution date (2026-11-01)

commit 60da5d070ec57dc525642aaf5e632e1938835b84
Author: Media3 <mark304188@hotmail.com>
Date:   Sun Nov 1 07:21:23 2026 +0800

    📝 GD32_MFL: Update MFL Arduino Core repo URL (#28768)
Ender3-Stock-20261101.hex 0 318.66 KB Membership Required
Changelog
commit 22abaad533b0230397f3ef1bbb4798e3e02c1da0
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Sat Oct 31 17:13:24 2026 +1300

    ✨ BTT Octopus Pro V1.0.1 with STM32F446ZE (#28763)

commit 522076b552cc76216039f4cb498e3ba0438af16f
Author: Scott Lahteine <thinkyhead@users.noreply.github.com>
Date:   Fri Oct 30 21:32:55 2026 -0500

    🐛 Accept any MMU3 firmware patch level (#28766)
    
    Marlin required the MMU3 firmware to match exactly 3.0.2, so units flashed with 3.0.3 or 3.0.4 failed the version handshake and were never detected.
    
    Major and minor must still match. Any 3.0.x patch level is accepted, so older units keep working and nobody has to reflash their MMU to match Marlin. MMU_VERSION is now the minimum supported version (3.0.0).

commit bed4c24ce02a494d76659bb4ddd75c9aba6756ab
Author: ellensp <530024+ellensp@users.noreply.github.com>
Date:   Sat Oct 31 15:01:50 2026 +1300

    🐛 Keep ESP32 M43 off the flash and host serial pins (#28767)
    
    `M43 T` pulses every pin it isn't told to skip. On ESP32 that included GPIO 6-11, the SPI flash, which crashes the chip (watchdog reset), and GPIO 1/3, UART0, after which the host serial port stops working until a reset. Define M43_NEVER_TOUCH for them, as other HALs do for their serial, USB and oscillator pins.

commit 48fb2080c6e13633aed414d34488c762f3aef1d5
Author: thinkyhead <thinkyhead@users.noreply.github.com>
Date:   Sat Oct 31 00:28:34 2026 +0000

    [cron] Bump distribution date (2026-10-31)