CLI

Ship pastes from your terminal against the production API at https://voidpaste.com. Auth uses API keys (Bearer), not session cookies.

Install

Install with Homebrew on macOS or Linux:

brew install fleames/tap/voidpaste
voidpaste version

Install with Scoop on Windows:

scoop bucket add fleames https://github.com/fleames/scoop-bucket
scoop install fleames/voidpaste
voidpaste version

Or download a signed, checksummed archive from GitHub Releases. Choose Windows, macOS, or Linux and amd64 or arm64. Every release includes SHA256SUMS, an SPDX SBOM, and GitHub build provenance.

# Linux amd64 example
version=v0.4.1
curl -fLO "https://github.com/fleames/voidpaste-cli/releases/download/$version/voidpaste_${version}_linux_amd64.tar.gz"
curl -fLO "https://github.com/fleames/voidpaste-cli/releases/download/$version/SHA256SUMS"
grep "voidpaste_${version}_linux_amd64.tar.gz" SHA256SUMS | sha256sum -c -
tar -xzf "voidpaste_${version}_linux_amd64.tar.gz"

# Optional signed-provenance verification (GitHub CLI)
gh attestation verify "voidpaste_v0.4.1_linux_amd64.tar.gz" --repo fleames/voidpaste-cli

With Go 1.23+, go install remains supported from the public module (github.com/fleames/voidpaste-cli):

go install github.com/fleames/voidpaste-cli/cmd/[email protected]

The WinGet manifest is under review. We will document winget install only after it is accepted into the community repository.

The installed command is voidpaste. Optional short alias vp (same binary — create a symlink after install):

# Linux / macOS
ln -sf "$(which voidpaste)" "$(dirname "$(which voidpaste)")/vp"

# Windows (Developer PowerShell / admin): junction or copy
Copy-Item (Get-Command voidpaste).Source vp.exe

Or build from a clone (names the binary voidpaste):

git clone https://github.com/fleames/voidpaste-cli.git
cd voidpaste-cli
go build -o voidpaste ./cmd/voidpaste
# optional: ln -s voidpaste vp

Authenticate

  1. Sign in and create a key under Dashboard → API Keys (scopes pastes:read + pastes:write).
  2. Store it locally:
    voidpaste auth login --key vp_live_…

Config file: ~/.config/voidpaste/config.json (Windows: %AppData%\voidpaste\config.json). Env overrides: VP_API_KEY (or VP_TOKEN), VP_API for a custom origin.

voidpaste whoami
voidpaste status

Create a paste

# from a file
voidpaste create ./notes.md --title "Notes" --language markdown --expiration 1d

# from stdin
echo 'fmt.Println("hi")' | voidpaste create --lang go --visibility unlisted

# URL only (scripts / CI)
kubectl logs deploy/api --tail=200 | voidpaste create --stdin --expiration 1h -q

# Idempotent create (retries replay for 24h)
voidpaste create ./build.log --idempotency-key "ci-$RUN_ID" --expiration 1d

# burn-after-reading + password
voidpaste create secret.txt --visibility password --password '…' --burn

# Machine-readable envelope ({ paste, warnings })
voidpaste create ./notes.md --json

Default output is paste id + share URL. --quiet / -q prints only the URL. --json prints the full API envelope (including warnings). Anonymous create works without a key; private / password visibility need a key.

More CI/shell recipes: Integrations.

Fetch

voidpaste get PASTE_ID
voidpaste raw PASTE_ID
voidpaste download PASTE_ID -o out.txt
voidpaste raw PASTE_ID --password '…'

List, claim, and delete

voidpaste list
printf '%s' "$MANAGEMENT_TOKEN" | voidpaste claim PASTE_ID --management-token-stdin
voidpaste delete PASTE_ID --yes

Claim requires an API key with pastes:write. The management token is stdin-only so it does not appear in shell history or process arguments.

Self-hosted API

Default origin is https://voidpaste.com. Override per command or at login:

voidpaste status --api https://paste.example.com
voidpaste auth login --api https://paste.example.com --key vp_live_…

curl fallback

The CLI is a thin client over the same REST API. Equivalent curl:

export VP_API=https://voidpaste.com
export VP_API_KEY=vp_live_…

jq -n --rawfile c ./file.txt \
  '{content:$c, visibility:"unlisted", expiration:"1d"}' \
| curl -sS -X POST "$VP_API/api/v1/pastes" \
  -H "Authorization: Bearer $VP_API_KEY" \
  -H "Content-Type: application/json" \
  -d @-

Notes

  • Auth header: Authorization: Bearer vp_live_…. Password pastes: X-Paste-Password.
  • The CLI sends only the bounded channel marker X-VoidPaste-Client: cli plus its version in User-Agent. It sends no device ID, installation ID, username, repository or workflow identifier, tracking cookie, or stored IP attribution.
  • Respect rate-limit response headers.
  • Client-encrypted pastes still need browser (or your own) decryption — the CLI stores/fetches ciphertext only.
  • Collections and versions are available via voidpaste collection … and voidpaste versions …. Moderation stays dashboard/API-only.
  • Source: github.com/fleames/voidpaste-cli.