unsubbed.co

Buku

Released under GPL-3.0, Buku provides powerful bookmark manager and a personal textual mini-web on self-hosted infrastructure.

Self-hosted bookmarking, honestly reviewed. No marketing fluff, just what you get when your bookmarks live in a SQLite file on your own machine.

TL;DR

  • What it is: A CLI-first, privacy-aware bookmark manager that stores everything in a local, portable SQLite database — no account, no sync server, no vendor [README].
  • Who it’s for: Developers, power users, and technically-minded founders who live in the terminal and are tired of cloud bookmark services leaking browsing habits. Also anyone who wants a programmable bookmark store they can query, script, and pipe into other tools [README].
  • Cost savings: Pocket Premium runs ~$4.99/mo; Raindrop.io Pro is ~$28/year; Pinboard charges ~$11/year. Buku costs nothing — zero license, zero subscription, zero API calls to a vendor’s server.
  • Key strength: Completely offline-first, with a genuinely portable single-file database you can sync between machines however you like (rsync, Syncthing, git). The search is fast, the tag system is surprisingly powerful, and the whole thing can be used as a Python library [README].
  • Key weakness: It’s a CLI tool first. The web companion (bukuserver) exists but is explicitly marked for personal use only and is not production-ready infrastructure. If you want a polished GUI or mobile sync, look elsewhere [README].

What is Buku

Buku is a command-line bookmark manager written in Python. You run buku -a https://example.com and it fetches the page title, description, and any tags you specify, then stores them in a local SQLite database. Later, you search, open, edit, or export from the same terminal. The author describes it as a “personal mini-web in text” — which is accurate, if understated [README].

What makes it unusual in the bookmark space is the combination of three things. First, the database is a plain SQLite file you own outright. No vendor lock-in, no proprietary format, no “we changed the API” email. You can copy it to a USB drive, open it with any SQLite browser, and import it somewhere else without ceremony [README]. Second, it auto-imports from every major browser — Firefox, Chrome, Chromium, Vivaldi, Brave, and Edge — meaning you can migrate years of browser bookmarks into a queryable CLI tool in one command [README]. Third, it has a Python library API, so any script that needs to read or write bookmarks can import buku directly rather than parsing HTML export files [README].

The project has 7,097 GitHub stars and is available through essentially every major Linux package manager (apt, pacman, homebrew, pip, conda, etc.), which is a reliable signal that it’s been alive long enough to become infrastructure for a lot of people [merged profile][README].


Why people choose it

No relevant third-party reviews of Buku the bookmark manager appeared in the source set for this article. The following synthesis is drawn from the GitHub README, documented feature set, and the tool’s positioning as described by its own maintainer.

The recurring reason people reach for Buku is frustration with data custody. Every commercial bookmark service — Pocket, Raindrop, Pinboard, even browser-native sync — stores your bookmarks on someone else’s server. That data includes your browsing interests, reading patterns, and research trails. For a solo founder or researcher, that’s a non-trivial privacy surface. Buku’s README makes this explicit: “There’s no tracking, hidden history, obsolete records, usage analytics or homing” [README].

The second pull is scriptability. Cloud bookmark services expose APIs, but they’re rate-limited, authenticated, and subject to deprecation. A local SQLite file is just a file. You can query it with SQL, pipe it through jq, write cron jobs that tag URLs from feeds, or build a custom CLI wrapper in an afternoon. The Python library interface makes this even simpler — import buku, open the database, done [README].

The third pull is portability without a sync service. Buku’s database is a single file. You can sync it via rsync, Syncthing, Dropbox, git-crypt, or a USB stick. The README explicitly calls the database “portable” and “merge-able” — meaning two copies from different machines can be reconciled without a conflict-resolution server in the middle [README].


Features

What the README documents:

Bookmarking:

  • Store bookmarks with auto-fetched title, description, and tags from the URL [README]
  • Auto-import from Firefox, Chrome, Chromium, Vivaldi, Brave, and MS Edge [README]
  • Open bookmarks and search results directly in your browser from the CLI [README]
  • Multi-threaded full database refresh (re-fetch titles/descriptions for all entries) [README]
  • Browse cached version of a page from the Wayback Machine when the original link is broken [README]

Search:

  • Multiple search modes: keyword, regex, substring, deep scan (searches within URLs too) [README]
  • Continuous search with on-the-fly mode switching — you don’t restart between queries [README]
  • Easter egg: open a random bookmark (useful for rediscovering old saves) [README]

Import/Export:

  • Import and export in HTML, XBEL, Markdown, RSS/Atom, and Orgfile formats [README]
  • Browser HTML export compatibility means you can round-trip bookmarks through any browser [README]

Tags:

  • Smart tag management using redirection syntax: >> to append tags, > to replace, << to remove [README]
  • This lets you bulk-retag bookmarks without opening every entry [README]

Privacy and Security:

  • Manual encryption support for the database (via the cryptography Python package) [README]
  • No telemetry, no analytics, no external calls except when you explicitly fetch a URL [README]

Integration:

  • Text editor integration — you can open a bookmark in your $EDITOR to update it [README]
  • Shell completion scripts for bash, fish, and zsh [README]
  • Man page with examples [README]
  • Python library API with full documentation on ReadTheDocs [README]

Web UI (bukuserver):

  • A companion Flask web application called bukuserver provides a browser-based frontend [README]
  • Exposes an HTTP API — but the README explicitly says it’s “for personal use only” [README]
  • Runs on a local web host server; you point your browser at localhost:5001 by default [README]

The library has browser plugins in its related projects list, meaning you can add bookmarks from the browser without switching to the terminal [README].


Pricing: SaaS vs self-hosted math

Buku has no paid tier, no cloud offering, and no freemium gate. The math is simple:

Buku (self-hosted):

  • License: $0 (GPL-3.0) [merged profile]
  • Hosting: $0 — it runs on your local machine; no VPS required
  • Sync: whatever you already use (Syncthing is free, git is free)

Commercial alternatives for comparison:

  • Pocket Premium: ~$4.99/month ($44.99/year) for full-text search, unlimited permanent library, suggested tags
  • Raindrop.io Pro: ~$3/month ($28/year) for nested collections, full-text search, broken link detection
  • Pinboard: ~$11/year (one-time annual fee) for basic bookmarking; archiving add-on runs extra

Over three years:

  • Pocket Premium: ~$135
  • Raindrop.io Pro: ~$84
  • Pinboard: ~$33
  • Buku: $0

The savings math isn’t why most people switch to Buku. The tool attracts people who would pay Pinboard’s $11/year without flinching but want a tool they control completely — where the “I wonder what happens to my data if this company shuts down” question simply doesn’t exist.

One real cost: your time. Buku requires a working Python environment and willingness to run commands. If you’ve never opened a terminal, the break-even on time investment versus paying Raindrop $3/month is probably never.


Deployment reality check

“Deployment” here means installing a Python package, not standing up infrastructure. The simplest path:

pip install buku

Or, on most Linux distributions:

sudo apt install buku  # Debian/Ubuntu

Buku is packaged in essentially every major repository — the README shows a Repology badge indicating it ships in dozens of distros [README]. There’s no Docker image to maintain, no Postgres to configure, no reverse proxy to set up.

For bukuserver (the web UI):

  • Install buku[server] via pip
  • Run bukuserver run
  • Point your browser at http://localhost:5001

That’s it for local use. If you want bukuserver accessible from other devices, you’ll need a reverse proxy and HTTPS — but the README is explicit that bukuserver is “for personal use only,” so exposing it to the public internet is unsupported and inadvisable [README].

What can go sideways:

  • The encryption feature requires the cryptography Python package, which has C extension dependencies. On some systems this installs cleanly; on others you’ll fight pip wheel compilation or need to install system packages first [README].
  • Python 3.10+ is required. If you’re on an older system (certain older Ubuntu LTS versions, RHEL derivatives), you’ll need to manage your Python version separately [README].
  • The database is a local file. If your machine dies without a backup, your bookmarks die with it. You own the backup story entirely — there’s no cloud fallback.
  • The tag redirection syntax (>>, >, <<) is powerful but not intuitive. Expect 15 minutes with the man page before it clicks.
  • bukuserver is described as a companion, not the primary interface. If you came expecting a full Raindrop-style web app, you’ll be underwhelmed.

Realistic time to a working setup for a developer: 5–10 minutes including reading the quick-start. For a non-technical user: not the right tool — the value proposition is entirely CLI-centric.


Pros and Cons

Pros

  • Zero cost, zero vendor dependency. GPL-3.0, no SaaS tier, no API keys, no account creation [merged profile][README].
  • Single-file SQLite database. Completely portable. Copy it to another machine, open it in any SQLite browser, sync via any file sync tool, back it up like any other file [README].
  • Browser import works. Auto-importing from Chrome, Firefox, Brave, and others actually works — this is the biggest friction point when switching bookmark managers, and Buku handles it [README].
  • Regex and deep-scan search. If you’ve accumulated thousands of bookmarks, being able to search inside URLs and use regex is meaningfully more powerful than most commercial tools’ full-text search [README].
  • Python library API. You can automate, script, or build on top of Buku without parsing export files [README].
  • Tag system is thoughtful. The redirection-based bulk tagging (>>, >, <<) solves a real problem for anyone who’s tried to reorganize thousands of bookmarks after the fact [README].
  • Privacy by construction. No telemetry, no usage analytics, no external calls unless you explicitly request them [README].
  • Widely packaged. Available in apt, pacman, homebrew, pip — maintenance burden is low, upgrades are standard package manager commands [README].
  • Wayback Machine fallback. Broken link? buku --cached <id> looks it up in the Wayback Machine rather than silently losing the content [README].

Cons

  • CLI-first, which excludes most people. This is not a weakness per se, but it’s a hard filter. If you don’t work comfortably in the terminal, this tool is not for you.
  • bukuserver is “personal use only.” The web UI exists but is explicitly not production-ready and has no authentication hardening. You can’t safely expose it to the internet without significant additional work [README].
  • No mobile experience. There are related projects in the ecosystem, but the core tool has no official mobile app. Bookmark capture on mobile requires workarounds.
  • No built-in sync. Portability is the feature, not sync. You assemble your own sync story with whatever file sync you already use. This is powerful for technical users and a real gap for non-technical ones.
  • Full-text archive (page content storage) is not native. Buku fetches and stores titles and descriptions, not full page content. If the URL goes dead, you get a Wayback Machine lookup, not a local archive. Pinboard’s archiving add-on and Raindrop’s permanent copies beat this [README].
  • GPL-3.0 license. If you want to embed bookmark storage in a commercial product, GPL-3.0 has implications. MIT or Apache-2.0 this is not [merged profile].
  • No collaborative features. Buku is single-user by design. There’s no shared collection, no team workspace, no link sharing.

Who should use this / who shouldn’t

Use Buku if:

  • You’re a developer or sysadmin who already lives in a terminal and wants bookmarks to behave like any other CLI tool.
  • You have thousands of bookmarks from multiple browsers you want consolidated into a single queryable database.
  • Privacy is a genuine constraint — you don’t want your reading patterns stored on a vendor’s server.
  • You want to script bookmark operations: auto-tag URLs from an RSS feed, export weekly reading lists, build a personal knowledge graph on top of bookmark metadata.
  • You already have a file sync solution (Syncthing, rsync, git) and just want the bookmarks to be a portable file.

Skip it (use Raindrop.io instead) if:

  • You want a polished GUI, browser extension, and mobile app that all sync automatically without any setup.
  • You capture bookmarks primarily on your phone.
  • You want visual collections, cover images, and a reading-list experience.

Skip it (use Pinboard instead) if:

  • You want a minimal cloud bookmarking service that’s been reliably boring for 15 years, charges $11/year, and stores full page archives.
  • You want a hosted option without the privacy concerns of Pocket but also without the CLI requirement of Buku.

Skip it (build on top of a database directly) if:

  • You’re building a product that needs embedded bookmark storage — the GPL-3.0 license may constrain commercial use cases.

Alternatives worth considering

  • Raindrop.io — The most polished commercial bookmark manager. Free tier is useful; Pro tier ($28/year) adds full-text search and broken link detection. Closed-source SaaS.
  • Pinboard — Deliberately minimal, has been running since 2009, ~$11/year. Archiving add-on stores full page snapshots. Single developer, small but stable. Closed-source SaaS.
  • Pocket — Owned by Mozilla. Read-it-later focused, good mobile apps, Premium at $44.99/year. Closed-source SaaS.
  • Hoarder — Newer open-source self-hosted bookmark manager with a web UI, browser extensions, and AI-assisted auto-tagging. If you want Raindrop-style UI on your own server, Hoarder is the current best option in the self-hosted space.
  • Shiori — Another open-source self-hosted bookmark manager with a web interface. Simpler than Hoarder, no AI features. Go-based, single binary.
  • Linkding — Minimalist self-hosted bookmarking with a clean UI and browser extension. Docker-based, actively maintained, and closer to “Pinboard but self-hosted” than Buku is.
  • Wallabag — Self-hosted read-it-later (more like Pocket than Buku). Stores full page content, has mobile apps. PHP-based.

For power users who want CLI control and zero cloud dependency: Buku is the obvious choice. For everyone else who wants self-hosted but needs a GUI: Linkding or Hoarder are more approachable starting points.


Bottom line

Buku does one thing and has been doing it well for nearly a decade: it gives technically-inclined people a fast, private, fully-owned bookmark store that behaves like a proper Unix tool. The database is a file. The search is regex-capable. The tags are bulk-manageable. The Python library lets you script anything. There’s no monthly bill, no vendor terms-of-service to worry about, and no “we’re changing the API” announcement in your future.

The constraints are real: it’s CLI-first and always will be, the web UI is explicitly marked as personal-use-only, and you own the sync and backup story entirely. If those constraints match your workflow, Buku is the most boring and reliable solution in the self-hosted bookmark space — and in a tool you use every day, boring and reliable beats novel and fragile.


Sources

  1. Buku GitHub READMEjarun/buku: Powerful command-line bookmark manager. https://github.com/jarun/buku
  2. Buku PyPI pagebuku on PyPI. https://pypi.org/project/buku/
  3. Buku ReadTheDocsbuku API documentation. https://buku.readthedocs.io/en/latest/

Features

Integrations & APIs

  • RSS / Atom Feeds

Search & Discovery

  • Bookmarks / Favorites
  • Tags / Labels

Security & Privacy

  • Encryption