Usage

puck doctor                  # blockers before switching
puck install                 # install from composer.lock
puck install --no-dev        # production install
puck install --offline       # warm store only; no network
puck dump-autoload -o        # regenerate optimized autoload
puck require vendor/package
puck remove vendor/package
puck update                  # refresh lock + install
puck upgrade                 # self-update from GitHub Releases
puck store path              # print the global store path
puck store gc                # garbage-collect unused store entries

Timings

Set PUCK_TIMINGS=1 to print phase timings on stderr (plan_ms, download_ms, extract_ms, overlap_ms, link_ms, dump_ms, ...).download_ms is a sum across concurrent fetches;overlap_ms is (download_ms + extract_ms) − wall (mostly HTTP concurrency).

What stays the same

  • composer.json / composer.lock: same format Composer reads
  • vendor/: real directory (hardlink / reflink / copy from the store). Shared inodes mean edits under vendor/ can change the store — do not hand-edit.
  • You can run Composer again on the same project after puck