# ESPConnect: an ESP32 control center that runs in a browser tab

> A MIT licensed tool for flashing ESP32 and ESP8266 boards, browsing LittleFS and SPIFFS partitions, and backing up flash without a desktop toolchain. Its README still describes a web-only app while the releases now ship native desktop installers.

**thelastoutpostworkshop/ESPConnect** — Zero-installation web application that lets you explore, back up, and manage your ESP32… right from your browser

- Repository: https://github.com/thelastoutpostworkshop/ESPConnect
- Website: https://youtu.be/-nhDKzBxHiI
- Stars: 2,171 · Forks: 310
- Language: TypeScript
- License: MIT
- Published: 2026-10-08 · Updated: 2026-10-08 · Language: en
- Canonical page: https://hysenlabs.com/projects/thelastoutpostworkshop-espconnect

## Opening a tab and clicking Connect

The whole setup is four steps and no installer. Open the GitHub Pages URL, click Connect, and let the browser ask for the device, then wait for the handshake. When it completes, a navigation drawer opens onto Device Info, Partitions, SPIFFS, Apps, Flash, Console and Logs. Disconnect frees the USB port again.

The requirement list is narrow and worth taking literally. You need a Chromium browser at version 89 or newer, so Chrome, Edge, Brave and Arc qualify, and you need a cable with data lines rather than a charge-only cable. The board list is long: ESP32, ESP32-C3, S2, S3, C6, H2, C5, P4 and the ESP8266. Boards without automatic reset wiring are handled by a manual bootloader dance the app walks you through, holding BOOT, tapping RESET, and keeping BOOT held until the ESP-ROM banner appears.

The transport underneath is named in the README: the project is based on Jason2866's WebSerial ESPTool, and package.json pins `tasmota-webserial-esptool` at version 7.3.10. That pin is worth noticing because the release notes show it being moved for specific chips. Version 1.1.22 added ESP32-S31 support with a corrected stub and corrected flash-register addresses, and 1.1.23 fixed crystal-frequency detection at higher baud rates for the ESP32, ESP8266, ESP32-C2 and ESP32-C5. Chasing firmware bugs here often means chasing the esptool version the app bundles.

## Running from a clone with vite, vitest and playwright

ESPConnect is a Vue 3 application with Vuetify 4 for the interface and vue-i18n for translations, which the release notes confirm when they credit contributors for Spanish and Vietnamese. The build stack is Vite, and the scripts in package.json name every stage you would run locally.

```bash
npm run dev
npm run build
npm run test
npm run test:e2e
```

`dev` starts Vite, `build` runs vue-tsc for type checking before the production bundle, `test` is a vitest run, and `test:e2e` drives Playwright. There is also `test:fatfs`, scoped to a single fixture file at src/tests/fatfs.fixture.test.ts, which tells you the FatFS parser has its own test target rather than being covered incidentally. Node 22.12.0 or newer is the declared engine, and the repository carries playwright.config.ts, vitest.config.ts and a separate vite.e2e.config.js, so the end-to-end layer is a first-class part of the project.

Running locally matters more here than for a typical web app, because most of the interesting behaviour needs real hardware. A Chromium browser with Web Serial access and an actual board attached is the only environment where the file system and flash tools do anything.

## Self-hosting the web build behind nginx

The Pages deployment is convenient, but the repository carries a Dockerfile that produces the same static build on your own host, and that is the part to copy if you want the tool on an internal network. It is a two-stage build that ends with nginx serving the compiled dist directory.

```dockerfile
FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
```

The second stage copies the built files into the nginx image root and exposes port 80.

```dockerfile
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
```

Worth noting for anyone deploying this internally: the browser still needs Web Serial, and Web Serial is a Chromium feature with a permission prompt attached, so a self-hosted copy does not remove the browser requirement or the USB connection. It removes the network dependency on GitHub Pages, nothing more. The repository also has an AGENTS.md, a SECURITY.md and a patches directory fed by the patch-package postinstall step, which is how it carries modifications to upstream esptool behaviour.

## Stage edits in the browser, then write them to flash once

The file system manager is the reason many people stay with this tool. It handles SPIFFS, LittleFS and FatFS partitions, with a browser that filters as you type, paginates long listings, previews UTF-8 text, renders images inline and plays MP3, WAV, OGG, Opus, AAC, M4A, FLAC and WebM without leaving the tab.

The write path is the design decision worth understanding. Uploads can come from a file picker or a drag and drop, and the app checks available space and blocks an oversized file before the transfer starts rather than failing partway through. Edits are staged locally and only pushed when you press Save to Flash. Backups, restores and format actions sit alongside, and the README is explicit that you should confirm you have a backup before formatting a partition.

The rest of the flash workspace covers the jobs that usually mean opening a terminal. Firmware flashing takes a .bin with common offset presets and an optional full-chip erase. Backups can capture one partition, the whole partition table, only used areas of flash, or arbitrary regions. Integrity checks compute MD5 hashes for a given offset and length, and a register view reads and writes hardware registers against an integrated address guide. Long transfers can be cancelled, which pauses rather than corrupts, and the session log keeps a chronological record of connects, flashes, downloads and warnings for when the board misbehaves.

## The NVS inspector is labelled experimental and means it

The NVS Inspector reads the Non-Volatile Storage partition from the browser and draws it: automatic detection of format v1 or v2, a list of namespaces and keys, decoding for integers, strings and blobs, heuristic decoding of floats and doubles, page state with sequence numbers and CRC status, and a page layout view.

The limitations list is as long as the feature list, and reading it tells you how much to trust the output. It is read-only. The parsing is based on reverse engineering ESP-IDF behaviour and may not handle every case. Some value types appear as raw blobs, and corrupt or partially erased pages produce warnings. The README states that output should not be considered authoritative for recovery or forensic use, which is the correct caution for a format the parser learned by observation rather than from a specification.

The reason this section exists at all is worth noting: reading NVS without reflashing means you can inspect credentials, counters and calibration data on a device that is otherwise sealed. That is exactly what a reverse-engineered read-only viewer is for, and it is also why the disclaimers are there. If you need to change a value, this tool will not do it.

## A web-only README on a project that now ships installers

Several facts about this project disagree with each other, and each pair is useful to a reader deciding how to install it.

The first is packaging. The repository description calls it a zero-installation web application, and the README says it runs entirely inside a modern Chromium browser without installing desktop software. Releases v1.1.21, v1.1.22 and v1.1.23 each open with the same line describing the project as a standalone desktop application, and each one ships a table of macOS DMG builds for Apple Silicon and Intel, a Windows x64 installer, Linux deb and rpm packages, and a zip of the static web build. package.json agrees with the releases rather than the README: `main` is electron/main.cjs, electron-forge supplies the makers, and electron is a dev dependency. Both are true at once. The web build is genuinely zero-install and genuinely still exists, and it is no longer the only way the project is distributed.

The second is versioning. package.json declares version 1.1.24 while the newest published release is v1.1.23, so the main branch is one patch ahead of anything you can download, which is what the preview build is for.

The third is chip coverage. The README's hardware list stops at ESP32-C5 and ESP32-P4, yet v1.1.22 ships an ESP32-S31 stub and v1.1.23 fixes detection for an ESP32-C2. If your board is in the release notes but not the README, trust the release notes.

The fourth is naming. The quick start lists a Console tab while the feature overview calls it the Serial Monitor tab, and the Apps tab described as OTA slot insight is the one place where you can see which firmware slot is active before you overwrite the other one. The ESP8266 line deserves its own warning too, because the README is blunt: ESP8266 devices can connect, but support is very limited, and partition tables and SPIFFS and LittleFS are simply not available on them.

## Conclusion

ESPConnect earns a place on the bench of anyone who flashes ESP32 boards from a laptop without wanting PlatformIO or esptool.py installed, and it is the wrong tool if you need a scripted pipeline, since there is no documented command line for the flashing path. Start on the stable build at the GitHub Pages URL rather than the preview branch, keep a partition backup before any format action, and treat the NVS Inspector as a debugging aid only. The gap worth knowing about is packaging: the README sells a zero-installation browser app and three consecutive releases describe the same project as a standalone desktop application, so read the release notes for your version rather than the README when you decide how to install it.

## FAQ

### Does ESPConnect really need no installation at all?

The web build does not: open the GitHub Pages URL in Chrome, Edge, Brave or Arc at version 89 or newer and connect over USB with no local software. Recent releases also ship macOS, Windows and Linux desktop installers built with Electron, which the README does not mention, so the zero-install claim and the installer download both describe real options.

### Can ESPConnect browse and upload LittleFS and SPIFFS files?

Yes, and it handles FatFS as well. You can browse with instant text filtering, upload by picker or drag and drop, preview text, images and audio, and download or delete individual files. Edits are staged locally and written with Save to Flash, and oversized uploads are blocked before they transfer.

### Does ESPConnect support the ESP8266?

Only in a limited way. The README states that ESP8266 devices can connect, but the tool cannot read partition tables or access SPIFFS or LittleFS, and the advanced ESP32 features are not implemented. Choose it for ESP32 targets and treat ESP8266 as connect-and-inspect only.

### What can the experimental NVS Inspector in ESPConnect do?

It reads the NVS partition in the browser, detecting format v1 or v2, listing namespaces and keys, and decoding integers, strings, blobs, and floats heuristically, with page state and CRC status shown. It is read-only, the parsing comes from reverse engineering ESP-IDF behaviour, and the README says the output is not authoritative for recovery or forensic use.

### Can I self-host ESPConnect with Docker?

The repository includes a two-stage Dockerfile that builds the static site with Node 22 and serves dist through nginx on port 80. Hosting it yourself does not remove the browser requirement, since Web Serial is still a Chromium feature that needs a Chromium browser and the board attached over USB.

## Sources

- [License: MIT](https://github.com/thelastoutpostworkshop/ESPConnect/blob/main/LICENSE)
- [Project website](https://youtu.be/-nhDKzBxHiI)
- [README](https://github.com/thelastoutpostworkshop/ESPConnect/blob/main/README.md)
- [Releases](https://github.com/thelastoutpostworkshop/ESPConnect/releases)
- [thelastoutpostworkshop/ESPConnect on GitHub](https://github.com/thelastoutpostworkshop/ESPConnect)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/thelastoutpostworkshop-espconnect
