SFG545 d9a30f5d56 feat: add metapackage build support and fail-fast custom scripts
- add BuildType::Meta handling in builder and interactive spec output
- allow metapackage specs without sources and expose is_metapackage()
- avoid build deps in install planning for metapackages
- run custom non-function build.sh scripts with `sh -e` to stop on first failure
- add regression test for custom script fail-fast behavior
- apply small cleanup refactors (let-chains/iterator simplifications)
2026-02-25 16:49:36 -06:00

depot

Depot is a source-based package manager designed for Linux. It focuses on reproducibility, atomic installations, and ease of cross-compilation.

Features

  • Source-based: Downloads, extracts, and builds packages from source.
  • Dependency Management: Automatically handles build-time and runtime dependencies.
  • Atomic Installation: Uses a transactional approach to ensure system consistency.
  • Multi-system Build Support: Built-in support for Autotools, CMake, Meson, Rust (Cargo), and custom build scripts.
  • Cross-Compilation: Easily build packages for different architectures using cross-toolchains.
  • Repository Management: Create and manage local package repositories.

Quick Start

Building Depot

cargo build --release

Installing a Package

To install a package from a spec file:

depot install packages/zlib.toml

To install from a pre-built package archive:

depot install zlib-1.2.11-1-x86_64.depot.pkg.tar.zst

Command Reference

  • install <SPEC_OR_ARCHIVE>: Build and install a package.
    • Resolves a full dependency plan first (binary repos and/or source specs), then executes in dependency order.
    • Use --yes for non-interactive confirmation/provider selection.
    • Use --dry-run to print the plan without performing work.
  • remove <PACKAGE>: Remove an installed package.
  • build <SPEC>: Build a package and create an archive without installing.
    • Resolves and offers to install missing build/test dependencies before fetching/building.
  • info <PACKAGE_OR_SPEC>: Show information about a package.
  • search <QUERY>: Search enabled source/binary repos by package name and provided features.
    • Use --files to search binary repo metadata file lists.
  • owns <PATH>: Show which installed package owns a path.
  • list: List all installed packages.
  • repo owns <PATH>: Query binary repo metadata for path ownership.
  • repo create [DIR]: Create a repository database from a directory of packages.
  • config: Show current configuration and overrides.

Package Specification

Packages are defined using TOML files. Here is a basic example:

[package]
name = "example"
version = "1.0.0"
description = "An example package"
homepage = "https://example.com"
license = "MIT"

[[source]]
url = "https://example.com/example-$version.tar.gz"
sha256 = "..."
extract_dir = "example-$version"

[build]
type = "autotools"
flags = { configure = ["--enable-feature"] }

[dependencies]
build = ["gcc", "make"]
runtime = ["libc"]

Configuration

Depot can be configured via /etc/depot.d/ (or relative to the rootfs).

  • /etc/depot.d/build.toml: System-wide build overrides and flag appends.
  • /etc/depot.d/package.toml: Package-specific overrides.
S
Description
A Source-based package manager written in rust and FINALLY under something other than the GPL
Readme MIT 2.7 MiB
Languages
Rust 99.4%
Meson 0.4%
Shell 0.2%