Documentation
Getting Started
Flashie is a browser-based firmware flashing platform that uses the Web Serial API to flash firmware directly to microcontrollers. No desktop software installation is required — just a compatible browser and a USB connection.
Requirements
- Google Chrome or Microsoft Edge (version 89 or later)
- A supported microcontroller board (ESP32, ESP8266, STM32, Arduino)
- A USB data cable (not charge-only)
- An internet connection to download firmware files
Browser Compatibility
Firmware flashing relies on the Web Serial API, which is only available in certain browsers.
Supported Browsers
- Google Chrome (v89+) — Fully supported
- Microsoft Edge (v89+) — Fully supported
- Opera (v76+) — Supported
- Samsung Internet (v15+) — Limited support
Unsupported Browsers
- Mozilla Firefox — No Web Serial API support
- Safari — No Web Serial API support
- Mobile browsers generally do not support Web Serial
If you see “Browser not supported” on the flash button, please switch to Chrome or Edge.
Creating New Projects
To add a new firmware project to Flashie, follow these steps:
1. Create the folder structure
public/
projects/
your-project-name/
manifest.json
firmware/
bootloader.bin
partitions.bin
firmware.bin2. Create a manifest.json
The manifest file defines the firmware files and their memory offsets for each chip family.
{
"name": "Your Project",
"version": "1.0.0",
"new_install_prompt_erase": true,
"builds": [
{
"chipFamily": "ESP32",
"parts": [
{ "path": "firmware/bootloader.bin", "offset": "0x1000" },
{ "path": "firmware/partitions.bin", "offset": "0x8000" },
{ "path": "firmware/firmware.bin", "offset": "0x10000" }
]
}
]
}3. Add firmware files
Place your compiled firmware binaries in the firmware/ folder. The paths in manifest.json are relative to the manifest file location.
4. Register the project
Add a new entry to src/data/projects.json or use the Manage page to generate the configuration.
Manifest File Format
The manifest.json follows the ESP Web Tools manifest format.
Top-level fields
- name — Human-readable project name
- version — Firmware version string
- builds — Array of build configurations (one per chip family)
- new_install_prompt_erase — Set to true to prompt for erase before flashing
- funding_url — Optional funding link
Build object fields
- chipFamily — Target chip (ESP32, ESP32-S3, ESP32-C3, ESP8266, etc.)
- parts — Array of firmware files with paths and offsets
Part object fields
- path — Relative path from manifest to firmware file
- offset — Memory offset as string (e.g., “0x1000”)
Firmware File Paths
Firmware paths in the manifest.json are relative to the manifest file itself.
Example
If your manifest is at /projects/my-project/manifest.json:
// Correct (relative path):
{ "path": "firmware/firmware.bin", "offset": "0x10000" }
// Wrong (absolute path will 404 on GitHub Pages):
{ "path": "/projects/my-project/firmware/firmware.bin", "offset": "0x10000" }On GitHub Pages, files in the public/ folder are served at the root URL. A file at public/projects/my-project/firmware/firmware.bin is accessible at https://your-site.com/projects/my-project/firmware/firmware.bin.
Testing Manifests
You can test your manifest files directly in the browser before deploying:
1. Open the manifest URL
Navigate to your manifest file URL (e.g., https://your-site.com/projects/my-project/manifest.json).
2. Verify the JSON
The browser should display the parsed JSON. Check that all paths and offsets are correct.
3. Test firmware paths
Navigate to each firmware file URL to ensure it downloads correctly. A 404 means the path is wrong.
4. Use the Manage page
The Manage page lets you edit project metadata and generate updated configuration.
5. Run the verification checklist
After deploying, use the Verification Checklist to confirm everything is working correctly.
Deploying Updates
To update firmware or add new projects:
Updating firmware
- Replace the firmware binary files in
public/projects/<project>/firmware/ - Update the version number in the manifest.json
- Commit and push to GitHub
- GitHub Pages will deploy automatically
Adding new projects
- Create a new folder under
public/projects/ - Add a manifest.json and firmware files
- Add the project entry to
src/data/projects.json - Rebuild and deploy
Enabling GitHub Pages
Flashie is configured for GitHub Pages static hosting. Follow these steps to deploy:
1. Push to GitHub
Create a repository and push your code.
2. Configure GitHub Pages
Go to Settings → Pages and select “GitHub Actions” as the source.
3. Add a GitHub Actions workflow
Create .github/workflows/deploy.yml:
name: Deploy to GitHub Pages
on:
push:
branches: [main]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm run build
- uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{secrets.GITHUB_TOKEN }}
publish_dir: ./out4. Configure basePath (if needed)
If deploying to a sub-path like https://user.github.io/repo-name/, update basePath in next.config.ts to /repo-name.
Entering Bootloader Mode
Most boards need to be in bootloader mode before flashing. Here's how for each type:
ESP32
- Press and hold the BOOT button (usually labeled GPIO0)
- Press and release the EN (reset) button
- Release the BOOT button
- The board is now in download mode
ESP8266
Connect GPIO0 to GND and power cycle the board. Some development boards have a dedicated FLASH button.
STM32 (DFU mode)
- Set BOOT0 pin to HIGH (connect to 3.3V)
- Set BOOT1 pin to LOW (connect to GND)
- Press and release the RESET button
- The board appears as a DFU device
Arduino
Arduino boards typically enter bootloader mode automatically when a new sketch is uploaded via serial. No manual steps are usually required.
FAQ
Do I need to install anything?
No. Flashie works entirely in your browser. You only need Chrome or Edge. Some boards may need USB drivers (CH340, CP2102) installed on your system.
Will this work on Firefox or Safari?
No. The Web Serial API is not available in Firefox or Safari. Please use Chrome or Edge.
Why does the flash button show “Browser not supported”?
You're using a browser that doesn't support the Web Serial API. Switch to Chrome or Edge.
Why does it say “HTTPS required”?
The Web Serial API requires a secure context. If you're running locally, use http://localhost. For remote access, HTTPS is mandatory.
My board isn't detected. What do I do?
Check your USB cable (use a data cable, not charge-only), install the appropriate USB-to-serial driver (CH340, CP2102, or FTDI), and ensure the board is in bootloader mode.
The flash failed halfway through. Is my board bricked?
Probably not. Most boards can recover by re-entering bootloader mode and trying again. If the flash was interrupted, re-flash the correct firmware. ESP32 boards have a built-in recovery mechanism.
How do I add my own firmware project?
Create a project folder under public/projects/ with a manifest.json and firmware files, then add an entry to src/data/projects.json. See the Creating New Projects guide.