This release closes three Yarn Berry compatibility gaps (portal:, exec:, and patch: protocols), adds an aube add --deny-build flag for strictDepBuilds=true workflows, and fixes two install-correctness bugs around workspace updates and Bun patched dependencies.
Added
-
(yarn) Berry
portal:andexec:protocols (#729 by @jdx) — Yarn Berry lockfile entries usingportal:andexec:are now parsed instead of skipped, and round-trip cleanly when aube writes the lockfile back (portal:aslinkType: soft,exec:as a generated hard-link package).portal:targets materialize as local packages whose dependencies are followed (matching Yarn's documented difference fromlink:);exec:generator scripts run into a temp build directory and the generated package is imported, with versions and dependencies locked at resolve time.exec:generators require Node.js onPATH, are blocked under--ignore-scripts, and are rejected if the generator path resolves outside the project root. -
(yarn) Berry
patch:protocol (#728 by @jdx) — Berrypatch:resolutions are now parsed into aube's patched-dependency map (builtin patches are skipped), preserved on lockfile write, and threaded through install/link so the referenced Yarn patch files are actually applied during materialization. Previously these entries were silently dropped, so Berry projects relying onpatch:could install with unpatched package contents. -
(add)
aube add --deny-build=<pkg>(#730, closes #726, by @jdx) — Repeatable flag that records a dependency's lifecycle scripts as reviewed-and-denied by writingallowBuilds.<pkg>=falsebefore install. This letsstrictDepBuilds=trueworkflows explicitly skip selected package builds without failing the install, and is forwarded through global installs (aube add -g --deny-build=<pkg>). Specifying the same package in both--allow-buildand--deny-buildis rejected with the newERR_AUBE_CONFLICTING_BUILD_FLAGS.# Mark esbuild's postinstall as reviewed-and-denied, then install aube add --deny-build=esbuild esbuild
Fixed
-
(update) Workspace-member
aube updatewrites to the root lockfile (#732 by @jdx) —aube updaterun inside a workspace member previously started from the nearest project root and producedsub/aube-lock.yaml, disagreeing withaube install(which already targets the workspace root). Plain member updates now merge into the shared workspace-rootaube-lock.yamlvia the same helper used by filtered/recursive updates, carrying per-importerworkspace_extra_fieldsalongside dependency and skipped-optional metadata. -
(bun) Bun top-level
patchedDependenciesare applied at install (#724 by @jdx) — aube preserved Bun'spackage.json#patchedDependenciesinbun.lock, but install-time patch loading only readpnpm.patchedDependencies,aube.patchedDependencies, and workspace YAML entries — so Bun-only projects could install successfully while materializing unpatched package contents. Bun's top-level field is now merged into the patch sources used by install (including for BOM-prefixedpackage.json), and is correctly removed when the map becomes empty.
Full Changelog: v1.14.1...v1.15.0
💚 Sponsor aube
aube is part of en.dev — an independent developer-tooling studio run by @jdx, also behind mise. Work on aube is funded entirely by sponsors.
If aube is saving your team install time or CI minutes, please consider sponsoring at en.dev. Individual and company sponsorships are what keep the project fast, free, and independent.