Repository navigation
LocalDrop 1.1.2
[1.1.2] — 2026-10-02
Two packaging faults made the released binaries unusable. Both passed CI,
passed localdrop --check, and were only found by installing the published
artefact and opening it. 1.1.1 was withdrawn within minutes of publication for
the first of them.
Fixed
- The web UI was never served. The SPA directory had two resolvers:
launcher._bundled()usedsys._MEIPASS, whilemain.SPA_DISTused
Path(__file__).parent / "static". PyInstaller points__file__at
<bundle>/localdrop/main.py, so the second looked in
<bundle>/localdrop/staticwhile the files ship in<bundle>/static.
SPA_DIST.exists()was therefore always False in a frozen build, so the
catch-all route and the/assetsmount were never registered:
GET /api/v1/versionreturned 200 andGET /returned 404.if spa.exists()made it silent.--checkmissed it precisely because it
already used the correct resolver. Both callers now share one implementation
inlocaldrop/paths.py, and a missing SPA logs an error at startup instead of
quietly degrading to 404s. - The Windows archive dropped the whole PyInstaller payload. The archive walk
was gated onexe.is_dir(), which is never true becauseexeis a file in
both build modes, so_internal/was omitted and the binary died with
Failed to load Python DLL .../_internal/python312.dll. The published zip had
3 entries where it should have had 803.
Added
- Regression tests for both, in the shape that failed: one builds a fake
<bundle>and assertsmain.SPA_DISTfinds the realindex.html, the other
builds a one-directory payload and asserts the archive contains it. Both were
verified to fail against the code that shipped.
Full changelog: https://github.com/Abhi-Subedi/LocalDrop/blob/v1.1.2/CHANGELOG.md
Upgrade notes: forward-only migrations. Take a backup first (docs/BACKUP.md).