Checking browser support…
Flash a compiled .hex to an Arduino Uno, Nano or Mega straight from the browser — STK500 over Web Serial, with read-back verify.
Talks to your board locally over USB — the .hex you drop and the bytes read back never leave your browser.
Checking browser support…
This is a browser-based avrdude for classic AVR boards: pick your board, drop in a compiled .hex, and it talks the STK500 protocol straight to the board's bootloader over the Web Serial API — no Arduino IDE, no toolchain, no driver install on a modern OS. Everything runs locally in Chrome or Edge; the file you drop and the bytes read back from the chip never leave your machine.
It is built for the boards most people actually have on the bench — the Arduino Uno, Nano and Pro Mini (ATmega328P) and the Mega 2560/1280 — and it is honest about the rest. AVR uploading is genuinely fiddly (mixed protocols, mixed USB bridges, mixed baud rates, and a real risk of bricking a chip with the wrong fuse), so this tool states plainly which paths are implemented and which are untested, and gates every dangerous operation behind a deliberate confirmation.
When you click Connect, the browser opens the serial port at the board's upload baud, then pulses the DTR/RTS lines to reset the board into its bootloader — the same trick the Arduino IDE uses, because DTR is wired through a capacitor to the chip's RESET pin. The tool then syncs with the bootloader, reads the 3-byte device signature to confirm the chip matches the board you picked, and programs the .hex one flash page at a time with a live byte-and-percent progress readout. After writing, it reads the flash back and compares it byte-for-byte against your file, so a successful upload really means the chip holds exactly what you sent.
The Uno, Nano and Pro Mini use the STK500v1 protocol (Optiboot); the Mega 2560/1280 use STK500v2. Both are implemented here, but note the honesty matrix below: nothing has been verified against real silicon by the author, so treat every board as untested until you confirm it. The other variable is the USB-to-serial bridge. A genuine Uno/Mega uses an ATmega16U2 and needs no driver. Cheap Nano/Pro-Mini clones use a CH340, which needs a driver on older systems but works out of the box on current macOS, Linux and Windows. FTDI-based boards are similar. Native-USB boards like the Leonardo/Micro (ATmega32U4) are a different animal entirely — the sketch and the bootloader appear as two separate USB devices, and the 1200-baud reset re-enumerates a brand-new port that Web Serial cannot follow without a second device picker, so the Leonardo is listed as unsupported rather than given a flaky path.
Flashing a sketch over the bootloader is safe and reversible — worst case you re-flash. Writing fuses is not: the wrong clock, reset-disable or SPI-enable fuse can make the chip unreachable over serial, recoverable only with a high-voltage or ISP programmer. This tool reads and decodes fuses for you by default, but fuse writing is off, hidden behind a double confirmation, and clearly labelled brick-risk. Burning a bootloader onto a bare chip needs an ISP programmer and is out of scope for a serial-only tool; if your board has no working bootloader, flash the ArduinoISP sketch onto a second good board and use that — the firmware menu links the sketch and the notes explain the wiring.
It's the compiled machine code for your sketch in Intel HEX format. In the Arduino IDE choose Sketch → Export Compiled Binary to write a `.hex` next to your sketch; PlatformIO puts one in `.pio/build/<env>/firmware.hex`. This tool does not compile code — it only uploads an already-compiled `.hex`.
Chrome, Edge and Opera on desktop (and Chrome 148+ on Android) support the Web Serial API; Firefox and Safari do not, so the upload path is unavailable there. On the board side the Uno, Nano, Pro Mini and Mega 2560/1280 protocol paths are implemented; see the honesty matrix on the page for the exact tested state and the CH340/FTDI/native-USB notes.
Ninety percent of the time it's the wrong baud rate or bootloader generation: a new Nano uses 115200 but an older one uses 57600, so try the other Nano row. Otherwise check the USB bridge driver (CH340 clones on old systems), make sure no other program (like the Arduino IDE Serial Monitor) has the port open, and confirm DTR reaches the RESET cap on bare Pro Mini modules.
Uploading a sketch cannot brick it — you can always re-flash. Writing fuses can: a bad clock, RSTDISBL or SPIEN fuse can make the chip unreachable over serial, needing an ISP or high-voltage programmer to recover. That's why fuse writing is disabled by default and gated behind a double confirmation, while fuse reading is always safe.
No. Burning a bootloader or programming a fuse-locked bare chip requires an ISP programmer driving the SPI pins, which plain Web Serial cannot do. The recovery path is to flash the ArduinoISP sketch (linked in the firmware menu) onto a working Uno/Nano and wire it as an in-system programmer.
The firmware menu links popular precompiled builds — GRBL for CNC/laser on a Uno/Nano, test sketches like Blink and ArduinoISP. They're link-only: GRBL and Marlin are GPL-licensed so this tool never hosts or bundles them, and it warns that a full Marlin build does not fit a 32 KB Uno. Download the .hex from the upstream release and drop it in.
Flash a sketch here, then open the serial monitor to watch it boot →
Flashing an ESP32/ESP8266 instead of an AVR? Use the ESP flasher.