<del>NodeMCU "application developers" just need a ready-made firmware. There's a [cloud build service](http://nodemcu-build.com/) with a nice UI and configuration options for them.</del>
<del>Occasional NodeMCU firmware hackers don't need full control over the complete tool chain. They might not want to setup a Linux VM with the build environment. Docker to the rescue. Give [Docker NodeMCU build](https://hub.docker.com/r/marcelstoer/nodemcu-build/) a try.</del>
NodeMCU firmware developers commit or contribute to the project on GitHub and might want to build their own full fledged build environment with the complete tool chain.
Run the following command for a new checkout from scratch. This will fetch the nodemcu repo, checkout the `dev-esp32` branch and finally pull all submodules:
All configuration options are accessed from the file `sdkconfig`. It's advisable to set it up with the interactive `make menuconfig` - on a fresh checkout you're prompted to run through it by default.
The most notable options are described in the following sections.
### Select Modules
Follow the menu path
```
Component config --->
NodeMCU modules --->
```
Tick or untick modules as required.
### UART default bit rate
Follow the menu path
```
Component config --->
Platform config --->
UART console default bit rate --->
```
### CPU Frequency
Follow the menu path
```
Component config --->
ESP32-specific --->
CPU frequency --->
```
### Stack Size
If you experience random crashes then increase the stack size and feed back your observation on the project's issues list.
Follow the menu path
```
Component config --->
ESP32-specific --->
Main task stack size --->
```
### Flashing Options
Default settings for flashing the firmware with esptool.py are also configured with menuconfig:
It is not required to set a custom partition table. Per default the IDF will select `Single factory app, no OTA` and the firmware will create a partition for SPIFFS automatically which fills the remaining flash space.
There is a template partition table available in `components/platform/partitions-2MB.csv` locates the SPIFFS partition at a fixed location. The file can be used as a template for custom partition tables with menuconfig: