• 0.2 7ba3fe6632

    0.2 / Full and semi-functioning indev build.
    CI / build-and-test (push) Successful in 38s
    Pre-Release

    huntedbytheirs released this 2026-08-04 14:46:31 -04:00 | 8 commits to main since this release

    kappa 0.2 (indev) — release notes

    What changed from 0.1

    0.1 could parse .kap files, validate configs, and generate service files for
    five init systems — but it couldn't actually build anything. The build backend
    was a compile-time stub that returned "build backend not implemented". 0.2
    makes kappa a real package manager.

    Build backend. Packages now build end-to-end. The build pipeline executes
    prepare, build, check, and install phases through /bin/sh, with full variable
    interpolation (${prefix}, ${jobs}, ${destdir}, ${enabledinit},
    ${cfg.*}, ${feature.*}), config file generation to DESTDIR, and
    environment variable handling. The scheduler distributes work across -w
    workers with depth-based priority grouping. Verified by building GNU Make
    4.4.1 from source.

    Env operators. Three ways to set build environment variables:

    • = — hard set (overwrite)
    • += — append with space separator
    • ?= — soft set (only if variable is not already defined)

    System-level env propagates to all packages. Subsequent entries can build on
    earlier ones — CFLAGS = "-O2"; CFLAGS += "-pipe" → "-O2 -pipe".

    Indexed repos. Flat remotes = [...] has been joined by structured
    repos { } blocks with named repositories, channels (stable, testing),
    mirror URLs, and priority. The new index "name" { } file format lists every
    package and version in a repo. kappa index <dir> scans a directory of .kap
    files and generates the index. Clients fetch the index once, cache it, and
    re-fetch only when the remote changes via HTTP conditional requests. Mirrors
    are tried in order as fallbacks. Backward compatible — remotes = [...] still
    works.

    Package operations. kappa add <pkg> [version] writes to the system
    config's packages {} block. kappa remove <pkg> removes it. No config file
    editing required. Both are idempotent. The --root flag works everywhere.

    Conflict detection. Package conflicts were caught internally by the
    resolver but silently ignored by resolve and rebuild. Both now abort with a
    clear error before any builds start.

    Testing and CI. 138 integration tests across three suites cover CLI error
    handling, all DSL keywords, config parsing, users/groups, assertions, imports,
    doctor diagnostics, repos/remotes, index generation, add/remove, install DB,
    conflicts, deptree ordering, build execution, env operators, init systems,
    bootloaders, variable interpolation, --root override, and more. CI runs on an
    Arch Linux container — clang-18, cmake 3.28, three suites, zero warnings.

    Documentation. STYLEGUIDE.md covers every codebase convention. Updated
    README with the kappa add workflow. CONTRIBUTING.md refreshed with current
    test counts and issue list.

    What might come in 0.3

    • Transitive dependency resolution. Currently the config must list every
      package explicitly. Auto-including transitive deps would let you declare only
      top-level packages.

    • kappa search. Query the cached index without touching the network.
      Basic name match, semver filtering, channel pinning.

    • --features / --config flags for kappa add. Enable features or set
      config values at add time instead of editing the config afterward.

    • Delta rebuilds. Rebuild only packages whose dependencies actually
      changed, not just the ones with version bumps.

    • Binary package support. Pre-built caches for common configurations so
      rebuilds don't always start from source.

    • Signed indexes and recipes. pubkey field in repo config. Verify index
      signatures before trusting content. Enable community mirrors without trusting
      the mirror operator.

    • Shell completions. Bash, zsh, fish tab-completion for subcommands and
      package names.

    • kappa upgrade. Compare installed versions against the index, rebuild
      everything with newer versions available.

    • Overlay activation. Atomic filesystem snapshots like Nix profiles — switch
      between generations without a reboot.

    • Remote build farm. Distribute build work across machines with
      distcc-style job forwarding, controlled by repo config.

    Downloads