Skip to content

Releases: PentHertz/LUKSbox

v0.2.2

04 Jun 08:06
v0.2.2
ecde527

Choose a tag to compare

Verify your download

Cryptographic provenance (GitHub / Sigstore attestation)

Every artifact below is signed via GitHub Artifact
Attestations
,
which uses Sigstore under the hood. The signature proves
the artifact was produced by this exact workflow run on
this exact commit SHA, no human had a chance to swap it
after the fact.

Verify with the GitHub CLI (one-liner):

# Install gh once if you don't have it:
#   sudo apt install gh   |   sudo dnf install gh   |   brew install gh
gh attestation verify <downloaded-file> --owner penthertz
# Prints "Loaded digest ..." then "PASS" with the
# workflow run + commit SHA the artifact came from.

Offline check (no gh needed)

Every artifact also has a SHA-256 in SHA256SUMS.txt
(attached to this release):

# Linux / macOS:
sha256sum -c SHA256SUMS.txt   # Linux
shasum -a 256 -c SHA256SUMS.txt   # macOS
# Windows (PowerShell):
Get-FileHash luksbox-*.msi -Algorithm SHA256
# then compare to the `*.msi` row in SHA256SUMS.txt

Trust chain summary

Artifacts on this release page are uploaded only by the
GitHub Actions release workflow that ran on this tagged
commit (.github/workflows/release.yml in the repo).
The commit itself is GPG-signed by the maintainer, the
upload uses GitHub's OIDC release token, and the
Sigstore attestation above pins the signature to that
workflow run. GPG-signed release tarballs
(SHA256SUMS.txt.asc) and full SLSA L3 provenance are
on the roadmap.

For at-a-glance SHA-256 checking against the published
values:

File SHA-256
luksbox-0.2.2-1.aarch64.rpm 307aa9e0da1fc210139365d873cf8671c8f243615107fe718deab56b66931d3d
luksbox-0.2.2-1.x86_64.rpm 47dab8986305678619704112c4fa26b5a7329df86033992b2baa65fbd2412c09
luksbox-v0.2.2-aarch64-linux-trixie.tar.gz 0eec5fee6c7d8e67c0c12fb0a61a95fd35968cd61a61dc87c9bdefa348880bee
luksbox-v0.2.2-aarch64-macos-macfuse-portable.tar.gz 12ffecb053d81acb03bc4fa152c1466ce3d47d2a8bda0bad42934d014111986f
luksbox-v0.2.2-aarch64-macos-macfuse.dmg 9966fa9c78f46de8dc297b0795c9b412d5577111f5b089577605873543aefeff
luksbox-v0.2.2-x86_64-linux-jammy.tar.gz d02ebc004d8dc7197bad3249e0d3197e9a0774adc2c3b84de7bc2dc014cfc72f
luksbox-v0.2.2-x86_64-windows-setup.exe 65e5263d1f1ccf5cb2a6981f158d3d0675685366b47df1c985120424b74a605d
luksbox-v0.2.2-x86_64-windows.msi 146a5308f537f6a8edab099da6d7374d7c87fafdf13ba56eb6030438bde25777
luksbox-v0.2.2-x86_64-windows.zip c996bcca17ef620dbbf8bcc5a40b3dfb8a9a4af068ab7c99fa3611b10bc3d4a8
luksbox_0.2.2-1_jammy_amd64.deb c6887488f1ce4181040616de053291010b4192f7b7b49b81918f33cb3ded26d3
luksbox_0.2.2-1_jammy_arm64.deb 34a2bbffb433d5ee5cf60d2f053eb8e790321762edeea616ad13bc738ee14e0b
luksbox_0.2.2-1_noble_amd64.deb 9dc5c02b110f9226a5a283fdf6a836062b267209ca6b643caa6d3007bcf1c332
luksbox_0.2.2-1_noble_arm64.deb f8d5e64bab1f9cfdea5d87baa7c00aabb5d780d411fc100687d8ef9afba26437
luksbox_0.2.2-1_trixie_amd64.deb 174425629c9cc0fd321a8ed106851d3cde44f5fd44a0ea65210740f718c8e3f0
luksbox_0.2.2-1_trixie_arm64.deb 70a7f1a95efed2848b2b33f6a1d215ac3a4dd105c054107335fc67e1eea97d6f

Install

Linux (Ubuntu 22.04, Debian 11/12, Mint 21.x, .deb):
download luksbox_*_jammy_amd64.deb (or _arm64) and
install with sudo apt install ./luksbox_*_jammy_amd64.deb.
Pulls in libfido2-1, libfuse3-3, and libtss2-*
automatically. Registers a luksbox-gui desktop
launcher and a MIME type for .lbx files.

Linux (Ubuntu 24.04+, Debian 13+ trixie, .deb):
download luksbox_*_noble_amd64.deb (or _arm64) and
install with sudo apt install ./luksbox_*_noble_amd64.deb.
Same package layout as the jammy build, but with
t64-transitioned dependency names (libssl3t64,
libfido2-1t64, libtss2-mu-4.0.1-0t64, etc.). The
jammy and noble .deb files cannot be installed
interchangeably, the dependency names differ.

Linux (Fedora / RHEL / Rocky / Alma, .rpm): download
luksbox-*.x86_64.rpm (or aarch64.rpm) and install
with sudo dnf install ./luksbox-*.x86_64.rpm (or
sudo rpm -i). One .rpm covers every rpm-based
distro, RPM uses SONAMEs for shared-library
dependencies which are stable across releases.
Pulls in libfido2 and fuse3-libs automatically.

Linux (x86_64, generic tarball): tar xzf luksbox-v0.2.2-x86_64-linux-jammy.tar.gz && cd luksbox-v0.2.2-x86_64-linux-jammy && ./install.sh
For Arch / NixOS / Alpine / any non-deb non-rpm distro.
The jammy variant has the broadest glibc compatibility;
if you are on a very recent distro and prefer the noble
build, swap -jammy for -noble in the filename.
Installs to ~/.local/bin and registers a desktop launcher.
Use ./install.sh --system for system-wide install, or
./install.sh --uninstall to remove. Requires
libfido2-1 (and libfuse3-3 for mount):
sudo apt install libfido2-1 libfuse3-3 (Debian/Ubuntu)
or sudo dnf install libfido2 fuse3-libs (Fedora/RHEL).

Linux (aarch64): tar xzf luksbox-v0.2.2-aarch64-linux-jammy.tar.gz && cd luksbox-v0.2.2-aarch64-linux-jammy && ./install.sh
Same runtime deps and installer as x86_64. Built natively
on a GitHub ARM64 runner, no QEMU emulation. Same
jammy/noble distinction applies as for the .deb above.

macOS (Apple Silicon): two .dmg variants, one per
FUSE backend. Pick one based on which FUSE provider you
want to install. Both .dmgs are otherwise identical
(same crypto, same on-disk format, same UI); the
difference is what luksbox mount calls under the hood
and whether you need a kernel extension.

FUSE-T variant (recommended for personal laptops):

  download: luksbox-v0.2.2-aarch64-macos-fuset.dmg
  install FUSE-T first:
      brew tap macos-fuse-t/homebrew-cask
      brew install --cask fuse-t
  then drag LUKSbox.app onto Applications.

No kernel extension, no Privacy & Security prompt, no
Apple-Silicon Reduced-Security dance. The .app launches
cleanly even if FUSE-T isn't installed yet (you just
can't use mount until you install it). Uses an NFS-
over-loopback transport with NO authentication on the
loopback port
- on a multi-user Mac, any other local
process can connect to the mount via NFSv4 and bypass
LUKSbox's permission model. Documented in
docs/MACOS_FUSE_T.md.
Fine for the common single-user-laptop case.

macFUSE variant (recommended for shared machines or
audit-required deployments):

  download: luksbox-v0.2.2-aarch64-macos-macfuse.dmg
  install macFUSE FIRST (REQUIRED, see warning below):
      brew install --cask macfuse
      # then approve the kext under System Settings
      # -> Privacy & Security and reboot. On Apple
      # Silicon also: Recovery Mode -> Startup Security
      # Utility -> Reduced Security.
  then drag LUKSbox.app onto Applications.

IMPORTANT: this variant transitively links macFUSE's
MFMount.framework. If macFUSE is NOT installed when you
try to launch LUKSbox.app, macOS kills the process
before it can show any UI
(dyld: Library not loaded
error). Install macFUSE first, then the LUKSbox.app.
Uses macFUSE's /dev/macfuse* device-node permissions
for the kernel<->FS channel, which restricts access to
the mounting UID - the better local-attacker model.

Verify which backend a given .app uses:

  /Applications/LUKSbox.app/Contents/MacOS/luksbox --version
  # luksbox X.Y.Z
  # FUSE backend: fuse-t (...)   <- FUSE-T variant
  # FUSE backend: macfuse (...)  <- macFUSE variant

macOS (Apple Silicon), portable .tar.gz: also two
variants, -fuset-portable.tar.gz and -macfuse-portable.tar.gz,
same backend split as the .dmgs. Ships the bare CLI +
GUI binaries (bin/luksbox, bin/luksbox-gui) with
their dylib closure under Frameworks/. Run in place:
./bin/luksbox --help or ./bin/luksbox-gui &. No
.app, no Gatekeeper warning, no quarantine xattr to
clear (when extracted via Terminal). See
README-MACOS.txt inside for the full layout + caveats.

First launch: the .dmg is codesigned with the
Penthertz Apple Developer ID Application certificate
(team 456J2U7HQL) and Apple-notarised
, with the
notarisation ticket stapled to the bundle. macOS shows
the standard "downloaded from internet, are you sure?"
prompt that every Mac shows for any downloaded app -
click Open and you're set. Subsequent launches are
silent. No Gatekeeper override and no
xattr -dr com.apple.quarantine workaround needed.

Verify the signature and notarisation locally:

# Signature: identity + chain trust
codesign --verify --deep --strict --verbose=2 \
    /Applications/LUKSbox.app

# Notarisation: ticket present + valid
spctl --assess --type execute --verbose \
    /Applications/LUKSbox.app
# expects: "accepted, source=Notarized Developer ID"

You can additionally verify the .dmg SHA-256 against
the table at the top of these release notes for an
independent integrity check that doesn't depend on
Apple's PKI.

macOS (Intel): not shipped, build from source with
cargo build --profile release-hardened on an Intel Mac
with brew install libfido2 (the release-hardened
profile matches the hardening flags used for the shipped
Apple-Silicon binary). The CI matrix entry for
x86_64-apple-darwin is commented out in
.github/workflows/release.yml, GitHub's macos-13
runner has been intermittently blocking releases.

Windows (x86_64), recommended: download
luksbox-v0.2.2-x86_64-windows-setup.exe,
double-click. The bootstrapper installs WinFsp 2.0.23075
(if not already pr...

Read more

v0.2.1

22 May 21:07
v0.2.1
a4ae453

Choose a tag to compare

Verify your download

Cryptographic provenance (GitHub / Sigstore attestation)

Every artifact below is signed via GitHub Artifact
Attestations
,
which uses Sigstore under the hood. The signature proves
the artifact was produced by this exact workflow run on
this exact commit SHA, no human had a chance to swap it
after the fact.

Verify with the GitHub CLI (one-liner):

# Install gh once if you don't have it:
#   sudo apt install gh   |   sudo dnf install gh   |   brew install gh
gh attestation verify <downloaded-file> --owner penthertz
# Prints "Loaded digest ..." then "PASS" with the
# workflow run + commit SHA the artifact came from.

Offline check (no gh needed)

Every artifact also has a SHA-256 in SHA256SUMS.txt
(attached to this release):

# Linux / macOS:
sha256sum -c SHA256SUMS.txt   # Linux
shasum -a 256 -c SHA256SUMS.txt   # macOS
# Windows (PowerShell):
Get-FileHash luksbox-*.msi -Algorithm SHA256
# then compare to the `*.msi` row in SHA256SUMS.txt

Trust chain summary

Artifacts on this release page are uploaded only by the
GitHub Actions release workflow that ran on this tagged
commit (.github/workflows/release.yml in the repo).
The commit itself is GPG-signed by the maintainer, the
upload uses GitHub's OIDC release token, and the
Sigstore attestation above pins the signature to that
workflow run. GPG-signed release tarballs
(SHA256SUMS.txt.asc) and full SLSA L3 provenance are
on the roadmap.

For at-a-glance SHA-256 checking against the published
values:

File SHA-256
luksbox-0.2.1-1.aarch64.rpm 53a4ca5d60d3463fbcf0e05754a170e62aa24decc0aa36c988cb13737a02a0de
luksbox-0.2.1-1.x86_64.rpm e58166ed4cf971015b7e5deb5b011c978bad1316da4f821180a90278af821e43
luksbox-v0.2.1-aarch64-linux-jammy.tar.gz 915493acddf078beb45889b187f0faa1a46501d8a3d3f21d057187d6ff14ed53
luksbox-v0.2.1-aarch64-macos-fuset-portable.tar.gz 6a35e1e7d7236869588177da20e76e1f3b885a95a9057e170f741fde04c7ecde
luksbox-v0.2.1-aarch64-macos-fuset.dmg a925572b2e3498e5816aa87c111b4744b74e5db8289ecf464f54de6b705cdda6
luksbox-v0.2.1-x86_64-linux-jammy.tar.gz 2cca92eb8601954c70bdd44c8af52e7db6e546c4a17830e712a682505d39523b
luksbox-v0.2.1-x86_64-windows-setup.exe a718a5131899e6e5d8f35fed7da1455e87f6008617a0d09cc79d23b6e8cea8c2
luksbox-v0.2.1-x86_64-windows.msi 78d3bfcddaae57393ccd028ae7633a73325904515d346661bfe08592da923c99
luksbox-v0.2.1-x86_64-windows.zip 45a6f625115a00b421d83dc2673ecd771dd8d6b0686d16db3a08563ddb49bffa
luksbox_0.2.1-1_jammy_amd64.deb a1d4ddfc261abe43f3ebe50114e80594de7d32aa152ea8e8160d65ef91096117
luksbox_0.2.1-1_jammy_arm64.deb 0b48eb5807ae21ba7ea5ad2633081505b1bf4cce1aa8f2434bdeb1222486cc45
luksbox_0.2.1-1_noble_amd64.deb 33300f00c76651f7b560e5240cf172717964a64e66b6ea935f799d056d8805d8
luksbox_0.2.1-1_noble_arm64.deb dc3510b4a68b338c744704d461145be6da5d5d9ad971370738dde878fbe10d85
luksbox_0.2.1-1_trixie_amd64.deb 5b32699964f4ac59448cd0346339b8c30a162d8f40618045722ef992e273f437
luksbox_0.2.1-1_trixie_arm64.deb d0ffaeb32d5cd276a7b1b1da1f853a3c302a3cdf9b2f79ed988b88c352851e7e

Install

Linux (Ubuntu 22.04, Debian 11/12, Mint 21.x, .deb):
download luksbox_*_jammy_amd64.deb (or _arm64) and
install with sudo apt install ./luksbox_*_jammy_amd64.deb.
Pulls in libfido2-1, libfuse3-3, and libtss2-*
automatically. Registers a luksbox-gui desktop
launcher and a MIME type for .lbx files.

Linux (Ubuntu 24.04+, Debian 13+ trixie, .deb):
download luksbox_*_noble_amd64.deb (or _arm64) and
install with sudo apt install ./luksbox_*_noble_amd64.deb.
Same package layout as the jammy build, but with
t64-transitioned dependency names (libssl3t64,
libfido2-1t64, libtss2-mu-4.0.1-0t64, etc.). The
jammy and noble .deb files cannot be installed
interchangeably, the dependency names differ.

Linux (Fedora / RHEL / Rocky / Alma, .rpm): download
luksbox-*.x86_64.rpm (or aarch64.rpm) and install
with sudo dnf install ./luksbox-*.x86_64.rpm (or
sudo rpm -i). One .rpm covers every rpm-based
distro, RPM uses SONAMEs for shared-library
dependencies which are stable across releases.
Pulls in libfido2 and fuse3-libs automatically.

Linux (x86_64, generic tarball): tar xzf luksbox-v0.2.1-x86_64-linux-jammy.tar.gz && cd luksbox-v0.2.1-x86_64-linux-jammy && ./install.sh
For Arch / NixOS / Alpine / any non-deb non-rpm distro.
The jammy variant has the broadest glibc compatibility;
if you are on a very recent distro and prefer the noble
build, swap -jammy for -noble in the filename.
Installs to ~/.local/bin and registers a desktop launcher.
Use ./install.sh --system for system-wide install, or
./install.sh --uninstall to remove. Requires
libfido2-1 (and libfuse3-3 for mount):
sudo apt install libfido2-1 libfuse3-3 (Debian/Ubuntu)
or sudo dnf install libfido2 fuse3-libs (Fedora/RHEL).

Linux (aarch64): tar xzf luksbox-v0.2.1-aarch64-linux-jammy.tar.gz && cd luksbox-v0.2.1-aarch64-linux-jammy && ./install.sh
Same runtime deps and installer as x86_64. Built natively
on a GitHub ARM64 runner, no QEMU emulation. Same
jammy/noble distinction applies as for the .deb above.

macOS (Apple Silicon): two .dmg variants, one per
FUSE backend. Pick one based on which FUSE provider you
want to install. Both .dmgs are otherwise identical
(same crypto, same on-disk format, same UI); the
difference is what luksbox mount calls under the hood
and whether you need a kernel extension.

FUSE-T variant (recommended for personal laptops):

  download: luksbox-v0.2.1-aarch64-macos-fuset.dmg
  install FUSE-T first:
      brew tap macos-fuse-t/homebrew-cask
      brew install --cask fuse-t
  then drag LUKSbox.app onto Applications.

No kernel extension, no Privacy & Security prompt, no
Apple-Silicon Reduced-Security dance. The .app launches
cleanly even if FUSE-T isn't installed yet (you just
can't use mount until you install it). Uses an NFS-
over-loopback transport with NO authentication on the
loopback port
- on a multi-user Mac, any other local
process can connect to the mount via NFSv4 and bypass
LUKSbox's permission model. Documented in
docs/MACOS_FUSE_T.md.
Fine for the common single-user-laptop case.

macFUSE variant (recommended for shared machines or
audit-required deployments):

  download: luksbox-v0.2.1-aarch64-macos-macfuse.dmg
  install macFUSE FIRST (REQUIRED, see warning below):
      brew install --cask macfuse
      # then approve the kext under System Settings
      # -> Privacy & Security and reboot. On Apple
      # Silicon also: Recovery Mode -> Startup Security
      # Utility -> Reduced Security.
  then drag LUKSbox.app onto Applications.

IMPORTANT: this variant transitively links macFUSE's
MFMount.framework. If macFUSE is NOT installed when you
try to launch LUKSbox.app, macOS kills the process
before it can show any UI
(dyld: Library not loaded
error). Install macFUSE first, then the LUKSbox.app.
Uses macFUSE's /dev/macfuse* device-node permissions
for the kernel<->FS channel, which restricts access to
the mounting UID - the better local-attacker model.

Verify which backend a given .app uses:

  /Applications/LUKSbox.app/Contents/MacOS/luksbox --version
  # luksbox X.Y.Z
  # FUSE backend: fuse-t (...)   <- FUSE-T variant
  # FUSE backend: macfuse (...)  <- macFUSE variant

macOS (Apple Silicon), portable .tar.gz: also two
variants, -fuset-portable.tar.gz and -macfuse-portable.tar.gz,
same backend split as the .dmgs. Ships the bare CLI +
GUI binaries (bin/luksbox, bin/luksbox-gui) with
their dylib closure under Frameworks/. Run in place:
./bin/luksbox --help or ./bin/luksbox-gui &. No
.app, no Gatekeeper warning, no quarantine xattr to
clear (when extracted via Terminal). See
README-MACOS.txt inside for the full layout + caveats.

First launch: the .dmg is codesigned with the
Penthertz Apple Developer ID Application certificate
(team 456J2U7HQL) and Apple-notarised
, with the
notarisation ticket stapled to the bundle. macOS shows
the standard "downloaded from internet, are you sure?"
prompt that every Mac shows for any downloaded app -
click Open and you're set. Subsequent launches are
silent. No Gatekeeper override and no
xattr -dr com.apple.quarantine workaround needed.

Verify the signature and notarisation locally:

# Signature: identity + chain trust
codesign --verify --deep --strict --verbose=2 \
    /Applications/LUKSbox.app

# Notarisation: ticket present + valid
spctl --assess --type execute --verbose \
    /Applications/LUKSbox.app
# expects: "accepted, source=Notarized Developer ID"

You can additionally verify the .dmg SHA-256 against
the table at the top of these release notes for an
independent integrity check that doesn't depend on
Apple's PKI.

macOS (Intel): not shipped, build from source with
cargo build --profile release-hardened on an Intel Mac
with brew install libfido2 (the release-hardened
profile matches the hardening flags used for the shipped
Apple-Silicon binary). The CI matrix entry for
x86_64-apple-darwin is commented out in
.github/workflows/release.yml, GitHub's macos-13
runner has been intermittently blocking releases.

Windows (x86_64), recommended: download
luksbox-v0.2.1-x86_64-windows-setup.exe,
double-click. The bootstrapper installs WinFsp 2.0.23075
(if not already present...

Read more

v0.2.0

20 May 11:56
v0.2.0
9e227b6

Choose a tag to compare

Verify your download

Cryptographic provenance (GitHub / Sigstore attestation)

Every artifact below is signed via GitHub Artifact
Attestations
,
which uses Sigstore under the hood. The signature proves
the artifact was produced by this exact workflow run on
this exact commit SHA, no human had a chance to swap it
after the fact.

Verify with the GitHub CLI (one-liner):

# Install gh once if you don't have it:
#   sudo apt install gh   |   sudo dnf install gh   |   brew install gh
gh attestation verify <downloaded-file> --owner penthertz
# Prints "Loaded digest ..." then "PASS" with the
# workflow run + commit SHA the artifact came from.

Offline check (no gh needed)

Every artifact also has a SHA-256 in SHA256SUMS.txt
(attached to this release):

# Linux / macOS:
sha256sum -c SHA256SUMS.txt   # Linux
shasum -a 256 -c SHA256SUMS.txt   # macOS
# Windows (PowerShell):
Get-FileHash luksbox-*.msi -Algorithm SHA256
# then compare to the `*.msi` row in SHA256SUMS.txt

Trust chain summary

Artifacts on this release page are uploaded only by the
GitHub Actions release workflow that ran on this tagged
commit (.github/workflows/release.yml in the repo).
The commit itself is GPG-signed by the maintainer, the
upload uses GitHub's OIDC release token, and the
Sigstore attestation above pins the signature to that
workflow run. GPG-signed release tarballs
(SHA256SUMS.txt.asc) and full SLSA L3 provenance are
on the roadmap.

For at-a-glance SHA-256 checking against the published
values:

File SHA-256
luksbox-0.2.0-1.aarch64.rpm 73ca30df245a84b47be3f78fee996b13e1fd401b5dfc3808309e03d8fd458f6c
luksbox-0.2.0-1.x86_64.rpm 4a5334e550cd36d5c653027de0858fe564ef648505b0922c2c3ade7d300d419d
luksbox-v0.2.0-aarch64-linux-jammy.tar.gz d067182bdc38179709de4e59a17d48c5260510765cb20849b865f0952d42475d
luksbox-v0.2.0-aarch64-macos-fuset-portable.tar.gz 17955aff62a7097639d866acd5c9cb528d3bc1fc4bab9aad73d524879ae7318e
luksbox-v0.2.0-aarch64-macos-fuset.dmg 8f0c30251a3a746da0b2d89cdcf8b674c4df56896f276922b4f753e2de378bf0
luksbox-v0.2.0-x86_64-linux-jammy.tar.gz d051729656f9fa9801d9b3c17b028a6cef2b011551dc64cdf0c23497b26f1eb9
luksbox-v0.2.0-x86_64-windows-setup.exe 8f1254824e2df4cf74f36ed626c9359bc2418cc66358a57c141a065b16f66f58
luksbox-v0.2.0-x86_64-windows.msi 219499a282740332d5693cb5f2397653e21b94350c08208454fdb14d917954b4
luksbox-v0.2.0-x86_64-windows.zip 9b9b930bd92e28df5e730c005f9d37cb6122b8884c674f0000e7048e792eeb22
luksbox_0.2.0-1_jammy_amd64.deb e5628eb16085bcb59d540609ab8092479e945d34842b8011e8366796165da73a
luksbox_0.2.0-1_jammy_arm64.deb 1b0eb9df4e1a360e2c3f127a43abc06a64c4fecdc93ba73c36c1b64178d37606
luksbox_0.2.0-1_noble_amd64.deb 787f406a459ffdfe4ef38b2982aa9908af7e8d1f26a5bf9fe0c4e54d867f12b8
luksbox_0.2.0-1_noble_arm64.deb e8ba7504ca387a48e01b40223854f962538f0c30a07898542c02c245bee1a4ab

Install

Linux (Ubuntu 22.04, Debian 11/12, Mint 21.x, .deb):
download luksbox_*_jammy_amd64.deb (or _arm64) and
install with sudo apt install ./luksbox_*_jammy_amd64.deb.
Pulls in libfido2-1, libfuse3-3, and libtss2-*
automatically. Registers a luksbox-gui desktop
launcher and a MIME type for .lbx files.

Linux (Ubuntu 24.04+, Debian 13+ trixie, .deb):
download luksbox_*_noble_amd64.deb (or _arm64) and
install with sudo apt install ./luksbox_*_noble_amd64.deb.
Same package layout as the jammy build, but with
t64-transitioned dependency names (libssl3t64,
libfido2-1t64, libtss2-mu-4.0.1-0t64, etc.). The
jammy and noble .deb files cannot be installed
interchangeably, the dependency names differ.

Linux (Fedora / RHEL / Rocky / Alma, .rpm): download
luksbox-*.x86_64.rpm (or aarch64.rpm) and install
with sudo dnf install ./luksbox-*.x86_64.rpm (or
sudo rpm -i). One .rpm covers every rpm-based
distro, RPM uses SONAMEs for shared-library
dependencies which are stable across releases.
Pulls in libfido2 and fuse3-libs automatically.

Linux (x86_64, generic tarball): tar xzf luksbox-v0.2.0-x86_64-linux-jammy.tar.gz && cd luksbox-v0.2.0-x86_64-linux-jammy && ./install.sh
For Arch / NixOS / Alpine / any non-deb non-rpm distro.
The jammy variant has the broadest glibc compatibility;
if you are on a very recent distro and prefer the noble
build, swap -jammy for -noble in the filename.
Installs to ~/.local/bin and registers a desktop launcher.
Use ./install.sh --system for system-wide install, or
./install.sh --uninstall to remove. Requires
libfido2-1 (and libfuse3-3 for mount):
sudo apt install libfido2-1 libfuse3-3 (Debian/Ubuntu)
or sudo dnf install libfido2 fuse3-libs (Fedora/RHEL).

Linux (aarch64): tar xzf luksbox-v0.2.0-aarch64-linux-jammy.tar.gz && cd luksbox-v0.2.0-aarch64-linux-jammy && ./install.sh
Same runtime deps and installer as x86_64. Built natively
on a GitHub ARM64 runner, no QEMU emulation. Same
jammy/noble distinction applies as for the .deb above.

macOS (Apple Silicon): two .dmg variants, one per
FUSE backend. Pick one based on which FUSE provider you
want to install. Both .dmgs are otherwise identical
(same crypto, same on-disk format, same UI); the
difference is what luksbox mount calls under the hood
and whether you need a kernel extension.

FUSE-T variant (recommended for personal laptops):

  download: luksbox-v0.2.0-aarch64-macos-fuset.dmg
  install FUSE-T first:
      brew tap macos-fuse-t/homebrew-cask
      brew install --cask fuse-t
  then drag LUKSbox.app onto Applications.

No kernel extension, no Privacy & Security prompt, no
Apple-Silicon Reduced-Security dance. The .app launches
cleanly even if FUSE-T isn't installed yet (you just
can't use mount until you install it). Uses an NFS-
over-loopback transport with NO authentication on the
loopback port
- on a multi-user Mac, any other local
process can connect to the mount via NFSv4 and bypass
LUKSbox's permission model. Documented in
docs/MACOS_FUSE_T.md.
Fine for the common single-user-laptop case.

macFUSE variant (recommended for shared machines or
audit-required deployments):

  download: luksbox-v0.2.0-aarch64-macos-macfuse.dmg
  install macFUSE FIRST (REQUIRED, see warning below):
      brew install --cask macfuse
      # then approve the kext under System Settings
      # -> Privacy & Security and reboot. On Apple
      # Silicon also: Recovery Mode -> Startup Security
      # Utility -> Reduced Security.
  then drag LUKSbox.app onto Applications.

IMPORTANT: this variant transitively links macFUSE's
MFMount.framework. If macFUSE is NOT installed when you
try to launch LUKSbox.app, macOS kills the process
before it can show any UI
(dyld: Library not loaded
error). Install macFUSE first, then the LUKSbox.app.
Uses macFUSE's /dev/macfuse* device-node permissions
for the kernel<->FS channel, which restricts access to
the mounting UID - the better local-attacker model.

Verify which backend a given .app uses:

  /Applications/LUKSbox.app/Contents/MacOS/luksbox --version
  # luksbox X.Y.Z
  # FUSE backend: fuse-t (...)   <- FUSE-T variant
  # FUSE backend: macfuse (...)  <- macFUSE variant

macOS (Apple Silicon), portable .tar.gz: also two
variants, -fuset-portable.tar.gz and -macfuse-portable.tar.gz,
same backend split as the .dmgs. Ships the bare CLI +
GUI binaries (bin/luksbox, bin/luksbox-gui) with
their dylib closure under Frameworks/. Run in place:
./bin/luksbox --help or ./bin/luksbox-gui &. No
.app, no Gatekeeper warning, no quarantine xattr to
clear (when extracted via Terminal). See
README-MACOS.txt inside for the full layout + caveats.

First launch: the .dmg is codesigned with the
Penthertz Apple Developer ID Application certificate
(team 456J2U7HQL) and Apple-notarised
, with the
notarisation ticket stapled to the bundle. macOS shows
the standard "downloaded from internet, are you sure?"
prompt that every Mac shows for any downloaded app -
click Open and you're set. Subsequent launches are
silent. No Gatekeeper override and no
xattr -dr com.apple.quarantine workaround needed.

Verify the signature and notarisation locally:

# Signature: identity + chain trust
codesign --verify --deep --strict --verbose=2 \
    /Applications/LUKSbox.app

# Notarisation: ticket present + valid
spctl --assess --type execute --verbose \
    /Applications/LUKSbox.app
# expects: "accepted, source=Notarized Developer ID"

You can additionally verify the .dmg SHA-256 against
the table at the top of these release notes for an
independent integrity check that doesn't depend on
Apple's PKI.

macOS (Intel): not shipped, build from source with
cargo build --profile release-hardened on an Intel Mac
with brew install libfido2 (the release-hardened
profile matches the hardening flags used for the shipped
Apple-Silicon binary). The CI matrix entry for
x86_64-apple-darwin is commented out in
.github/workflows/release.yml, GitHub's macos-13
runner has been intermittently blocking releases.

Windows (x86_64), recommended: download
luksbox-v0.2.0-x86_64-windows-setup.exe,
double-click. The bootstrapper installs WinFsp 2.0.23075
(if not already present...

Read more

v0.1.1

08 May 18:56
v0.1.1
9227958

Choose a tag to compare

Verify your download

Cryptographic provenance (GitHub / Sigstore attestation)

Every artifact below is signed via GitHub Artifact
Attestations
,
which uses Sigstore under the hood. The signature proves
the artifact was produced by this exact workflow run on
this exact commit SHA, no human had a chance to swap it
after the fact.

Verify with the GitHub CLI (one-liner):

# Install gh once if you don't have it:
#   sudo apt install gh   |   sudo dnf install gh   |   brew install gh
gh attestation verify <downloaded-file> --owner penthertz
# Prints "Loaded digest ..." then "PASS" with the
# workflow run + commit SHA the artifact came from.

Offline check (no gh needed)

Every artifact also has a SHA-256 in SHA256SUMS.txt
(attached to this release):

# Linux / macOS:
sha256sum -c SHA256SUMS.txt   # Linux
shasum -a 256 -c SHA256SUMS.txt   # macOS
# Windows (PowerShell):
Get-FileHash luksbox-*.msi -Algorithm SHA256
# then compare to the `*.msi` row in SHA256SUMS.txt

Trust chain summary

Artifacts on this release page are uploaded only by the
GitHub Actions release workflow that ran on this tagged
commit (.github/workflows/release.yml in the repo).
The commit itself is GPG-signed by the maintainer, the
upload uses GitHub's OIDC release token, and the
Sigstore attestation above pins the signature to that
workflow run. GPG-signed release tarballs
(SHA256SUMS.txt.asc) and full SLSA L3 provenance are
on the roadmap.

For at-a-glance SHA-256 checking against the published
values:

File SHA-256
luksbox-0.1.1-1.aarch64.rpm 6e22209fc380441df341c7e0269ad4bbe62a4c2c986f81f0f68881bfb7418f29
luksbox-0.1.1-1.x86_64.rpm 6221c1754e5bf2116805b2d5db597730041e8f373721df3b251481d3a749bedc
luksbox-v0.1.1-aarch64-linux-jammy.tar.gz 1a4a2a62d60516b18b1e45fa75d4124d2f279af7325855a614a4493d0cdad7ff
luksbox-v0.1.1-aarch64-macos-portable.tar.gz 441ebb364603939dee01c409fbe2c2aecbd95be5b272c2f0cab78fd8f5cccb87
luksbox-v0.1.1-aarch64-macos.dmg 386f3015f3846c6d6a05eb0519f45033da897fdab6121491f1c976368c179d23
luksbox-v0.1.1-x86_64-linux-jammy.tar.gz 3db3db7dc13a4680f353c9efa3f02a278f0854b8cc270238ad4a58b3008e3b2f
luksbox-v0.1.1-x86_64-windows.msi aa6a172b9937289c5a6b59fff86b93715a18661f8d364ca6c8cbfb45d83e1d97
luksbox-v0.1.1-x86_64-windows.zip 6f5029f0a149616bf369f5a1bbf9447c5671ff9d62fbf44fc3b27290f718cc95
luksbox_0.1.1-1_jammy_amd64.deb 3edea49b0497e5175c86a0af8cdbf0467e439d2c843f4ae4909c380464fbfbd8
luksbox_0.1.1-1_jammy_arm64.deb 61d9452db11a697fa0d9f24b995a449948c17661fe3bf574f9d32f7e0c7def78
luksbox_0.1.1-1_noble_amd64.deb 505923744a39f311a9568d6262eaf7d5935da787686ebcb41c50cc0a3698065d
luksbox_0.1.1-1_noble_arm64.deb f9fb95b8e612b8ce598786248c9c6b3cad3f2840879c9b5ead80ccb6912bbfed

Install

Linux (Ubuntu 22.04, Debian 11/12, Mint 21.x, .deb):
download luksbox_*_jammy_amd64.deb (or _arm64) and
install with sudo apt install ./luksbox_*_jammy_amd64.deb.
Pulls in libfido2-1, libfuse3-3, and libtss2-*
automatically. Registers a luksbox-gui desktop
launcher and a MIME type for .lbx files.

Linux (Ubuntu 24.04+, Debian 13+ trixie, .deb):
download luksbox_*_noble_amd64.deb (or _arm64) and
install with sudo apt install ./luksbox_*_noble_amd64.deb.
Same package layout as the jammy build, but with
t64-transitioned dependency names (libssl3t64,
libfido2-1t64, libtss2-mu-4.0.1-0t64, etc.). The
jammy and noble .deb files cannot be installed
interchangeably, the dependency names differ.

Linux (Fedora / RHEL / Rocky / Alma, .rpm): download
luksbox-*.x86_64.rpm (or aarch64.rpm) and install
with sudo dnf install ./luksbox-*.x86_64.rpm (or
sudo rpm -i). One .rpm covers every rpm-based
distro, RPM uses SONAMEs for shared-library
dependencies which are stable across releases.
Pulls in libfido2 and fuse3-libs automatically.

Linux (x86_64, generic tarball): tar xzf luksbox-v0.1.1-x86_64-linux-jammy.tar.gz && cd luksbox-v0.1.1-x86_64-linux-jammy && ./install.sh
For Arch / NixOS / Alpine / any non-deb non-rpm distro.
The jammy variant has the broadest glibc compatibility;
if you are on a very recent distro and prefer the noble
build, swap -jammy for -noble in the filename.
Installs to ~/.local/bin and registers a desktop launcher.
Use ./install.sh --system for system-wide install, or
./install.sh --uninstall to remove. Requires
libfido2-1 (and libfuse3-3 for mount):
sudo apt install libfido2-1 libfuse3-3 (Debian/Ubuntu)
or sudo dnf install libfido2 fuse3-libs (Fedora/RHEL).

Linux (aarch64): tar xzf luksbox-v0.1.1-aarch64-linux-jammy.tar.gz && cd luksbox-v0.1.1-aarch64-linux-jammy && ./install.sh
Same runtime deps and installer as x86_64. Built natively
on a GitHub ARM64 runner, no QEMU emulation. Same
jammy/noble distinction applies as for the .deb above.

macOS (Apple Silicon), .dmg (recommended): download
luksbox-v0.1.1-aarch64-macos.dmg,
double-click, drag LUKSbox.app onto the Applications
link, eject. The .app is self-contained, libfido2 +
transitive dependencies are bundled inside, you do NOT
need brew install libfido2. Double-clicking a .lbx
file in Finder opens it directly in LUKSbox.

macOS (Apple Silicon), portable .tar.gz: download
luksbox-v0.1.1-aarch64-macos-portable.tar.gz,
extract from Terminal with
tar xzf luksbox-v0.1.1-aarch64-macos-portable.tar.gz.
Ships the bare CLI + GUI binaries (bin/luksbox,
bin/luksbox-gui) with their dylib closure under
Frameworks/. Run in place: ./bin/luksbox --help or
./bin/luksbox-gui &. No .app, no Gatekeeper warning,
no quarantine xattr to clear (when extracted via
Terminal). See README-MACOS.txt inside for the full
layout + caveats.

mount (both builds) requires macFUSE
(https://macfuse.io/). Install with:

  brew install --cask macfuse

macFUSE installs a kernel extension. macOS will block
it on first install — approve under System Settings
→ Privacy & Security
, then reboot. On Apple Silicon
you may also need to lower the security policy via
Recovery Mode → Startup Security Utility → Reduced
Security
before the kext can load. Both are one-time
per-machine setup. Once macFUSE is approved,
luksbox mount works directly.

(FUSE-T (https://www.fuse-t.org/) is a kext-free
alternative we'd love to support, but the underlying
fuser Rust crate hard-requires the macFUSE libfuse2
ABI on macOS. FUSE-T provides only libfuse3. Switching
would require swapping our FUSE wrapper crate.)

First launch: the .dmg is codesigned with the
Penthertz Apple Developer ID Application certificate
(team 456J2U7HQL) and Apple-notarised
, with the
notarisation ticket stapled to the bundle. macOS shows
the standard "downloaded from internet, are you sure?"
prompt that every Mac shows for any downloaded app -
click Open and you're set. Subsequent launches are
silent. No Gatekeeper override and no
xattr -dr com.apple.quarantine workaround needed.

Verify the signature and notarisation locally:

# Signature: identity + chain trust
codesign --verify --deep --strict --verbose=2 \
    /Applications/LUKSbox.app

# Notarisation: ticket present + valid
spctl --assess --type execute --verbose \
    /Applications/LUKSbox.app
# expects: "accepted, source=Notarized Developer ID"

You can additionally verify the .dmg SHA-256 against
the table at the top of these release notes for an
independent integrity check that doesn't depend on
Apple's PKI.

macOS (Intel): not shipped, build from source with
cargo build --profile release-hardened on an Intel Mac
with brew install libfido2 (the release-hardened
profile matches the hardening flags used for the shipped
Apple-Silicon binary). The CI matrix entry for
x86_64-apple-darwin is commented out in
.github/workflows/release.yml, GitHub's macos-13
runner has been intermittently blocking releases.

Windows prerequisite (both flavors below): install
WinFsp 2.x first from https://winfsp.dev/rel/.
The LUKSbox binary statically links against
winfsp-x64.dll (provided by WinFsp), so without it the
binary fails to start with STATUS_DLL_NOT_FOUND. The
MSI refuses to install if WinFsp is missing and shows a
clear message; the portable .zip has no installer to
warn you, so install WinFsp first either way.

Windows (x86_64), recommended: download
luksbox-v0.1.1-x86_64-windows.msi,
double-click. The MSI installs LUKSbox to
C:\Program Files\LUKSbox\, prepends both
C:\Program Files\LUKSbox\ and <WinFspInstall>\bin
to the system PATH (so the loader resolves
winfsp-x64.dll and luksbox works in cmd /
PowerShell), drops a Start menu shortcut, and registers
the .lbx file extension (double-click any .lbx in
Explorer to open it). Uninstall via Apps & Features.

Windows (x86_64), portable: unzip
luksbox-v0.1.1-x86_64-windows.zip
and run the .exe in place. No installation, no Start
menu entry, no PATH change. Same binaries as the MSI.
Because nothing was added to PATH, you must either
(a) run from a shell where <WinFspInstall>\bin is on
PATH, or (b) drop a copy of winfsp-x64.dll next to
luksbox.exe in the unzipped folder.

libfido2 is statically linked into the .exe; no runtime
install needed for FIDO2.

See the Verify your download section at the top for
checksum verification commands.

Full Changelog: v0.1.0...v0.1.1

v0.1.0

07 May 13:16
v0.1.0
9ec7b9a

Choose a tag to compare

Verify your download

Cryptographic provenance (GitHub / Sigstore attestation)

Every artifact below is signed via GitHub Artifact
Attestations
,
which uses Sigstore under the hood. The signature proves
the artifact was produced by this exact workflow run on
this exact commit SHA, no human had a chance to swap it
after the fact.

Verify with the GitHub CLI (one-liner):

# Install gh once if you don't have it:
#   sudo apt install gh   |   sudo dnf install gh   |   brew install gh
gh attestation verify <downloaded-file> --owner penthertz
# Prints "Loaded digest ..." then "PASS" with the
# workflow run + commit SHA the artifact came from.

Offline check (no gh needed)

Every artifact also has a SHA-256 in SHA256SUMS.txt
(attached to this release):

# Linux / macOS:
sha256sum -c SHA256SUMS.txt   # Linux
shasum -a 256 -c SHA256SUMS.txt   # macOS
# Windows (PowerShell):
Get-FileHash luksbox-*.msi -Algorithm SHA256
# then compare to the `*.msi` row in SHA256SUMS.txt

Trust chain summary

Artifacts on this release page are uploaded only by the
GitHub Actions release workflow that ran on this tagged
commit (.github/workflows/release.yml in the repo).
The commit itself is GPG-signed by the maintainer, the
upload uses GitHub's OIDC release token, and the
Sigstore attestation above pins the signature to that
workflow run. GPG-signed release tarballs
(SHA256SUMS.txt.asc) and full SLSA L3 provenance are
on the roadmap.

For at-a-glance SHA-256 checking against the published
values:

File SHA-256
luksbox-0.1.0-1.aarch64.rpm 903e9ebb3e12bea8fa17b17dfd3b93370664ef3e625c1e1431feae066ffbc2ca
luksbox-0.1.0-1.x86_64.rpm f47082d7d8cfa97e43873dca87d1094206e3691b69bc459eb242b14d7dcc93e2
luksbox-v0.1.0-aarch64-linux-jammy.tar.gz a26320117dab7d333dcc95ff2be6c76663d473124739177924cf9bc3d4ca0ef7
luksbox-v0.1.0-aarch64-macos-portable.tar.gz 36c9c70192d6d59551875e1742b74c6bd94f39e24e6845990a421107fe8983ca
luksbox-v0.1.0-aarch64-macos.dmg 68978046cfef646d457f3e707ac42124a5efc4e75ba69ac50ccaafc6185c45cb
luksbox-v0.1.0-x86_64-linux-noble.tar.gz 67e8984cfa93bf623c89b73cdc21159fb7842a071587212bea8fc17c39113002
luksbox-v0.1.0-x86_64-windows.msi d1b712657f238791edaf51f2a058e67f7c9e90fcd5c3539d217e793e73b5de84
luksbox-v0.1.0-x86_64-windows.zip ee1a3aabc3fc596d4233420f7928b5050c88ab9cc2e7863c0cc6b54f17e91e46
luksbox_0.1.0-1_jammy_amd64.deb 4c82f3d984a7fccee0770138254810c36eaff36a5df5d640b866d535d0dd09d0
luksbox_0.1.0-1_jammy_arm64.deb 9920fe669b99b18ea8d060331575e608d02b66bfe4fa0d0874a6e38ec9399592
luksbox_0.1.0-1_noble_amd64.deb 548d97b00d22d29d5c9a012d6c488e4d3c007dd7f65fe909409a595c095ae1a9
luksbox_0.1.0-1_noble_arm64.deb 97e070f0087acaaa015afeaf939ee10a4b69fc9693755b068e48befd2df04a92

Install

Linux (Ubuntu 22.04, Debian 11/12, Mint 21.x, .deb):
download luksbox_*_jammy_amd64.deb (or _arm64) and
install with sudo apt install ./luksbox_*_jammy_amd64.deb.
Pulls in libfido2-1, libfuse3-3, and libtss2-*
automatically. Registers a luksbox-gui desktop
launcher and a MIME type for .lbx files.

Linux (Ubuntu 24.04+, Debian 13+ trixie, .deb):
download luksbox_*_noble_amd64.deb (or _arm64) and
install with sudo apt install ./luksbox_*_noble_amd64.deb.
Same package layout as the jammy build, but with
t64-transitioned dependency names (libssl3t64,
libfido2-1t64, libtss2-mu-4.0.1-0t64, etc.). The
jammy and noble .deb files cannot be installed
interchangeably, the dependency names differ.

Linux (Fedora / RHEL / Rocky / Alma, .rpm): download
luksbox-*.x86_64.rpm (or aarch64.rpm) and install
with sudo dnf install ./luksbox-*.x86_64.rpm (or
sudo rpm -i). One .rpm covers every rpm-based
distro, RPM uses SONAMEs for shared-library
dependencies which are stable across releases.
Pulls in libfido2 and fuse3-libs automatically.

Linux (x86_64, generic tarball): tar xzf luksbox-v0.1.0-x86_64-linux-jammy.tar.gz && cd luksbox-v0.1.0-x86_64-linux-jammy && ./install.sh
For Arch / NixOS / Alpine / any non-deb non-rpm distro.
The jammy variant has the broadest glibc compatibility;
if you are on a very recent distro and prefer the noble
build, swap -jammy for -noble in the filename.
Installs to ~/.local/bin and registers a desktop launcher.
Use ./install.sh --system for system-wide install, or
./install.sh --uninstall to remove. Requires
libfido2-1 (and libfuse3-3 for mount):
sudo apt install libfido2-1 libfuse3-3 (Debian/Ubuntu)
or sudo dnf install libfido2 fuse3-libs (Fedora/RHEL).

Linux (aarch64): tar xzf luksbox-v0.1.0-aarch64-linux-jammy.tar.gz && cd luksbox-v0.1.0-aarch64-linux-jammy && ./install.sh
Same runtime deps and installer as x86_64. Built natively
on a GitHub ARM64 runner, no QEMU emulation. Same
jammy/noble distinction applies as for the .deb above.

macOS (Apple Silicon), .dmg (recommended): download
luksbox-v0.1.0-aarch64-macos.dmg,
double-click, drag LUKSbox.app onto the Applications
link, eject. The .app is self-contained, libfido2 +
transitive dependencies are bundled inside, you do NOT
need brew install libfido2. Double-clicking a .lbx
file in Finder opens it directly in LUKSbox.

macOS (Apple Silicon), portable .tar.gz: download
luksbox-v0.1.0-aarch64-macos-portable.tar.gz,
extract from Terminal with
tar xzf luksbox-v0.1.0-aarch64-macos-portable.tar.gz.
Ships the bare CLI + GUI binaries (bin/luksbox,
bin/luksbox-gui) with their dylib closure under
Frameworks/. Run in place: ./bin/luksbox --help or
./bin/luksbox-gui &. No .app, no Gatekeeper warning,
no quarantine xattr to clear (when extracted via
Terminal). See README-MACOS.txt inside for the full
layout + caveats.

mount (both builds) requires macFUSE
(https://macfuse.io/). Install with:

  brew install --cask macfuse

macFUSE installs a kernel extension. macOS will block
it on first install — approve under System Settings
→ Privacy & Security
, then reboot. On Apple Silicon
you may also need to lower the security policy via
Recovery Mode → Startup Security Utility → Reduced
Security
before the kext can load. Both are one-time
per-machine setup. Once macFUSE is approved,
luksbox mount works directly.

(FUSE-T (https://www.fuse-t.org/) is a kext-free
alternative we'd love to support, but the underlying
fuser Rust crate hard-requires the macFUSE libfuse2
ABI on macOS. FUSE-T provides only libfuse3. Switching
would require swapping our FUSE wrapper crate.)

macOS (Intel): not shipped, build from source with
cargo build --profile release-hardened on an Intel Mac
with brew install libfido2 (the release-hardened
profile matches the hardening flags used for the shipped
Apple-Silicon binary). The CI matrix entry for
x86_64-apple-darwin is commented out in
.github/workflows/release.yml, GitHub's macos-13
runner has been intermittently blocking releases.

Windows prerequisite (both flavors below): install
WinFsp 2.x first from https://winfsp.dev/rel/.
The LUKSbox binary statically links against
winfsp-x64.dll (provided by WinFsp), so without it the
binary fails to start with STATUS_DLL_NOT_FOUND. The
MSI refuses to install if WinFsp is missing and shows a
clear message; the portable .zip has no installer to
warn you, so install WinFsp first either way.

Windows (x86_64), recommended: download
luksbox-v0.1.0-x86_64-windows.msi,
double-click. The MSI installs LUKSbox to
C:\Program Files\LUKSbox\, prepends both
C:\Program Files\LUKSbox\ and <WinFspInstall>\bin
to the system PATH (so the loader resolves
winfsp-x64.dll and luksbox works in cmd /
PowerShell), drops a Start menu shortcut, and registers
the .lbx file extension (double-click any .lbx in
Explorer to open it). Uninstall via Apps & Features.

Windows (x86_64), portable: unzip
luksbox-v0.1.0-x86_64-windows.zip
and run the .exe in place. No installation, no Start
menu entry, no PATH change. Same binaries as the MSI.
Because nothing was added to PATH, you must either
(a) run from a shell where <WinFspInstall>\bin is on
PATH, or (b) drop a copy of winfsp-x64.dll next to
luksbox.exe in the unzipped folder.

libfido2 is statically linked into the .exe; no runtime
install needed for FIDO2.

See the Verify your download section at the top for
checksum verification commands.

Full Changelog: https://github.com/PentHertz/LUKSbox/commits/v0.1.0