0.24.0 – Riding the MCP hype
Welcome to the 0.24.0 release of Karakeep! This release packs a ton of new stuff (we're back to shipping folks!). This release introduces a new MCP server for interacting with Karakeep through LLMs, a new rule generic rule engine for more control over organizing your bookmarks, new search qualifiers for feeds and bookmark age, overdue edit dialog for bookmark details, some UI polishing and more! This release also welcomes a TON of new contributors, @brandonw3612, @yorch, @Summon528, @dotvhs, @YTKme, @hasansino, @gomnitrix, @adripo, @meysam81, @SteffoSpieler, @jkywalker (And I probably missed some).
If you enjoy using Karakeep, consider supporting the project here ☕️ or via GitHub here.
New Features 🚀
✨ MCP Server ✨
Unless you've been living under a rock recently, you've heard about the recent explosion of MCP servers all over the internet.
We're not going to miss the hype. This release ships a new MCP server (docs) that allows you to interact with your Karakeep instance and bookmarks through extrenal LLMs.
You can ask the LLM to summarize your bookmarks, search the web and send what it finds to Karakeep, or archive your recent chat as a text note in karakeep.
It can create new lists, attach tags and more to help you organize your bookmarks.
More demos in the screenshot section.
Generic Rule Engine ⚙️
Karakeep was born because I don't want to spend time organizing what I hoard. I just throw stuff in there and karakeep's tagging and search will help me retrieve it later.
However, turns out that not everyone is in the same camp. If you're one of those people who enjoy organizing their bookmarks, this feature is for you.
This release introduces a new generic rule engine that allows you to define arbitrary processing rules for organizing your bookmarks.
Some examples:
- If a bookmark is added, and it's coming from youtube, tag it with "#youtube" and "#video".
- If a bookmark is favourited, download an offline archive for it.
- If the tag "#fashion" is added to a bookmark, and this bookmark is an image, then add it my "Inspiration" list (You're better off using a smart list for this though).
⚠️ The firefox extension is back under a new name (Action Required) ⚠️
After the rebranding unfortunatly we couldn't get the old Firefox extension back, so we had to publish a new one (link).
If you're using the old "firefox" extension, you MUST migrate to the new one manually otherwise you won't be getting future updates.
And more!
- gpt-4.1-mini is the new default text model: The default OpenAI text model changed to the new 4.1-mini. It's slightly more expensive than 4o-mini, but is supposed to be much smarter. The image model remains as 4o-mini as 4.1-mini is more expensive for images.
- New Search & Smart list Qualifiers:
- New “age:” search qualifier to show bookmarks older or newer than a given duration (by @brandonw3612).
- New "feed:" search qualifier to find bookmarks imported from certain RSS feeds.
- You can find the full query language here.
- Edit Bookmark Details: You can now edit almost all the details of bookmarks. The URL, summary, creation date, everything. This is obviously very overdue.
- List Merging: You can now merge lists together thanks to @gomnitrix.
- Import Tab Session Manager Sessions: Bulk-import your Chrome/Firefox Tab Session Manager session files as Karakeep bookmarks by @yorch.
- Configuring other AI providers: We added documentations for how to configure other AI providers beside OpenAI (link). This includes providers like Google AI Studio, OpenRouter, Perplexity, etc.
- Karakeep on TrueNAS: People using TrueNAS can now find Karakeep in TrueNAS' app store thanks to @stavros-k.
UX Improvements ✨
- Some UI polish
– Reduced shadows, lighter font weights, smaller editor box following the suggestions of @dotvhs in #1261!
– Removed focus rings where they don't matter much, fix popovers to the emoji picker (by @Mxrk), and list items in the sidebar now get truncated if they're long.
– Fixed margins of the “New List” button, and fixed spinner visibility during AI summarization - Cached content is now called “Reader Mode” content.
- There's now a nice looking "No bookmarks" banner for search and empty smart lists.
- Lists now can have a short description beside their name (by @ekambains).
- A new monochrome icon for android builds by @SteffoSpieler.
- Copy link button now gets greyed out when on a non-secure context by @ekambains.
- The github link in the sidebar now works correctly for people on the nightly build thanks to @hasansino.
For Developers 🛠️
- Added
includeContentto the API endpoints that return bookmarks (Listing, search, etc) to control whether the endpoint should include the content of the bookmark (which can be huge or not).- ⚠️ For backward compatibility, this defaults to
true, but starting from the next release, this will default tofalse. So if your tool relies on the content of the bookmarks, start passing this totruenow.
- ⚠️ For backward compatibility, this defaults to
- The API docs have a new look. The new look also fixes the enum-like requests types (like the one in createBookmark).
Fixes 🐛
- Smart lists in search: Smart lists are now correctly resolved in the search qualifiers
list:andis:inlist. - A much faster homepage loading times: If you've been a user for the SingleFile extension, Karakeep's homepage might have started getting slower recently. The UI was accidently downloading a big chunk of the archive in the homepage when it's not needed. This is now fixed.
- Faster Imports: Importing bookmarks used to be extremely slow, now it's done with much higher parallelism and should be significantly faster.
- Dark-mode icons for the firefox extension @L-K-M
- Fixed the list getting opened when editing it from the sidebar.
- Added a new
INFERENCE_OUTPUT_SCHEMAconfiguration to restore support for models that only works with JSON mode (instead of the newer structured output mode). - Passwords stored in the database are now salted. For backward compatibility, existing users will continue using an empty salt until they change their password.
- Karakeep now closes the browser after it's done crawling in "on demand" mode by @Summon528.
- Fixed a bug in content extraction that might result in a suboptimal "cached content" being shown.
- Triggering a search re-index now drops all the documents first to avoid dangling documents.
Community Projects 💡
Github 2 Karakeep Importer
By @hasansino
Exports your github stars automatically to Karakeep! Get it here.
Screenshots 📸
MCP Demo
The new "No Bookmarks banner"
Bookmark Editing Dialog
Upgrading 📦
If you’re using KARAKEEP_VERSION=release:
docker compose pull && docker compose up -d
If you pin to a specific version, update KARAKEEP_VERSION, then:
docker compose pull && docker compose up -d
All Commits
- fix: Fix smart lists not working in list search qualifiers. Fixes #845 - @MohamedBassem in 6178736
- docs: Update the API docs - @MohamedBassem in 28ca9d5
- fix: When triggering a re-index, drop all the documents first - @MohamedBassem in 3dd98b4
- fix(mcp): Remove extra new line in bookmark listing - @MohamedBassem in b63366a
- fix(mcp): Fix spacing around the bookmarks - @MohamedBassem in 1568fe9
- fix(mcp): Ditch JSON and respond in plain text - @MohamedBassem in 1a24eb6
- fix(web): Hide smart lists from list selectors - @MohamedBassem in d3cf3e4
- feat: Implement generic rule engine (#1318) - @MohamedBassem in 136f126
- tests: Run trpc tests in CI - @MohamedBassem in ca47be7
- build: Provide a docker container for the MCP server - @MohamedBassem in c239634
- landing: Update Homepage and Hero Image (#1304) - @YTKme in 1880a59
- fix(landing): all external links open in new tab (#1292) - @ekambains in 5ff470b
- chore: rename missing files/conf from Hoarder to Karakeep (#1280) - @adripo in 4296e7f
- fix(workers): Fix dompurify to run on readability's input not output - @MohamedBassem in 86728d7
- deps: Upgrade readability to 0.6 & adblocker to 2.5.1 - @MohamedBassem in f257a5b
- fix(web): Fix margins of the new list button - @MohamedBassem in 2870332
- fix(web): Fix the spinner getting hidden during AI summarization - @MohamedBassem in 6310d45
- fix(web): Fix sidebar lists getting opened on edit - @MohamedBassem in 1e2b2df
- fix: Rename cached content into reader mode - @MohamedBassem in c42c2c3
- ui(web): Reduce shadows, lighten some fonts, and a smaller editor. #1261 - @MohamedBassem in cd632f2
- docs: Add a small doc about truenas installation - @MohamedBassem in ca58d68
- fix: Take 2: Attempt to fix darkmode icon for extensions - @MohamedBassem in 1ff9d1d
- fix: Attempt to fix darkmode icon for extensions - @MohamedBassem in 1d9fc9b
- fix: Fix server side error on clipboard check - @MohamedBassem in 8c4df0f
- docs: Add docs for how to configure differnt AI providers - @MohamedBassem in bd5f85f
- fix: FIxed sidebar link to github for nightly builds (#1274) - @hasansino in 06284d2
- docs: Add robots.txt to prevent indexing versioned docs - @MohamedBassem in 4008541
- fix(mcp): Reduce number of MCP tools and add support for pagination - @MohamedBassem in 6bae119
- fix(mcp): Fix mixed es module issue - @MohamedBassem in 293a4a0
- release(mcp): Release mcp 0.23.5 - @MohamedBassem in 7584c1f
- tests: Add some simple crawler tests - @MohamedBassem in d732acd
- tests: Add tests for various trpc endpoints - @MohamedBassem in 1d78048
- docs: Refresh the API docs - @MohamedBassem in 812354d
- fix: Add includeContent to search endpoint and document it in the docs - @MohamedBassem in ba89a86
- feat: Add import support for Tab Session Manager (#1246) - @yorch in 5e0f4de
- build: Take over the build command in the installation script - @MohamedBassem in 2328dc3
- feat(web): Add support for merging lists (#1231) - @gomnitrix in 71a4742
- fix(workers): Close browser if connect on demand (#1151) - @Summon528 in dd990b5
- docs: Fix docs build - @MohamedBassem in 209573e
- feat: Change default text model to 4.1-mini - @MohamedBassem in adc22a7
- fix: Add password salt to the user table - @MohamedBassem in 7e39afa
- docs: Add documentation for the new rss feed search qualifier - @MohamedBassem in d724497
- feat: add support for filtering by bookmark age (#1228) - @brandonw3612 in 95f504c
- fix: Dont download html content by default in the bookmark grid. Fixes #1198 - @MohamedBassem in 5bdb2d9
- fix: Allow using JSON mode for ollama users. Fixes #1160 - @MohamedBassem in 1373a7b
- docs: Revert 0.23.2 docs and just update 0.23.1 instead - @MohamedBassem in f3c525b
- docs: Release the new API docs - @MohamedBassem in ae76f94
- docs: Replace the OpenAPI rendering library - @MohamedBassem in 969e774
- fix(landing): Add missing title tag - @MohamedBassem in 98ac31c
- chore: hoarder-linux.sh > karakeep-linux.sh v2.1 (#1219) - @vhsdream in f072663
- build: Allow auto deployment of MCP package to npm - @MohamedBassem in bc5c1a1
- fix(mcp): Allow accessing asset extracted content in MCP - @MohamedBassem in 7853096
- feat: Allow editing the extracted content of an asset bookmark - @MohamedBassem in a4d5be3
- fix(mcp): compact the response of get bookmark lists - @MohamedBassem in 8c6cfc8
- ui(web): Copy link button greyed out when clipboard not available (#1209) - @ekambains in 46277c7
- fix(mcp): Reduce token usage of the MCP server - @MohamedBassem in e5bacda
- feat(mobile/android): Add monochrome app icon (#1258) - @SteffoSpieler in 1f92ced
- docs: replace hoarder with karakeep in CONTRIBUTING.md and FAQ (#1256) - @Mxrk in eeff55f
- fix(web): fit popover content box to emoji picker size (#1257) - @Mxrk in 6c0638b
- feat: Add an MCP server for karakeep - @MohamedBassem in cf97bac
- feat(web): Optionally add short description to lists (#1225) - @ekambains in a39cd5f
- docs: add Arch Linux karakeep migration instructions (#1218) - @devome in 56e6795
- fix(landing): Made the year in footer dynamic (#1223) - @ekambains in 3364148
- chore: Replace hoarder with karakeep in github issue templates (#1247) - @Mxrk in 8ffef68
- chore: Rename hoarder packages to karakeep - @MohamedBassem in 755fc36
- chrore: Update meilisearch version to 13.3 in both docker compose files (#1244) - @Mxrk in 7f56904
- i18n: Add Korean language (#1239) - @jkywalker in 60a0df0
- docs: Remove hoarder references for docusaurus config preventing the indexing - @MohamedBassem in 1608804
- build: Regenerate the openapi specs and sdk - @MohamedBassem in a013a33
- fix: Deprecate the updateBookmarkText trpc endpoint and replace it with updateBookmark - @MohamedBassem in 0b769c3
- feat: Allow editing bookmark details - @MohamedBassem in 3207264
- docs: update Arch Linux installation (#1216) - @devome in 817eb58
- chore: update repo release url to karakeep (#1210) - @meysam81 in d1a814f
- fix: Do clientside import dedup and parallelize import calls - @MohamedBassem in af631eb
- feat: Add a search matcher for rss feed bookmarks - @MohamedBassem in af6774f
- feat(web): A slightly better looking banner when no bookmarks are found - @MohamedBassem in d86628d
- fix(web): Get rid of focus rings for ghost buttons - @MohamedBassem in b17bf7d
- refactor: Migrate the landing page from nextjs to vite - @MohamedBassem in 3f2d356
- fix(web): Line clamp sidebar items to a single line - @MohamedBassem in 4e32b40
- fix(installation): Fix the baremetal installation script after the rebrand - @MohamedBassem in 27e5693
- release(extension): Release version 1.2.4 - @MohamedBassem in d17eb8c
- fix(extenion): Added white icon for dark mode users (#1176) - @L-K-M in 2753b82
- fix(extension): Update extension logo and name - @MohamedBassem in 4ab5a18
- fix(mobile): Revert mobile app slug name - @MohamedBassem in 019c135
- fix(mobile): Update karakeep logo and splash screen - @MohamedBassem in 49efe14
- docs: Release the 0.23.1 docs - @MohamedBassem in 27324a9
- chore: Rename mobile and pwa manifests to karakeep - @MohamedBassem in 8a2b890
- docs: Update installation docs with karakeep - @MohamedBassem in 4e6d314
- build: Update image source label in the dockerfile - @MohamedBassem in abcb9f2
- fix: Drop the rebranding banner - @MohamedBassem in 8f470b3
- build: Build the new karakeep docker images - @MohamedBassem in a5c3db1
- readme: More readme fixes for the new name - @MohamedBassem in 14b85a3
- readme: Update readme and docs for the new name - @MohamedBassem in a386406






