Pincushion is an alternative bookmarklet for Pinboard that you can add to your browser, and use to save and edit bookmarks. It is designed to be mobile-friendly, fast and interactive, and harnesses the capabilities of modern browsers to enhance the experience of tagging and saving bookmarks.
- Smartphone & tablet-optimised Pincushion adapts to the size of your mobile device’s screen, to make reading and editing the form easier, without requiring you to zoom in before you begin. Form elements respond to you as quickly as they would in native mobile apps.
- Interactive The form is enhanced with animation to guide interaction, and more clearly explain what is happening while you edit and save your bookmarks.
- Easily add tags Pincushion uses as intelligent autocomplete widget that shows the tags you’ve previously used, along with the number of times you’ve used them. The autocomplete even lets you search within your tags without having to type the exact letters that a tag begins with.
- Search across all of your tags The first time you use Pincushion, it downloads a local copy of all of your tags into your browser’s “LocalStorage”, which allows you to store about 2.5MB of data and preferences for each site you use regularly. This means that from then on, the autocomplete widget can search across your entire collection. The autocomplete can use each tag’s score to be smarter about which tags to suggest to you as you are typing. (Tag autocomplete has been tested on a data set of over 12,500 tags, which totalled 184KB when downloaded.)
- AI-based tag suggestions When bookmarking a new page, the form will suggest tags based on your previous usage, other Pinboard members tags for that same page, as well as optionally using AI to propose relevant tags.
To use the bookmarklet, you will need to have an account on http://pinboard.in and an API token. Your API token is a way to grant applications or websites the ability to send bookmarks to your Pinboard account, without having to give them your password.
When logged in, visit your password settings page to locate your API token — it will be in the form
username:462E2B102D4CCDE36662
The part after the colon is the API token (462E2B102D4CCDE36662 in this example).
To add the bookmarklet to your browser, simply add a new bookmark, give it any name you want, and use the following text as the URL:
javascript:q=location.href;d=(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text);p=document.title;void(open('https://rossshannon.github.io/pincushion/?url='+encodeURIComponent(q)+'&description='+encodeURIComponent(d)+'&title='+encodeURIComponent(p),'Pinboard','toolbar=yes,width=600,height=700,left=50,top=50'));
Often the easiest way to do this is to bookmark the page you’re currently reading, and then edit this bookmark and replace the URL with the above code. Click the bookmarklet in your browser’s bookmarks bar and it will open the Pincushion interface. The first time you run, you’ll be prompted to enter your Pinboard credentials and optionally an OpenAI API token for AI-powered tag suggestions.
You can also pre-check the “private” and “to read” checkboxes by passing these properties with the value true:
javascript:q=location.href;d=(window.getSelection?window.getSelection():document.getSelection?document.getSelection():document.selection.createRange().text);p=document.title;void(open('https://rossshannon.github.io/pincushion/?url='+encodeURIComponent(q)+'&description='+encodeURIComponent(d)+'&title='+encodeURIComponent(p)+'&private=true&toread=true','Pinboard','toolbar=yes,width=600,height=700,left=50,top=50'));
When the popup opens you’ll now see a gear button in the footer. Click it to open the Settings page, where you can enter your Pinboard username, Pinboard API token, and (optionally) an OpenAI API token for GPT-powered tag suggestions. These values are stored locally via localStorage in your browser’s secure storage, keeping your credentials out of browser history and referrers. You can update or remove the tokens at any time from the same Settings view.
Pincushion is designed for modern browsers like Chrome, Safari, Comet, Atlas, Edge, Firefox, and mobile varieties of Safari and Chrome.
- Clone the repository to your computer.
git clone https://github.com/rossshannon/pincushion.git - Switch into the new directory and run
yarn installornpm install - Run
npm startto start the development server. A web server will be booted to run Pincushion on localhost port 3000 (http://localhost:3000).
- Add dark mode.
- Add a settings page to configure the credentials securely in the browser rather than in the bookmarklet URL.
- Fully refactor the codebase to use React, Redux, and TypeScript.
- Many usability and performance improvements.
- Add optional AI-based tag suggestions using OpenAI APIs.
- Detect URL fragments (hashes) in URLs and give support to remove them if desired, so that canonical URLs are being bookmarked instead of sections of documents.
- Revamp build process and dependencies. Improve how tag suggestions are handled.
- Added options to set the “private” and “to read” options to true by default via the bookmarklet URL.
- Switched to a self-hosted version of the Pinboard API bridge to avoid occasional downtime or slow requests.
- Updated development dependencies and added instructions for running locally.
- Improve tag sorting so that tags that are used more frequently will be sorted higher in the autocomplete list.
- Allow autocomplete to match tags while ignoring punctuation (for example, typing “theo” will now match “the_onion”).
- Local tag storage, autocomplete-based tag suggestions, Pinboard API integration, mobile compatibility, usability improvements and error-handling.
Copyright © 2014–2025 Ross Shannon.
Pincushion is open source software, licensed under the MIT License. Suggestions and pull requests are welcome.
Pincushion uses a number of excellent open source libraries.
- react-select for the tag autocomplete experience.
- Ladda for the submit buttons with integrated progress indicators.
- Pinboard-Bridge, a Node.js-based wrapper which allows use of the Pinboard API with Ajax methods, as the API does not natively support cross-origin resource sharing (CORS). An instance of pinboard-bridge is deployed for use on Heroku (https://pinboard-api.herokuapp.com/).
