Skip to content

@foosel foosel released this Nov 25, 2019 · 13 commits to rc/devel since this release

⚠️ Important note on release candidates

This is a Release Candidate of OctoPrint. It is not a stable release: severe bugs can occur, and they can be bad enough that they make a manual downgrade to an earlier version necessary - maybe even from the command line.

You should be comfortable with and capable of possibly having to do this before installing an RC.

Feedback on this RC

Please provide general feedback on this RC in this ticket. An "All is working fine" is valuable feedback as well because it tells me people are actually testing this RC and just not finding problems with it.

If you run into any obvious bugs, please follow "How to file a bug report" - I need logs and reproduction steps to fix issues, not just the information that something doesn't work.


Heads-up Plugin Authors: Python 2's EOL and Python 3

This release candidate officially adds support to run OctoPrint under Python 3 instead of 2. However, most third party plugins probably do not yet support Python 3. In order to allow Plugin Authors to test and if necessary adjust their plugins first before OctoPrint tries to load them under Python 3, a new plugin property __plugin_pythoncompat__ has been introduced. Plugins should define the compatibly Python version via this property which OctoPrint will check on load and only proceed with loading the plugin under Python 3 if it signals compatibility.

Additionally, the Plugin Repository has been expanded to include a new field compatibility.python which signals Python compatibility on the listing as well so that OctoPrint's Plugin Manager will only show such plugins from the repository as installable under Python 3 which are configured as such.

Please see this post on the OctoPrint Community Forums on how to go about compatibility testing and how to modify existing plugins to work with OctoPrint when running under Python 3.

By default, OctoPrint will assume compatibility to Python 2 only.



  • #783 - New events UserLoggedIn & UserLoggedOut, on the push socket only available to admin users.
  • #935 - Support alternative source file types in SlicerPlugin.
  • #1665 - Include /dev/ttyS* in serial port pattern.
  • #1703 - Clarify some source code comments.
  • #1748 - Add sameDevice field to slicing API.
  • #1854 - New plugin hooks octoprint.timelapse.capture.[pre/post] to allow plugins to react to capturing happening.
  • #2328 - Grammar fix.
  • #3006 - Add options to allow gcode analysis, only when idle (default, former behaviour) or disable altogether. See also #3337.
  • #3210 - Clarify documentation on when the Error event will fire.
  • #3212 - Mark serial port file handle as not inheritable in order to avoid issues with spawned sub processes keeping a lock on the port vs "exclusive" open mode.
  • #3287 - Action Command Prompt: More flexibility for command definition for better compatibility with Klipper.
  • #3288 - Plugin Manager: Make plugin list filterable by bundled/third party and enabled/disabled and add a search box..
  • #3292 - Action Command Prompt: Support multi line option buttons.
  • #3295 - SWU: Added support for github_commit tracking configuration the the UI.
  • #3299 - Plugin Manager: Option to remove the settings and data of a plugin during plugin uninstall, on click and also to clean up any left overs from by now uninstalled plugins in the settings and data folders.
  • #3318 - Improve performance of the server side gcode interpreter.
  • #3326 - Adjust the toolbar color on Android based on the selected navbar background color.
  • #3342 - Prerender included markdown (,, and remove changelog ( from About dialog, instead redirect to Github release page which has the full changelog.
  • Strip the remoteAddress from ClientOpened events pushed via the websocket to guests.
  • Loading animation to better communicate when the interface has actually successfully loaded and can be used. Can also be disabled via the settings.
  • Improved logging in case of plugin syntax errors.
  • Sanitized & reconfigured some HTTP headers:
    • X-Content-Type-Options is now set to nosniff
    • X-Frame-Options is not set to sameorigin unless configured otherwise
    • unused JSESSIONID cookie removed from SockJS
  • Clarify use of printer profile fields.
  • PMGR/SWU: Added flag to ignore the throttle state. Will allow people to circumvent the shoot-yourself-into-the-foot-countermeasures that prevent software updates & plugin installs while in a throttled state by editing config.yaml.
  • SWU: Do not persist check providers across reboots.
  • SWU: Add pypi_release version check type
  • SWU: Option to pip auto update right from within OctoPrint. Opt-in since pip updates can and have broken backwards compatibility in the past.
  • Tell users who have JavaScript disabled that OctoPrint's UI requires JS instead of presenting them with a non-functional interface.
  • Do not refresh site source on hard refresh if we are currently printing but print warning to log to use _refresh if it's actually required. See also #3344 for further discussion.
  • Various dependency updates. See also #1536.
  • Various documentation fixes and improvements. See also #2804, #3305, #3233, #3325, #3328.
  • Various typo fixes. See also #3297, #3330

Bug fixes

  • #3125 - Fix potential dead lock when cancelling an SD print.
  • #3202 - Fix a "dictionary changed size during iteration" error.
  • #3267 - Fix OctoPrint not attempting to autoconnect to printer if port is set to None (= AUTO)
  • #3278 - Plugin Manager: Disable plugin management while printer is busy (e.g. paused), not just when actively printing.
  • #3295 - SWU: Fix a link to the documentation.
  • #3301 - Fix a race condition in SD print detection that could cause a just cancelled print to "start again".
  • #3302 - Timelapse: "Save as default" checkbox should always be enabled, regardless of printer state.
  • #3309 - Fix overzealous filtering of history entries on the /printer/{tool|bed|chamber} API endpoints.
  • #3311 - Fix a wording issue.
  • #3319 - Virtual printer: Do not assume that an S parameter must be present on M220 (and then crash when it's not).
  • #3327 - Fix a wrong used HTTP status code on the /api/login endpoint.
  • #3334 - GCODE Viewer: Fix G2 and G3 arcs being misinterpreted.
  • #3335 - Fix another "dictionary changed size during iteration" error.
  • Fix syncing of commands with ok responses. Thanks to @KevinOConner for the idea. See also #2599.
  • Fix the unrendered timelapse list being visible when empty.
  • SockJS iframe fallback no longer embeds SockJS library from a CDN.
  • Aggressively escape return values of the server in the UI.

Special thanks to all the contributors!

Special thanks to everyone who contributed to this RC, especially to balassy, ByReaL, cameroncros, CapnBry, cbxbiker61, dforsi, eyal0, FHeilmann, jammi, justfalter, kantlivelong, kevans91, koenkooi, mkobler, noahsmartin, povlhp, razerraz, RyuzakiKK, Salandora, smurfix, tedder & ZachNo for their PRs!

More information

Assets 2
You can’t perform that action at this time.