Pinboard is the bookmark service hardcore link-collectors swore by for over a decade. The thing was: it was always one person (Maciej Cegłowski), aging gracefully but increasingly out of touch with modern web platforms. Pinboard’s iOS extensions broke after iOS 17, the bulk-edit got slow on libraries over 50,000 links, and the “archive my Twitter likes” integration died with Twitter’s API. Raindrop is the sleek paid alternative most Pinboard refugees are landing on. But there’s a third option that’s almost always overlooked: Shaarli — a single-PHP-file self-hosted bookmark manager that’s been quietly maintained for ten years and runs on basically anything.
Here’s the comparison after running all three for a year, and the version of self-hosted Shaarli that gives you a bookmark archive you can never lose.
The three options, fairly
- Pinboard. $22/year. UI feels straight out of 2009 (which is part of the charm). Best-in-class for managing tens of thousands of links by tag. Single-developer dependency is the risk — if Maciej decides to retire, you’re on a 6-month migration window.
- Raindrop. Free tier limited; Pro is $28/year. Beautiful UI. Browser extensions that work. Mobile apps are good. Trades the “single-developer” risk for “VC-funded startup” risk — could pivot, raise prices, get acquired and shut down.
- Shaarli. Free, self-hosted, single PHP file. UI is utilitarian but functional. The data is yours. The risk is operational — you’re now maintaining a server and a backup strategy. The reward is “your bookmarks survive you.”
For most people, Raindrop is the right call — the UX is good and the mental load of self-hosting isn’t worth it. For the “I want my bookmark archive to be a flat file I own forever” case, Shaarli is the answer.
Installing Shaarli
Shaarli runs as a single PHP application. It doesn’t need a database — the entire link store is one PHP-serialized file (newer versions optionally use SQLite). On any cheap VPS with PHP-FPM:
# Drop the latest release into your web root
cd /var/www/
sudo curl -sL https://github.com/shaarli/Shaarli/releases/latest/download/shaarli-full.tar.gz | sudo tar xz
sudo mv Shaarli shaarli
sudo chown -R www-data:www-data shaarli/
sudo chmod -R 750 shaarli/
# Caddy fronts it with TLS:
# /etc/caddy/Caddyfile
# bookmarks.example.com {
# root * /var/www/shaarli
# php_fastcgi unix//run/php/php8.2-fpm.sock
# file_server
# }Visit https://bookmarks.example.com. First-run wizard asks for an admin user and password. Set them.
The browser bookmarklet (the magic bit)
Shaarli’s signature feature is its bookmarklet. From the Tools page in your Shaarli, drag the “Shaare link” bookmarklet to your browser’s bookmark bar. Now on any web page, click that bookmarklet — a small popup opens with the page title pre-filled, an empty description box, and a tag input. Type tags, hit save. The popup closes, you’re back on the page.
This is functionally identical to Pinboard’s bookmarklet from 2010. Both still work because both are pure browser-side JS, no extension required, no permissions to grant per browser update.
Migrating your existing bookmarks in
Shaarli imports the standard Netscape-bookmarks HTML file format that every browser, Pinboard, Raindrop, and Pocket can export. From Tools → Import, drop the file in. Tags are preserved. Date-added is preserved. Notes are preserved if your source had them.
- From Pinboard: Settings → Backup → export HTML.
- From Raindrop: Settings → Import & Export → export HTML or CSV.
- From Chrome / Firefox / Safari: each has “export bookmarks to HTML” in their bookmark manager.
Importing 12,000 Pinboard bookmarks took ~30 seconds on a $5 VPS. Tag autocomplete works immediately afterward.
The daily JSON export — the real reason for self-hosting
This is the bit nobody talks about. The whole point of leaving a SaaS bookmark service is that you own the data. So actually own it — export the entire bookmark archive to a JSON file every night, into a directory you back up.
# /etc/cron.daily/shaarli-export
#!/usr/bin/env bash
DATE=$(date +%Y-%m-%d)
mkdir -p /backup/shaarli/
# Use Shaarli's REST API. Tools → API client management → generate a token.
TOKEN="eyJ0eXAi..."
# Fetch all bookmarks as JSON. Limit=10000 covers most personal libraries.
curl -sH "Authorization: Bearer $TOKEN" \
"https://bookmarks.example.com/api/v1/links?limit=10000" \
> /backup/shaarli/$DATE.json
# Compress and rotate
gzip /backup/shaarli/$DATE.json
find /backup/shaarli/ -name '*.json.gz' -mtime +60 -deleteSet this cron-daily on the same VPS, or pull it from a different machine via the API for true off-host backup. Now: the file /backup/shaarli/2026-04-29.json.gz contains the entire bookmark archive as of last night, fully self-contained, parseable with jq, importable into anything.
Two months of these is ~30 MB. If you sync /backup/ to a NAS or to S3, your bookmarks now exist in three places: live on Shaarli, in nightly snapshots on the same box, and offsite. Pinboard / Raindrop give you a manual export-on-demand — this gives you continuous, scheduled, multi-version backups.
A few quirks worth knowing
- Public vs private bookmarks. Shaarli has a per-link public flag. Public links are visible to anyone hitting your URL (Shaarli has a clean public landing page). Private links require login. Default new bookmarks to “private” in Configure → Privacy unless you actually want a public link blog.
- The Atom feed is the underrated feature. Each tag has its own Atom feed. So your
?tag=read-laterfeed is a private RSS source you can wire into NetNewsWire / Reeder / Miniflux. Bookmarks become a queue that flows through your feed reader. - Plugins exist but most are stale. Don’t install random ones. Stick to the ones bundled in
/plugins/; they’re tested with current Shaarli. - iOS app: Shaarlier. Free, just functional enough for the share-sheet “save current page” flow. Don’t expect Reeder-quality polish.
For someone who wants the “my bookmarks are mine, on my server, daily-snapshotted, exportable to plain JSON” outcome, Shaarli is two evenings of setup followed by a decade of zero-friction. The bookmarks themselves outlast every SaaS pivot, every shutdown, every “simplifying our pricing.”
Photo: Open book with a decorative bookmark by Feyza Ebrar on Pexels.
