# Marlin — Open-Source 3D Printer Firmware > Configure and build Marlin firmware for FDM and resin 3D printers with support for auto bed leveling, linear advance, and thermal runaway protection. ## Install Save as a script file and run: # Marlin — Open-Source 3D Printer Firmware ## Quick Use ```bash # Clone Marlin git clone https://github.com/MarlinFirmware/Marlin.git cd Marlin # Edit Configuration.h for your printer # Build with PlatformIO: pio run -e mega2560 # Or for 32-bit boards: pio run -e STM32F103RE_creality ``` ## Introduction Marlin is the most widely used open-source firmware for FDM 3D printers and CNC machines. It runs on 8-bit AVR and 32-bit ARM boards, providing precise stepper motor control, thermal management, and G-code interpretation with extensive configuration options for virtually any RepRap-style machine. ## What Marlin Does - Interprets G-code commands to coordinate stepper motors, heaters, and fans - Supports auto bed leveling with BLTouch, inductive, and capacitive probes - Implements thermal runaway protection and safety features for unattended printing - Provides an LCD/touchscreen UI for on-printer control and SD card printing - Handles kinematics for Cartesian, Delta, CoreXY, SCARA, and polar machines ## Architecture Overview Marlin runs as a single firmware image on the printer control board. The motion planner converts G-code moves into a look-ahead buffer of trapezoidal velocity segments. Stepper ISRs generate precise step pulses using hardware timers. The temperature manager runs a PID loop for hotend and heated bed control. On 32-bit boards, Marlin uses a HAL layer to abstract hardware differences across STM32, LPC, and ESP32 platforms. ## Self-Hosting & Configuration - Clone the repository and copy the example configuration for your printer model - Edit Configuration.h for board type, stepper drivers, bed size, and probe settings - Edit Configuration_adv.h for linear advance, junction deviation, and input shaping - Build with PlatformIO CLI or VS Code with the PlatformIO extension - Flash via SD card, USB-DFU, or serial bootloader depending on the board ## Key Features - Linear Advance for pressure compensation and cleaner corners - Input Shaping to reduce ringing artifacts at higher print speeds - Unified Bed Leveling with mesh-based compensation across the build surface - Multi-extruder support including mixing, switching, and IDEX configurations - Host action commands for OctoPrint and Klipper integration ## Comparison with Similar Tools - **Klipper** — Offloads computation to a host Raspberry Pi for higher step rates; Marlin runs entirely on the printer MCU with no external dependency - **RepRapFirmware** — Feature-rich with web interface and runtime configuration; Marlin has broader board support and a larger configuration database - **Smoothieware** — Optimized for 32-bit LPC boards; Marlin supports both 8-bit and 32-bit with wider hardware coverage - **grbl** — Focused on CNC milling; Marlin adds 3D printing features like temperature control, bed leveling, and filament sensors ## FAQ **Q: Should I use Marlin or Klipper?** A: Marlin works entirely on the printer board with no extra hardware needed. Klipper requires a Raspberry Pi but offers faster kinematics and runtime configuration changes. Both produce excellent print quality. **Q: How do I find the right configuration for my printer?** A: Check the Configurations repository on GitHub, which contains pre-made configs for hundreds of printer models. Start from the closest match and adjust. **Q: Can Marlin run on 8-bit boards?** A: Yes, though some features (input shaping, S-curve acceleration) require 32-bit boards due to processing constraints. **Q: How do I enable auto bed leveling?** A: Define your probe type and pin in Configuration.h, set probe offsets, enable one of the leveling systems (bilinear, UBL, or mesh), and run G29 before printing. ## Sources - https://github.com/MarlinFirmware/Marlin - https://marlinfw.org/docs/ --- Source: https://tokrepo.com/en/workflows/asset-901e4041 Author: Script Depot