flint-usb 1.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. flint_usb-1.1.0/LICENSE +21 -0
  2. flint_usb-1.1.0/PKG-INFO +255 -0
  3. flint_usb-1.1.0/README.md +224 -0
  4. flint_usb-1.1.0/core/__init__.py +0 -0
  5. flint_usb-1.1.0/core/_native_writer.c +209 -0
  6. flint_usb-1.1.0/core/backup.py +167 -0
  7. flint_usb-1.1.0/core/bootcheck.py +98 -0
  8. flint_usb-1.1.0/core/checksum.py +79 -0
  9. flint_usb-1.1.0/core/cli.py +1148 -0
  10. flint_usb-1.1.0/core/clone.py +179 -0
  11. flint_usb-1.1.0/core/deviceio.py +191 -0
  12. flint_usb-1.1.0/core/diagnostics.py +87 -0
  13. flint_usb-1.1.0/core/diskpart.py +258 -0
  14. flint_usb-1.1.0/core/drives.py +275 -0
  15. flint_usb-1.1.0/core/eject.py +131 -0
  16. flint_usb-1.1.0/core/fleet.py +100 -0
  17. flint_usb-1.1.0/core/history.py +113 -0
  18. flint_usb-1.1.0/core/iso.py +332 -0
  19. flint_usb-1.1.0/core/log.py +32 -0
  20. flint_usb-1.1.0/core/persistence.py +203 -0
  21. flint_usb-1.1.0/core/settings.py +106 -0
  22. flint_usb-1.1.0/core/updates.py +224 -0
  23. flint_usb-1.1.0/core/verify.py +500 -0
  24. flint_usb-1.1.0/core/version.py +7 -0
  25. flint_usb-1.1.0/core/wipe.py +453 -0
  26. flint_usb-1.1.0/core/writer.py +606 -0
  27. flint_usb-1.1.0/flint_usb.egg-info/PKG-INFO +255 -0
  28. flint_usb-1.1.0/flint_usb.egg-info/SOURCES.txt +65 -0
  29. flint_usb-1.1.0/flint_usb.egg-info/dependency_links.txt +1 -0
  30. flint_usb-1.1.0/flint_usb.egg-info/entry_points.txt +5 -0
  31. flint_usb-1.1.0/flint_usb.egg-info/requires.txt +4 -0
  32. flint_usb-1.1.0/flint_usb.egg-info/top_level.txt +3 -0
  33. flint_usb-1.1.0/main.py +291 -0
  34. flint_usb-1.1.0/pyproject.toml +64 -0
  35. flint_usb-1.1.0/setup.cfg +4 -0
  36. flint_usb-1.1.0/setup.py +46 -0
  37. flint_usb-1.1.0/tests/test_backup.py +170 -0
  38. flint_usb-1.1.0/tests/test_checksum.py +75 -0
  39. flint_usb-1.1.0/tests/test_cli.py +695 -0
  40. flint_usb-1.1.0/tests/test_clone.py +176 -0
  41. flint_usb-1.1.0/tests/test_diagnostics.py +74 -0
  42. flint_usb-1.1.0/tests/test_drives.py +146 -0
  43. flint_usb-1.1.0/tests/test_fleet.py +132 -0
  44. flint_usb-1.1.0/tests/test_fleet_ui.py +322 -0
  45. flint_usb-1.1.0/tests/test_history.py +45 -0
  46. flint_usb-1.1.0/tests/test_iso_detection.py +291 -0
  47. flint_usb-1.1.0/tests/test_partition_options.py +340 -0
  48. flint_usb-1.1.0/tests/test_persistence_detection.py +310 -0
  49. flint_usb-1.1.0/tests/test_regression.py +10 -0
  50. flint_usb-1.1.0/tests/test_settings.py +45 -0
  51. flint_usb-1.1.0/tests/test_ui_dialogs.py +242 -0
  52. flint_usb-1.1.0/tests/test_ui_expert_mode.py +173 -0
  53. flint_usb-1.1.0/tests/test_ui_features.py +289 -0
  54. flint_usb-1.1.0/tests/test_ui_queue.py +139 -0
  55. flint_usb-1.1.0/tests/test_ui_settings.py +176 -0
  56. flint_usb-1.1.0/tests/test_ui_sidecar.py +112 -0
  57. flint_usb-1.1.0/tests/test_updates.py +216 -0
  58. flint_usb-1.1.0/tests/test_verify.py +442 -0
  59. flint_usb-1.1.0/tests/test_windows_to_go_detection.py +255 -0
  60. flint_usb-1.1.0/tests/test_wipe.py +338 -0
  61. flint_usb-1.1.0/tests/test_writer_performance.py +402 -0
  62. flint_usb-1.1.0/ui/__init__.py +0 -0
  63. flint_usb-1.1.0/ui/chamfer.py +81 -0
  64. flint_usb-1.1.0/ui/dialogs.py +230 -0
  65. flint_usb-1.1.0/ui/reference.html +213 -0
  66. flint_usb-1.1.0/ui/style.py +830 -0
  67. flint_usb-1.1.0/ui/window.py +5204 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Gowtham G.K
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,255 @@
1
+ Metadata-Version: 2.4
2
+ Name: flint-usb
3
+ Version: 1.1.0
4
+ Summary: Windows-native bootable USB & disk image writer with byte-level verification
5
+ License: MIT
6
+ Project-URL: Homepage, https://flintweb.vercel.app
7
+ Project-URL: Repository, https://github.com/gowthvm/Flint
8
+ Project-URL: Issues, https://github.com/gowthvm/Flint/issues
9
+ Project-URL: Documentation, https://flintweb.vercel.app/docs.html
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Environment :: Win32 (MS Windows)
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Intended Audience :: System Administrators
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: Microsoft :: Windows
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: System :: Software Distribution
21
+ Classifier: Topic :: System :: Recovery Tools
22
+ Classifier: Topic :: Utilities
23
+ Requires-Python: >=3.10
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Requires-Dist: PyQt6>=6.6
27
+ Requires-Dist: psutil>=5.9
28
+ Requires-Dist: pywin32>=306
29
+ Requires-Dist: wmi>=1.5
30
+ Dynamic: license-file
31
+
32
+ # Flint — Windows-native Bootable USB & Disk Image Writer
33
+
34
+ Write ISO/DD disk images to USB drives on Windows, then verify the result.
35
+
36
+ ![Platform](https://img.shields.io/badge/platform-Windows%2010%2F11%2064--bit-0078d6)
37
+ [![Website](https://img.shields.io/badge/website-flintweb.vercel.app-0078d6)](https://flintweb.vercel.app)
38
+
39
+ Flint is a lightweight, **Windows-native** utility for writing ISO and DD disk
40
+ images to USB drives. It writes raw images directly to the physical disk,
41
+ optionally re-reads the drive afterwards to confirm the write, and requires
42
+ explicit typed confirmation before any destructive action.
43
+
44
+ ![Flint flashing an ISO to a USB drive](https://flintweb.vercel.app/assets/screenshot.png)
45
+
46
+ The full manual — user guide, CLI reference, troubleshooting and FAQ — lives
47
+ on the [Flint website](https://flintweb.vercel.app).
48
+
49
+ ## Features
50
+
51
+ - Drag & drop or browse for an image — a SHA-256 hash is computed for verification
52
+ - Drive picker with model, size and serial for each detected USB drive
53
+ - Optional post-write verification (SHA-256 compare with mismatch offsets)
54
+ - Bad-block scan that retries unreadable sectors and reports their locations
55
+ - Expert mode: partition scheme, target system, filesystem and write mode
56
+ - Persistence for Linux live images and Windows To Go for Windows images
57
+ - Flash history with export/import and per-flash reports
58
+ - Back up a drive to an image file, or clone a drive onto another drive
59
+ - SHA-256 sidecar files (`image.iso.sha256`) validate the image before flashing
60
+ - Wipe with selectable standards: zero fill, single random pass (NIST), or
61
+ DoD 5220.22-M (three passes: zeros, ones, random)
62
+ - Headless/scriptable mode (`flint flash`, `verify`, `wipe`, `backup`,
63
+ `clone`, `queue`, `flash-all`) for automation and IT imaging workflows
64
+
65
+ ## Download
66
+
67
+ - [Latest release](https://github.com/gowthvm/Flint/releases/latest) — download
68
+ `flint.exe` (portable, no installation required).
69
+ - Windows 10/11, 64-bit.
70
+
71
+ > SmartScreen: the executable is currently unsigned, so Windows may show a
72
+ > "Windows protected your PC" warning. Click **More info → Run anyway**.
73
+ > Verify the download against the published SHA-256 checksum first:
74
+ >
75
+ > ```powershell
76
+ > certutil -hashfile flint.exe SHA256
77
+ > ```
78
+ >
79
+ > and compare the result with `flint.exe.sha256` on the release page.
80
+
81
+ ### Install via pip
82
+
83
+ Windows users with Python 3.10+ can install Flint from PyPI:
84
+
85
+ ```powershell
86
+ pip install flint-usb
87
+ ```
88
+
89
+ This installs both a GUI and a CLI — no SmartScreen warning, no download
90
+ verification needed (pip generates the launcher locally):
91
+
92
+ ```powershell
93
+ flint # open the GUI
94
+ flintw # GUI without console window
95
+ flint --help # CLI usage
96
+ ```
97
+
98
+ The installer pulls in PyQt6, psutil, pywin32 and wmi. On first run Flint
99
+ prompts for administrator privileges automatically. The native writer
100
+ extension is compiled into the wheel for full write performance.
101
+
102
+ ## Quick start
103
+
104
+ 1. **Pick an image** — drag & drop an ISO/IMG onto the drop zone, or click it
105
+ to browse (Ctrl+O).
106
+ 2. **Choose a target drive** — click the drive card and select from the list
107
+ (F5 refreshes).
108
+ 3. **Flash** — click "Flash drive". Confirm the target by typing the drive
109
+ serial or name when prompted.
110
+
111
+ Flint runs elevated, so it will ask for administrator permission when started.
112
+ Every write and wipe is irreversible — the typed confirmation is your last
113
+ guard against wiping the wrong drive.
114
+
115
+ ## Verification
116
+
117
+ - **Verify after write** re-reads the drive after writing (streaming SHA-256,
118
+ live speed and remaining time).
119
+ - **Verify using SHA256** compares the read-back digest against the image and
120
+ reports the offsets of any mismatched regions.
121
+ - **Bad-block scan** retries failed reads up to the configured number of times
122
+ (default 3) and reports the 4096-aligned offsets of sectors that never read
123
+ back; unreadable chunks are skipped so the rest of the image is still checked.
124
+ - On mismatch, Flint offers to retry the write or abort. A cancelled
125
+ verification is reported as completed-but-unverified — never as a false
126
+ success.
127
+
128
+ ## Expert mode
129
+
130
+ Expert mode is enabled by default and can be turned off with the toggle on the
131
+ write page. It adds:
132
+
133
+ - **Partition scheme** (GPT / MBR / Auto), **target system** (UEFI / Legacy /
134
+ Auto) and **filesystem** (FAT32 / NTFS / exFAT).
135
+ - **Write mode**: raw (DD) or file copy. File-copy mode repartitions and
136
+ formats the drive, then copies the image contents onto it — it is Windows-only,
137
+ requires elevation, and is skipped for hybrid ISOs, which are always written
138
+ raw so their boot record survives.
139
+ - **Buffer size** for raw writes (4–64 MiB) and an optional **native writer**
140
+ using unbuffered disk I/O for maximum throughput.
141
+ - **Persistence** (Linux) and **Windows To Go** (Windows) options — see below.
142
+ - Inline **?** buttons beside every option open the in-app reference.
143
+
144
+ > **Security warning:** every option on this panel repartitions or rewrites a
145
+ > physical drive. Wrong combinations can make a drive unbootable or erase it
146
+ > without recovery. Only use these options when you know what your target
147
+ > firmware and bootloader require; back up data first.
148
+
149
+ ## Persistence and Windows To Go
150
+
151
+ - **Persistence** keeps changes between reboots on live Linux sticks
152
+ (Ubuntu `casper-rw`, Debian live overlay). It requires WSL with an ext4
153
+ tool to format the persistence image.
154
+ - **Windows To Go** applies a Windows installation ISO to the drive so it
155
+ boots as a portable Windows installation (requires NTFS and elevation).
156
+ - Both features require file-copy mode, are mutually exclusive, and are only
157
+ shown for supported images.
158
+
159
+ ## Safety & limitations
160
+
161
+ - 64-bit Windows only.
162
+ - Flint writes raw images directly to disks — this **irreversibly erases data**.
163
+ Always confirm the target and back up important data before use.
164
+ - Before a raw write to a FAT32 target, Flint refuses images containing files
165
+ over 4 GiB (impossible on FAT32) unless you switch to NTFS/exFAT.
166
+ - Flash history is stored locally on your machine.
167
+
168
+ ## Back up, clone and wipe
169
+
170
+ - **Back up** (drive picker → "Backup this drive to an image…") streams a USB
171
+ drive into a `.img` file, locking the drive's volumes while reading. The
172
+ backup's SHA-256 is shown in the completion report.
173
+ - **Clone** (drive picker → "Clone this drive to another…") copies a drive
174
+ onto a second drive byte-for-byte. The target must be at least as large as
175
+ the source, must be a different drive, and requires the same typed
176
+ confirmation as a flash.
177
+ - **Wipe** methods (the ▾ menu next to "Wipe drive"):
178
+ - **Zero fill (fast)** — single pass of zeros
179
+ - **Random data (NIST)** — single pass of random data (NIST SP 800-88 clear)
180
+ - **DoD 5220.22-M (3 passes)** — zeros, then ones, then random data
181
+
182
+ ## Checksum sidecars
183
+
184
+ If a `*.sha256` file sits next to your image (`ubuntu.iso.sha256` or
185
+ `ubuntu.sha256`), Flint reads it, verifies the image digest against it, and
186
+ shows the result under the image source. A mismatch blocks flashing — a
187
+ corrupt or wrong image can never erase a drive by accident.
188
+
189
+ ## Headless mode
190
+
191
+ Every feature is available headless for imaging labs, scripts and CI.
192
+ `flint` below is the `flint.exe` you downloaded. Commands that need it
193
+ relaunch elevated automatically (one UAC prompt); `list`, `doctor` and
194
+ `completions` need no privileges at all. The older `--cli` prefix is still
195
+ accepted as a compatibility alias:
196
+
197
+ ```text
198
+ flint list
199
+ flint flash --image image.iso --drive E: --confirm <serial> [--verify]
200
+ flint verify --drive E: [--sha256 <hex> --image image.iso]
201
+ flint wipe --drive E: --confirm <serial> [--method zero|random|nist|dod]
202
+ flint backup --drive E: --out backup.img [--confirm <serial>]
203
+ flint clone --from E: --to F: --confirm <serial of --to>
204
+ flint queue --file list.txt --drive E: --confirm <serial>
205
+ flint flash-all --image image.iso [--image image2.iso ...] --confirm ARM [--timeout <seconds>]
206
+ flint doctor
207
+ flint completions | Out-File -Append $PROFILE
208
+ flint help [<command>]
209
+ ```
210
+
211
+ - `--drive` accepts a serial number, volume letter (`E:`) or physical path
212
+ (`\\.\PHYSICALDRIVE1`); it only selects the drive. `--confirm` is the
213
+ safety check: it must match the full serial of the drive being destroyed,
214
+ validated against the live drive list — a wrong serial can never match
215
+ another drive. `flint list` prints every detected drive with the exact
216
+ serial `--confirm` expects.
217
+ - `flash-all` is fleet mode: it writes every `--image` to every drive that
218
+ is — or becomes — plugged in, until the time budget expires (default
219
+ 3600 s). Arming requires the literal word `ARM`.
220
+ - When `--confirm` is omitted on an interactive terminal, the serial is
221
+ prompted for; a piped command without `--confirm` is refused, never
222
+ guessed.
223
+ - `verify` without a digest runs a read-only bad-block scan; with `--sha256`
224
+ it compares only the image's byte range against the drive, so `--image` is
225
+ required to know how many bytes to check.
226
+ - The queue file holds one image path per line (`#` comments allowed); images
227
+ are flashed to the same drive in order, stopping on the first failure.
228
+ - `--json` switches all output to NDJSON (progress, results, drive lists);
229
+ `FLINT_PROGRESS=json` is equivalent and `FLINT_VERIFY=1` makes `flash`
230
+ verify by default.
231
+ - **Streams are split**: data and the final `RESULT ok|fail|canceled: …`
232
+ line go to stdout; `FLINT <pct> <speed>MB/s ETA <s>s` progress and notes
233
+ go to stderr, so scripts capture stdout as pure data without `2>&1` noise.
234
+ - Exit codes: `0` ok, `1` failure, `2` cancelled, `3` usage/validation,
235
+ `4` elevation denied.
236
+
237
+ ## Signing
238
+
239
+ The release workflow signs `flint.exe` automatically when the
240
+ `WINDOWS_SIGNING_PFX` (base64 PFX) and `WINDOWS_SIGNING_PASSWORD` repository
241
+ secrets are set. To sign locally once you have a certificate:
242
+
243
+ ```powershell
244
+ .\scripts\sign.ps1 -PfxPath .\cert.pfx -PfxPassword 'secret'
245
+ ```
246
+
247
+ ## Support
248
+
249
+ - User guide and full documentation: https://flintweb.vercel.app
250
+ - Report issues and open pull requests on GitHub:
251
+ https://github.com/gowthvm/Flint
252
+
253
+ ## License
254
+
255
+ - [MIT License](LICENSE) — Copyright (c) 2026 Gowtham G.K
@@ -0,0 +1,224 @@
1
+ # Flint — Windows-native Bootable USB & Disk Image Writer
2
+
3
+ Write ISO/DD disk images to USB drives on Windows, then verify the result.
4
+
5
+ ![Platform](https://img.shields.io/badge/platform-Windows%2010%2F11%2064--bit-0078d6)
6
+ [![Website](https://img.shields.io/badge/website-flintweb.vercel.app-0078d6)](https://flintweb.vercel.app)
7
+
8
+ Flint is a lightweight, **Windows-native** utility for writing ISO and DD disk
9
+ images to USB drives. It writes raw images directly to the physical disk,
10
+ optionally re-reads the drive afterwards to confirm the write, and requires
11
+ explicit typed confirmation before any destructive action.
12
+
13
+ ![Flint flashing an ISO to a USB drive](https://flintweb.vercel.app/assets/screenshot.png)
14
+
15
+ The full manual — user guide, CLI reference, troubleshooting and FAQ — lives
16
+ on the [Flint website](https://flintweb.vercel.app).
17
+
18
+ ## Features
19
+
20
+ - Drag & drop or browse for an image — a SHA-256 hash is computed for verification
21
+ - Drive picker with model, size and serial for each detected USB drive
22
+ - Optional post-write verification (SHA-256 compare with mismatch offsets)
23
+ - Bad-block scan that retries unreadable sectors and reports their locations
24
+ - Expert mode: partition scheme, target system, filesystem and write mode
25
+ - Persistence for Linux live images and Windows To Go for Windows images
26
+ - Flash history with export/import and per-flash reports
27
+ - Back up a drive to an image file, or clone a drive onto another drive
28
+ - SHA-256 sidecar files (`image.iso.sha256`) validate the image before flashing
29
+ - Wipe with selectable standards: zero fill, single random pass (NIST), or
30
+ DoD 5220.22-M (three passes: zeros, ones, random)
31
+ - Headless/scriptable mode (`flint flash`, `verify`, `wipe`, `backup`,
32
+ `clone`, `queue`, `flash-all`) for automation and IT imaging workflows
33
+
34
+ ## Download
35
+
36
+ - [Latest release](https://github.com/gowthvm/Flint/releases/latest) — download
37
+ `flint.exe` (portable, no installation required).
38
+ - Windows 10/11, 64-bit.
39
+
40
+ > SmartScreen: the executable is currently unsigned, so Windows may show a
41
+ > "Windows protected your PC" warning. Click **More info → Run anyway**.
42
+ > Verify the download against the published SHA-256 checksum first:
43
+ >
44
+ > ```powershell
45
+ > certutil -hashfile flint.exe SHA256
46
+ > ```
47
+ >
48
+ > and compare the result with `flint.exe.sha256` on the release page.
49
+
50
+ ### Install via pip
51
+
52
+ Windows users with Python 3.10+ can install Flint from PyPI:
53
+
54
+ ```powershell
55
+ pip install flint-usb
56
+ ```
57
+
58
+ This installs both a GUI and a CLI — no SmartScreen warning, no download
59
+ verification needed (pip generates the launcher locally):
60
+
61
+ ```powershell
62
+ flint # open the GUI
63
+ flintw # GUI without console window
64
+ flint --help # CLI usage
65
+ ```
66
+
67
+ The installer pulls in PyQt6, psutil, pywin32 and wmi. On first run Flint
68
+ prompts for administrator privileges automatically. The native writer
69
+ extension is compiled into the wheel for full write performance.
70
+
71
+ ## Quick start
72
+
73
+ 1. **Pick an image** — drag & drop an ISO/IMG onto the drop zone, or click it
74
+ to browse (Ctrl+O).
75
+ 2. **Choose a target drive** — click the drive card and select from the list
76
+ (F5 refreshes).
77
+ 3. **Flash** — click "Flash drive". Confirm the target by typing the drive
78
+ serial or name when prompted.
79
+
80
+ Flint runs elevated, so it will ask for administrator permission when started.
81
+ Every write and wipe is irreversible — the typed confirmation is your last
82
+ guard against wiping the wrong drive.
83
+
84
+ ## Verification
85
+
86
+ - **Verify after write** re-reads the drive after writing (streaming SHA-256,
87
+ live speed and remaining time).
88
+ - **Verify using SHA256** compares the read-back digest against the image and
89
+ reports the offsets of any mismatched regions.
90
+ - **Bad-block scan** retries failed reads up to the configured number of times
91
+ (default 3) and reports the 4096-aligned offsets of sectors that never read
92
+ back; unreadable chunks are skipped so the rest of the image is still checked.
93
+ - On mismatch, Flint offers to retry the write or abort. A cancelled
94
+ verification is reported as completed-but-unverified — never as a false
95
+ success.
96
+
97
+ ## Expert mode
98
+
99
+ Expert mode is enabled by default and can be turned off with the toggle on the
100
+ write page. It adds:
101
+
102
+ - **Partition scheme** (GPT / MBR / Auto), **target system** (UEFI / Legacy /
103
+ Auto) and **filesystem** (FAT32 / NTFS / exFAT).
104
+ - **Write mode**: raw (DD) or file copy. File-copy mode repartitions and
105
+ formats the drive, then copies the image contents onto it — it is Windows-only,
106
+ requires elevation, and is skipped for hybrid ISOs, which are always written
107
+ raw so their boot record survives.
108
+ - **Buffer size** for raw writes (4–64 MiB) and an optional **native writer**
109
+ using unbuffered disk I/O for maximum throughput.
110
+ - **Persistence** (Linux) and **Windows To Go** (Windows) options — see below.
111
+ - Inline **?** buttons beside every option open the in-app reference.
112
+
113
+ > **Security warning:** every option on this panel repartitions or rewrites a
114
+ > physical drive. Wrong combinations can make a drive unbootable or erase it
115
+ > without recovery. Only use these options when you know what your target
116
+ > firmware and bootloader require; back up data first.
117
+
118
+ ## Persistence and Windows To Go
119
+
120
+ - **Persistence** keeps changes between reboots on live Linux sticks
121
+ (Ubuntu `casper-rw`, Debian live overlay). It requires WSL with an ext4
122
+ tool to format the persistence image.
123
+ - **Windows To Go** applies a Windows installation ISO to the drive so it
124
+ boots as a portable Windows installation (requires NTFS and elevation).
125
+ - Both features require file-copy mode, are mutually exclusive, and are only
126
+ shown for supported images.
127
+
128
+ ## Safety & limitations
129
+
130
+ - 64-bit Windows only.
131
+ - Flint writes raw images directly to disks — this **irreversibly erases data**.
132
+ Always confirm the target and back up important data before use.
133
+ - Before a raw write to a FAT32 target, Flint refuses images containing files
134
+ over 4 GiB (impossible on FAT32) unless you switch to NTFS/exFAT.
135
+ - Flash history is stored locally on your machine.
136
+
137
+ ## Back up, clone and wipe
138
+
139
+ - **Back up** (drive picker → "Backup this drive to an image…") streams a USB
140
+ drive into a `.img` file, locking the drive's volumes while reading. The
141
+ backup's SHA-256 is shown in the completion report.
142
+ - **Clone** (drive picker → "Clone this drive to another…") copies a drive
143
+ onto a second drive byte-for-byte. The target must be at least as large as
144
+ the source, must be a different drive, and requires the same typed
145
+ confirmation as a flash.
146
+ - **Wipe** methods (the ▾ menu next to "Wipe drive"):
147
+ - **Zero fill (fast)** — single pass of zeros
148
+ - **Random data (NIST)** — single pass of random data (NIST SP 800-88 clear)
149
+ - **DoD 5220.22-M (3 passes)** — zeros, then ones, then random data
150
+
151
+ ## Checksum sidecars
152
+
153
+ If a `*.sha256` file sits next to your image (`ubuntu.iso.sha256` or
154
+ `ubuntu.sha256`), Flint reads it, verifies the image digest against it, and
155
+ shows the result under the image source. A mismatch blocks flashing — a
156
+ corrupt or wrong image can never erase a drive by accident.
157
+
158
+ ## Headless mode
159
+
160
+ Every feature is available headless for imaging labs, scripts and CI.
161
+ `flint` below is the `flint.exe` you downloaded. Commands that need it
162
+ relaunch elevated automatically (one UAC prompt); `list`, `doctor` and
163
+ `completions` need no privileges at all. The older `--cli` prefix is still
164
+ accepted as a compatibility alias:
165
+
166
+ ```text
167
+ flint list
168
+ flint flash --image image.iso --drive E: --confirm <serial> [--verify]
169
+ flint verify --drive E: [--sha256 <hex> --image image.iso]
170
+ flint wipe --drive E: --confirm <serial> [--method zero|random|nist|dod]
171
+ flint backup --drive E: --out backup.img [--confirm <serial>]
172
+ flint clone --from E: --to F: --confirm <serial of --to>
173
+ flint queue --file list.txt --drive E: --confirm <serial>
174
+ flint flash-all --image image.iso [--image image2.iso ...] --confirm ARM [--timeout <seconds>]
175
+ flint doctor
176
+ flint completions | Out-File -Append $PROFILE
177
+ flint help [<command>]
178
+ ```
179
+
180
+ - `--drive` accepts a serial number, volume letter (`E:`) or physical path
181
+ (`\\.\PHYSICALDRIVE1`); it only selects the drive. `--confirm` is the
182
+ safety check: it must match the full serial of the drive being destroyed,
183
+ validated against the live drive list — a wrong serial can never match
184
+ another drive. `flint list` prints every detected drive with the exact
185
+ serial `--confirm` expects.
186
+ - `flash-all` is fleet mode: it writes every `--image` to every drive that
187
+ is — or becomes — plugged in, until the time budget expires (default
188
+ 3600 s). Arming requires the literal word `ARM`.
189
+ - When `--confirm` is omitted on an interactive terminal, the serial is
190
+ prompted for; a piped command without `--confirm` is refused, never
191
+ guessed.
192
+ - `verify` without a digest runs a read-only bad-block scan; with `--sha256`
193
+ it compares only the image's byte range against the drive, so `--image` is
194
+ required to know how many bytes to check.
195
+ - The queue file holds one image path per line (`#` comments allowed); images
196
+ are flashed to the same drive in order, stopping on the first failure.
197
+ - `--json` switches all output to NDJSON (progress, results, drive lists);
198
+ `FLINT_PROGRESS=json` is equivalent and `FLINT_VERIFY=1` makes `flash`
199
+ verify by default.
200
+ - **Streams are split**: data and the final `RESULT ok|fail|canceled: …`
201
+ line go to stdout; `FLINT <pct> <speed>MB/s ETA <s>s` progress and notes
202
+ go to stderr, so scripts capture stdout as pure data without `2>&1` noise.
203
+ - Exit codes: `0` ok, `1` failure, `2` cancelled, `3` usage/validation,
204
+ `4` elevation denied.
205
+
206
+ ## Signing
207
+
208
+ The release workflow signs `flint.exe` automatically when the
209
+ `WINDOWS_SIGNING_PFX` (base64 PFX) and `WINDOWS_SIGNING_PASSWORD` repository
210
+ secrets are set. To sign locally once you have a certificate:
211
+
212
+ ```powershell
213
+ .\scripts\sign.ps1 -PfxPath .\cert.pfx -PfxPassword 'secret'
214
+ ```
215
+
216
+ ## Support
217
+
218
+ - User guide and full documentation: https://flintweb.vercel.app
219
+ - Report issues and open pull requests on GitHub:
220
+ https://github.com/gowthvm/Flint
221
+
222
+ ## License
223
+
224
+ - [MIT License](LICENSE) — Copyright (c) 2026 Gowtham G.K
File without changes