Blog
ESP32 Flash Size: 4MB, 8MB, Which
How much storage does esp32 have, and which flash size actually matters — the 4MB vs 8MB question, sorted with real esptool output.
How Much Storage Does ESP32 Have?
A stock ESP32-WROOM-32 carries 4 MB of flash. Newer modules go bigger — WROOM-32 N8 has 8 MB, and ESP32-S3 WROOM-1 ships in N4, N8, and N16 variants. After the bootloader, NVS, and app partitions take their cut, about 3 MB of 4 MB is yours, less with OTA. How much storage does esp32 have for your project is really a partition question — see our FAQ index.
How Much Memory Does ESP32 Have?
Two answers, because “memory” means two chips. RAM: 520 KB internal SRAM on the classic ESP32, 512 KB on the S3. Flash: 4 MB by default, up to 16 MB on N16 modules. How much memory does esp32 have matters less than which pool you’re asking about — a camera project starves for RAM with terabytes of flash to spare.
How Many Bytes of Flashmemory Does the ESP32 Have?
4,194,304 bytes on a 4 MB module, exactly. esptool.py flash_id prints the real size for your board, and it has caught clones for me — an “8 MB” module that actually held 4. Trust the tool, not the sticker.
Does the ESP32 WROOM Have Flash?
Yes — flash is built into the WROOM module, which is why there’s no separate chip in your parts list. Classic WROOM-32: 4 MB. ESP32-S3 WROOM-1: 4, 8, or 16 MB by suffix, so N8 means 8 MB. The WROVER variant adds PSRAM on top.
Does ESP32 S3 Dev Have Storage?
Yes — every ESP32-S3 devkit carries the module’s flash, typically 8 MB on the DevKitC-1’s N8R8 module (8 MB flash, 8 MB PSRAM). What “storage” means depends on the firmware: MicroPython mounts a filesystem in a dedicated partition, Arduino splits flash between app and LittleFS, and an SD card rides the same SPI bus for bulk data. OTA needs dual app slots, which halves the space left for apps. Pre-flashed kits handle that for you.
4MB vs 8MB — which flash size should I buy?
Buy 8 MB if you’ll do OTA or MicroPython; 4 MB is fine for simple sketches. A blink sketch is 100 KB, but Wi-Fi, TLS, and libraries push real projects past 1.5 MB, and OTA needs a second slot. My S3 N8R8 runs a 2.1 MB OTA build with room to spare; the same project would be planning evictions on 4 MB. When in doubt, 8 MB costs a few dollars and removes a whole class of problems.
Why does my board report less space than 4MB?
Because the partition table carves flash into regions: bootloader, NVS settings, OTA bookkeeping, app slot(s), and filesystem. On a stock 4 MB layout with OTA, the app gets about 1.3 MB per slot — the advertised 4 MB is never fully yours. Dump the table with the commands in the flashing FAQ.
Can I upgrade to a bigger flash chip?
Technically yes, practically no: swapping QSPI flash on a WROOM means hot air, a clean board, and a reflash — and some modules are molded shut. If you need to know how to increase storage space on esp32, the sane answer is an SD card over SPI, gigabytes for a dollar, or buying the right module.
How do I check the flash size of my board?
esptool.py flash_id, or just read the serial boot log — “Detected flash size: 4MB” appears on every boot. In Arduino IDE the same tool is bundled under Tools. If the log says 8 MB but you bought 4, some clones over-report; flash_id’s hex value settles it.
Does flash size affect speed or how long the chip lasts?
Not speed — code runs through the flash cache, and SPI bandwidth isn’t the bottleneck at 240 MHz. Longevity: cells handle roughly 10,000–100,000 erase cycles, so how many times can you flash esp32 is thousands — only partition-heavy firmware like Tasmota gets near wear. Mostly a non-issue unless you log to flash every second.
Flash Layout, Observable
Partition math gets concrete when you can watch code and data coexist: the microSD example writes and reads files from its running sketch, and the EEPROM test shows byte-level persistence beside the program. What goes where — and what survives a reset — becomes behavior you have watched, not a diagram you believed.