Simple, maintained CLI interface to the API.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


pin-cushion Maintenance status: Last active in 2018Versions & releasespin-cushion on the NPM registryOpen-source licensing detailsChat on FreenodeTwitter followers

A simple command-line client:

pin-cushion [verb] [arguments]
pin-cushion posts/recent
pin-cushion posts/suggest --url ""

pb-rename() {
   pin-cushion tags/rename --old "$1" --new "$2"

You get the idea. To use it, you must first record your authentication token for the API:

npm install -g pin-cushion
pin-cushion --auth elliottcable:DEADBEEF1234567890

This only provides abstracted access to the Pinboard API as defined on their site:

Any Pinboard API method described there may be passed as the verb; and all described arguments are accepted as command-line flags. These are not stored in this library; as your command-line instructions are simply converted directly to API calls; so this tool probably doesn't need much in the form of maintenance. :P

Piping and JSON output

If not explicitly passed a --format parameter, then pin-cushion will spit out a formatted object-description of the response, intended for human consumption. If a format is explicitly provided, then the response from the server will be printed, unmodified; this is particularly useful with the jq command-line JSON manipulation tool:

pin-cushion posts/recent --format=json | jq                      # Simply pretty-print
pin-cushion posts/recent --format=json | jq '.posts[] | .href'   # Extract URLs of recent pins

This obviously lends itself to constructing complex shell pipes. Personally, I suggest aliasing this:

pc() { pin-cushion "$1" --format=json "$@" ;}