aube 2.2.4

Aube — a fast Node.js package manager
Documentation
[package]
name = "aube"
description = "Aube — a fast Node.js package manager"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
readme.workspace = true
include = ["src/**/*.rs", "src/**/*.mjs", "assets/**", "build.rs"]

# The command layer is a library so it can be embedded (construct
# `commands::install::InstallOptions`, call `commands::install::run`)
# without shelling out. The three bins below are thin wrappers over
# `aube::cli_main`.
[lib]
name = "aube"
path = "src/lib.rs"

[[bin]]
name = "aube"
path = "src/main.rs"

# Multicall shims for `aube run` / `aube dlx`. Each stub `include!`s
# `src/main.rs` so Cargo treats them as distinct targets (avoiding the
# "same source in multiple bin targets" warning) while keeping a single
# source of truth. Dispatch happens at runtime via `rewrite_multicall_argv`,
# which keys off `argv[0]`. `test = false` prevents `cargo test` from
# re-running the shared test suite three times.
[[bin]]
name = "aubr"
path = "src/bin/aubr.rs"
test = false

[[bin]]
name = "aubx"
path = "src/bin/aubx.rs"
test = false

[dependencies]
aube-codes = { workspace = true }
aube-lockfile = { workspace = true }
aube-runtime = { workspace = true }
aube-manifest = { workspace = true }
aube-registry = { workspace = true }
aube-util = { workspace = true }
aube-resolver = { workspace = true }
aube-settings = { workspace = true }
aube-store = { workspace = true }
aube-linker = { workspace = true }
aube-scripts = { workspace = true }
aube-workspace = { workspace = true }
bytes = "1"
xx = { workspace = true }
usage-rs = { workspace = true }
strum = { workspace = true }
clx = { workspace = true }
console = "0.16"
demand = "2"
reqwest = { workspace = true }
tokio = { workspace = true }
tokio-util = { workspace = true }
miette = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
spdx = { workspace = true }
yaml_serde = { workspace = true }
base64 = { workspace = true }
sha1 = { workspace = true }
sha2 = { workspace = true }
blake3 = { workspace = true }
hex = { workspace = true }
# Provenance/signing stack, only needed by `aube publish`. Optional so
# embedders (mise) that depend on the aube library for install/resolve do not
# pull the sigstore + x509 + OIDC supply chain. Gated by the `publish` feature.
sigstore-sign = { workspace = true, optional = true }
sigstore-oidc = { workspace = true, optional = true }
sigstore-types = { workspace = true, optional = true }
ambient-id = { workspace = true, optional = true }
tracing = { workspace = true }
tracing-subscriber = { workspace = true }
# zlib-ng re-enabled at the binary level only: feature unification makes the
# C backend win for the whole aube build (same perf as before), while library
# crates stay on the pure-Rust backend so embedders don't inherit a cmake
# build dependency. See the workspace flate2 entry.
flate2 = { workspace = true, features = ["zlib-ng"] }
glob = { workspace = true }
ignore = { workspace = true }
node-semver = { workspace = true }
rayon = { workspace = true }
tar = { workspace = true }
tempfile = "3"
diffy = { workspace = true }
libc = { workspace = true }
pathdiff = "0.2"
is_ci = "1"
ci_info = "0.14"
pluralizer = "0.5"
toml = { workspace = true }
mimalloc = { version = "0.1", default-features = false, optional = true }
ratatui = { version = "0.30", default-features = false, features = ["crossterm", "std"], optional = true }
crossterm = { version = "0.29", optional = true }

[features]
default = [
    "mimalloc",
    "config-tui",
    "publish",
    "rustls",
    "hickory-dns",
    "workspace-yaml-preserve",
]
# Include the interactive `aube config tui` browser. Builds that want the
# smallest dependency graph can disable default features and omit this.
config-tui = ["dep:crossterm", "dep:ratatui"]
# Swap the global allocator to mimalloc on release builds. See
# crates/aube/src/main.rs for the gate. `--no-default-features`
# falls back to the system allocator. Needed for Valgrind, ASAN,
# Miri, and distros that require libc malloc.
mimalloc = ["dep:mimalloc"]
# `aube publish` provenance/signing. Off for embedders that only need the
# install/resolve library surface, keeping the sigstore stack out of their build.
publish = ["dep:sigstore-sign", "dep:sigstore-oidc", "dep:sigstore-types", "dep:ambient-id"]
# TLS backend for the crate's own reqwest clients and the aube-registry /
# aube-util it re-exports. rustls only (no OpenSSL / native-tls — see CLAUDE.md);
# required. Embedders depend with `default-features = false, features = ["rustls"]`.
rustls = ["reqwest/rustls", "aube-registry/rustls", "aube-util/rustls"]
# In-process DNS caching. Default for the aube binary; opt-in for embedders,
# because reqwest's hickory-dns feature flips the default resolver for every
# client in the final binary (see aube-registry's feature docs). Lists
# reqwest/hickory-dns directly — mirroring `rustls` — so the crate's own
# reqwest clients keep it even if aube-registry's feature graph changes.
hickory-dns = ["reqwest/hickory-dns", "aube-registry/hickory-dns"]
# Preserve comments and formatting when commands mutate existing workspace
# YAML. Embedders can omit this to avoid yamlpatch's tree-sitter dependencies.
workspace-yaml-preserve = ["aube-manifest/workspace-yaml-preserve"]

[dev-dependencies]
assert_cmd = "2"
predicates = "3"
tempfile = "3"

[build-dependencies]
serde_json = { workspace = true }

[[test]]
name = "e2e"
path = "tests/e2e.rs"