Welcome to the 0.28.0 release of Karakeep! We've have hit 20k stars on Github ๐ (well 21k because I was too late with the release)! Thanks a lot for your support throughout this journey! This release brings a refreshed import pipeline, uploading custom attachments, revamped tags page, inline checklists, and a bunch of quality-of-life touches across the web app, extension and mobile app. Huge thanks to @BOTkirial, @qixing-jk, @@maya-doshi, @BenjaminMichaelis, @cloudchristoph, @claytono, as usual @xuatz and everyone who shipped code, triaged bugs, or shared feedback for this release.
If you enjoy using Karakeep, consider supporting the project here โ๏ธ or via GitHub here.
And in case you missed it, we now have a โ๏ธ managed offering โ๏ธ for those who don't want to self-host. We're still in private beta (you can signup for access here) and gradually letting more and more users in.
New Features ๐
Revamped import experience with progress tracking (#2001)
Revamped Tags page that adds search and pagination to better serve users with thousands of tags (#1987)
You can now upload custom attachments to bookmarks (#2100)
When deleting a list, you can now optionally delete all its children (#1989)
Server overview highlights service dependency health.
Inline checklist toggling for text bookmarks (#1933) โ @BOTkirial
With every release, you'll be prompted to view what's new in that release from inside the app.
You can now pass custom headers from the mobile app to the server (#2103)
Extension improvements:
Tab bookmark badge indicator by @qixing-jk shows when a page is already bookmarked (#1745)
You can now write notes directly after saving a bookmark in the extension (#2104)
UX Improvements โจ
Grid view controls expose title/tag toggles and image fit options (#1960)
Bookmark cards can surface saved notes across web and mobile (#2083) โ @xuatz
Manage Lists modal is searchable for faster sorting (#2029)
The tags page now has a "Create Tag" button (#1942)
You can now regenerate the API key without having to recreate it.
New title: seach qualifier for searching bookmarks by title (#1940)
Fixes ๐ง
โ ๏ธ (Potentially breaking change) โ ๏ธ Stricter URL valdaition to protect against SSRF attacks (#2082)
Webhook requests now go through the proxy if there's one configured
All server-initiated requests (including webhooks) to internal IP addresses are now blocked by default unless explicitly allowed via CRAWLER_ALLOWED_INTERNAL_HOSTNAMES. If your webhooks are hitting internal services, you'll have to allowlist them via CRAWLER_ALLOWED_INTERNAL_HOSTNAMES.
Monolith now honors the configured crawler proxy.
Metascraper logo extraction now respects the crawler proxy.
Crawler memory footprint shrinks with targeted optimizations (#1748)
Allow karakeep to use newer openai models that was previously failing because of deprecated max_tokens (#2000) - @BenjaminMichaelis
You'll need to set INFERENCE_USE_MAX_COMPLETION_TOKENS=true in your .env file to use the new models. This is eventually going to become the default.
Admin maintenance jobs respect abort signals to stop gracefully
Search input no longer crashes on percent signs and also works correctly with IME composition
Fixed a crash when sharing a list publicly that didn't have any bookmarks (#1990)
Screenshots are now stored as jpegs instead of pngs to reduce file size
Fixed a bug that was preventing tag merging (#1938)
RSS imports can apply feed categories as tags (#2031)
For Developers ๐ ๏ธ
Create bookmark API returns 200 instead of 201 when a bookmark already exists
CLI Improvements:
New commands to migrate data from one server to another
New command to dump a full account archive
A new wipe command to selectively clean up data from the account
Karakeeper now is providing an alternative iOS native mobile/desktop client for Karakeep beyond its existing functionality of providing a safari extension.