Open-source project
balena-io/etcher avatar
balena-io/etcher

balenaEtcher: what the Electron image flasher actually does, and when to use something else

Flash OS images to SD cards & USB drives, safely and easily.

34,447 stars2,426 forksTypeScriptApache-2.0

At a glance

What is it?
balenaEtcher writes OS images to SD cards and USB drives from a desktop GUI, verifying every byte it writes. This review covers how it installs on Linux, Windows and macOS, how the write-and-verify mechanism works, and where the tool stops being the right choice.
Who is it for?
balenaEtcher suits people who flash SD cards or USB drives occasionally and want a graphical tool that verifies every byte and refuses to write to internal drives. It is the wrong tool if you need a scriptable, headless flashing pipeline, since the project ships as an Electron desktop application and the README documents no CLI.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 11 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The problem balenaEtcher solves, and who it is for

Writing a raw OS image to removable media with dd is a two-command operation with a permanent failure mode. Point dd at the wrong device node and you overwrite your system disk, with no confirmation and no undo. balenaEtcher exists to remove that class of accident. The README states the tool "protects you from accidentally writing to your hard-drives, ensures every byte of data was written correctly, and much more." That sentence is the product thesis: a graphical flasher for people who flash SD cards for Raspberry Pi boards, install Linux from USB sticks, or prepare boot media for other machines, and who do not want to reason about block device names.

The audience is deliberately non-expert. The README points new users at a downloads page for pre-made installers rather than a build-from-source path, and the supported platform list is short: Linux on Intel 64-bit, Windows 10 and later on Intel 64-bit, and macOS 10.13 (High Sierra) and later on both Intel and Apple Silicon. If you run Linux on ARM, or an older Windows release, the project does not claim to support you. There is also a niche feature worth naming: balenaEtcher can flash Raspberry Pi devices directly when they support USB device boot mode, which skips the SD card entirely.

How the write-and-verify mechanism works

balenaEtcher is an Electron application, which the README acknowledges by describing it as "built with web technologies." The repository layout confirms the shape of that stack: forge.config.ts and webpack.config.ts drive the Electron Forge build, lib/ holds the application code, and the package manifest lists electron-updater for updates, i18next for translations, and drivelist plus @ronomon/direct-io for the parts that touch hardware. The actual image-writing logic is not in this repository at all. The manifest depends on etcher-sdk at version 10.0.0, so the flashing engine, device enumeration and verification pass live in a separate package, and this repository is the desktop shell around it.

That split matters when you evaluate the tool. The safety behaviour is a property of the SDK: enumerating drives, filtering out internal ones, writing the image, then reading the media back to confirm the bytes match. The desktop layer contributes the file picker, the progress display and the update channel. For a user this distinction is invisible. For anyone auditing the claim that every byte was written correctly, the code to read is in etcher-sdk, not here.

One packaging detail is visible in the repository root: npm-shrinkwrap.json pins the full dependency tree, which is why the project can ship reproducible installers across three operating systems. The cost is a large dependency surface for a tool whose core job is copying bytes.

Installing balenaEtcher on Linux, Windows and macOS

The README sends most users to the downloads page for pre-made installers, and that is the shortest path on every supported platform. For Linux, the project also documents package-manager routes. On Debian and Ubuntu, download the .deb from the GitHub release page and install it with apt:

bash
sudo apt install ./balena-etcher_******_amd64.deb

The filename carries a version number where the README shows asterisks; substitute the file you downloaded. Removal is a single command:

bash
sudo apt remove balena-etcher

On Fedora and RHEL, the README documents yum with the downloaded RPM:

bash
sudo yum localinstall balena-etcher-***.x86_64.rpm

Arch and Manjaro users install from the AUR, and the README's example uses the yay helper:

bash
yay -S balena-etcher

On Windows, the README lists two package managers. WinGet is updated automatically by a GitHub Action, and the command accepts either spelling:

bash
winget install balenaEtcher #or Balena.Etcher

Chocolatey is a second option, maintained separately by a contributor and also kept current automatically:

bash
choco install etcher

On macOS, the README gives no package-manager command; use the installer from the downloads page. A first real use is the same everywhere: open the application, select an image file, select the target drive, and start the flash. The application writes the image and then verifies it, and the README's safety claim is that internal hard drives are excluded from the drive list. Expect the verify pass to take roughly as long as the write, since it reads the media back.

Where balenaEtcher stops being the right tool

The most concrete limitation is the absence of a documented command-line interface. The README documents GUI installers and package-manager installs, and the scripts in package.json are Electron Forge targets (package, start, make) plus a WebdriverIO test run. Nothing in the README or the repository files describes a non-interactive flashing mode. If you provision twenty SD cards in a CI job, or need to flash from a machine with no display, balenaEtcher is the wrong shape of tool, regardless of how well it verifies writes.

The second limitation is platform reach. Linux support is stated for Intel 64-bit only, so ARM servers and single-board computers running Linux are outside the supported set. Windows support starts at Windows 10. macOS support starts at 10.13. Older or unusual environments are not covered by the README's claims, and the project does not present a fallback path for them.

The third is dependency weight. An Electron application plus drivelist, direct I/O bindings and a pinned dependency tree produces an installer far larger than a small native flasher. That is the price of the graphical interface and cross-platform packaging, and it is a reasonable trade for the target user. It is a poor trade if you wanted a 200 KB binary.

Finally, note what the README does not document: there is no described rollback, no way to cancel a verification pass mid-run, and no documented behaviour for a drive that fails verification. The support route is to raise an issue on GitHub, which the README states directly.

balenaEtcher compared with Rufus and dd

The comparison people search for is balenaEtcher against Rufus, and the difference is approach rather than features. Rufus is a native Windows application; balenaEtcher is an Electron application that ships builds for Linux, Windows and macOS from one codebase. If you work only on Windows, Rufus is the smaller, more native option. If you move between operating systems and want the same interface and the same verification behaviour on each, balenaEtcher's cross-platform packaging is the reason to pick it.

Against dd, the difference is safety rather than capability. dd writes to whatever device node you name and reports nothing about correctness. balenaEtcher presents a drive list that excludes internal drives and verifies the written bytes afterwards. You give up scriptability and gain a guardrail. For a one-off boot stick, that trade is worth taking. For an automated image pipeline, dd or a purpose-built provisioning tool remains the correct choice, because balenaEtcher offers no documented way to drive it without a person at the keyboard.

Maintenance, releases and licence

The repository is not archived, and the last push was on 2026-05-13, which is the same date as the v2.1.6 release. The release history shows v2.1.5 on 2026-05-07 and v2.1.4 on 2025-07-29, so the cadence is irregular: two releases four days apart, then a gap of more than nine months before them. Anyone planning to depend on balenaEtcher should read that pattern as occasional maintenance rather than a steady stream of updates, and should check the release page rather than assume a schedule.

Upgrade cost is low for end users. The package includes electron-updater, so the desktop application can update itself, and the WinGet and Chocolatey packages are described as automatically kept up to date. Linux users who installed via apt or yum upgrade through those package managers; AUR users rebuild through their helper. Building from source is a heavier proposition: the repository uses Electron Forge with Webpack and a shrinkwrapped dependency tree, and package.json's test script explicitly defers to a custom WebdriverIO run, so contributing means working with that toolchain.

On licensing, the project is Apache-2.0 and the README states it "is free software and may be redistributed under the terms specified in the license." Apache-2.0 permits commercial use and redistribution and includes a patent grant, but it also imposes notice and attribution conditions on redistributed copies. If you plan to bundle balenaEtcher into a product image, read the LICENSE file and the NOTICE requirements yourself; this is a description of the terms, not legal advice.

Editorial conclusion

balenaEtcher suits people who flash SD cards or USB drives occasionally and want a graphical tool that verifies every byte and refuses to write to internal drives. It is the wrong tool if you need a scriptable, headless flashing pipeline, since the project ships as an Electron desktop application and the README documents no CLI. Before adopting it, check the download page for the current installer, confirm your OS is in the supported list (Linux Intel 64-bit, Windows 10 or later, macOS 10.13 or later), and verify the SHA checksum of the image you intend to flash. The project is Apache-2.0 licensed, so redistribution is permitted under the terms in the LICENSE file.

Frequently asked questions

What does balenaEtcher do?

It writes OS images to SD cards and USB drives from a graphical desktop application. The README states that it protects you from accidentally writing to your hard drives, verifies that every byte of data was written correctly, and can also flash Raspberry Pi devices that support USB device boot mode.

Is balenaEtcher spyware?

Nothing in the README or the package manifest points to that. The project is Apache-2.0 licensed, the source is public in the balena-io/etcher repository, and the manifest lists Sentry and an updater dependency, which are ordinary desktop application components.

Is Rufus or balenaEtcher better?

They take different approaches rather than one being better. Rufus is a native Windows application, while balenaEtcher is built with web technologies and ships installers for Linux, Windows and macOS. If you need the same interface and verification behaviour across operating systems, balenaEtcher covers that; if you only use Windows, Rufus is the more native option.

How do I install balenaEtcher on Ubuntu?

Download the .deb file from the GitHub release page, then install it with sudo apt install ./balena-etcher_******_amd64.deb, replacing the asterisks with the version you downloaded. Removal is sudo apt remove balena-etcher.

How do I use balenaEtcher to create a bootable USB?

Open the application, select the image file, select the target drive from the list, and start the flash. The application writes the image and then verifies it, and per the README internal hard drives are excluded from the drive list.

How do I install balenaEtcher on Windows?

The README documents two package managers. WinGet uses winget install balenaEtcher (or Balena.Etcher), and Chocolatey uses choco install etcher. Both packages are described as kept up to date automatically.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/balena-io-etcher.svg)](https://hysenlabs.com/projects/balena-io-etcher)