wishpkgs
wishpkgs.org source

wish — the WishOS package manager

A transactional, rollback-capable package manager with generations, Bedrock-style layers, and bidirectional bundling (system → package, not just the other way around).

This page covers what's changed recently and how to use it. Pick a topic on the left, or see Packages for the live index and Releases for ISO images once published.

Latest updates

Ubuntu package mirror underway (aarch64 first)

A resumable pipeline now repackages upstream precompiled binaries (main component) into .wsh for both wish archs, uploading each finished package straight to the repo without waiting for the rest of the batch. aarch64 is being mirrored first; x86_64 follows once ready. Progress survives restarts, so this runs unattended across many sessions.

Package library and CDN launched

Packages now serve from cdn.wishpkgs.org (Backblaze B2 behind Cloudflare — free egress), and this site (lib.wishpkgs.org) went live as a browsable, live-refreshing package index.

wish gains generations, rollback, bundling, services, layer federation

Every install/remove now snapshots the full system (packages, plus managed config like /etc), and wish rollback <id> reverts all of it atomically. New: a service supervisor, Bedrock-style layers with OverlayFS/shares/snapshots, cross-layer command & library federation, and two-way bundling — repackage an installed system back into a .wsh, not just install one.

Guides

Getting started

Install a package, then explore from there.

# wish init                 # first-time system setup (mounts, dirs, databases)
# wish install <pkg>        # install with dependencies, transactional
$ wish search <query>       # search the package index
$ wish list                 # list installed packages
$ wish info                 # show repo url, arch, cache/lib paths
$ wish help                 # full command reference
NoteCommands that change system state (install, remove, upgrade, rollback, service control, entering a layer) require root. Read-only ones (search, list, graph, info) don't.

Package management

# wish install <pkg>        # wish -I <pkg>
# wish remove <pkg>         # wish --remove <pkg>
$ wish update                # wish --update
# wish upgrade                # wish --upgrade
$ wish pull <pkg>            # download to cache only, don't install
$ wish graph <pkg>           # show dependency tree
$ wish graph --history       # show transaction history

Generations & rollback

Every install/remove snapshots the full system state — packages and managed config together.

$ wish generation list       # list generations (* = current)
# wish generation create      # snapshot current state manually
# wish rollback <id>          # atomically revert to a generation
TipRollback restores three things together: the package database, the files those packages own, and any config path listed in WISH_MANAGED_PATHS (defaults to /etc).

Bundling — system → package, not just package → system

# wish bundle <pkg>           # repackage an installed pkg + its config/overrides
# wish bundle --system        # snapshot the whole system into one .wsh
# wish install <file.wsh>     # install from a local bundle file
# wish restore <file.wsh>     # rehydrate a full system from a system bundle

Services

# wish service define <name> <cmd> [--restart=<policy>] [--enable]
# wish service start|stop|status|enable|disable <name>
$ wish service list

Layers (Bedrock-style)

Isolated filesystem roots sharing one kernel: chroot + a private mount namespace, with configurable shares, OverlayFS, and snapshots.

# wish layer add|remove <name>   $ wish layer list|info <name>
# wish layer share <name> <src> [target] [--ro]
# wish layer overlay <name> add <lowerdir> | off
# wish layer clone <src> <dst>
# wish layer snapshot <name> [snap-name]
# wish layer gui <name> on|off        # share X11/Wayland/PipeWire/D-Bus
# wish layer expose <name> <binary> [alias]   # global wrapper on host PATH
# wish run <layer> <cmd> [args]

Federation

# wish layer priority set <l1> <l2> ...
# wish federate       # expose every layer's commands + libraries globally
# wish defederate

Peer networking (LAN)

# wish serve          # share cached packages with peers on port 44449
$ wish peer scan      # scan the LAN for other wish peers

Environment variables

WISH_REPO_URL       WISH_CACHE_DIR      WISH_LIB_DIR
WISH_ROOT           WISH_SERVICES_DIR   WISH_RUN_DIR
WISH_WRAPPERS_DIR   WISH_MANAGED_PATHS
live — loading…
NameVersionDescription