If you have been using the internet for some time, you are probably very familiar with bookmarks. Most people save them locally, and with modern browsers like Chrome, Edge, and Firefox syncing across accounts, your bookmarks follow you everywhere.

Yet, what if you do not want to rely on centralized browser accounts? Years ago, social bookmarking flourished with platforms like Delicious and Digg. Over time, those faded away. Pinterest is perhaps the lone survivor in that lineage, but it functions far more like a scrapbook for recipes and visual design than a true, general-purpose bookmarking tool.

I have always wanted a self-hosted bookmarking service, but never found the time to build one. Today, with the rise of AI-assisted agentic coding workflows, there is no longer an excuse.

Introducing Bookmark, a lightweight, self-hosted bookmarking service built with Python, SQLite, and LLMs. The project was heavily inspired by Doug Turnbull’s article on Hypothetical Classifications, adopting his approach to semantic tag and description generation for embeddings.

Architecture

The system is designed to be simple, fast, and modular:

  • Ingestion: An LLM inspects the page content, extracts key metadata, and generates structured tags and descriptions. Currently, it uses Google’s Gemini Flash for cost-effective inference, though any modern LLM can be substituted.
  • Embeddings: Semantic vectors are generated for descriptions and tags using the BAAI/bge-small-en-v1.5 model via FastEmbed's ONNX runtime, keeping the embedding step fast and local.
  • Retrieval: Search queries combine direct tag filtering with cosine similarity matching on the embedding space to find relevant links even when keywords do not match exactly.
  • Storage: URLs, tags, metadata, and generated vector embeddings are all persisted in a single, lightweight SQLite database.

You can explore the code and run it yourself on GitHub at kudithipudi/bookmark.

Digg-like, Only Better - and All Yours

Bookmark is a self-hosted, AI-powered bookmarking service built with Python and SQLite. It automatically extracts metadata, generates tags and descriptions, creates local embeddings, and combines tag matching with semantic search to help you find saved links later.