UAP Archive is a Rust CLI/TUI for creating a local, resumable archive of the
public UAP Release 01 media catalog published on May 8, 2026 at
https://www.war.gov/UFO/.
UAP Archive does not ship the upstream CSV or media files. It reads the public catalog, creates a local manifest, then downloads files with paced, conservative, browser-style HTTP requests, local state, checksums, and resume support.
The goal is to make the release easier to keep, inspect, and cite offline while working through the material file by file.
This is an independent tool. It is not affiliated with or endorsed by any government agency.
Requirements:
- Rust 1.94 or newer
- a terminal
- enough disk space for the archive, around 3.5 GB for Release 01
Install from GitHub:
cargo install --git https://github.com/Pym/UAP-Archive --lockedRun with the interactive TUI:
uap-archiveRun without the TUI:
uap-archive --no-tuiOn first launch, the app initializes a local archive plan in uap-archive/.
Downloads start only after that initialization step.
If the run is interrupted, launch the app again with the same output directory. It will load the previous state and continue from what remains.
By default, up to 3 assets download in parallel. New external requests are started at least 3 seconds apart.
uap-archive/
assets/
pdf/
images/
videos/
records/
manifest.json
archive-state.json
manifest.jsoncontains the archive plan.archive-state.jsontracks progress, resume state, recent errors, and run metadata.assets/contains the downloaded media.records/contains lightweight metadata for the archived entries.
Generated archive output is local data and should not be committed or published as part of this repository.
- downloads public PDFs, images, and videos from the release catalog
- structured output directory
- interactive terminal UI with progress, counters, active downloads, and event log
- non-interactive
--no-tuimode for scripts or plain logs - resumable downloads
- retry handling with a configurable consecutive-failure limit
- local state files for progress and diagnostics
- SHA-256 hashes for completed files
.partfiles for incomplete downloads, cleaned up on retry
--out <path> output directory, default: uap-archive
--concurrency <n> parallel assets to process, default 3
--delay <n> seconds between request starts, default 3
--delay-seconds <n> alias for --delay
--max-consecutive-failures <n> stop after n consecutive failed assets, default 3
--retries <n> retries per asset after the first attempt, default 2
--force redownload files even if already present
--dry-run print an existing manifest without network or writes
--no-tui use line logs instead of the terminal UI
Before download, after an archive plan exists:
Enter,Space, ors: continued: run the dry-run rehearsalr: rebuild the manifest after confirmationq,Esc, orCtrl+C: quit
During a run:
qorEsc: stop after active downloads finishCtrl+C: interrupt active downloads now?: show shortcuts in the event logj/kor arrow keys: scroll the event logPageUp/PageDown,g/G,Home/End: page or jump in the event log
Recommended checks:
cargo fmt
cargo test
cargo clippy --all-targets -- -D warnings
cargo build --releaseThe test suite uses synthetic fixtures rather than copies of the public catalog.
