Help us shape the future of Go! Take the 2026 Go Developer Survey

drop

command module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 15, 2026 License: Apache-2.0 Imports: 1 Imported by: 0

README ΒΆ

drop

A secure-first installer for GitHub releases.

drop downloads a binary, archive or package from a project's GitHub release, verifies it against the security policies its publisher defines before anything touches your system, and installs it. Policies are evaluated with the AMPEL policy engine against the attestations shipped with the release: SLSA provenance, SBOMs, signatures. No policy, no install.

$ drop install carabiner-dev/drop
  πŸ’« Looking for policies (source: https://github.com/carabiner-dev/.github ampel/policies/release/{_,drop}/)
      βœ”οΈ  1 policy sets found
  ⏬ Downloading drop-v0.0.1-linux-amd64 (57.18 MB)
  πŸ›‘οΈ  Verifying artifact...
      βœ…  PASS: SLSA provenance attestation found
      βœ…  PASS: Authorized builder ID detected
      βœ…  PASS: Expected buildType found: https://actions.github.io/buildtypes/workflow/v1
      βœ…  PASS: Expected build point found: git+ssh://github.com/carabiner-dev/drop
      βœ…  PASS: Stable release 0.0.1 ships SLSA v1 provenance
  πŸ”§ Installing binary to /usr/local/bin/drop...
  πŸŽ‰ drop installed!

Installing drop

Grab a binary from the releases page or build it with Go:

go install github.com/carabiner-dev/drop@latest

Once you have it, drop can keep itself up to date like any other app: drop install carabiner-dev/drop verifies the release against drop's own policy.

Usage

Apps are named by repository, with an optional tag and asset name:

drop install github.com/org/repo          # latest stable release
drop install org/repo@v1.2.3              # a specific tag
drop install org/repo#toolname            # when the binary is not named after the repo
Install
drop install org/repo

drop lists the release assets, groups them into installables (one binary shipped for several platforms is one installable), picks the variant for your OS and architecture, verifies it and installs it. Bare binaries and binaries inside archives (tar.gz, zip, tar.xz, tar.zst, tar.bz2) go to --bin-dir (/usr/local/bin by default, through sudo when needed). Packages (rpm, deb, apk) are installed with the system's package manager. When a release offers both, drop asks, or keeps the package manager in charge if the app is already installed as a package. --type forces a choice, --entry names the executable to take from an archive, and --yes takes the defaults for scripts and CI.

Installs are recorded, so a repeat drop install is refused. Use drop update to upgrade, or --force to reinstall, switching formats if --type says so: the previous binary or package is removed once the new one is in place.

Listing installed apps

When an app is installed, drop registers it in a catalog in the user's directory. This allows drop to keep track of the installed software to update and remove it.

drop list                # what is installed, where, and whether it was verified
    NAME         VERSION   KIND      LOCATION                    VERIFIED   UPDATED      REPOSITORY
   ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
    atomscan     v2.11.0   archive   /usr/local/bin/atomscan        ✘       2026-09-14   atomdrift-project/scan
    drop          v0.0.1   binary    /usr/local/bin/drop            βœ”       2026-09-14   carabiner-dev/drop
    goreleaser   v2.18.1   archive   /usr/local/bin/goreleaser      ✘       2026-09-14   goreleaser/goreleaser
    scorecard     v5.5.0   archive   /usr/local/bin/scorecard       ✘       2026-09-07   ossf/scorecard
    cosign        v3.1.2   binary    /usr/local/bin/cosign          ✘       2026-07-19   sigstore/cosign
    gitsign      v0.16.1   package   rpm package                    ✘       2026-07-19   sigstore/gitsign

  6 app(s) installed with drop
Updating installed apps
drop check-update        # which installed apps have newer stable releases
drop update              # reinstall them the way they were installed, after verifying
Download
drop get org/repo                      # the installable for your platform, verified, into the current directory
drop get org/repo -p darwin/arm64      # another platform
drop get org/repo#checksums.txt        # a specific asset
Explore a Repository

If you want to see the artifacts a repository releases, use the ls subcommand

drop ls org/repo          # installables in the latest release
drop ls -r org/repo       # list available releases
drop ls -l --all org/repo # every asset, long format

Example run: ls -l sigstore/cosign:

total 4
πŸ’ΎπŸ§πŸπŸͺŸπŸ“¦βž–βž–βž–  sigstore-bot  sigstore  52763563  Aug    6    19: 6  cosign
πŸ“„βž–βž–βž–βž–βž–βž–βž–  sigstore-bot  sigstore  3906      Aug    6    19: 6  cosign_checksums.txt
πŸ“„βž–βž–βž–βž–βž–βž–βž–  sigstore-bot  sigstore  6406      Aug    6    19: 6  cosign_checksums.txt.sigstore.json
πŸ“„βž–βž–βž–βž–βž–βž–βž–  sigstore-bot  sigstore  178       Aug    6    19: 6  release-cosign.pub

Verification

Every artifact is verified before it is installed or written to disk. drop reads the policies a project's organization publishes in its .github repository, under ampel/policies/release/<repo>/ for the repository and ampel/policies/release/_/ for policies that apply to every release in the organization. Projects without policies of their own fall back to the community policies in policylabs/oss.

Policies are written in HJSON or JSON, can reference the shared library in carabiner-dev/policies, and can declare which releases they apply to, so a project whose security metadata changed over time holds each release to what it shipped. drop tells them the version being installed, the platform and the release coordinates. How that works, what drop injects, and how to test a policy before publishing it is in docs/policies.md.

When a project has no policies, drop stops and says so. You can then:

drop request org/repo                        # open an issue asking for community policies
drop install --policy-repo ./my-policies org/repo   # use your own policy source (a repo or a local checkout)
drop install --insecure org/repo             # skip verification; you are on your own

--attest writes an attestation of the verification next to the download, as the full AMPEL result set, a SLSA Verification Summary or an in-toto Simple Verification Result, signed with sigstore by default.

Building

go build ./...
go test ./...

Contributing

Drop is Open Source software, developed by Carabiner Systems, Inc and released under the Apache 2.0 license terms. Feel free to use and modify it and, most importantly, contribute to it sending patches or opening issues, we love feedback!

Documentation ΒΆ

The Go Gopher

There is no documentation for this package.

Directories ΒΆ

Path Synopsis
internal
cmd
pkg
archive
Package archive lists and extracts single files from release archives.
Package archive lists and extracts single files from release archives.
inventory
Package inventory keeps track of the artifacts drop installs in the local system.
Package inventory keeps track of the artifacts drop installs in the local system.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL