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.
- flint_usb-1.1.0/LICENSE +21 -0
- flint_usb-1.1.0/PKG-INFO +255 -0
- flint_usb-1.1.0/README.md +224 -0
- flint_usb-1.1.0/core/__init__.py +0 -0
- flint_usb-1.1.0/core/_native_writer.c +209 -0
- flint_usb-1.1.0/core/backup.py +167 -0
- flint_usb-1.1.0/core/bootcheck.py +98 -0
- flint_usb-1.1.0/core/checksum.py +79 -0
- flint_usb-1.1.0/core/cli.py +1148 -0
- flint_usb-1.1.0/core/clone.py +179 -0
- flint_usb-1.1.0/core/deviceio.py +191 -0
- flint_usb-1.1.0/core/diagnostics.py +87 -0
- flint_usb-1.1.0/core/diskpart.py +258 -0
- flint_usb-1.1.0/core/drives.py +275 -0
- flint_usb-1.1.0/core/eject.py +131 -0
- flint_usb-1.1.0/core/fleet.py +100 -0
- flint_usb-1.1.0/core/history.py +113 -0
- flint_usb-1.1.0/core/iso.py +332 -0
- flint_usb-1.1.0/core/log.py +32 -0
- flint_usb-1.1.0/core/persistence.py +203 -0
- flint_usb-1.1.0/core/settings.py +106 -0
- flint_usb-1.1.0/core/updates.py +224 -0
- flint_usb-1.1.0/core/verify.py +500 -0
- flint_usb-1.1.0/core/version.py +7 -0
- flint_usb-1.1.0/core/wipe.py +453 -0
- flint_usb-1.1.0/core/writer.py +606 -0
- flint_usb-1.1.0/flint_usb.egg-info/PKG-INFO +255 -0
- flint_usb-1.1.0/flint_usb.egg-info/SOURCES.txt +65 -0
- flint_usb-1.1.0/flint_usb.egg-info/dependency_links.txt +1 -0
- flint_usb-1.1.0/flint_usb.egg-info/entry_points.txt +5 -0
- flint_usb-1.1.0/flint_usb.egg-info/requires.txt +4 -0
- flint_usb-1.1.0/flint_usb.egg-info/top_level.txt +3 -0
- flint_usb-1.1.0/main.py +291 -0
- flint_usb-1.1.0/pyproject.toml +64 -0
- flint_usb-1.1.0/setup.cfg +4 -0
- flint_usb-1.1.0/setup.py +46 -0
- flint_usb-1.1.0/tests/test_backup.py +170 -0
- flint_usb-1.1.0/tests/test_checksum.py +75 -0
- flint_usb-1.1.0/tests/test_cli.py +695 -0
- flint_usb-1.1.0/tests/test_clone.py +176 -0
- flint_usb-1.1.0/tests/test_diagnostics.py +74 -0
- flint_usb-1.1.0/tests/test_drives.py +146 -0
- flint_usb-1.1.0/tests/test_fleet.py +132 -0
- flint_usb-1.1.0/tests/test_fleet_ui.py +322 -0
- flint_usb-1.1.0/tests/test_history.py +45 -0
- flint_usb-1.1.0/tests/test_iso_detection.py +291 -0
- flint_usb-1.1.0/tests/test_partition_options.py +340 -0
- flint_usb-1.1.0/tests/test_persistence_detection.py +310 -0
- flint_usb-1.1.0/tests/test_regression.py +10 -0
- flint_usb-1.1.0/tests/test_settings.py +45 -0
- flint_usb-1.1.0/tests/test_ui_dialogs.py +242 -0
- flint_usb-1.1.0/tests/test_ui_expert_mode.py +173 -0
- flint_usb-1.1.0/tests/test_ui_features.py +289 -0
- flint_usb-1.1.0/tests/test_ui_queue.py +139 -0
- flint_usb-1.1.0/tests/test_ui_settings.py +176 -0
- flint_usb-1.1.0/tests/test_ui_sidecar.py +112 -0
- flint_usb-1.1.0/tests/test_updates.py +216 -0
- flint_usb-1.1.0/tests/test_verify.py +442 -0
- flint_usb-1.1.0/tests/test_windows_to_go_detection.py +255 -0
- flint_usb-1.1.0/tests/test_wipe.py +338 -0
- flint_usb-1.1.0/tests/test_writer_performance.py +402 -0
- flint_usb-1.1.0/ui/__init__.py +0 -0
- flint_usb-1.1.0/ui/chamfer.py +81 -0
- flint_usb-1.1.0/ui/dialogs.py +230 -0
- flint_usb-1.1.0/ui/reference.html +213 -0
- flint_usb-1.1.0/ui/style.py +830 -0
- flint_usb-1.1.0/ui/window.py +5204 -0
flint_usb-1.1.0/LICENSE
ADDED
|
@@ -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.
|
flint_usb-1.1.0/PKG-INFO
ADDED
|
@@ -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
|
+

|
|
37
|
+
[](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
|
+

|
|
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
|
+

|
|
6
|
+
[](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
|
+

|
|
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
|