The complete Flint manual
Every screen, every option, every safety mechanism and the full CLI reference — written for first-time users and imaging-lab operators alike.
1. Introduction
Flint is a Windows-native utility for writing ISO and DD disk images to USB
drives. It writes raw images directly to the physical disk —
\\.\PHYSICALDRIVEn — not through a mounted volume, so hybrid
images, hidden partitions and boot structures survive intact.
The app is built around one position: flashing erases drives, and mistakes are permanent. Every destructive operation requires a typed confirmation, the target drive is re-detected immediately before writing, writes are verified by reading the drive back, and wipes are verified by confirming the final pattern. There is no silent failure path.
Requirements: Windows 10/11 64-bit. Flashing, wiping, backup and clone require administrator rights; Flint requests elevation when it needs it.
2. Install & updates
Installing
There is nothing to install.
- Download
flint.exefrom the download page. - Verify the SHA-256 checksum against the value published on the release page.
- Run it. That's it — no installer, no dependencies, no telemetry.
To uninstall, delete the file. Settings and history live in your user profile, not next to the executable (see Where data lives).
Updating
Flint checks the GitHub release feed about once a week in the
background. When a new release is found it offers to download
flint.exe plus its bare-hex flint.exe.sha256
sidecar, verifies the download's SHA-256 against the published digest, and
saves the new executable to ~/Downloads/flint-<version>.exe —
checksum failures discard the file. You can also trigger a check manually
from the ⋮ menu (Check for updates…). If the release feed is
unreachable, the check is reported as unavailable — it never blocks the
app. Advanced users can point the feed elsewhere with the
FLINT_UPDATE_URL environment variable.
3. Quick start
Insert a USB drive and run Flint
Run flint.exe as Administrator. On first launch a short
onboarding dialog explains the basics.
Drop in your image
Drag and drop an ISO or DD file into the drop zone, or press
Ctrl+O. Flint computes its SHA-256 hash and shows
size; a .sha256 sidecar next to the image is validated too.
Pick the drive
Select your USB drive from the list — model, size and serial are shown. Double-check it: the drive will be erased.
Confirm and flash
Type the required confirmation to arm the flash, then press Flash. Progress shows phase, speed, bytes and ETA — also on the Windows taskbar.
Verify
The drive is read back and compared against the image hash. The result — and your flash report — land in History.
4. The interface
Flint's window has a slim left navigation with five screens:
| Screen | Purpose |
|---|---|
| Flash | Image selection, drive picker, queue, expert options, progress. The main screen. |
| Verify | Verify a drive against an image digest, or scan a whole drive for bad blocks. |
| Wipe | Erasure to a selected standard with read-back verification of the final pattern. |
| Backup / Clone | Image a drive to a file, or copy one drive to another. |
| History | Per-operation reports, JSON export/import, clear, and one-click Export diagnostics. |
| Settings | Theme, expert mode, verification options, tray behavior and writer settings. |
Keyboard shortcuts: F5 rescan drives; Ctrl+O browse for an image. The ⋮ (dots) menu in the top-right offers Check for updates… and other context actions. Every (?) button shows a short explanation bubble — hover to read it.
5. Flashing
Image selection
- Drag & drop an ISO/DD file, or browse with Ctrl+O.
- A SHA-256 hash is computed immediately — this is the digest used to verify the write afterwards. Large images take a moment.
- A sidecar file (
image.iso.sha256) next to the image is read and validated first; mismatched sidecars are reported before anything is written. - Windows and Linux media are recognized automatically, which decides which expert options apply (see below).
Drive selection
- Detected removable drives appear as cards with model, size and serial number.
- Press F5 or refresh to re-enumerate after inserting a stick.
- Immediately before writing, Flint re-detects the drive; if it changed or disappeared, the flash is blocked. A stick swapped at the last second can never receive your image by accident.
Typed confirmation
Destructive actions are armed by typing the required
text — not by clicking OK. This is the headless equivalent of the
CLI's --confirm, and it is what makes accidental double-clicks
harmless.
Progress
During a write, the progress panel shows phase (hashing, locking, flashing, verifying…), live speed in MB/s, bytes written vs. total, ETA and percentage — mirrored on the Windows taskbar progress overlay. The tray icon stays updated; the working state also blocks quit-without-warning if you try to close mid-write.
6. Verification
After a raw write, Flint reads the whole drive back and compares its SHA-256 against the image hash. Mismatched offsets are reported exactly — a bad flash is a located, reported event.
- Enabled by default (Verify after write). Takes about as long as the write itself.
- Verification runs sector-aligned reads; the digest covers exactly the image byte range, so whole-drive size differences don't cause false mismatches.
- After file-copy writes (which repartition and reformat the drive) direct digest comparison is skipped — the layout was rebuilt by design. This is reported, never silent.
7. Bad-block scan
The Verify screen can scan the whole drive as a read-only health check: every sector is read, unreadable ones are retried (1–10 retries, default 3) and reported at 4 KiB-aligned offsets. This is exactly the test that exposes counterfeit “fake capacity” flash drives that read fine until the sectors that don't exist are touched.
8. Expert mode
Expert mode (on by default) exposes the imager's full options. They persist in settings between sessions.
| Option | Choices | Notes |
|---|---|---|
| Partition scheme | Auto, GPT, MBR | GPT for modern UEFI, MBR for legacy BIOS; Auto picks GPT for UEFI targets. Only matters in file-copy mode — raw (DD) writes ignore it. |
| Target system | Auto, UEFI, Legacy | Controls the partition scheme and where boot files are placed. Windows To Go installs boot files for both. |
| Filesystem | FAT32, NTFS, exFAT | FAT32 is the most broadly bootable but caps files at 4 GB; NTFS supports large files and is required for Windows To Go. File-copy mode only. |
| Write mode | Auto (raw write), Raw (DD), File copy | Raw is a byte-for-byte copy — fastest and safest for bootable images. File copy repartitions, formats and copies the ISO contents. Hybrid ISOs are always raw. |
| Buffer size | 4, 8, 16, 32, 64 MiB | Write buffer; the default 8 MiB suits most drives. |
| Native writer | on/off | Uses the compiled low-level writer
(CreateFile/WriteFile with
FILE_FLAG_NO_BUFFERING and sector-aligned buffers) for
maximum throughput; falls back to the Python writer if the extension
isn't built. |
9. Persistence
For Linux live images (Ubuntu casper-rw,
Debian live persistence.conf), persistence keeps your
changes across reboots — settings, installed packages, saved files. Pick a
size in MB or GB; the space is carved out when the drive is prepared.
wsl mke2fs to be
available; the option is only offered for Linux media, and it is mutually
exclusive with Windows To Go.10. Windows To Go
Applying a Windows ISO can build a portable Windows
stick that boots as its own mini-PC: Flint applies the image with
dism and installs boot files for both UEFI and legacy BIOS.
- Requires NTFS filesystem and file-copy write mode, plus elevation.
- Mutually exclusive with persistence (the builder reverts one when the other is chosen).
- The choice is offered only for recognized Windows media.
11. Wiping
A wipe overwrites the entire drive. Volume locks are taken during the operation so no mounted filesystem can be left half-written. As with flashing, typed confirmation is required.
| Method | Passes | Pattern | When to use |
|---|---|---|---|
zero | 1 | Zeros | Everyday full erase; fastest |
nist | 1 | Random (NIST SP 800-88) | Random-pass clearance policies |
dod | 3 | Zeros, ones, random (DoD 5220.22-M) | Legacy three-pass policies |
Wipe verification. Every wipe ends with a read-back
pass: Flint reads the drive back and confirms the final pattern — zeros for
zero, or the exact reproducible random stream for
nist/dod. A wipe that can't be verified is
reported as failed, never as success. The result (method
and verification outcome) is recorded in history and on the report.
12. Backup & clone
- Backup images a drive to a file on another disk
(requires
--out) and verifies the backup by reading it back. - Clone copies one drive onto another drive; the target must be at least as large as the source, and it is destroyed — confirmation is required for the target's serial.
Both need administrator rights. Clone is how you roll out an imaged fleet after a single golden-stick setup — and it is verified afterwards, like everything else.
13. Flash queue
The Flash screen can stage multiple images in a queue and
flash them one after another to the same drive — ideal for producing a
batch of identical sticks. Each entry is marked pending → flashing →
done, and the queue stops on the first failure so a bad
image can't silently poison the rest of the batch. The CLI's
queue command is the scriptable twin of this feature.
14. History & reports
Every operation — flash, wipe, backup, clone — is recorded with timestamp, image, drive model and serial, duration, average speed, verification outcome, boot signature (for flashes) and, for wipes, the verification result of the final pattern. From the History screen you can:
- View the detailed report of any entry.
- Export history to JSON or import a previously exported file (import replaces the current history, with a warning).
- Clear history.
- Export diagnostics… — one click bundles the app version, drive list, recent history and log tail into a single text file. Attach it to bug reports; it makes debugging dramatically faster.
15. Settings
| Setting | Default | What it does |
|---|---|---|
| Theme | Dark | Dark, Light or High-contrast styling |
| Expert mode | On | Show/hide expert options on the Flash screen |
| Verify after write | On | Read the drive back after flashing (see Verification) |
| SHA-256 verification | On | Digest-compare verification with mismatch offsets |
| Bad-block scan | Off | Post-write scan of the drive for unreadable sectors |
| Bad-block retries | 3 | Read retries per sector, 1–10 |
| Close to tray | Off | Minimize to the system tray instead of quitting |
| Ask before elevation | On | Confirm before a UAC elevation prompt is triggered |
| Buffer size / native writer | 8 MiB / off | Writer tuning (see Expert mode) |
16. Tray & taskbar
- A tray icon with a menu: Show Flint and Quit; clicking the icon restores the window. Completion notifications appear via balloon messages.
- Quitting while a write or verification is in progress asks for confirmation — interrupting a write can leave the drive unusable.
- Close to tray (settings) keeps Flint running in the tray when the window is closed.
- Writes show taskbar progress on Windows, tinted red on failure.
17. Updates
See Install & updates. Automatic checks run weekly; manual checks run from the ⋮ menu. Downloads are verified against the published SHA-256 before they're kept, and a failed checksum discards the file immediately.
18. Where data lives
| Settings | %APPDATA%\Flint\settings.json |
|---|---|
| Flash history | %APPDATA%\Flint\history.json |
| Startup log | %TEMP%\flint-startup.log (rotated ×3) |
| Crash log | %LOCALAPPDATA%\Flint\crash.log |
| Downloads (updates) | ~\Downloads\flint-<version>.exe |
All local. Flint phones home for nothing except an optional weekly update check against the GitHub release feed.
19. CLI reference
Every feature is available headless — flint list,
flint flash, flint verify and so on — with a
machine-readable RESULT line and documented exit codes, for
imaging labs, scripts and CI. Commands that need it relaunch elevated
automatically (one UAC prompt); list, doctor and
completions need no privileges at all. The older
--cli prefix is still accepted as a compatibility alias.
Safety works exactly like the GUI: --confirm must equal the
full serial of the drive being destroyed, validated
against the live drive list — a wrong serial can never match another
drive. Fleet mode (flash-all) requires the literal word
ARM. When --confirm is omitted and the terminal
is interactive, the serial is prompted for instead; a piped command
without --confirm is refused, never guessed.
Running the CLI
flint in the examples below is the flint.exe
you downloaded. After the default one-liner install it lives at
%LOCALAPPDATA%\Flint\bin\flint.exe but is not
added to your PATH — either call it by full path:
& "$env:LOCALAPPDATA\Flint\bin\flint.exe" list
or re-run the installer with -AddToPath to make the bare
flint command work (new terminals only):
.\install.ps1 -OutDir "$HOME\Downloads" -AddToPath. For
scripting, prefer the full path — it never depends on the caller's PATH.
Every command also answers flint help,
flint help <command> and
flint <command> --help.
Command reference
listno privilegesPrint every detected drive: model, serial, size, volume letters and physical path — the exact serials the destructive commands expect.
flint list
flasherases driveWrite an image raw to a drive — everything on it is destroyed. Add --verify to read the drive back and compare digests.
flint flash --image C:\images\ubuntu.iso --drive E: --confirm 4C530001270509112345 [--verify]
verifyRead-only check: against a --sha256 digest (with --image when the byte range matters), or as a whole-drive bad-block scan.
flint verify --drive E: [--sha256 0a4b8c… --image C:\images\ubuntu.iso]
wipeerases driveErase a drive to a standard; the final pattern is verified by read-back before success is reported.
flint wipe --drive E: --confirm 4C530001270509112345 [--method zero|random|nist|dod]
backupImage a drive to a file on another disk. Confirmation is optional; the backup is read back and verified.
flint backup --drive E: --out C:\images\backup.img [--confirm 4C530001270509112345]
cloneerases driveCopy one drive onto another. The target must be at least as large as the source and is destroyed — confirm its serial.
flint clone --from E: --to F: --confirm 4C530001270509112346
queueerases driveFlash every image listed in a file (one per line, # comments allowed) to the same drive, stopping on the first failure.
flint queue --file queue.txt --drive E: --confirm 4C530001270509112345
flash-allerases drivesFleet mode: write every --image to every drive that is — or becomes — plugged in, until the time budget expires. Same policy as the GUI's fleet mode; arming requires typing ARM.
flint flash-all --image C:\images\ubuntu.iso --confirm ARM [--timeout 3600]
doctorno privilegesEnvironment report: version, runtime, admin state, native-writer availability and the current drive list — paste it into bug reports.
flint doctor
completionsno privilegesPrint a PowerShell completion script (commands, options and live drive serials) to append to your profile.
flint completions | Out-File -Append $PROFILE
Options
| Option | Meaning |
|---|---|
--drive <spec> | Match a drive by physical
path (\\.\PHYSICALDRIVE1), serial number, or volume letter
(E:) |
--confirm <serial / ARM> | Destructive
commands require the drive's full serial, case-insensitive;
flash-all requires the literal word ARM. Prompts
interactively when omitted. |
--image <file> | Source ISO/DD file;
repeat to queue several images for flash-all |
--verify | Flash then read the drive back and
compare against the image digest (or set FLINT_VERIFY=1) |
--method | Wipe method: zero,
random, nist, dod |
--sha256 <hex> | Expected 64-hex digest;
requires --image so the byte range to compare is known (a
whole drive is usually larger than the flashed image) |
--out <file> | Backup destination image file |
--from / --to | Clone source and target drives |
--file <list.txt> | Queue file: image
paths one per line; # lines are comments |
--timeout <secs> | Fleet time budget for
flash-all (default 3600) |
--json | NDJSON output instead of text lines
(equivalent: FLINT_PROGRESS=json) |
Finding a drive's serial
You need a drive's full serial for every
--confirm. Get it from the app, or on the command line:
flint list DRIVE 1 USB Stick serial='4C530001270509112345' size=16GB letters=E path=\\.\PHYSICALDRIVE3 RESULT ok: 1 drive(s) listed
Each line's serial= value is exactly what the matching
--confirm must contain. --drive accepts the
same drive by serial, volume letter (E:) or physical path —
it just selects the drive; --confirm is the safety check,
and must match that same drive's serial.
Streams, JSON & exit codes
Streams are split. Data and the final
RESULT ok|fail|canceled: … line go to stdout;
FLINT <pct> <speed>MB/s ETA <sec>s progress
(throttled to ~4 per second) and informational notes go to
stderr — so scripts capture stdout as pure data without
2>&1 noise.
| Code | Meaning |
|---|---|
| 0 | OK |
| 1 | Failure (e.g. verification mismatch, write error) |
| 2 | Cancelled |
| 3 | Usage / validation error (bad options, unknown drive) |
| 4 | Elevation denied (UAC not accepted) |
With --json every line becomes one JSON object — progress,
results, drive lists and doctor reports — each tagged with a
type field:
{"type":"drives","drives":[{"index":1,"name":"USB Stick","serial":"4C530001270509112345","size_gb":16,"letters":["E"],"path":"\\\\.\\PHYSICALDRIVE3"}]}
{"type":"result","status":"ok","message":"1 drive(s) listed","exit":0}
Unknown commands and options print the usage text on stderr; internal
errors always end with RESULT fail: internal error: … so
scripts get a machine-readable line in every case.
--version prints the version. See
the CLI examples on the features page
for the complete flow.
20. Safety model
The mechanisms, end to end:
- Physical-disk paths only. Destructive operations
accept
\\.\PHYSICALDRIVEnpaths exclusively — volume handles likeE:are refused, so a raw write can never land inside a single partition by mistake. - Typed confirmation. Flash and wipe require typing
the confirmation text; the CLI requires the drive's full serial
(
--confirm) and validates it against the live drive list. - Recheck before write. The target drive is re-detected immediately before writing; a changed or missing drive blocks the operation.
- Post-write verification. Raw flashes are read back and digest-compared with exact mismatch offsets.
- Wipe verification. The final pattern is confirmed by read-back; unverifiable wipes fail.
- Volume locking. Wipes take volume locks so mounted filesystems aren't left half-written.
- Audit trail. Every operation is recorded in history with verification outcomes and drive serials.
21. Troubleshooting
| Symptom | What to do |
|---|---|
| “Drive path unavailable” | The drive was disconnected or re-enumerated; refresh (F5) and re-pick it. |
| Flash succeeded but verification failed | Re-flash once. If it fails again with the same offsets, the stick is very likely failing hardware or counterfeit capacity — replace it. |
| Drive is slower than expected | Try a larger buffer (16–32 MiB) and the native writer in expert mode; use a high-quality USB 3.0 stick and port. |
| SmartScreen warning | Expected for unsigned builds. Verify the checksum, then More info → Run anyway. |
| Update check says “no public update feed” | The repository is still private; expect this until public releases are configured. |
| Persistence option missing | Persistence requires Linux
media and ext4 tooling (wsl mke2fs); it's not offered for
Windows or hybrid images. |
| Windows To Go unavailable | Requires a Windows ISO plus NTFS + file-copy mode, and it's exclusive with persistence. |
| Anything else | Export diagnostics (History → Export diagnostics…) and open an issue on GitHub with the file attached. |