Self-contained NodeMCU flasher with GUI based on and wxPython.
Latest commit b8638db Jan 18, 2017 @marcelstoer Add Twitter badge

NodeMCU PyFlasher

License Github Releases Twitter URL

Self-contained NodeMCU flasher with GUI based on and wxPython.

Image of NodeMCU PyFlasher GUI


Check the releases section for progress and downloadable binaries for your platform. Scan the list of open issues for bugs and pending features.

  • Due to pyinstaller/pyinstaller#2355 I can't provide an app bundle for macOS yet. The PyInstaller .spec file and the build script are ready, though.


This is my first Python project. If you have constructive feedback as for how to improve the code please do reach out to me.

Why this project exists


This addresses an issue the NodeMCU community touched on several times in the past, most recently at #1500 (comment).

I stated that based on my experience doing NodeMCU user support it should be a lot simpler to flash NodeMCU for Windows users.

  • A number of flashing tools are available but only two are actively maintained: esptool-ck and Only one is endorsed by Espressif: (they hired the developer(s)).
  • 70% of the users of my service are on Windows.
  • BUT Windows doesn't come with Python installed - which is required for
  • BUT Windows users in general are more reluctant to use the CLI than Linux/Mac users - which is required for

To conclude: this is not a comfortable situation for NodeMCU's largest user group.

The plan

For quite a while I planned to write a self-contained GUI tool which would use in the background. It should primarily target Windows users but since I'm on Mac it should be cross-platform. Even though I had never used Python before I felt confident to pull this off.


  • Uses the cross-platform wxPython GUI framework. I also tried PyForms/PyQt4 but settled for wxPython.
  • Requires absolutely minimal user input.
  • The "console" output is redirected to text control on the GUI.
  • Uses PyInstaller to create self-contained executable for Windows and Mac. The packaged app can run standalone i.e. without installing itself, a Python interpreter or any modules.


MIT © Marcel Stör