-
-
Notifications
You must be signed in to change notification settings - Fork 32
Releases: jdx/aube
v1.21.0: Sharper pnpm lockfile parity
c0f6b22 A pnpm-parity polish release: lockfiles now carry the two top-level integrity checksums pnpm writes, root projects under sharedWorkspaceLockfile: false get their own lockfile back, and a handful of install correctness/UX bugs around peer-suffixed source deps and the progress bar are squared away.
Added
packageExtensionsChecksumandpnpmfileChecksuminpnpm-lock.yaml(#883 by @rubnogueira) β aube now computes and emits the two top-level integrity keys pnpm uses to guard the effectivepackageExtensionsmap and the active.pnpmfile.cjs/.pnpmfile.mjs. The implementation is a faithful Rust port of theobject-hashnpm package with pnpm's exact options (respectType: false,sha256, base64, unordered arrays/objects/sets), placed immediately afteroverrides:and beforeimporters:with the right blank-line separation. The result is byte-identical to pnpm on real workspaces, so round-tripping a lockfile between pnpm and aube no longer produces a gratuitous diff.aube-lock.yamloutput is unchanged, and workspaces withoutpackageExtensionsor a pnpmfile omit the keys entirely. A newWARN_AUBE_PNPMFILE_CHECKSUM_FAILEDcovers the best-effort case where a pnpmfile can't be read for hashing.
Fixed
-
Source deps with peer context no longer crash linking (#885 by @rubnogueira) β Fresh
aube install --forceruns that pulled a git or remote-tarball dependency which acquired a peer-context suffix (e.g.some-pkg@git+<sha>(react@18.2.0)) could fail withERR_AUBE_MISSING_PACKAGE_INDEX. The streaming fetch keys those indices under the canonical source coordinate, but the resolver's peer-context post-pass rewrites the dep_path to include(peer@ver)or a hashed_<10hex>marker;remap_indices_to_contextualizednever stripped the suffix back off, so the index was dropped. It now strips both suffix forms to recover the canonical key. -
Root workspace lockfile written under
sharedWorkspaceLockfile: false(#882 by @rubnogueira) β The per-project lockfile writer explicitly skipped the.importer, so the root's ownpnpm-lock.yaml(containing the root package's dependencies) silently disappeared after install. The root is now written like any other project, resolving to the workspace root directory, with existing-format preservation intact β no surpriseaube-lock.yamlnext to apnpm-lock.yaml. Filtered installs additionally only rewrite lockfiles for the selected project(s). This brings the per-project path in line with pnpm'sshared-workspace-lockfile=falsebehavior. -
Progress bar no longer overshoots on
workspace:/link:deps (#884 by @rubnogueira) β A monorepo install (most visibly afteraube clean) could finish withreused > resolvedand emitWARN_AUBE_PROGRESS_OVERFLOW. Link deps were credited toreusedonce in the streaming pass and then a second time by the post-filter_graphcatch-up fetch, which selected work purely by absence fromindicesβ and link deps never populateindices. The catch-up is now scoped to non-local packages (where it belongs), and the CI summary clampsreused + downloaded <= resolvedas a guard against future counter races. -
@endevco/aubenpm scope restored (#887 by @jdx) β The npm publish identity was inadvertently renamed to@jdx/aubein the v1.18.2 path, but that package isn't published, breakingpublish-npm. The root package, generated platform sub-packages (@endevco/aube-<os>-<arch>), the preinstall lookup, and install docs are all back on@endevco, matching what users actually install.
Full Changelog: v1.20.0...v1.21.0
π Sponsor aube
aube is part of jdx.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 jdx.dev. Individual and company sponsorships are what keep the project fast, free, and independent.
Assets 10
v1.20.0: npm env parity & global virtual store fixes
bfcd123 A tighter pnpm-parity release: scripts now see the full npm_* environment pnpm exports, git/tarball deps materialize correctly under the global virtual store, and per-project lockfiles in workspaces keep their original format. Plus a new Embedder profile that lets downstream tools drive aube's command layer as their own package-manager engine.
Added
-
Full pnpm
npm_*env parity for lifecycle &aube runscripts (#879 by @rubnogueira) β Scripts now receivenpm_execpath,npm_node_execpath,npm_package_json,npm_command,npm_config_node_gyp,npm_lifecycle_script, and the full deep-flattenednpm_package_*set (includingengines,config, andbin), envified with pnpm's exact allowlist and casing. PM-detection bridges and build tooling that branch on these vars now behave identically under aube.npm_commandis stamped per command family (run-script,install,rebuild,pack) and re-asserted at the spawn site so a preceding auto-install can't clobber it.npm_config_node_gyppoints at a lazy, dependency-free node-gyp stand-in in aube's cache that bootstraps the real node-gyp only when a tool actually invokes it.npm_node_execpath/NODEfall back to the ambientnodeonPATHwhen no runtime switch is active, so they're always populated.- Manifest-derived vars are applied after the build jail's
env_clear, so jailed dependency builds see them too. Diffed byte-for-byte against pnpm 11.5.
-
Embeddable
Embedderprofile (#862 by @colinhacks) β A compile-time pluggability foundation that exposes aube's command layer as a library and lets downstream tools register a&'static Embedderprofile controlling aube's name, version, lockfile filename, cache/data namespaces, env-var prefix, user-agent, and workspace-yaml name β plus host-owned behavior toggles and embedder-supplied setting defaults. Standalone aube is unchanged: the defaultconst AUBEprofile reproduces every prior constant verbatim. Direct-command embedders callset_embedderonce at startup;cli_mainhandles registration automatically.
Fixed
-
Preserve per-member lockfile format under
sharedWorkspaceLockfile: false(#880 by @rubnogueira) βaube installpreviously wrote a redundantaube-lock.yamlnext to a member's existingpnpm-lock.yamlbecause the per-project writer applied a single format detected at the workspace root to every member. Each member's existing lockfile format is now detected individually; only members with no lockfile fall back to the workspace default. This brings the per-project path in line withadd/remove/updateand with pnpm'sshared-workspace-lockfile=falsebehavior. -
Resolve git & remote-tarball deps in the global virtual store (#857 by @rubnogueira) β With
enableGlobalVirtualStore: true, a registry package depending on a git or remote-tarball dependency previously got a dangling sibling symlink, surfacing as runtime errors likeTypeError: Cannot read properties of undefined (reading 'prototype')for the canonicalrequest-promiseβrequest-promise-corechain. Two defects were fixed:- Shareable local sources (
git, remote tarball) are now materialized into the shared store like registry packages, not just into the per-project.aube/. - Sibling lookups now canonicalize git/tarball specs to the same
dep_paththe package itself is keyed under (promoting#committishβresolved, stripping pnpm's(peer@ver)suffix), so the symlink resolves.
Self-healing: the install clears stale per-project entries left by older aube versions. Non-GVS installs are unaffected.
- Shareable local sources (
Full Changelog: v1.19.0...v1.20.0
π Sponsor aube
aube is part of jdx.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 jdx.dev. Individual and company sponsorships are what keep the project fast, free, and independent.
Assets 10
v1.19.0: Node runtime switching, built in
ab844b5 The headline feature: aube now manages your project's Node.js version and aube's own version directly β no shims, no shell activation, no corepack dance. Pin Node via devEngines.runtime, .node-version, or .nvmrc and aube injects the right binary at every script and binary spawn. Pin aube via packageManager and aube re-execs itself under the requested version. Plus three install/scripts fixes around build approvals and override warnings.
Added
-
Node runtime switching (#861 by @jdx) β Projects can pin Node through
devEngines.runtime(pnpm 10.14+/11 compatible OpenJS spec),.node-version, or.nvmrc(searched upward, stopping at$HOME). Exact versions, ranges,lts,latest, and codenames likelts/jodall resolve. Resolution is zero-network on the hot path: PATH node β installed versions (mise installs at~/.local/share/mise/installs/reused read-only, plus aube's own~/.local/share/aube/nodejs/) β download per the newruntimeInstallersetting (auto|mise|aube;autodelegates tomise install node@<exact>when mise is on PATH, falling back to a SHASUMS256-verified nodejs.org download honoringnodeDownloadMirrors.release). The switched Node is injected intoaube run/aubr,aube exec(includingnodeenv shebangs),aubx/dlx(resolved from the original cwd), root + dep lifecycle scripts, and the build jail β and exported asnpm_node_execpath/NODE. Projects with no pin behave exactly as before, with nonode --versionprobe.// package.json { "devEngines": { "runtime": { "name": "node", "version": "22.11.0", "onFail": "error" } } }
Engines interplay:
engines.node/engineStrictnow validate against the switched node. The newruntimeOnFailsetting (download|error|warn|ignore) is the air-gapped-CI override; version files default todownload, baredevEnginesto the spec'serror. Lockfile pins use pnpm 10.14+'s exactnode@runtime:shape with per-platform URLs andsha256-integrity β and parsing them doubles as a compat fix for pnpm-11 lockfiles aube previously misread as registry deps. -
aube runtimeCLI (#861 by @jdx) βaube runtime set node <version>(pnpm 11 parity β writesdevEngines, installs, records the pin;-gdelegates tomise use -g) andaube runtime list.aube doctorgainsnode-source,node-requested,node-provenance, andnode-binrows.aube runtime set node 22.11.0 aube runtime list -
aube self-version switching (#861 by @jdx) β
managePackageManagerVersions(previously a documented no-op, default on, pnpm 10 parity) now re-execs aube under the version requested bydevEngines.packageManager(ranges) orpackageManager: "aube@<exact>". The switch happens before dispatch β soaube installand any chained auto-installs run under the pinned binary β and preserves theaube/aubr/aubxmulticall name. A guard env degrades a broken install to a warning rather than an exec loop. Self-downloads are verified against GitHub's server-computed release asset digests (assets[].digest, tamper-evident under immutable releases), with release metadata served from mise-versions.jdx.dev (CDN-cached, no rate limits) and falling back to the GitHub API (honoringGITHUB_TOKEN/GH_TOKEN, scoped to api.github.com),.sha256siblings for custom mirrors, then TLS-only. SettingmanagePackageManagerVersions=falserestores the previous strict-validation behavior. Intel macOS has no published asset and errors with a pointer to mise.
Fixed
-
(scripts) Require exact source keys for non-registry build approvals (#858 by @jdx) β Source-backed dependencies (
file:,git:, raw tarballs) no longer inherit lifecycle build approval from bare package names orname@semverpins. They must be allowed via an exact source key β e.g.esbuild@file+abc123β with separateallowed_sources/denied_sourcessets inBuildPolicy. WorkspaceonlyBuiltDependenciesby name now correctly skipsfile:postinstalls until the source key is approved. Graph hashing also folds local source specifiers into the package id, so different file/git bytes at the same manifest version get distinct virtual-store hashes (with cascade to parents). -
(scripts) Match pnpm-style URL source keys for build approvals (#860 by @jdx) β Follow-up to #858: non-registry approval keys now use the pnpm-authored shapes (e.g.
dep@file:vendor/depordep@<tarball-url>) instead of lockfiledep_pathbases.allowBuildskeys that mix semver and URL/source specs in a||union are rejected (both orderings) with a clear error. Lifecycle-script docs and the generatedallowBuildssettings reference now spell out the exact source-key shapes. -
(install) Warn on deprecated
$override refs (#859 by @jdx) β Mergedoverrideswhose values start with pnpm's deprecated$reference syntax now logWARN_AUBE_OVERRIDE_DOLLAR_REF_DEPRECATED, pointing users toward catalog entries. Resolution and drop behavior are unchanged; the existingWARN_AUBE_OVERRIDE_MISSING_DEPpath still runs for unresolved$refs.
Changed
- Refresh benchmarks for v1.18.2 (#851 by @mise-en-dev) β Public warm-install ratios: vs Bun Γγ°γ€ (unchanged), vs pnpm Γγ°γ€ β Γγ°γ€. Repeat-test: vs Bun Γγ°γ€ (unchanged), vs pnpm Γγ°γ€ β Γγ°γ€. Absolute aube warm-install times moved from 272ms β 383ms on the refreshed run.
Full Changelog: v1.18.2...v1.19.0
π Sponsor aube
aube is part of jdx.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 jdx.dev. Individual and company sponsorships are what keep the project fast, free, and independent.
Assets 10
v1.18.2: Project moves to jdx
438b868 A maintenance release that completes aube's move from the endevco namespace to jdx. There are no behavior changes β but if you install aube from npm or Homebrew, the package coordinates have moved.
Changed
-
Project migrated to the
jdxnamespace (#845 by @jdx) β Repository, docs, package metadata, and release pipelines now live underjdx. User-visible coordinates:- npm:
@jdx/aube(previously@endevco/aube) - Homebrew tap:
jdx/homebrew-tap - Repository: github.com/jdx/aube
- Docs: aube.jdx.dev
Cargo.toml,README.md,SECURITY.md,LICENSE, generated CLI/settings/error-code references, Debian/PPA/COPR packaging, and theaube sponsorsblurb all point at the new locations. No install, resolver, or lockfile behavior changed in this release. - npm:
Upgrading
If you install aube via npm or Homebrew, update the package name on your next install:
# npm npm install -g @jdx/aube # Homebrew brew install jdx/tap/aube
Existing installs continue to work; only fresh installs need the new coordinates.
Full Changelog: v1.18.1...v1.18.2
π Sponsor aube
aube is part of jdx.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 jdx.dev. Individual and company sponsorships are what keep the project fast, free, and independent.
Assets 10
v1.18.1: Conflict-aware lockfiles and verified tarballs
021bb82 A small patch release focused on install robustness: lockfiles with Git merge conflict markers now recover gracefully, aube update --global works from anywhere, and lockfile tarball URLs are verified against the registry before download.
Fixed
-
(install) Regenerate conflicted lockfiles (#843 by @jdx) β When
aube-lock.yamlstill contains Git conflict markers (<<<<<<<,=======,>>>>>>>), install now treats it as a recoverable prefer-frozen parse failure rather than aborting. It emits the newWARN_AUBE_LOCKFILE_CONFLICT_MARKERSwarning and regenerates the lockfile frompackage.json, so a plainaube installafter a messy merge just works. -
(update) Support global updates (#840 by @jdx) β
aube update --global(andaube update -g <pkg>) now routes through the global install directory instead of requiring a projectpackage.json, so it works from any directory β including outside a repo. Each global install runs the normal update pipeline with--latestand exact manifest pins, then bin shims are relinked and stale executables removed. Named packages resolve by alias; unknown names fail withnot globally installed. When combined with a workspace--filter,--globaltakes precedence and leaves workspace manifests untouched. Fixes #839.aube update -g # update every globally installed tool aube update -g prettier # update a single global tool
Security
- (install) Verify lockfile tarball URLs (#842 by @jdx) β When the lockfile pins an explicit registry tarball URL (e.g.
lockfile-include-tarball-url=trueor npm-alias entries), install now fetches per-version registry metadata and comparesdist.tarballto the lockfile URL before downloading. Mismatches abort with the newERR_AUBE_TARBALL_URL_MISMATCH(exit 34). Exact matches pass, and lockfile URLs onregistry.npmjs.orgare still accepted on alternative hosts when the/-/...tgzpath matches, so Verdaccio and other local mirrors continue to work β but tampered paths or arbitrary hosts impersonating npm are rejected.
Changed
- Refresh benchmarks for v1.18.0 (#841 by @mise-en-dev) β Warm-install ratios improved from Γγ°γ€ to Γγ°γ€ vs. Bun; vs. pnpm holds steady at Γγ°γ€.
Full Changelog: https://github.com/endevco/aube/compare/v1.18.0...v1.18.1
π 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.
Assets 10
v1.18.0: sponsors command & repository field normalization on publish
a3ad6c6 A small feature + fix release: a new aube sponsors command and a publish-time fix that normalizes the repository manifest field for stricter registries.
Added
-
aube sponsorscommand (#824 by @jdx) β A new top-level subcommand that acknowledges 37signals and links to the canonical en.dev sponsor pages. The root README also gains a "Sponsored by 37signals" line.aube sponsors
Fixed
- (publish) Normalize string
repositoryfields in the publish manifest (#826 by @jdx) β Whenpackage.jsoncontains a stringrepositoryvalue, thePUTbody now rewrites it to{ "type": "git", "url": "<normalized>" }, matching npm/pnpm 11.5.1 behavior. Shorthand forms (owner/repo,github:...,gitlab:...,bitbucket:...) expand to fullgit-suffixed HTTPS URLs; explicithttps,git@, and URL fragments are preserved, and existing object-shapedrepositoryvalues are left untouched. This unblocks publishing to registries that reject bare-string repository fields.
Changed
- Refresh benchmarks for
v1.17.1(#820 by @mise-en-dev) β Warm-install ratios vs. Bun improved from Γγ°γ€ to Γγ°γ€, and vs. pnpm from Γγ°γ€ to Γγ°γ€.
Full Changelog: https://github.com/endevco/aube/compare/v1.17.1...v1.18.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.
Assets 10
v1.17.1: CI runner revert
60fdeb8 A CI-only patch with no user-facing changes β published to revert the GitHub-hosted runner migration from v1.17.0 after it slowed builds.
Changed
- (ci) Switch back to Namespace runners (#819 by @jdx) β Reverts #814, restoring Namespace profiles for CI, bench, docs, COPR/Homebrew, and release-plz jobs, including the native ARM64 Linux PGO+BOLT release job on
namespace-profile-endev-linux-arm64-large. Windows and BATS shards continue to run on GitHub-hosted runners.
No runtime or CLI behavior changed in this release; if you're already on v1.17.0 there's nothing new to pick up.
Full Changelog: https://github.com/endevco/aube/compare/v1.17.0...v1.17.1
π 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.
Assets 10
v1.17.0: Staged publishes, hoisting limits, and tarball integrity
55f4ca0 A catch-up release for the tag that introduced staged-publish trust, linker hoisting limits, remote tarball integrity fixes, and OTP support for dist-tag writes. This release is backfilled without binary assets; use v1.17.1 or newer for downloadable artifacts.
Added
- (resolver) Trust staged publishes so packages published through staged registry flows can resolve correctly once promoted (#810 by @jdx).
- (linker) Add hoisting limits to keep dependency placement bounded in large or complex graphs (#809 by @jdx).
Fixed
- (lockfile) Preserve remote tarball integrity metadata when resolving packages from remote tarball specs (#812 by @jdx).
- (dist-tag) Support OTP-protected dist-tag writes (#811 by @jdx).
Changed
- (ci) Switch release, docs, bench, COPR/Homebrew, and most CI jobs to GitHub-hosted runners (#814 by @jdx). This was reverted in
v1.17.1after slower builds. - (release) Use trusted publishing for cargo releases (#816 by @jdx).
- (deps) Bump
tomlfrom 0.8.23 to 1.1.2+spec-1.1.0 (#796 by @dependabot). - (deps) Bump
sha2from 0.10.9 to 0.11.0 (#790 by @dependabot). - Refresh benchmarks for
v1.16.1(#808 by @jdx).
Tests
- Cover alias peer cycles in the resolver (#813 by @jdx).
- Cover remote tarball fallback lookup in lockfile handling (#815 by @jdx).
Full Changelog: https://github.com/endevco/aube/compare/v1.16.1...v1.17.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.
Assets 3
v1.16.1: Publish polish and linker hardening
ed47362 A small follow-up to v1.16.0 that unblocks aube publish for mise-style version tags, broadens npm OTP detection, accepts pnpm's linkWorkspacePackages: deep, and adds defense-in-depth against unsafe package aliases in the linker.
Fixed
-
(publish) Normalize semver metadata before publish (#806 by @jdx) β
aube publishnow parsespackage.json#versionthroughnode_semverand strips leading-vand other npm-style noise before computing tarball names,versions.<v>keys, and dist-tags in the PUT body. When normalization changes the on-disk string, publish rebuilds the archive sopackage/package.jsoninside the.tgzmatches the cleaned version. This fixes registry rejections like "New versions must be valid semver" for projects (e.g. mise) that tagv2026.5.16. The same PR also widens the interactive OTP retry to detect npm'sone-time pass/one time passwording (previously onlyone-time passwordtriggered the prompt). -
(add) Accept
linkWorkspacePackages: deep(#799 by @jdx) β pnpm's tri-statelinkWorkspacePackagessetting (true/false/"deep") is now parsed across workspace YAML,settings.toml, and.npmrc.aube addenables workspace-sibling lookup whenever the resolved value isn'tfalse, sodeepprojects getworkspace:^manifest writes instead of registry specifiers. Docs no longer claimdeepis unsupported.
Security
- (linker) Reject unsafe package aliases under
node_modules(#800 by @jdx) β A newvalidate_package_link_nameguard rejects path-like package names and dependency keys (.., extra slashes, absolute paths, Windows drive prefixes, null bytes, anything that isn't a valid npmnode_modulesslot) before they're used to build install paths. The check runs during materialize, isolated top-level and workspace symlinks, and hoisted placement planning βHoistedPlacements::from_graphnow returnsResultso unsafe names fail install/rebuild instead of silently planning bad paths. Failures surface as the newERR_AUBE_UNSAFE_PACKAGE_NAME(exit code 92).
Full Changelog: https://github.com/endevco/aube/compare/v1.16.0...v1.16.1
π 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.
Assets 10
v1.16.0: pnpm 11 parity, trusted publishing, and git tarball integrity
817207d This release brings aube's pnpm lockfile handling up to pnpm 11 parity, pins integrity for hosted git tarballs, and fixes several publish-flow gaps including npm Trusted Publishing and interactive OTP prompts. It also resolves a long-standing install error when a workspace child depends on the workspace root via workspace:*.
Added
-
(pnpm) pnpm 11 lockfile parity (#761 by @jdx) β
aube-lockfilenow reads/writes pnpm'sgitHostedmetadata and preserves non-derivable registry tarball URLs (e.g. GitHub Packages), so round-trips against pnpm 11 lockfiles stay byte-clean. The CLI also picks up several pnpm-shaped behaviors at the same time:aube auditmergesauditConfig.ignoreGhsas/auditConfig.ignoreCveswith--ignore,aube publish --jsonemits a single npm-compatible object for a single-package publish (array only for multi-package), and provenance now acceptsNPM_ID_TOKENin addition to GitHub's default OIDC token. -
(publish)
aube stagecommand (#762 by @jdx) β New visible npm-compat stub. WithoutnpmPathit exits with a clear "not implemented β usenpm stage" message; withnpmPathconfigured it delegates the call (including--registryand trailing args) to the underlying npm binary, matching howwhoamiandset-scriptalready behave. -
(publish) npm Trusted Publishing (OIDC) (#763 by @jdx) β
aube publishnow exchanges a GitHub Actions OIDC token for a short-lived npm bearer token before upload, so tokenless Trusted Publishing workflows work end-to-end. The exchange happens after theprepublishOnlylifecycle and tarball build, so it uses the final packaged name (important if a hook renames the package). If the OIDC fetch fails for any reason (network, non-2xx, malformed JSON) aube debug-logs and falls back to the existing.npmrcauth instead of erroring out. -
(publish) Interactive OTP prompt on 2FA challenge (#767 by @jdx) β When the registry rejects a publish PUT with a 401/403 that looks like an OTP/2FA challenge and
--otpwas not provided, aube now prompts for a code (masked input viademand) and retries the request once. In non-interactive runs it returns a clear--otp <CODE>hint instead of failing with a generic auth error. Plain bad-token failures are still surfaced as auth errors rather than misread as OTP prompts.
Fixed
-
(resolver) Hosted git tarball integrity is pinned and verified (#783 by @jdx) β Hosted git dependencies fetched through the codeload fast path now have a SHA-512 SRI computed on first fetch, persisted on the lockfile entry, and verified before extraction on subsequent installs. Codeload cache keys also mix in the integrity hash so tarballs with different contents can't collide on the same cache directory.
-
(update)
workspace:*against the workspace root resolves (#757 by @fu050409) β When the workspace rootpackage.jsondeclared its ownname/versionand a child package depended on it viaworkspace:*,aube update/aube installfailed withERR_AUBE_NO_MATCHING_VERSIONbecause the root was never added to the workspace version map. The root is now included in bothinstall/workspace.rsandupdate.rs, with a0.0.0fallback when no version is set. -
(lockfile) No more lossy
package-lock.jsonrewrites from override drift (#753 by @jdx, fixes #752) β Drift checks are now format-aware: npm and yarn lockfiles don't round-trip the top-level override snapshot that aube/pnpm/bun use for drift detection, so a non-emptyoverridesblock inpackage.jsonmade every npm install look stale and rewrotepackage-lock.json(potentially reshaping platform-optional package entries and peer metadata). Override-drift comparisons are now skipped for npm and yarn lockfiles, and remain strict foraube-lock.yaml,pnpm-lock.yaml, andbun.lock.
Changed
-
(deps) HTTP/TLS stack refresh (#780 by @jdx) β Workspace
reqwestbumped to 0.13 (with the renamedrustlsfeature) and thehickory-proto/hickory-resolverDNS stack moved to 0.26.1, collapsing duplicate reqwest 0.12/0.13 entries. A newaube_util::http::with_webpki_root_fallbackhelper merges Mozilla's baked-in roots withrustls-platform-verifieron Unix (except Android) and Windows, and registry clients, OSV/supply-chain probes,aube login, and the update notifier all build their HTTP clients through it so TLS trust stays consistent across the upgrade. -
(docs) Clearer
prunevsstore prune(#758 by @jdx) βaube prune --helpnow explicitly describes its lockfile-driven cleanup of the projectnode_modules(including virtual-store entries and.binlinks) and points users ataube store prunefor global store cleanup, which now has its own long help covering store-path scope, cached-index reachability, and hardlink/reflink behavior.
New Contributors
Full Changelog: https://github.com/endevco/aube/compare/v1.15.0...v1.16.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.