v1.33.0: Script completions, embeddable Node wrappers, and pnpm 11.16+ compatibility
·
307 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
This release brings package.json script completions and a polished aube run picker, extends the library-embedding work so hosts can wrap the Node runtime, adds FreeBSD support, and tracks pnpm 11.16/11.17 compatibility across settings, version, and login hardening.
Added
- Shell completion for
package.jsonscripts (#1108 by @jdx) —aube run <TAB>now completes the scripts declared in the nearestpackage.json, showing each script's command as the description. This works through a hand-written usage spec fragment merged onto the generated completions, so no reinstall is needed —aube completion <shell>re-derives the spec at TAB time and runs the completer per project. Note:-C/--diron the line being completed is not forwarded to the completer (a usage limitation). - Embedders can wrap the Node runtime, not just select one (#1086 by @jdx) — Extends the embedder Node hook from #1079 so a host can describe a full Node invocation rather than just a bin dir. A new
EmbedderRuntimebuilder offers two constructors:selector(bin_dir)(the version-manager case, identical to #1079) andwrapper(node_program)for instrumenting runtimes, transpiling loaders, and sandboxes — keeping a shim onPATHand at$NODEwhile pointingnpm_node_execpathat the real binary sonode-gypstill resolves correctly. Wrappers can contribute lifecycle-script env viaenv_append/env_set(withNODE_OPTIONSappending by default). Registration is process-wide viaset_embedder_runtime(first-write-wins), with per-install and per-call overrides, and new in-process entry pointsembed::{run, exec, dlx, node}that anchor on an explicitproject_dir. Every field is optional; unset reproduces standalone aube byte-for-byte. See the new "Node runtime" and "Run scripts, binaries, and Node" sections indocs/embedding/rust.md. - Canonical pnpm 11.16+ update and audit settings (#1104 by @jdx) — Adds support for pnpm's
update.ignoreDeps,audit.level, andaudit.ignoreworkspace settings. The deprecatedupdateConfig.ignoreDependencies,auditConfig, and top-levelauditLevelspellings are retained as fallbacks, with the canonical keys taking precedence.update.ignoreDepsapplies to bothaube updateandaube outdated, andaube auditnow resolves its severity from config instead of hard-defaulting tolow(CLI--audit-levelstill wins). Projects using pnpm's new configuration behave the same under aube without rewriting. aube version from-git(#1102 by @jdx) — Acceptsfrom-gitas a version target, resolving the latest semver-like Git tag viagit describeand normalizing a leadingv. Matchespnpm version from-gitadded in pnpm 11.17.- FreeBSD support (#1084 by @jdx) —
Platform::current()now detects FreeBSD as a host platform, unblocking Node runtime resolution via PATH, installed-Node scans, and mise (previously it hard-errored). Scoped to source compatibility: there are no published FreeBSD release binaries, soaube self-updatereturns a clear message pointing topkg/mise instead.
Fixed
aube runscript picker no longer scrambles the output (#1109 by @jdx) — Long script commands that wrapped past the terminal width used to stack duplicate frames on every keypress. The picker now shows the script name as the label with the command aligned in a secondary column, truncated to the real terminal width, and starts in filtering mode so typing searches script names immediately. Bundlesdemand2.0.4 for correct redraws on resize.- Vite and VitePress keep the global virtual store fast path (#1106 by @jdx) — aube now writes pnpm-compatible
node_modules/.modules.yamlmetadata exposing its virtual-store path, so Vite 8.1+ works with GVS natively without manualserver.fs.allowconfiguration. Older Vite releases receive an equivalent project-local compatibility copy while unrelated dependencies stay shared. GVS is no longer disabled by default for Vite/VitePress. - Registry-name patches now apply to npm-aliased installs (#1085 by @jdx) — A patch declared against a package's registry name (e.g.
is-odd@3.0.1) was not applied when the package was installed under an npm alias (odd-alias: npm:is-odd@3.0.1), even though the lockfile recorded the patched identity. Patch lookups now fall back to the registry name, matching pnpm's behavior.
Security
- Web-login token responses are capped at 64 KiB (#1103 by @jdx) — A malicious or compromised registry could previously return an unbounded successful token response and force aube to buffer it. Successful responses are now streamed with a 64 KiB limit (enforced for both declared and chunked bodies), failing with
ERR_AUBE_WEB_LOGIN_RESPONSE_TOO_LARGEwithout persisting a token. Mirrors the hardening in pnpm 11.17.
Full Changelog: v1.32.0...v1.33.0
💚 Sponsor aube
aube is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools including mise. Work on aube is funded by sponsors.
If aube is saving your team install time or CI minutes, please consider sponsoring at jdx.dev. Individual and company sponsorships are what keep the project fast, free, and independent.