bUltimaker: Build Ultimaker firmware

Online firmware compiler for your Ultimaker Original printer

About bUltimaker

bUltimaker helps you generate a tailored firmware for your Ultimaker Original/Original+ printer.
The main objective is to provide a firmware as close as possible to the official firmware distributed by Ultimaker, the only differences being the selected features.
The primary focus is on stability and compatibility with the official Ultimaker firmware.

Experimental branch

You are using the experimental branches of the builder and the firmware.

Basic configuration

Selecting a printer here will generate a default Ultimaker Firmware for this printer (as distributed with Cura)

  • Selecting a printer will (re-)set all fields in the next sections to their default value
  • An "{{profiles[1].label}}" and an "{{profiles[2].label}}" are different printers -- they do not have the same motherboard!
  • The "{{profiles[1].label}}" selection is for the official Ultimaker heated bed kit only. For a self-built heated bed, select "{{profiles[0].label}}" and specify your heated bed sensor type in the Expert section.

Differences from the official Ultimaker firmware

Although this firmware is very close to the official Ultimaker firmware, there are a few differences even if you do not select any option:

Extra configuration

Changing something in this section will generate alternative Ultimaker Firmware for your {{umSelect.label}} (as distributed with Cura)

This is for the experimental dual extrusion kit as sold by Ultimaker

115200 is provided for historical reasons, use only if your host software cannot do 250000.

Advanced configuration

About the Advanced section

Changing something in this section will generate a Custom Firmware.
This firmware may not run on your {{umSelect.label}} if you select a wrong hardware component!

Features are grouped by topic of interrest (Controller, Fans, ...) and typically have an information label:


Display the fan percentage at the start of the status line. Selecting this will truncate any message on the status line to 14 characters.

Whatever you prefer! The Marlin beep sound is higher and shorter than the Ulticontroller default one. Undecided? Look at this short video!

Some displays have the rotary knob inverted. Use this option to get it right.

If you are using OctoPrint or Pronterface it will allows you to Pause/Resume prints from your controller. See here for more information.

Delay before returning to status page when idle in menus


Note that this is the absolute maximum. The highest selectable temperature is 15°C lower (So 260°C by default)


Printing at high temperatures requires special hot-end; stock Ultimaker hot-end will be damaged when printing too hot.


Printing at high temperatures requires special hot-end; stock Ultimaker hot-end will be damaged when printing too hot.

This feature allows you to override or tweak hot-end and bed temperatures as well as fan speed.
So you can print a GCode file with different temperature or fan settings


Activate the fan kickstart option. From Marlin sources: when first starting the main fan, run it at full speed for the given number of milliseconds. This gets the fan spinning reliably before setting a PWM value.

Defines the minimal speed for the main fan, run in PWM mode. This is a PWM value (0-255), not a percentage!

Original Ultimaker firmware is using Fast PWM to control the fan. In some cases high PWM frequencies interfere with the temperature sensor, in particular with a thermocouple. If your get erratic temperatures at low fan speed, try disabling option.

If your UMO+ has an Ultiboard 2.1.4 or newer, the hot-end fan is driven by the hot-end temperature.
Check the following option if you have retrofitted a fan on your hot-end.


Motor direction might need adjustment in direct drive configuration.
(Note that inverted X and Z axis is the default configuration on Ultimaker Original!)

If you upgrade the standard MXM pulleys by GT2 ones, don't forget to select this, as they do not have the same diameter!

Enable filament runout sensor. Additional hardware required! If you enable this and do not have a sensor you will not be able to print...

Pin used by the sensor


Ultimaker uses Normally Open (NO) switches for the endstops. Use this option if you use a Normally Closed (NC) switch for the Z stage.

With software endstops the limit switches are only used for homing. This option is required for the software bed leveling option (see below)

With the software adjustable bed leveling you can adjust your bed level in the same way the Ultimaker2 does. This is only possible if you either home the Z stage at the bottom (Like the UM2 does) or you replace the top switch by a switch/sensor which allows you to home under the zero position.
More information in this video

Important: this feature is a user interface for the M206 G-code command (Offset axes).
The Z-offset value is saved in EEPROM and will remain active even when you install another firmware.
If you want to go back to a firmware without software adjustable bed leveling, reset the offset before flashing a newer firmware. Alternatively you can issue the following G-code with your new firmware:

M206 Z0 ; Reset Z-Offset
M500    ; Save to EEPROM

(Restore failsafe on the controller will also reset the offset, but then you will also loose any other parameter previously saved)

Homing hits the endstop, then retracts by this distance, before it tries to slowly bump again. If Z homing is done at the top but under zero the retract parameter must be high enough to ensure it retracts under the switch/sensor.

Build Firmware

Firmware source information

Communication error


The build will most probably fail...

Repository: {{info.repo}}
Branch: {{info.branch}}
Last tag: {{info.tag}}
Last commit: {{info.shortHash}} authored {{info.authorDate}}:



Build firmware Download firmware

Build completed

Firmware MD5 hash: {{buildMd5}}

Build error

Something went wrong during compilation.
Review the logfile and try again later...

Communication error

Something went wrong when communicating with the server.
Error status: {{httpErrorStatus}}
Error message: {{httpErrorData}}
Please try again later...

Build log