Packages are git URLs, resolved by minimal version selection

Decision

A package is a set of modules published from one git repository, and its name is the repository URL. There is no registry.

Why

A package named by its URL can't have its name squatted or typosquatted on a registry, and nobody has to run or secure a registry. Minimal version selection is deterministic even without a lockfile and needs no SAT solver. It never picks up a release that nobody asked for, so a widening of a dependency's authority appears only when someone edits a requirement, which is exactly when it should be reviewed. Build scripts and install hooks are the most common way a malicious package runs code on a developer's machine, and they contradict the design principle that no code runs when a module loads.

Considered options

Consequences