Repository navigation
v0.1.3 — Standalone binaries, and four .env bugs fixed
This release adds prebuilt, self-bootstrapping binaries for six platforms,
published straight to this GitHub Releases page — so insta-boards no longer
requires a Python toolchain to install. It also fixes four real bugs in
.env handling that silently ignored your configuration, including on
plain PyPI installs.
Prebuilt binaries — no Python required
Every release now ships six archives, built and smoke-tested in CI:
| Platform | Archive |
|---|---|
| Linux x86_64 | insta-boards-x86_64-unknown-linux-gnu.tar.gz |
| Linux aarch64 | insta-boards-aarch64-unknown-linux-gnu.tar.gz |
| macOS Intel | insta-boards-x86_64-apple-darwin.tar.gz |
| macOS Apple Silicon | insta-boards-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | insta-boards-x86_64-pc-windows-msvc.zip |
| Windows ARM64 | insta-boards-aarch64-pc-windows-msvc.zip |
The binaries are built with uvbox,
which produces a small launcher rather than a frozen Python. On first run
the launcher bootstraps uv, fetches a Python interpreter and installs the
package; subsequent runs are fast and offline.
First run needs network access. This is not an offline bundle — the
interpreter is downloaded on demand. After that the tool runs as a normal
Python process and inherits your working directory, sodata/,secrets/
and.envresolve relative to where you invoke it.
Generated binaries also expose a small self-management CLI:
insta-boards self update # upgrade to the latest published version
insta-boards self remove # uninstall
insta-boards self path # print the install root
insta-boards self cache # print the cache dir
insta-boards self uv # print the bundled uv pathFour .env bugs fixed
These affected every install method, not just the new binaries — the
packaging audit is what surfaced them.
| Bug | Symptom | Fix |
|---|---|---|
| Eager constants | IG_DOWNLOAD_TIMEOUT, IG_DOWNLOAD_DELAY, IG_DOWNLOAD_RETRIES, IG_DOWNLOAD_BACKOFF were read at import time, before load_env() ran — values from .env were silently ignored. |
Replaced with lazy accessors, evaluated at call time. |
IG_STATE_PATH in sync |
The state path was computed before load_env(), so a custom path in .env had no effect. |
load_env() now runs first in main(), and --workdir is applied before dispatch. |
IG_DOWNLOAD_POOL_REUSE |
Parsed but never passed anywhere — a dead knob. | Now wired through to DownloadPool; exposed as DownloadPool.reuse_pool. |
| Empty value masking | An empty assignment (KEY=) in a higher-priority .env counted as set and shadowed a real value in a lower-priority .env. |
load_env() switched to dotenv_values() with manual application: an empty value means "not set". |
More deterministic data root
repo_root() no longer guesses. Resolution order is now:
IG_REPO_ROOT(absolute path or~-prefixed), if set;- otherwise the nearest ancestor that is a real checkout — it must contain
bothpyproject.tomlandsrc/paths.py; - otherwise the current working directory.
This stops an unrelated pyproject.toml higher up the tree from hijacking
where data/ is written — which matters now that the binary runs from
wherever you happen to be.
Docs and tests
README.md— new Prebuilt binaries section, a Where configuration is
read from subsection, and theIG_REPO_ROOTvariable.docs/uvbox-packaging-audit.md— the full.envaudit report.- 18 regression tests covering the lazy accessors,
.envprecedence and
repo_root()resolution.
Upgrading
# PyPI
uv tool upgrade insta-boards
# or a prebuilt binary
insta-boards self updateExisting installs need no migration — the .env fixes make previously
ignored settings take effect, so double-check IG_DOWNLOAD_* and
IG_STATE_PATH if you were setting them and seeing no change.