A pastebin for patches, supercharged for git collaboration

Welcome to pico's managed patchbin service! This is a public service that is free to anyone who wants to collaborate on git patches.

Contributions are designed to be anonymous: the quality of your work is what matters. No signup required, just connect with an SSH key.
The target project doesn't need to run patchbin for someone to submit a patch request against it. It works like a pull request, except both sides collaborate by sending rounds of patchsets: a contributor sends patches, a reviewer replies with their own patches on top, back and forth, as commits rather than comments. The result is a collaborative workspace built entirely out of patches. Reviewing means pulling the code down, not clicking through a diff viewer. Issues work the same way: an issue is just a patch request without any code attached yet, and anyone can follow up with a real patch request on top of it.
There's no accept or reject step. A patch request is simply active or inactive: active ones go inactive after 30 days without activity. When a reviewer is happy with the code, they pull it, merge it, and push upstream themselves; there's nothing to manage here beyond that.

Quickstart

Submit a patch request (starts as a draft, visible only to you):
git format-patch main --stdout | ssh pr.pico.sh pr create {repo}
Open it so others can see it (also enables RSS notifications):
ssh pr.pico.sh pr open {prID}
Checkout the latest patchset from a patch request:
ssh pr.pico.sh print {prID} | git am -3
Add a follow-up patchset (e.g. after addressing review comments):
git format-patch main --stdout | ssh pr.pico.sh pr add {prID}
Help guide:
ssh pr.pico.sh help

Commands

pr - manage patch requests
pr create {repo} [--open] - submit a new PR from stdin (starts as draft by default, or open with --open)
git format-patch main --stdout | ssh pr.pico.sh pr create {repo} --open
pr add {prID} - add a new patchset to an existing PR from stdin
git format-patch main --stdout | ssh pr.pico.sh pr add {prID}
pr open {prID} [--comment] - transition draft → open, enables RSS notifications
ssh pr.pico.sh pr open {prID}
pr draft {prID} [--comment] - transition open → draft, disables RSS notifications
ssh pr.pico.sh pr draft {prID}
pr edit {prID} {title} - rename a PR
ssh pr.pico.sh pr edit {prID} "new title"
pr summary {prID} - show metadata, patchsets, and patches for a PR
ssh pr.pico.sh pr summary {prID}
pr ls [repo] [--draft|--open|--active|--inactive|--mine] - list PRs
ssh pr.pico.sh pr ls {repo} --open
issue - text-only patch requests (no code required)
issue create {repo} [--title] - submit a new issue from stdin (starts as open)
echo "steps to reproduce..." | ssh pr.pico.sh issue create {repo} --title "bug: crash on startup"
ps - manage patchsets
ps rm {prID.rev} - remove a patchset and its patches (creator only)
ssh pr.pico.sh ps rm {prID}.{rev}
print - print patches for checkout
print {prID} - print the latest patchset for a PR
ssh pr.pico.sh print {prID} | git am -3
print {prID}.{rev} - print a specific patchset revision
ssh pr.pico.sh print {prID}.{rev} | git am -3
logs - event history
logs [--pr ID] [--pubkey] - list event logs, optionally filtered to a PR or your own activity
ssh pr.pico.sh logs --pr {prID}