Skip to the content.

Installing LegendCTL on Windows

LegendCTL is a free, open-source, standalone configurator for the ZD Ultimate Legend — no official ZD app required, no drivers, no background service, no telemetry. This page covers downloading it, getting past the Windows SmartScreen warning, and verifying your download is genuine so you don’t have to take “unsigned” on faith.

1. Download

From the Releases page, grab one of:

2. Why Windows shows “Windows protected your PC”

LegendCTL is not code-signed (a code-signing certificate is gated, for an open-source project, on first building download reputation — see below). So Windows SmartScreen shows a blue “Windows protected your PC” dialog for it, the same as it does for most new, independent software.

This warning is about reputation, not safety — it means “Windows hasn’t seen this file downloaded by enough people yet,” not “this file is harmful.” You don’t have to trust that blindly, though — you can verify the download yourself (next section).

To run it:

  1. Click More info in the SmartScreen dialog.
  2. Click Run anyway.

(On a managed/work PC, an administrator policy can block “Run anyway” entirely — that’s expected on locked-down machines and isn’t specific to LegendCTL.)

Because LegendCTL is unsigned, the honest way to be sure your download is the real, untampered file is to check its SHA-256 hash against the one published with the release.

  1. Each release includes a SHA256SUMS.txt asset listing the official hashes.
  2. Open PowerShell in your downloads folder and run the line for whichever file you downloaded:

    # Portable ZIP (the recommended "just try it" download):
    Get-FileHash .\ZDUltimateLegend-v<version>-windows.zip -Algorithm SHA256
    # Or the installer:
    Get-FileHash .\ZDUltimateLegend-v<version>-Setup.exe -Algorithm SHA256
    
  3. Compare the printed hash to the matching line in SHA256SUMS.txt. If they match, the file is exactly what was published. If they don’t match, delete it and re-download.

(In SHA256SUMS.txt, a leading * on a filename is standard sha256sum notation marking binary-mode hashing — it’s not part of the filename.)

A matching hash proves your file is byte-for-byte the one published with that release — an integrity check, done in the open. It doesn’t by itself prove who published it: for that origin check on v2.5.0+ releases, use the build-provenance verification in section 4. (AuthentiCode code-signing is a separate, still-planned layer — see the code-signing policy.)

4. Verify where it was built (build provenance)

From v2.5.0 onward, release binaries are built in this repository’s public GitHub Actions workflow (release-build.yml) — not on a maintainer’s machine — and every such release carries a build-provenance attestation: a cryptographically signed statement, recorded with GitHub, tying the exact bytes of the release files to the workflow run and source commit that produced them.

Releases v2.4.1 and earlier were built locally by the maintainer and are not attested — for those, the SHA-256 checksums (section 3) are the verification path.

What this proves / doesn’t prove — honestly:

Checking it needs the GitHub CLI (v2.67.0 or newer — older versions had a verification exit-code bug):

gh attestation verify .\ZDUltimateLegend-v<version>-Setup.exe --repo EvilHumphrey/LegendCTL
gh attestation verify .\ZDUltimateLegend-v<version>-windows.zip --repo EvilHumphrey/LegendCTL

A good result ends with ✓ Verification succeeded!.

Reviewers who want a stricter policy check can also pin the exact builder workflow:

gh attestation verify .\ZDUltimateLegend-v<version>-Setup.exe `
  --repo EvilHumphrey/LegendCTL `
  --signer-workflow EvilHumphrey/LegendCTL/.github/workflows/release-build.yml

Offline / API-free: each attested release also ships its attestation as the attestation-bundle.jsonl asset, so you can verify without querying GitHub’s attestation API. You do need to fetch the trust root once while online (gh attestation trusted-root) and keep the resulting file — after that, verification runs fully offline:

# Run once while online; keep trusted_root.jsonl for later offline use:
gh attestation trusted-root > trusted_root.jsonl

# Then verify offline, against the bundle shipped with the release:
gh attestation verify .\ZDUltimateLegend-v<version>-Setup.exe `
  --repo EvilHumphrey/LegendCTL `
  --bundle .\attestation-bundle.jsonl `
  --custom-trusted-root .\trusted_root.jsonl

(Releases built locally, before this workflow existed, are not attested — for those, the SHA-256 check in section 3 is the verification path.)

5. Why you can trust it beyond the hash

6. Install via winget (when available)

Once the manifest is accepted into the Windows Package Manager community repo, you’ll be able to install and update with:

winget install EvilHumphrey.LegendCTL

winget installs are a smoother path because the package is fetched and hash-checked for you.

7. Uninstall