chore(deps): update ghcr.io/karakeep-app/karakeep docker tag to v0.34.1 #36

Open
svc-renovate wants to merge 1 commit from renovate/ghcr.io-karakeep-app-karakeep-0.x into main
Collaborator

This PR contains the following updates:

Package Update Change
ghcr.io/karakeep-app/karakeep minor 0.29.1 → 0.34.1

⚠️ Warning

Some dependencies could not be looked up. Check the Dependency Dashboard for more information.


Release Notes

karakeep-app/karakeep (ghcr.io/karakeep-app/karakeep)

v0.34.1: 0.34.1

Compare Source

This is a security release on top of 0.34.0. The docker images move from the pinned node:24.18.1-slim back to node:24-slim (currently Node 24.22.1) to pick up the October 2026 Node.js security releases. Among other fixes, these patch a Brotli decoder out-of-bounds write (CVE-2026-111497) and several TLS certificate hostname validation bypasses (CVE-2026-105483, CVE-2026-106069, CVE-2026-106072). Thanks @​eriktews for the fix (#​3217)!

The node version was pinned in 0.33.2 because of the better-sqlite3 crash loop (#​2989). The upstream fix for that shipped in Node 24.22, so the pin is no longer needed.

v0.34.0: 0.34.0

Compare Source

0.34.0

Welcome to the 0.34.0 release of Karakeep (and sorry for the long wait)! The mobile app gets most of the attention this time: Automatic offline downloads for recent bookmarks and particular lists, tablet layouts, tag management, public lists, collaborators and attachments, all of which used to need the web app. The crawler got a big anti-bot overhaul: it now drives real Google Chrome through patchright, so far fewer sites will hand you a "Just a moment..." page instead of the article. There are also a lot of memory and performance improvements, along with tons of bug fixes.

Thanks to everyone who contributed to this release: @​justadityaraj, @​InventorB, @​ryanchou1994, @​NoiceHax, @​0-0mfuji, @​eriktews, @​qwist1233-cpu, @​lightsabit, @​BrownieCoder, @​itz-puneet, @​jreiml, @​deepcfr, @​mislav, @​pradeepb28, @​Kyzcreig, @​gowinder, @​samuel-sarmah, and everyone who triaged bugs or shared feedback.

Note: the changes mentioned here for the extension and mobile releases will need to go through the different store (apple, google, mozilla) reviews. So it might take a couple of days until all of them are released.

If you enjoy using Karakeep, consider supporting the project here ☕️ or via GitHub here. Also share Karakeep's managed offering (☁️ link) with your friends who're not into selfhosting.

Buy Me A Coffee

New Features 🚀

  • Karakeep's auth moved from next-auth to better-auth:
    • This is an infrastructure change, but it's a big one. Karakeep moved its auth library to better-auth (away from next-auth). This will unlock a lot of new features in the future (e.g. 2fac, oauth login in the mobile app, hosted MCP auth, etc).
    • This migration is going to happen automatically after the upgrade BUT there are some caveats, please read the "Upgrading" section.
  • Automatic Offline Downloads: 0.33 let you save single bookmarks for offline reading on the mobile app. In this release, you can let karakeep automatically download recent bookmarks for you while the app is open, and also mark specific lists to be always fully available offline.
  • Mobile app catching up with the web:
    • Tablet layout showing multiple columns on wide screens.
    • Tag management: rename and delete tags from the app (fc401d0).
    • Manage public lists and list collaborators (292c13a).
    • View and download bookmark attachments (27774f9).
    • A new usage statistics screen (6563ee1).
    • Pick a parent list, choose a list icon, and create lists straight from the "Manage Lists" page (7ca5ee2, 428d1f2, f977712).
  • A crawler that gets blocked less:
    • The crawler now drives the browser with patchright, a Playwright fork that doesn't leak the automation signals that bot-protection scripts look for (af8b0eb).
    • The karakeep-chrome image now ships Google Chrome stable instead of Chrome Headless Shell, as protected sites block the headless shell far more often (ea57af1). This comes at the cost of the chrome image getting bigger unfortunatly.
    • The user agent now comes from the actual browser instead of a hardcoded Chrome 124 one (254174a).
    • Cloudflare's "Just a moment..." and DataDome's device check clear on their own after a few seconds. The crawler now waits for them (up to CRAWLER_CHALLENGE_WAIT_SEC, default 15s) instead of saving the challenge page (1800346).
    • New CRAWLER_BROWSER_TIMEZONE to make the browser's timezone match your proxy's location, as a UTC browser behind a non-UTC proxy is a strong bot signal (ba8c188).
  • On-demand video preservation (#​3183): A new "Preserve Video" bookmark action downloads a single bookmark's video with yt-dlp. You can now keep automatic video downloads off and still preserve the ones you care about.
  • Broken links management revamp (#​3105): The broken links settings page now groups issues by category and supports search, sorting, retrying and bulk deletion.
  • Search: New has:notes and has:highlights qualifiers by @​BrownieCoder (#​3053).
  • Others:
    • New CRAWLER_FULL_PAGE_ARCHIVE_MAX_SIZE_MB to discard full-page archives above a certain size (media-heavy pages can produce 1GB+ archives that never render) by @​NoiceHax (#​3054).
    • Pages uploaded as precrawled archives (e.g. SingleFile uploads, and client-side crawling) now get a screenshot too (#​3161).
    • Banner images are now resized and converted to WebP to save storage (#​3165).
    • The default tagging model is now gpt-6-luna which costs half as much as gpt-5.6-luna used to cost (thanks OpenAI?).

UX Improvements ✨

  • A visual refresh of various web app components. More modern looking dialogs, buttons, dropdown menus, tooltips, etc.
  • Added a "System" theme option that follows your OS by @​deepcfr (#​3159).
  • The bookmark preview page now has the full bookmark options menu in its action bar (24fb655).
  • The "delete unused tags" button is now a bit more grown up (acbac6a).
  • Home/End now move the cursor in the search bar by @​eriktews (#​3110).
  • The browser's theme color now follows dark mode by @​itz-puneet (#​3051).
  • Mobile:

Fixes 🐛

  • Performance and memory:
    • Fix a server memory leak caused by the query cache (#​3138).
    • Workers and web only load the dependencies of features that are enabled cutting memory usage for most setups. You should expect a 40MB drop in RSS with this release.
    • Prometheus default metrics are no longer collected when Prometheus isn't configured (#​2397). This fixes a regerssion introduced in 0.29 and should result into a lower baseline CPU usage.
    • Faster tag searches by @​0-0mfuji (#​3089).
    • Search indexing now defaults to 50 workers (instead of 1) for better batching. Should result in faster indexing for large imports.
    • SQLite now runs PRAGMA optimize on open and daily (355a0b0).
    • Faster lists page and list stats queries and a smaller main web bundle (2d7cc4b, 44ea028, b640f15).
  • Hardening:
    • Upload body size is now enforced before parsing the multipart body (3e22b65).
    • Asset downloads now respect client backpressure instead of buffering in memory (b5cab5b).
    • Pagination limits are now validated on all tRPC endpoints (94e1ea2).
    • Content length is capped before tokenizing AI prompts (ef07e91).
    • Upgraded Next.js to 16.4.1 for its October security release (#​3196).
  • Collaborators' bookmarks now show up in public lists by @​NoiceHax (#​3019).
  • Moving a list under one of its own sublists is now rejected, as the resulting cycle could send list deletion into an infinite loop. Reported by @​Vertextheonesolution (GHSA-892w-x93w-2fqp, #​3199).
  • Fix bookmark pagination tie breakers that could skip or duplicate bookmarks (135f116).
  • Fix the headers timeout for AI inference jobs with slow providers by @​eriktews (#​2888).
  • Fix embedding generation with providers that don't default to float embeddings (#​3009).
  • Bookmarks deleted while being indexed no longer dangle in meilisearch (bca289d).
  • The RSS fetcher now identifies itself with a karakeep specific user agent (adf399b).
  • If one of the workers fails, the whole worker process now crashes instead of silently running without it, so your container's restart policy can kick in (ae9e23b).
  • Fix .jpg uploads being rejected in the attachment box (2434e65).
  • Fix the header shrinking in Safari (3c44114).
  • Fix duplicate "sort by" in the all tags page (f5e56b4).
  • Fix the sidebar's "+" (new list) button messing up the bookmark preview modal when clicked while a bookmark is open by @​samuel-sarmah (#​3192).
  • Make /run owned by node in the docker image so non-root setups work by @​lightsabit (#​3114).
  • Mobile:
    • Fix lost and duplicated Android shares after the app gets killed (e7fbaab). This has been a long standing problem, and should signficantly improve share reliability for android.
    • Ignore Android's unreliable internet reachability checks that marked the app offline (#​3127).
    • Fix the server save button getting hidden by the keyboard by @​InventorB (#​3010).
    • Markdown list bullets and numbers now use the foreground color by @​ryanchou1994 (#​3046).
    • Fix lists not getting auto refreshed when a bookmark is added to it (f4efff9) and vertical images in bookmark info (482369b).
    • Fix a bug that was causing mobile API keys to not be revoked on mobile app logout (1820693).
  • Added missing Turkish translations by @​qwist1233-cpu (#​3111).

For Developers 🛠️

  • The MCP server has been upgraded to the MCP v2 SDK (39df6c6).
  • The CLI now bundles the official Karakeep skill (baf0b1b).
  • Karakeep now serves /.well-known/api-catalog, /.well-known/change-password and /.well-known/security.txt (2620d9e).
  • The docs now have an llms.txt for agents (a8450b3).
  • Translations have moved away from Weblate and to an LLM driven workflow.
  • Clarified LOG_LEVEL options in the docs by @​mislav (#​3149).

Community Projects 💡

Checkout our community projects page here.

Screenshots 📸

Automatic Offline Download

Screenshot 2026-10-17 at 10 27 34 PM Screenshot 2026-10-17 at 22 27 11@​2x

Upgrading 📦

Things to know before upgrading:

  • Everyone gets signed out once. The move to better-auth (#​3140) switches web sessions from JWTs to database sessions, so all web users will need to sign in again. Mobile apps and API keys are not affected.
  • Auth env changes:
    • This release will automatically lowercase all email stored in the database (in prep for making email case insensitive), except accounts that will cause a conflict (two accounts that differ only in email case). You Must fix those conflicts before upgrading (by deleting the unused one). You'll get locked out if you have two conflicting accounts (neither of which are lowercase). If you get locked out, change the email address in the sqlite database to be lowercase to gain access back.
    • New AUTH_TRUSTED_ORIGINS (default *) to restrict which origins can sign in and be redirected to on top of NEXTAUTH_URL.
    • NEXTAUTH_URL and NEXTAUTH_SECRET keep their names and are still required.
  • Migrate to the karakeep-chrome image if you haven't already. Check the migration guide here. Browserless (mostly unraid users) will continue to work but will miss out on the stealth improvements. It's advised to migrate to karakeep-chrome's unraid template maintained by @​Collectathon.

To upgrade:

  • If you're using KARAKEEP_VERSION=release, run docker compose pull && docker compose up -d.
  • If you're pinning it to a specific version, upgrade the version and then run docker compose pull && docker compose up -d.

v0.33.2: 0.33.2

Compare Source

0.33.2

This is a patch release for after 0.33.1. It contains the following fixes:

Bug fixes:

  • Change default "use max completion tokens" token env variable to true when using the default OpenAI configuration now that we're using 5.6 luna and this flag is required there (#​3007).
  • We're migrating to a custom karakeep chrome container (based on https://github.com/chromedp/docker-headless-shell) now that the old alpine-chrome is no longer fetch-able (and has been long abandoned by the maintainer). Check the migration guide here. The old image will continue to work, but it's recommended that you migrate to the new one as it also upgrades chrome to 151 (compared to 124 in the old image). If you've been using browserless (e.g. on unraid), you're not impacted by this, and you don't need to migrate.
  • Large singlefile archives (typically because of videos) used to fail metadata extraction as the parser used to OOM. We strip inline videos now to make the parsing succeed.
  • Hardened the link to asset conversion mechanism in the crawler that used to result into silently broken assets. (#​3002)
  • Pinned nodejs to version 24.18.1 thanks to @​eriktews (#​2996) to overcome a bug in the latest node 24.19 version (check #​2989 for details). The proxmox scripts also were pinned by @​MickLesk.
  • Karakeep's favicon is now light/dark mode aware, thanks to @​ehfreema (#​2990).

New features:

  • You can now upload custom SingleFile archives to karakeep directly using the CLI.

Changelog

v0.33.1: 0.33.1

Compare Source

0.33.1

Welcome to the 0.33 release of Karakeep! The headline of this release is semantic search. Karakeep can now generate embeddings for your bookmarks, letting you search by meaning instead of exact keywords (and making auto-tagging noticeably more consistent along the way). The mobile app gets offline reading, so you can save articles to your device and read them on a plane, along with new layouts, sorting, and one-tap clipboard saving. Cookie and GDPR consents should be something of the past with this release (finally). Plus a big batch of crawler, security and performance fixes.

Thanks to everyone who contributed to this release: @​esimkowitz, @​joestump, @​zerone0x, @​ElectricTea, @​optix2000, @​thiswillbeyourgithub, @​jcgoodwin86, @​InventorB, @​VrtxOmega, @​pike00, @​KayMi, @​TanishValesha, @​mahirhir, @​moduvoice, @​eviaaaaa, @​archit-goyal, @​CertStone, and everyone who shipped code, triaged bugs, or shared feedback.

Note: the changes mentioned here for the extension and mobile releases will need to go through the different store (apple, google, mozilla) reviews. So it might take a couple of days until all of them are released.

If you enjoy using Karakeep, consider supporting the project here ☕️ or via GitHub here. Also share Karakeep's managed offering (☁️ link) with your friends who're not into selfhosting.

Buy Me A Coffee

New Features 🚀

  • Semantic Search (#​2959, #​2960) - Search is no longer limited to exact keyword matching. There are now three search modes, switchable from a dropdown in the search bar:
    • Full text - the existing keyword search (still the default).
    • Semantic [Experimental] - pure meaning-based search powered by embeddings. Searching for "how to make coffee" will find your espresso bookmarks even if they never use those words.
    • Hybrid [Experimental] - fuses the results of both.
    • The new mode is also available in the API, MCP and CLI which is going to be the most useful with agents.
    • Semantic search is still new and experimental, so results might not be super accurate yet, but it's a start.
    • ⚠️ Semantic search requires embeddings to be enabled, read the upgrade notes for details about how to enable them.
  • Smarter auto-tagging using embeddings (#​2858) - When tagging a new bookmark, Karakeep now looks up semantically similar bookmarks and feeds their existing tags into the LLM prompt as suggestions. The result is a lot less tag sprawl (no more k8s, kubernetes and Kubernetes all coexisting). This also requires embeddings to be enabled, read the upgrade notes for details about how them.
  • Cleaner saved pages (#​2973): the crawler now detects common consent dialogs (cookies and GDPR) and automatically opts out before capturing the article, screenshot and PDF.
  • Offline reading on mobile (#​2957) - The mobile app can now work without a connection:
    • Save articles for offline: from a bookmark's "…" menu, pick Make available offline. The full article is downloaded and kept on device until you remove it.
    • Recent cache: everything you browse (bookmark lists, tags, lists, highlights) is now persisted for 7 days, so recently visited screens still open when you're offline.
  • Mobile app improvements:
    • New layouts (#​2837): switch between the existing card layout and a new compact list layout. Note: the default is now the list layout.
    • Sorting (#​2777): sort your bookmarks newest-first or oldest-first (overdue, sorry!).
    • Save from clipboard (#​2868): a new Clipboard entry in the "+" menu saves whatever is in your clipboard in one tap. Thanks @​InventorB!
    • The manage bookmark sheet now has favourite, archive, share and highlights actions instead of just delete.
  • Karakeep for agentic usage - continuing where 0.32 left off:
    • MCP server went from 8 to 29 tools. Newly added: full list CRUD, full tag CRUD, highlights, delete-bookmark, and get-asset. Big thanks to @​joestump for the list/tag CRUD work (#​2917)!
    • New readable content API (#​2660): GET /api/v1/bookmarks/{bookmarkId}/content returns a bookmark's article content as markdown or plain text, cursor-paginated in LLM-friendly chunks that snap to paragraph boundaries.
  • Much faster bookmark metadata (#​2932): Karakeep's pre-flight http request to the website can now contribute to its metadata extraction. This results into some metadata (e.g. title) appearing much faster. A new CRAWLER_PREFLIGHT_USER_AGENT option lets you set a user agent for that probe request, and let's just say that a good user agent makes a huge difference.
  • The default OpenAI model has changed from gpt-4.1-mini to gpt-5.6-luna which is half as cheap, though a bit slower given that it's a reasoning model.

UX Improvements ✨

  • Re-saving an existing bookmark now actually does something (#​2962) - Saving a link you've saved before used to just tell you "Bookmark already exists" and do nothing. Now it re-saves it: the bookmark is un-archived and bumped back to the top of your list.
  • Smarter bookmark previews (#​2975) - Newly crawled pages are now assessed for how well they work in Reader View. Articles continue to open in the clean reader, while homepages, search results, product pages and other non-article content default to a screenshot or a new page-overview panel instead of showing a poor text extraction. You can still switch among the overview, Reader View, screenshot, PDF and archived page from the preview selector.
  • Bulk edit is now one hover away: instead of first switching bulk edit on from the toolbar, a selection circle appears directly on a bookmark card when you hover it. Selecting one card puts you into bulk edit mode for the rest.
  • The sidebar is now wider on large screens, and its scrollbar only appears when you hover it instead of sitting there permanently.
  • Mobile polish: a proper loading state while an article is still being crawled, better reader contrast in dark mode, a rebuilt login screen with much clearer connection errors, faster Manage Tags page on large libraries (server-side search instead of loading every tag), iPad/tablet reader toolbar and FAB fixes by @​esimkowitz (#​2788, #​2793, #​2794), and a bunch of redundant success toasts removed.
  • Karakeep is now installable as a PWA in Chrome again, allowing you to use karakeep on your desktop as if it's one of the apps.
  • New Instagram renderer (#​2836): Instagram posts and reels now render as the actual embedded post in the bookmark preview, joining the existing YouTube, X, TikTok and Amazon renderers.

Fixes 🐛

  • Security fixes:
    • Fixed a DNS rebinding / TOCTOU hole in the crawler's SSRF protection (#​2945). Reported by @​celinke97 (GHSA-vc53-r298-c6h6).
    • API key and signed asset token verification now use timing-safe comparisons, reported by @​xancyber (GHSA-hjm9-gc55-5hgv).
    • Bookmark URLs are now restricted to http/https on create and update. Reported by @​therawdev and @​shukla304 (GHSA-6mfw-xrw2-h5x3).
    • Legacy bookmarks with unsafe schemes are filtered out of RSS feeds and Netscape HTML exports, and the exported URLs are HTML-escaped. Reported by @​karen93shieh and @​MuxiLyuLucy (GHSA-4vx2-9j8p-jg8v).
    • Tag names are now HTML-escaped in Netscape bookmark exports, preventing a crafted or AI-generated tag from breaking out of the TAGS attribute when the export is opened in a browser.
    • User-supplied names (user names, list names, inviter names) are HTML-escaped in outgoing emails, fixing HTML injection in the list invitation email. Reported by @​therawdev and @​shukla304 (GHSA-pvj2-rgwm-r7f8).
    • Password logins are now rate limited (10 attempts per 15 minutes per IP + email). Note that this requires RATE_LIMITING_ENABLED=true.
    • Closed account-enumeration side channels in login and password reset.
  • Much faster bookmark deletion (#​2669): added the missing indexes that should make deletions less IO intensive for large libraries.
  • Old completed import sessions are now archived after 30 days: their summary counts are kept, but the per-bookmark staging rows are deleted, which keeps the DB from growing unboundedly after big imports.
  • YouTube/video downloads work again - yt-dlp now uses the bundled node as its JS runtime, by @​pike00 (#​2805).
  • Fixed BROWSER_WEB_URL failing to resolve on IPv6-only Docker networks by @​VrtxOmega (#​2863).
  • Fixed the X/Twitter renderer, which broke after the API changed its response shape.
  • Inline images in SingleFile archives are no longer clobbered by the lazy-load normalization, by @​zerone0x (#​2928).
  • Banner/preview image extraction now works for SingleFile and precrawled archives that inline the image as a data URI.
  • Fixed summarization producing garbled output for users running with INFERENCE_OUTPUT_SCHEMA=json, by @​eviaaaaa (#​2926).
  • New OPENAI_TIMEOUT_SEC option to control the per-request inference timeout, useful for slow self-hosted providers, by @​optix2000 (#​2876).
  • Hardened the tagging prompt: tags are now capped to 1–3 words, and Karakeep explicitly returns no tags for error pages, Cloudflare/CAPTCHA interstitials, cookie banners and login walls - so no more just a moment or cloudflare tags on failed crawls.
  • Fixed the MCP get-bookmark-content tool crashing on bookmarks that haven't been crawled yet, by @​joestump (#​2915).
  • Fixed scrolling in the bookmark preview's screenshot view by @​VrtxOmega (#​2864).
  • The browser extension now requests host permissions at runtime for client-side crawling (#​2784), instead of asking for them up front.
  • Added missing Japanese translations by @​mahirhir (#​2903) and filled in the missing Korean translation keys by @​moduvoice (#​2938).
  • PDF previews now render via <embed> so they display in Safari, by @​KayMi (#​2806).
  • Import progress is now tracked per import job (#​2950), so running two imports at once no longer makes their progress bars fight each other. Thanks @​jcgoodwin86!

For Developers 🛠️

  • Docker healthchecks now respect a custom PORT by @​zerone0x (#​2948).
  • OAuth providers can now use a configurable ID token signing algorithm via OAUTH_ID_TOKEN_SIGNED_RESPONSE_ALG, by @​CertStone (#​2850).

Community Projects 💡

Checkout our community projects page here.

Screenshots 📸

Offline Reading
Screenshot 2026-08-01 at 7 41 17 PM
New Mobile List Layouts

Please don't judge my saved content

Screenshot 2026-08-01 at 7 38 55 PM

Upgrading 📦

To upgrade:

  • If you're using KARAKEEP_VERSION=release, run docker compose pull && docker compose up -d.
  • If you're pinning it to a specific version, upgrade the version and then run docker compose pull && docker compose up -d.

Enabling Embeddings

  1. Karakeep's embedding uses your existing meilisearch installation as the default vector store. If you're an OG, and running an old meilisearch version, you'll need to ensure you're on meilisearch version (1.13 or higher). Check this guide for info on how to update.
  2. If you're using the default OpenAI based configuration, auto embeddings of new bookmarks will be enabled automatically and will use the text-embedding-3-small model.
  3. If you're using a custom provider, you'll need to pass in the EMBEDDING_TEXT_MODEL=<your_mode>, the size of the dimension of the model via EMBEDDING_DIMENSIONS and then pass EMBEDDING_ENABLE_AUTO_INDEXING=true to enable embeddings. Check out our docs for example models and configurations.

Once you've enabled embeddings, you'll need to regenerate embeddings for all existing bookmarks. Head to the admin panel's Background Jobs page (new "Embeddings" card) and regenerate embeddings for all/pending bookmarks. This might take a while depending on how many bookmarks you have, and will cost you money (though embeddings are usually pretty cheap).

NOTE: Changing the model or its dimension after embedding even a single bookmark will require you to regenerate embeddings for all bookmarks.

All Commits

v0.32.0: 0.32.0

Compare Source

Welcome to the 0.32.0 release of Karakeep! The mobile app is getting a major redesign by @​esimkowitz so that it feels more native and friendly to use. Our long-overdue Safari extension is now available on the app store. Karakeep is now more AI-agents friendly with an official skill, revamped and more powerful CLI, granular API keys (and more coming in the next release). SingleFile is now integrated inside the karakeep extension itself for better crawling of authenticated pages. Keyboard shortcuts for faster actions across the app. And tons of fixes!

This release has a huge list of contributors. Some frequent faces, and many contributing their first PRs. Thanks @​esimkowitz, @​Mxrk, @​beluga73, @​Ahmed-Abdel-karim, @​GSAlex, @​cinconueves, @​keslerm, @​xingzihai, @​howwohmm, @​vbalko-claimate, @​MaximePinot, @​apo-mak, @​NikhilChowdhury27, @​maxim-mityutko, @​xuatz, @​ir31k0, @​Joly0, @​larsborn, @​venku122, @​lmgarret, @​hoilc, @​zerone0x, @​mrInvincible29, @​Go2Engle, @​faximan.

Note: the changes mentioned here for the extension and mobile releases will need to go through the different store (apple, google, mozilla) reviews. So it might take a couple of days until all of them are released.

If you enjoy using Karakeep, consider supporting the project here ☕️ or via GitHub here. Also share Karakeep's managed offering (☁️ link) to your friends who're not into selfhosting. We're offering yearly subscriptions now.

Buy Me A Coffee

New Features 🚀

  • Karakeep's Safari extension is now available on the App Store (link), closing Karakeep's oldest open issue (#​10).
  • Huge mobile app revamp lead by @​esimkowitz:
  • Karakeep for Agentic usage: Our goal is to make Karakeep very AI agents friendly. This will allow agents (OpenClaw, Hermes, etc) to find and hoard interesting content on your behalf, provide weekly digests, and more.
    • We're publishing an official skill for karakeep on ClawHub and skills.sh (details here). Those skills teach the agent karakeep's concepts and how to use the CLI.
    • CLI improvements:
      • The CLI also got major improvements allowing it to manage more aspects for bookmarks, lists, and tags. Also got more AI friendly formatting, etc.
      • To avoid having to pass the address and API key with every request, karakeep can now store the auth config in a file and use it for further requests. Init that file with karakeep auth init.
    • If you're afraid to give agents full Read/Write access to your data, API keys now have granular scopes to all resources. Which means you can give agents access to your bookmarks but not administrative actions (like deleting users), etc.
  • Keyboard Shortcuts: You can now do more with the keyboard, as we added support for navigating the bookmark grid with keyboard shortcuts, and taking actions such as favouring/archiving and doing bulk actions. This is the beginning, and please send feature requests for the extra features you need.
  • Extension improvements:
    • [Experimental] The extension can now crawl bookmarks from the client-side eliminating the need of using the SingleFile extension separately from Karakeep (Powered by SingleFile core). This allows you to store pages that are behind authentication or unreachable from your Karakeep server. It's currently opt-in until stable, and then will become the default. Enable it from the extension settings (#​2197).
    • Added support for manual save (instead of the default save on open) by @​keslerm (#​2693)
  • More import sources:
  • Others:

UX Improvements ✨

  • Visual revamp for the bookmark preview page with nicer colors and ability to collapse the sidebar (f500129).
  • Visual revamp for the "All lists" page showing list privacy settings and number of items in each list (145dda9).
  • List and tags page headers now show more info about the content and type of the list/tag (#​2749)
  • Quickly favourite and archive a bookmark by new buttons that appear on hover (98e173d).
  • Haptic feedback on mobile sidebar navigation (f91ec53).
  • Show "+" in the tag count badges when more pages exist by @​zerone0x (432235b).
  • In the add bookmark to list dialog, you no longer need to explicitly save the selection thanks to @​xingzihai (#​2629)
  • The default new list emoji changed from "🚀" to "📁". Maturity, I guess?
  • You can now add multiple lists to the same rule engine condition by @​Ahmed-Abdel-karim (#​2620)
  • Timestamps across the app are now correctly localized instead of showing the server's timezone (#​2682)

Fixes 🐛

  • Important Security fixes:
    • Reported by @​tahirsercan (GHSA-g647-327m-79g9)
      • Fix SSRF validation bypass caused by redirects in crawler and video worker
    • Those issues were reported by Sami Zayn:
      • Add missing ratelimits for the changePassword endpoint
      • Sanitize user names before storing them to avoid stored XSS in karakeep emails (#​2724)
      • Invalidate existing password reset tokens before issuing a new one (#​2722)
    • Reported by @​CE2Sec (GHSA-7rx4-c5vx-g8w3)
      • Fix blind SSRF in crawler favicon extraction
    • Add missing ratelimits for bookmark creation and asset upload APIs
  • Fix a bug where adding a bookmark to a tag or list didn't appear immediately requiring a refresh.
  • Bulk actions used to hammer the server with cache refill requests, those are now debounced.
  • Fix adblocker getting skipped due to the URL validation interception.
  • Fix "Manage tags" page on iOS not scrolling correctly.
  • Prevent highlight popup from stealing focus on Firefox (11dfe74)
  • Fix rare crash in the crawler worker (d197f59)
  • Increase max feed url length to 2k chars (07454a6)
  • Fix cropped text in android app when using bold text by @​Go2Engle (#​2554)
  • Fix occasional problems connecting to server from mobile app when it's behind a reverse proxy by @​mrInvincible29 (#​2559)
  • Better extraction for lazy loaded images from content by @​zerone0x (#​2556)
  • Expand $tags/$aiTags/$userTags in AI prompt preview by @​zerone0x (#​2557)
  • Fix sourceUrl not getting saved when creating asset bookmarks via the API by @​hoilc (#​2574)
  • Redact internal server error messages in prod responses (c8a75a0)
  • Correctly parse linkwarden collections during import (722fd8c)
  • Correctly extract TWZ RSS categories as tags by @​venku122 (#​2589)
  • Correctly skip tagging and summarization for assets that fail preprocessing to avoid misleading numbers in the admin panel
  • Improve meilisearch request batching for better performance
  • Enable configuring monolith timeout and arguments by @​NikhilChowdhury27 (#​2659)
  • Fix openai proxy setting not getting respected by the openai client (#​2676)
  • Fix formality and tone for a bunch of languages to match that of English
  • Use the same proxy URL for all network interactions within the same crawler job run
  • Fix parsing archived status for bookmarks imported from Pocket by @​howwohmm (#​2656)
  • Fix parsing archived status and folder for Instapaper bookmarks
  • Upgrade playwright to 1.59 to fix browserless compatibility issues
  • Stricter full text search matching strategy for bookmarks to provide more relevant results (68e7350)
  • Fix unreachable background script on Firefox by @​Joly0 (#​2649)
  • Update default meilisearch version to 1.41 by @​ir31k0 (#​2643).
    • If you want to update your instance, check out meilisearch's guide here.
  • Fix truncate long bookmark titles on mobile app by @​xuatz (#​2699)
  • Dedupe crawl jobs using idempotency key by @​NikhilChowdhury27 (#​2678)
  • Add ability to finalize/delete a staged import session that might have been stuck before (#​2713)
  • Fix low quality video downloads caused by missing ffmpeg dependency to yt-dlp by @​MaximePinot (#​2721)
  • Better ratelimiting for users behind the same IP (e.g. NAT) by including userId in the ratelimit key
  • Use relative path for logout redirect to avoid port mismatch by @​howwohmm (#​2655)
  • Skip URL type identification requests if a page is crawled with SingleFile by @​GSAlex (#​2580)
  • Fix text clipping in bookmark card notes by @​beluga73 (#​2748)
  • For CLI based server migrations, tags attachedBy is now correctly migrated (462d713)

For Developers 🛠️

  • The API docs now have much more extensive documentation. (dd2c6cc)
  • New APIs:
  • Map TOO_MANY_REQUESTS to 429 status code in the API instead of internal server error (5b6402f)
  • The docker-compose based dev-env is now more stable and documented thanks to @​xuatz (#​2149)

Community Projects 💡

Checkout our community projects page here.

  • Karatui: A rust based TUI for managing your karakeep instance by @​bercribe in 1c17716
  • Karaclean: A Docker sidecar that automatically cleans up Karakeep bookmarks based on declarative YAML rules (e.g. age, tags, lists, etc). @​lmgarret

Screenshots 📸

All Lists Page
SCR-20260508-ophu
Mobile App Toolbar
image
Revamped Bookmark Preview Page
SCR-20260508-opue
Keyboard Shortcuts
SCR-20260508-opza
Granular API Keys
SCR-20260508-opmw
List Header
SCR-20260508-oqnx
New Extension Settings
SCR-20260508-osde

Upgrading 📦

To upgrade:

  • If you're using KARAKEEP_VERSION=release, run docker compose pull && docker compose up -d.
  • If you're pinning it to a specific version, upgrade the version and then run docker compose pull && docker compose up -d.

All Commits

v0.31.0: 0.31.0

Compare Source

0.31.0

Welcome to the 0.31.0 release of Karakeep! This release brings synchronized reading progress, LLM-based OCR, a revamped import pipeline, drag-and-drop for lists, highlights on mobile, a lot of mobile polish, and fixes for some long standing bugs. Huge thanks to our contributors for this release @​esimkowitz, @​WieserDaniel, @​chen-ye, @​SnowSquire, @​mokhovyk, @​evan6seven, @​ElectricTea, @​RobertRosca, @​sweepies, @​usr3 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.

Buy Me A Coffee

And in case you missed it, we now have a ☁️ managed offering ☁️ for those who don't want to self-host. You can signup here 🎉.

New Features 🚀

  • Synchronized reading progress across all your devices (#​2302). By @​esimkowitz!
    • Your reading position is now saved and synced, so you can pick up right where you left off on any device.
  • LLM-based OCR as an alternative to Tesseract (#​2442)
    • You can now use your configured LLM for OCR instead of Tesseract, which produces significantly better results for image and asset bookmarks.
  • Revamped Import pipeline (#​2378)
    • The import experience got another big overhaul: a new import details page (#​2451), a dedicated low-priority queue for import crawling (#​2452), better progress tracking, ability to pause an import and more resilient error handling.
  • Drag-and-drop bookmarks into lists (#​2469)
  • Highlights support on mobile (#​2494)
    • You can now view and create highlights in the mobile app's reader view.
  • AI tag suggestions: instructs the model to limit auto-tagging to a subset of your existing tags for more consistent results (#​2444).
  • Export lists in backups and exports (#​2484)
    • Automated backups and full exports now include your lists.
  • Others:
    • Retry buttons for dangling (aka pending) bookmarks in the admin panel (#​2341).
    • Add signup support to the mobile app.
    • OpenAI service tier configuration via OPENAI_SERVICE_TIER (#​2339). By @​RobertRosca!
    • Import from Instapaper (#​2434). By @​WieserDaniel!
    • Privacy-respecting bookmark debugger admin tool (#​2373)
    • MCP server now supports custom configurable HTTP headers (#​2436). By @​chen-ye!
    • New search qualifiers:
      • source: filter to search by bookmark source (mobile, extension, web, etc.) (#​2465).
      • tag: alias for # and ! alias for negation (#​2425).
      • New "Title Contains" condition in the Rule Engine (#​2354). By @​mokhovyk!

UX Improvements ✨

  • Mobile app overhaul:
    • Native tabs and more native-feeling screens.
    • Animated UI feedback in the sharing modal (#​2427).
    • Show bookmark count in the all lists view.
  • Better looking content fetching loading state in the bookmark preview.
  • Two-phase metadata updates so bookmarks show up faster while crawling is still in progress (#​2467).
  • Links to apps, extensions and docs in the profile dropdown.
  • Extension autofocuses on note field on open (#​2366). By @​SnowSquire!
  • Improving the visual consistency of the settings page.
  • Opt-in OAuth auto-redirect for single-provider passwordless setups (#​2483)
  • Add a download button for assets in the bookmark options menu.
  • API keys now show their last-used dates to better identify unused keys.
  • Fix masonry overflow in bookmark grids (#​2400). By @​evan6seven!
  • Hide confusing No suggestions message when no search suggestions are available.

Fixes 🔧

  • [Security] Sanitize reddit's crawling output to prevent stored XSS. This was reported by @​ByamB4 and published as a github advisory (GHSA-mg93-f9mw-wpgj).
  • Eliminated O(n²) parsing of Netscape bookmark imports (#​2338).
  • Smart lists can now be used in search qualifiers and in other smart list queries (#​2470)
  • Parallelize content extraction in the crawler worker for faster crawling.
  • Batch meilisearch indexing requests for better performance (#​2441).
  • Auto dismiss dialogs during crawling that might have caused worker crashes before.
  • Use user's preferred language for manual summarization (#​2429).
  • Accept more permissive RSS feed content types (#​2353). By @​ElectricTea!
  • Fix clipping of reader view in smaller screens.
  • Fix overscrolling in some setting pages (e.g. AI settings).
  • Stop theme flashes with Cloudflare Rocket Loader (#​2340). By @​sweepies!
  • Retry 403, 429 and 5XX status codes from the crawler.
  • Lower priority of recrawling and mass admin actions to avoid starving interactive traffic.
  • Fix scrolling in manage lists/edit tags when inside a dialog (#​2258).
  • Respect archived display behavior setting in mobile lists and tags (#​2499).
  • Fix flicker on closing bookmark preview on search page.
  • Share PDFs from the mobile app as files instead of links.
  • Fix high CPU usage of browser container after large imports due to leaking contexts. (#​2503)
  • Reader settings preview in the mobile app now matches reader view formatting (#​2365). By @​esimkowitz!
  • When saving an image or a link from a page using "Add to Karakeep" menu item, the title of the original page is no longer incorrectly used for that link.

For Developers 🛠️

  • Docker images moved from Alpine to Debian.
  • OpenTelemetry instrumentation for database queries and extra tracing in OTEL traces (#​2453).
  • Prometheus metric for bookmark crawl latency (#​2461).
  • New checkUrl API endpoint to check if a URL is already bookmarked.
  • attachedBy field in the update tags API endpoint to mark the tag as added by human or AI (#​2281).
  • Upgraded to Expo SDK 54, React 19.2.1, and Node.js 24.
  • CLI can now search bookmarks (#​2426).

Screenshots 📸

Reader Progress

https://github.com/user-attachments/assets/86b259f6-2ce7-493f-a02c-d883c76c901c

Import Details

https://github.com/user-attachments/assets/b37c91a5-b74a-4de5-94d3-f25c346cae7b

Upgrading 📦

To upgrade:

  • If you're using KARAKEEP_VERSION=release, run docker compose pull && docker compose up -d.
  • If you're pinning it to a specific version, bump the version and then run docker compose pull && docker compose up -d.

All Commits

v0.30.0: 0.30.0

Compare Source

0.30.0 (New year release 🎁)

Welcome to the 0.30.0 release of Karakeep and happy new year! This release comes with "2025 wrapped" (a bit late), PDF archives, new reader settings, avatars, reddit crawling improvements, and more! Huge thanks to our contributors for this release @​esimkowitz, @​Moondragon85, @​rzxczxc, @​colado, @​Yeraze, @​eriktews 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.

Buy Me A Coffee

And in case you missed it, we now have a ☁️ managed offering ☁️ for those who don't want to self-host. We're in public beta now and you can signup here 🎉.

New Features 🚀

  • 2025 Wrapped is here to celebrate your year in Karakeep (#​2322).
  • PDF archives
    • Archive bookmarks as PDFs, generated automatically during crawling or on-demand (#​2309).
    • Set CRAWLER_STORE_PDF=true to enable auto PDF archiving.
  • Unified reader settings (font, size, etc) across all devices with per-device overrides (#​2230). By @​esimkowitz!
  • Better metadata extraction:
    • Reddit posts should now be crawled correctly, and banners should be fetched more reliably.
    • Fixed YouTube thumbnail and author extraction.
    • Fixed Amazon product image extraction (where it was sometimes showing the prime logo) (#​2204, #​2108). By @​Yeraze
  • Upload custom user avatars for more personal profiles (#​2296).
  • AI Setting customization:
    • Customize tag styling (case, separators, language) per user. It's highly recommended to set the tag style for more consistent tags (#​2312).
    • Per-user toggles to disable auto-tagging and/or auto-summarization (#​2275).
  • Others:

UX Improvements ✨

  • Our docs got a facelift! The docs got some styling, the pages got re-organized and we now have a "Using Karakeep" section that explains some of the core concepts of Karakeep.
  • Replace bookmark banners and download attachments directly from the drop down menu (#​2328).
  • Sidebar scrollbar looks cleaner, and pending list invites show as a badge in the sidebar.
  • Bookmark edit dialog now includes notes.
  • Bookmark owner avatars now show up in collaborative lists.
  • Mobile UI/UX improvements:
    • Fixed title on mobile to be at most 2 lines long.
    • Mobile settings screens should now feel more native (#​2307).
    • OLED-friendly colors in the Android app matching the colors of the ios app (#​1958).
    • Toasts on iOS now appear correctly above the open modals (#​2320). By @​colado
    • Shared lists now appear in a dedicated subsection on mobile.
    • Adding a bookmark to a list now shows a spinner during loading (#​2283).
    • Server version now appears in mobile settings (#​2276).
    • Fixed the confusing "tick button" beside the server address during login.

Fixes 🔧

  • Fixed missing db indicies that was causing slow bookmark queries (#​2246, #​2287).
  • Improved Ollama summaries by using the generate endpoint (#​2324). By @​eriktews
  • Fixed HTML bookmark imports failing on empty folder names (#​2300).
  • Fixed non-link bookmarks stuck in pending summarization (#​1605).
  • Improved tagging prompts and error-page detection.
  • Reject spoofed content types on file uploads.
  • Preserve failure counts when rescheduling rate-limited domains (#​2303).
  • Fixed duplicate backdrop buttons in reader view (#​2234). By @​colado
  • RSS feed fetching is now spread over the hour (#​2227).
  • Asset preprocessing worker timeout is now configurable (91784cd).
  • Fixed bypassing email verification in apiKey.exchange.
  • Added limits on number of rss feeds and webhooks per user configurable by admins.
  • Fixed a bug where failed crawling leave bookmarks as pending tagging in the admin dashboard.

For Developers 🛠️

  • OpenTelemetry integration with OTLP exporter (#​2318, #​2321).
  • CLI can list users for admins.
  • We're now defaulting to Node.js 24 (the current LTS).
  • Breaking: In bookmark APIs includeContent now defaults to false. This change was announced a couple months ago, and is taking effect in this release.

Community Projects 💡

Screenshots 📸

Wrapped 2025

karakeep-wrapped-2025

Reader Settings

https://github.com/user-attachments/assets/4d81cb80-f9b8-43f2-998a-736f18e33038.

AI Settings

https://github.com/user-attachments/assets/48032bf6-5413-44ee-9c3b-ac7b385aeccf

Upgrading 📦

To upgrade:

  • If you're using KARAKEEP_VERSION=release, run docker compose pull && docker compose up -d.
  • If you're pinning it to a specific version, bump the version and then run docker compose pull && docker compose up -d.

All Commits

v0.29.3: 0.29.3

Compare Source

Well. Upgrading Nextjs one more time to patch CVE-2025-67779.

v0.29.2: 0.29.2

Compare Source

Upgrading Nextjs to patch two new vulnerabilities in react CVE-2025-55184 & CVE-2025-55183. This is on top of the critical vulnerability (CVE-2025-66478) that was patched in 0.29.1.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • "on the first day of the month"
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate CLI.

This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/karakeep-app/karakeep](https://github.com/karakeep-app/karakeep) | minor | `0.29.1` → `0.34.1` | --- > ⚠️ **Warning** > > Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/3) for more information. --- ### Release Notes <details> <summary>karakeep-app/karakeep (ghcr.io/karakeep-app/karakeep)</summary> ### [`v0.34.1`](https://github.com/karakeep-app/karakeep/releases/tag/v0.34.1): 0.34.1 [Compare Source](https://github.com/karakeep-app/karakeep/compare/v0.34.0...v0.34.1) This is a security release on top of 0.34.0. The docker images move from the pinned `node:24.18.1-slim` back to `node:24-slim` (currently Node 24.22.1) to pick up the [October 2026 Node.js security releases](https://nodejs.org/en/blog/vulnerability/october-2026-security-releases). Among other fixes, these patch a Brotli decoder out-of-bounds write (CVE-2026-111497) and several TLS certificate hostname validation bypasses (CVE-2026-105483, CVE-2026-106069, CVE-2026-106072). Thanks [@&#8203;eriktews](https://github.com/eriktews) for the fix ([#&#8203;3217](https://github.com/karakeep-app/karakeep/issues/3217))! The node version was pinned in 0.33.2 because of the better-sqlite3 crash loop ([#&#8203;2989](https://github.com/karakeep-app/karakeep/issues/2989)). The upstream fix for that shipped in Node 24.22, so the pin is no longer needed. ### [`v0.34.0`](https://github.com/karakeep-app/karakeep/releases/tag/v0.34.0): 0.34.0 [Compare Source](https://github.com/karakeep-app/karakeep/compare/v0.33.2...v0.34.0) ### 0.34.0 Welcome to the `0.34.0` release of Karakeep (and sorry for the long wait)! The mobile app gets most of the attention this time: **Automatic offline downloads** for recent bookmarks and particular lists, **tablet layouts**, tag management, public lists, collaborators and attachments, all of which used to need the web app. The crawler got a big anti-bot overhaul: it now drives real **Google Chrome through patchright**, so far fewer sites will hand you a "Just a moment..." page instead of the article. There are also a lot of memory and performance improvements, along with tons of bug fixes. Thanks to everyone who contributed to this release: [@&#8203;justadityaraj](https://github.com/justadityaraj), [@&#8203;InventorB](https://github.com/InventorB), [@&#8203;ryanchou1994](https://github.com/ryanchou1994), [@&#8203;NoiceHax](https://github.com/NoiceHax), [@&#8203;0-0mfuji](https://github.com/0-0mfuji), [@&#8203;eriktews](https://github.com/eriktews), [@&#8203;qwist1233-cpu](https://github.com/qwist1233-cpu), [@&#8203;lightsabit](https://github.com/lightsabit), [@&#8203;BrownieCoder](https://github.com/BrownieCoder), [@&#8203;itz-puneet](https://github.com/itz-puneet), [@&#8203;jreiml](https://github.com/jreiml), [@&#8203;deepcfr](https://github.com/deepcfr), [@&#8203;mislav](https://github.com/mislav), [@&#8203;pradeepb28](https://github.com/pradeepb28), [@&#8203;Kyzcreig](https://github.com/Kyzcreig), [@&#8203;gowinder](https://github.com/gowinder), [@&#8203;samuel-sarmah](https://github.com/samuel-sarmah), and everyone who triaged bugs or shared feedback. *Note: the changes mentioned here for the extension and mobile releases will need to go through the different store (apple, google, mozilla) reviews. So it might take a couple of days until all of them are released.* > If you enjoy using Karakeep, consider supporting the project [here ☕️](https://buymeacoffee.com/mbassem) or via GitHub [here](https://github.com/sponsors/MohamedBassem). Also share Karakeep's managed offering (☁️ [link](https://cloud.karakeep.app)) with your friends who're not into selfhosting. <a href="https://www.buymeacoffee.com/mbassem" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" width="auto" height="50" ></a> ### New Features 🚀 - **Karakeep's auth moved from next-auth to better-auth**: - This is an infrastructure change, but it's a big one. Karakeep moved its auth library to better-auth (away from next-auth). This will unlock a lot of new features in the future (e.g. 2fac, oauth login in the mobile app, hosted MCP auth, etc). - This migration is going to happen automatically after the upgrade BUT there are some caveats, please read the "Upgrading" section. - **Automatic Offline Downloads**: 0.33 let you save single bookmarks for offline reading on the mobile app. In this release, you can let karakeep automatically download recent bookmarks for you while the app is open, and also mark specific lists to be always fully available offline. - **Mobile app catching up with the web**: - Tablet layout showing multiple columns on wide screens. - Tag management: rename and delete tags from the app ([`fc401d0`](https://github.com/karakeep-app/karakeep/commit/fc401d02)). - Manage public lists and list collaborators ([`292c13a`](https://github.com/karakeep-app/karakeep/commit/292c13a5)). - View and download bookmark attachments ([`27774f9`](https://github.com/karakeep-app/karakeep/commit/27774f97)). - A new usage statistics screen ([`6563ee1`](https://github.com/karakeep-app/karakeep/commit/6563ee14)). - Pick a parent list, choose a list icon, and create lists straight from the "Manage Lists" page ([`7ca5ee2`](https://github.com/karakeep-app/karakeep/commit/7ca5ee23), [`428d1f2`](https://github.com/karakeep-app/karakeep/commit/428d1f22), [`f977712`](https://github.com/karakeep-app/karakeep/commit/f9777128)). - **A crawler that gets blocked less**: - The crawler now drives the browser with [patchright](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright), a Playwright fork that doesn't leak the automation signals that bot-protection scripts look for ([`af8b0eb`](https://github.com/karakeep-app/karakeep/commit/af8b0eb0)). - The `karakeep-chrome` image now ships Google Chrome stable instead of Chrome Headless Shell, as protected sites block the headless shell far more often ([`ea57af1`](https://github.com/karakeep-app/karakeep/commit/ea57af18)). This comes at the cost of the chrome image getting bigger unfortunatly. - The user agent now comes from the actual browser instead of a hardcoded Chrome 124 one ([`254174a`](https://github.com/karakeep-app/karakeep/commit/254174ac)). - Cloudflare's "Just a moment..." and DataDome's device check clear on their own after a few seconds. The crawler now waits for them (up to `CRAWLER_CHALLENGE_WAIT_SEC`, default 15s) instead of saving the challenge page ([`1800346`](https://github.com/karakeep-app/karakeep/commit/18003460)). - New `CRAWLER_BROWSER_TIMEZONE` to make the browser's timezone match your proxy's location, as a UTC browser behind a non-UTC proxy is a strong bot signal ([`ba8c188`](https://github.com/karakeep-app/karakeep/commit/ba8c1885)). - **On-demand video preservation** ([#&#8203;3183](https://github.com/karakeep-app/karakeep/issues/3183)): A new "Preserve Video" bookmark action downloads a single bookmark's video with yt-dlp. You can now keep automatic video downloads off and still preserve the ones you care about. - **Broken links management revamp** ([#&#8203;3105](https://github.com/karakeep-app/karakeep/issues/3105)): The broken links settings page now groups issues by category and supports search, sorting, retrying and bulk deletion. - **Search**: New `has:notes` and `has:highlights` qualifiers by [@&#8203;BrownieCoder](https://github.com/BrownieCoder) ([#&#8203;3053](https://github.com/karakeep-app/karakeep/issues/3053)). - **Others**: - New `CRAWLER_FULL_PAGE_ARCHIVE_MAX_SIZE_MB` to discard full-page archives above a certain size (media-heavy pages can produce 1GB+ archives that never render) by [@&#8203;NoiceHax](https://github.com/NoiceHax) ([#&#8203;3054](https://github.com/karakeep-app/karakeep/issues/3054)). - Pages uploaded as precrawled archives (e.g. SingleFile uploads, and client-side crawling) now get a screenshot too ([#&#8203;3161](https://github.com/karakeep-app/karakeep/issues/3161)). - Banner images are now resized and converted to WebP to save storage ([#&#8203;3165](https://github.com/karakeep-app/karakeep/issues/3165)). - The default tagging model is now `gpt-6-luna` which costs half as much as `gpt-5.6-luna` used to cost (thanks OpenAI?). ### UX Improvements ✨ - A visual refresh of various web app components. More modern looking dialogs, buttons, dropdown menus, tooltips, etc. - Added a "System" theme option that follows your OS by [@&#8203;deepcfr](https://github.com/deepcfr) ([#&#8203;3159](https://github.com/karakeep-app/karakeep/issues/3159)). - The bookmark preview page now has the full bookmark options menu in its action bar ([`24fb655`](https://github.com/karakeep-app/karakeep/commit/24fb655c)). - The "delete unused tags" button is now a bit more grown up ([`acbac6a`](https://github.com/karakeep-app/karakeep/commit/acbac6ad)). - Home/End now move the cursor in the search bar by [@&#8203;eriktews](https://github.com/eriktews) ([#&#8203;3110](https://github.com/karakeep-app/karakeep/issues/3110)). - The browser's theme color now follows dark mode by [@&#8203;itz-puneet](https://github.com/itz-puneet) ([#&#8203;3051](https://github.com/karakeep-app/karakeep/issues/3051)). - Mobile: - Lists are sorted by name, like on the web, by [@&#8203;justadityaraj](https://github.com/justadityaraj) ([#&#8203;3040](https://github.com/karakeep-app/karakeep/issues/3040)). - Bigger toolbar tap targets by [@&#8203;jreiml](https://github.com/jreiml) ([#&#8203;2813](https://github.com/karakeep-app/karakeep/issues/2813)). - Better looking bookmark cards when there's no metadata ([`2b2771a`](https://github.com/karakeep-app/karakeep/commit/2b2771a6)). ### Fixes 🐛 - **Performance and memory**: - Fix a server memory leak caused by the query cache ([#&#8203;3138](https://github.com/karakeep-app/karakeep/issues/3138)). - Workers and web only load the dependencies of features that are enabled cutting memory usage for most setups. You should expect a 40MB drop in RSS with this release. - Prometheus default metrics are no longer collected when Prometheus isn't configured ([#&#8203;2397](https://github.com/karakeep-app/karakeep/issues/2397)). This fixes a regerssion introduced in 0.29 and should result into a lower baseline CPU usage. - Faster tag searches by [@&#8203;0-0mfuji](https://github.com/0-0mfuji) ([#&#8203;3089](https://github.com/karakeep-app/karakeep/issues/3089)). - Search indexing now defaults to 50 workers (instead of 1) for better batching. Should result in faster indexing for large imports. - SQLite now runs `PRAGMA optimize` on open and daily ([`355a0b0`](https://github.com/karakeep-app/karakeep/commit/355a0b09)). - Faster lists page and list stats queries and a smaller main web bundle ([`2d7cc4b`](https://github.com/karakeep-app/karakeep/commit/2d7cc4bd), [`44ea028`](https://github.com/karakeep-app/karakeep/commit/44ea0284), [`b640f15`](https://github.com/karakeep-app/karakeep/commit/b640f15b)). - **Hardening**: - Upload body size is now enforced before parsing the multipart body ([`3e22b65`](https://github.com/karakeep-app/karakeep/commit/3e22b659)). - Asset downloads now respect client backpressure instead of buffering in memory ([`b5cab5b`](https://github.com/karakeep-app/karakeep/commit/b5cab5be)). - Pagination limits are now validated on all tRPC endpoints ([`94e1ea2`](https://github.com/karakeep-app/karakeep/commit/94e1ea21)). - Content length is capped before tokenizing AI prompts ([`ef07e91`](https://github.com/karakeep-app/karakeep/commit/ef07e913)). - Upgraded Next.js to 16.4.1 for its October security release ([#&#8203;3196](https://github.com/karakeep-app/karakeep/issues/3196)). - Collaborators' bookmarks now show up in public lists by [@&#8203;NoiceHax](https://github.com/NoiceHax) ([#&#8203;3019](https://github.com/karakeep-app/karakeep/issues/3019)). - Moving a list under one of its own sublists is now rejected, as the resulting cycle could send list deletion into an infinite loop. Reported by [@&#8203;Vertextheonesolution](https://github.com/Vertextheonesolution) (GHSA-892w-x93w-2fqp, [#&#8203;3199](https://github.com/karakeep-app/karakeep/issues/3199)). - Fix bookmark pagination tie breakers that could skip or duplicate bookmarks ([`135f116`](https://github.com/karakeep-app/karakeep/commit/135f1163)). - Fix the headers timeout for AI inference jobs with slow providers by [@&#8203;eriktews](https://github.com/eriktews) ([#&#8203;2888](https://github.com/karakeep-app/karakeep/issues/2888)). - Fix embedding generation with providers that don't default to float embeddings ([#&#8203;3009](https://github.com/karakeep-app/karakeep/issues/3009)). - Bookmarks deleted while being indexed no longer dangle in meilisearch ([`bca289d`](https://github.com/karakeep-app/karakeep/commit/bca289d2)). - The RSS fetcher now identifies itself with a karakeep specific user agent ([`adf399b`](https://github.com/karakeep-app/karakeep/commit/adf399be)). - If one of the workers fails, the whole worker process now crashes instead of silently running without it, so your container's restart policy can kick in ([`ae9e23b`](https://github.com/karakeep-app/karakeep/commit/ae9e23b3)). - Fix `.jpg` uploads being rejected in the attachment box ([`2434e65`](https://github.com/karakeep-app/karakeep/commit/2434e657)). - Fix the header shrinking in Safari ([`3c44114`](https://github.com/karakeep-app/karakeep/commit/3c441143)). - Fix duplicate "sort by" in the all tags page ([`f5e56b4`](https://github.com/karakeep-app/karakeep/commit/f5e56b42)). - Fix the sidebar's "+" (new list) button messing up the bookmark preview modal when clicked while a bookmark is open by [@&#8203;samuel-sarmah](https://github.com/samuel-sarmah) ([#&#8203;3192](https://github.com/karakeep-app/karakeep/issues/3192)). - Make `/run` owned by `node` in the docker image so non-root setups work by [@&#8203;lightsabit](https://github.com/lightsabit) ([#&#8203;3114](https://github.com/karakeep-app/karakeep/issues/3114)). - Mobile: - Fix lost and duplicated Android shares after the app gets killed ([`e7fbaab`](https://github.com/karakeep-app/karakeep/commit/e7fbaab7)). This has been a long standing problem, and should signficantly improve share reliability for android. - Ignore Android's unreliable internet reachability checks that marked the app offline ([#&#8203;3127](https://github.com/karakeep-app/karakeep/issues/3127)). - Fix the server save button getting hidden by the keyboard by [@&#8203;InventorB](https://github.com/InventorB) ([#&#8203;3010](https://github.com/karakeep-app/karakeep/issues/3010)). - Markdown list bullets and numbers now use the foreground color by [@&#8203;ryanchou1994](https://github.com/ryanchou1994) ([#&#8203;3046](https://github.com/karakeep-app/karakeep/issues/3046)). - Fix lists not getting auto refreshed when a bookmark is added to it ([`f4efff9`](https://github.com/karakeep-app/karakeep/commit/f4efff99)) and vertical images in bookmark info ([`482369b`](https://github.com/karakeep-app/karakeep/commit/482369b7)). - Fix a bug that was causing mobile API keys to not be revoked on mobile app logout ([`1820693`](https://github.com/karakeep-app/karakeep/commit/1820693e)). - Added missing Turkish translations by [@&#8203;qwist1233-cpu](https://github.com/qwist1233-cpu) ([#&#8203;3111](https://github.com/karakeep-app/karakeep/issues/3111)). ### For Developers 🛠️ - The MCP server has been upgraded to the MCP v2 SDK ([`39df6c6`](https://github.com/karakeep-app/karakeep/commit/39df6c6e)). - The CLI now bundles the official Karakeep skill ([`baf0b1b`](https://github.com/karakeep-app/karakeep/commit/baf0b1bb)). - Karakeep now serves `/.well-known/api-catalog`, `/.well-known/change-password` and `/.well-known/security.txt` ([`2620d9e`](https://github.com/karakeep-app/karakeep/commit/2620d9e6)). - The docs now have an `llms.txt` for agents ([`a8450b3`](https://github.com/karakeep-app/karakeep/commit/a8450b3c)). - Translations have moved away from Weblate and to an LLM driven workflow. - Clarified `LOG_LEVEL` options in the docs by [@&#8203;mislav](https://github.com/mislav) ([#&#8203;3149](https://github.com/karakeep-app/karakeep/issues/3149)). ### Community Projects 💡 *Checkout our community projects page [here](https://docs.karakeep.app/community-projects).* - [Alfred Karakeep](https://github.com/Kyzcreig/alfred-karakeep): An Alfred workflow for inline bookmark search using Karakeep's query language by [@&#8203;Kyzcreig](https://github.com/Kyzcreig) ([#&#8203;2974](https://github.com/karakeep-app/karakeep/issues/2974)). - [Supasend](https://supasend.app/#karakeep): A quick capture iOS app for sending photos and links to Karakeep by [@&#8203;pradeepb28](https://github.com/pradeepb28) ([#&#8203;3077](https://github.com/karakeep-app/karakeep/issues/3077)). - [KaraClone](https://github.com/gowinder/karaclone): A reimplementation of the Karakeep server API that runs on the Cloudflare Workers free tier by [@&#8203;gowinder](https://github.com/gowinder) ([#&#8203;3124](https://github.com/karakeep-app/karakeep/issues/3124)). ### Screenshots 📸 #### Automatic Offline Download <img width="603" height="1311" alt="Screenshot 2026-10-17 at 10 27 34 PM" src="https://github.com/user-attachments/assets/02f2344e-27ee-43d7-b8dd-d74fba936280" /> #### Broken Links Page <img width="2402" height="1250" alt="Screenshot 2026-10-17 at 22 27 11@&#8203;2x" src="https://github.com/user-attachments/assets/0df7d9c9-63b5-4739-8e55-6135e95a14f1" /> ### Upgrading 📦 **Things to know before upgrading:** - **Everyone gets signed out once.** The move to better-auth ([#&#8203;3140](https://github.com/karakeep-app/karakeep/issues/3140)) switches web sessions from JWTs to database sessions, so all web users will need to sign in again. Mobile apps and API keys are not affected. - **Auth env changes**: - This release will automatically lowercase all email stored in the database (in prep for making email case insensitive), except accounts that will cause a conflict (two accounts that differ only in email case). You *Must* fix those conflicts before upgrading (by deleting the unused one). You'll get locked out if you have two conflicting accounts (neither of which are lowercase). If you get locked out, change the email address in the sqlite database to be lowercase to gain access back. - New `AUTH_TRUSTED_ORIGINS` (default `*`) to restrict which origins can sign in and be redirected to on top of `NEXTAUTH_URL`. - `NEXTAUTH_URL` and `NEXTAUTH_SECRET` keep their names and are still required. - **Migrate to the `karakeep-chrome` image if you haven't already.** Check the migration guide [here](https://docs.karakeep.app/administration/chrome-image-migration). Browserless (mostly unraid users) will continue to work but will miss out on the stealth improvements. It's advised to migrate to karakeep-chrome's unraid template maintained by [@&#8203;Collectathon](https://github.com/Collectathon). To upgrade: - If you're using KARAKEEP\_VERSION=release, run `docker compose pull && docker compose up -d`. - If you're pinning it to a specific version, upgrade the version and then run `docker compose pull && docker compose up -d`. ### [`v0.33.2`](https://github.com/karakeep-app/karakeep/releases/tag/v0.33.2): 0.33.2 [Compare Source](https://github.com/karakeep-app/karakeep/compare/v0.33.1...v0.33.2) ### 0.33.2 This is a patch release for after [0.33.1](https://github.com/karakeep-app/karakeep/releases/tag/v0.33.1). It contains the following fixes: **Bug fixes:** - Change default "use max completion tokens" token env variable to `true` when using the default OpenAI configuration now that we're using 5.6 luna and this flag is required there ([#&#8203;3007](https://github.com/karakeep-app/karakeep/issues/3007)). - We're migrating to a custom karakeep chrome container (based on <https://github.com/chromedp/docker-headless-shell>) now that the old alpine-chrome is no longer fetch-able (and has been long abandoned by the maintainer). Check the migration guide [here](https://docs.karakeep.app/next/administration/chrome-image-migration). The old image will continue to work, but it's recommended that you migrate to the new one as it also upgrades chrome to 151 (compared to 124 in the old image). If you've been using browserless (e.g. on unraid), you're not impacted by this, and you don't need to migrate. - Large singlefile archives (typically because of videos) used to fail metadata extraction as the parser used to OOM. We strip inline videos now to make the parsing succeed. - Hardened the link to asset conversion mechanism in the crawler that used to result into silently broken assets. ([#&#8203;3002](https://github.com/karakeep-app/karakeep/issues/3002)) - Pinned nodejs to version 24.18.1 thanks to [@&#8203;eriktews](https://github.com/eriktews) ([#&#8203;2996](https://github.com/karakeep-app/karakeep/issues/2996)) to overcome a bug in the latest node 24.19 version (check [#&#8203;2989](https://github.com/karakeep-app/karakeep/issues/2989) for details). The proxmox scripts also were pinned by [@&#8203;MickLesk](https://github.com/MickLesk). - Karakeep's favicon is now light/dark mode aware, thanks to [@&#8203;ehfreema](https://github.com/ehfreema) ([#&#8203;2990](https://github.com/karakeep-app/karakeep/issues/2990)). **New features:** - You can now upload custom SingleFile archives to karakeep directly using the CLI. ### Changelog - fix: Set max completion tokens to true when using default openai config ([#&#8203;3007](https://github.com/karakeep-app/karakeep/issues/3007)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`98c0c78`](https://github.com/karakeep-app/karakeep/commit/98c0c789) - feat: migrate to a custom karakeep chrome image ([#&#8203;3005](https://github.com/karakeep-app/karakeep/issues/3005)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`951e502`](https://github.com/karakeep-app/karakeep/commit/951e5025) - feat: publish a new karakeep chrome container ([#&#8203;3004](https://github.com/karakeep-app/karakeep/issues/3004)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b6415b3`](https://github.com/karakeep-app/karakeep/commit/b6415b3c) - feat: favicon adapts to browser theme ([#&#8203;2990](https://github.com/karakeep-app/karakeep/issues/2990)) - [@&#8203;ehfreema](https://github.com/ehfreema) in [`ad27c05`](https://github.com/karakeep-app/karakeep/commit/ad27c051) - build: Fix crash loop caused by better-sqlite3 and node. ([#&#8203;2996](https://github.com/karakeep-app/karakeep/issues/2996)) - [@&#8203;eriktews](https://github.com/eriktews) in [`132e566`](https://github.com/karakeep-app/karakeep/commit/132e566b) - fix(crawler): fail on failure to download urls converted to assets ([#&#8203;3002](https://github.com/karakeep-app/karakeep/issues/3002)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f57aad1`](https://github.com/karakeep-app/karakeep/commit/f57aad1d) - feat(mobile): switch to using context menu in ios - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`28e7909`](https://github.com/karakeep-app/karakeep/commit/28e79094) - fix(restate): use logger middleware instead of durable steps - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`764ba85`](https://github.com/karakeep-app/karakeep/commit/764ba850) - fix(workers): drop inline media blocks before metadata parsing - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1c0b0a9`](https://github.com/karakeep-app/karakeep/commit/1c0b0a9a) - feat(cli): allow importing singlefile archives via the CLI - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`5f6ba26`](https://github.com/karakeep-app/karakeep/commit/5f6ba262) - docs: update intro doc with new features - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3af6f45`](https://github.com/karakeep-app/karakeep/commit/3af6f458) - readme: update the readme and docs with the new features - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`a81f935`](https://github.com/karakeep-app/karakeep/commit/a81f935a) - release: release cli, sdk & mcp - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b3fbf6b`](https://github.com/karakeep-app/karakeep/commit/b3fbf6bb) ### [`v0.33.1`](https://github.com/karakeep-app/karakeep/releases/tag/v0.33.1): 0.33.1 [Compare Source](https://github.com/karakeep-app/karakeep/compare/v0.32.0...v0.33.1) ### 0.33.1 Welcome to the `0.33` release of Karakeep! The headline of this release is **semantic search**. Karakeep can now generate embeddings for your bookmarks, letting you search by meaning instead of exact keywords (and making auto-tagging noticeably more consistent along the way). The mobile app gets **offline reading**, so you can save articles to your device and read them on a plane, along with new layouts, sorting, and one-tap clipboard saving. **Cookie and GDPR consents** should be something of the past with this release (finally). Plus a big batch of crawler, security and performance fixes. Thanks to everyone who contributed to this release: [@&#8203;esimkowitz](https://github.com/esimkowitz), [@&#8203;joestump](https://github.com/joestump), [@&#8203;zerone0x](https://github.com/zerone0x), [@&#8203;ElectricTea](https://github.com/ElectricTea), [@&#8203;optix2000](https://github.com/optix2000), [@&#8203;thiswillbeyourgithub](https://github.com/thiswillbeyourgithub), [@&#8203;jcgoodwin86](https://github.com/jcgoodwin86), [@&#8203;InventorB](https://github.com/InventorB), [@&#8203;VrtxOmega](https://github.com/VrtxOmega), [@&#8203;pike00](https://github.com/pike00), [@&#8203;KayMi](https://github.com/KayMi), [@&#8203;TanishValesha](https://github.com/TanishValesha), [@&#8203;mahirhir](https://github.com/mahirhir), [@&#8203;moduvoice](https://github.com/moduvoice), [@&#8203;eviaaaaa](https://github.com/eviaaaaa), [@&#8203;archit-goyal](https://github.com/archit-goyal), [@&#8203;CertStone](https://github.com/CertStone), and everyone who shipped code, triaged bugs, or shared feedback. *Note: the changes mentioned here for the extension and mobile releases will need to go through the different store (apple, google, mozilla) reviews. So it might take a couple of days until all of them are released.* > If you enjoy using Karakeep, consider supporting the project [here ☕️](https://buymeacoffee.com/mbassem) or via GitHub [here](https://github.com/sponsors/MohamedBassem). Also share Karakeep's managed offering (☁️ [link](https://cloud.karakeep.app)) with your friends who're not into selfhosting. <a href="https://www.buymeacoffee.com/mbassem" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" width="auto" height="50" ></a> ### New Features 🚀 - **Semantic Search** ([#&#8203;2959](https://github.com/karakeep-app/karakeep/issues/2959), [#&#8203;2960](https://github.com/karakeep-app/karakeep/issues/2960)) - Search is no longer limited to exact keyword matching. There are now three search modes, switchable from a dropdown in the search bar: - `Full text` - the existing keyword search (still the default). - `Semantic` \[Experimental] - pure meaning-based search powered by embeddings. Searching for "how to make coffee" will find your espresso bookmarks even if they never use those words. - `Hybrid` \[Experimental] - fuses the results of both. - The new mode is also available in the API, MCP and CLI which is going to be the most useful with agents. - Semantic search is still new and experimental, so results might not be super accurate yet, but it's a start. - ⚠️ Semantic search requires embeddings to be enabled, read the upgrade notes for details about how to enable them. - **Smarter auto-tagging using embeddings** ([#&#8203;2858](https://github.com/karakeep-app/karakeep/issues/2858)) - When tagging a new bookmark, Karakeep now looks up semantically similar bookmarks and feeds their existing tags into the LLM prompt as suggestions. The result is a lot less tag sprawl (no more `k8s`, `kubernetes` and `Kubernetes` all coexisting). This also requires embeddings to be enabled, read the upgrade notes for details about how them. - **Cleaner saved pages** ([#&#8203;2973](https://github.com/karakeep-app/karakeep/issues/2973)): the crawler now detects common consent dialogs (cookies and GDPR) and automatically opts out before capturing the article, screenshot and PDF. - **Offline reading on mobile** ([#&#8203;2957](https://github.com/karakeep-app/karakeep/issues/2957)) - The mobile app can now work without a connection: - **Save articles for offline**: from a bookmark's "…" menu, pick *Make available offline*. The full article is downloaded and kept on device until you remove it. - **Recent cache**: everything you browse (bookmark lists, tags, lists, highlights) is now persisted for 7 days, so recently visited screens still open when you're offline. - **Mobile app improvements**: - **New layouts** ([#&#8203;2837](https://github.com/karakeep-app/karakeep/issues/2837)): switch between the existing card layout and a new compact list layout. *Note: the default is now the list layout.* - **Sorting** ([#&#8203;2777](https://github.com/karakeep-app/karakeep/issues/2777)): sort your bookmarks newest-first or oldest-first (overdue, sorry!). - **Save from clipboard** ([#&#8203;2868](https://github.com/karakeep-app/karakeep/issues/2868)): a new *Clipboard* entry in the "+" menu saves whatever is in your clipboard in one tap. Thanks [@&#8203;InventorB](https://github.com/InventorB)! - The manage bookmark sheet now has favourite, archive, share and highlights actions instead of just delete. - **Karakeep for agentic usage** - continuing where 0.32 left off: - **MCP server went from 8 to 29 tools**. Newly added: full list CRUD, full tag CRUD, highlights, `delete-bookmark`, and `get-asset`. Big thanks to [@&#8203;joestump](https://github.com/joestump) for the list/tag CRUD work ([#&#8203;2917](https://github.com/karakeep-app/karakeep/issues/2917))! - **New readable content API** ([#&#8203;2660](https://github.com/karakeep-app/karakeep/issues/2660)): `GET /api/v1/bookmarks/{bookmarkId}/content` returns a bookmark's article content as markdown or plain text, cursor-paginated in LLM-friendly chunks that snap to paragraph boundaries. - **Much faster bookmark metadata** ([#&#8203;2932](https://github.com/karakeep-app/karakeep/issues/2932)): Karakeep's pre-flight http request to the website can now contribute to its metadata extraction. This results into some metadata (e.g. title) appearing much faster. A new `CRAWLER_PREFLIGHT_USER_AGENT` option lets you set a user agent for that probe request, and let's just say that a good user agent makes a huge difference. - The default OpenAI model has changed from `gpt-4.1-mini` to `gpt-5.6-luna` which is half as cheap, though a bit slower given that it's a reasoning model. ### UX Improvements ✨ - **Re-saving an existing bookmark now actually does something** ([#&#8203;2962](https://github.com/karakeep-app/karakeep/issues/2962)) - Saving a link you've saved before used to just tell you "Bookmark already exists" and do nothing. Now it re-saves it: the bookmark is un-archived and bumped back to the top of your list. - **Smarter bookmark previews** ([#&#8203;2975](https://github.com/karakeep-app/karakeep/issues/2975)) - Newly crawled pages are now assessed for how well they work in Reader View. Articles continue to open in the clean reader, while homepages, search results, product pages and other non-article content default to a screenshot or a new page-overview panel instead of showing a poor text extraction. You can still switch among the overview, Reader View, screenshot, PDF and archived page from the preview selector. - **Bulk edit is now one hover away**: instead of first switching bulk edit on from the toolbar, a selection circle appears directly on a bookmark card when you hover it. Selecting one card puts you into bulk edit mode for the rest. - The sidebar is now wider on large screens, and its scrollbar only appears when you hover it instead of sitting there permanently. - Mobile polish: a proper loading state while an article is still being crawled, better reader contrast in dark mode, a rebuilt login screen with much clearer connection errors, faster Manage Tags page on large libraries (server-side search instead of loading every tag), iPad/tablet reader toolbar and FAB fixes by [@&#8203;esimkowitz](https://github.com/esimkowitz) ([#&#8203;2788](https://github.com/karakeep-app/karakeep/issues/2788), [#&#8203;2793](https://github.com/karakeep-app/karakeep/issues/2793), [#&#8203;2794](https://github.com/karakeep-app/karakeep/issues/2794)), and a bunch of redundant success toasts removed. - Karakeep is now installable as a PWA in Chrome again, allowing you to use karakeep on your desktop as if it's one of the apps. - New **Instagram renderer** ([#&#8203;2836](https://github.com/karakeep-app/karakeep/issues/2836)): Instagram posts and reels now render as the actual embedded post in the bookmark preview, joining the existing YouTube, X, TikTok and Amazon renderers. ### Fixes 🐛 - **Security fixes**: - Fixed a DNS rebinding / TOCTOU hole in the crawler's SSRF protection ([#&#8203;2945](https://github.com/karakeep-app/karakeep/issues/2945)). Reported by [@&#8203;celinke97](https://github.com/celinke97) (GHSA-vc53-r298-c6h6). - API key and signed asset token verification now use timing-safe comparisons, reported by [@&#8203;xancyber](https://github.com/xancyber) (GHSA-hjm9-gc55-5hgv). - Bookmark URLs are now restricted to `http`/`https` on create and update. Reported by [@&#8203;therawdev](https://github.com/therawdev) and [@&#8203;shukla304](https://github.com/shukla304) (GHSA-6mfw-xrw2-h5x3). - Legacy bookmarks with unsafe schemes are filtered out of RSS feeds and Netscape HTML exports, and the exported URLs are HTML-escaped. Reported by [@&#8203;karen93shieh](https://github.com/karen93shieh) and [@&#8203;MuxiLyuLucy](https://github.com/MuxiLyuLucy) (GHSA-4vx2-9j8p-jg8v). - Tag names are now HTML-escaped in Netscape bookmark exports, preventing a crafted or AI-generated tag from breaking out of the `TAGS` attribute when the export is opened in a browser. - User-supplied names (user names, list names, inviter names) are HTML-escaped in outgoing emails, fixing HTML injection in the list invitation email. Reported by [@&#8203;therawdev](https://github.com/therawdev) and [@&#8203;shukla304](https://github.com/shukla304) (GHSA-pvj2-rgwm-r7f8). - Password logins are now rate limited (10 attempts per 15 minutes per IP + email). Note that this requires `RATE_LIMITING_ENABLED=true`. - Closed account-enumeration side channels in login and password reset. - Much faster bookmark deletion ([#&#8203;2669](https://github.com/karakeep-app/karakeep/issues/2669)): added the missing indexes that should make deletions less IO intensive for large libraries. - Old completed import sessions are now archived after 30 days: their summary counts are kept, but the per-bookmark staging rows are deleted, which keeps the DB from growing unboundedly after big imports. - YouTube/video downloads work again - yt-dlp now uses the bundled node as its JS runtime, by [@&#8203;pike00](https://github.com/pike00) ([#&#8203;2805](https://github.com/karakeep-app/karakeep/issues/2805)). - Fixed `BROWSER_WEB_URL` failing to resolve on IPv6-only Docker networks by [@&#8203;VrtxOmega](https://github.com/VrtxOmega) ([#&#8203;2863](https://github.com/karakeep-app/karakeep/issues/2863)). - Fixed the X/Twitter renderer, which broke after the API changed its response shape. - Inline images in SingleFile archives are no longer clobbered by the lazy-load normalization, by [@&#8203;zerone0x](https://github.com/zerone0x) ([#&#8203;2928](https://github.com/karakeep-app/karakeep/issues/2928)). - Banner/preview image extraction now works for SingleFile and precrawled archives that inline the image as a data URI. - Fixed summarization producing garbled output for users running with `INFERENCE_OUTPUT_SCHEMA=json`, by [@&#8203;eviaaaaa](https://github.com/eviaaaaa) ([#&#8203;2926](https://github.com/karakeep-app/karakeep/issues/2926)). - New `OPENAI_TIMEOUT_SEC` option to control the per-request inference timeout, useful for slow self-hosted providers, by [@&#8203;optix2000](https://github.com/optix2000) ([#&#8203;2876](https://github.com/karakeep-app/karakeep/issues/2876)). - Hardened the tagging prompt: tags are now capped to 1–3 words, and Karakeep explicitly returns no tags for error pages, Cloudflare/CAPTCHA interstitials, cookie banners and login walls - so no more `just a moment` or `cloudflare` tags on failed crawls. - Fixed the MCP `get-bookmark-content` tool crashing on bookmarks that haven't been crawled yet, by [@&#8203;joestump](https://github.com/joestump) ([#&#8203;2915](https://github.com/karakeep-app/karakeep/issues/2915)). - Fixed scrolling in the bookmark preview's screenshot view by [@&#8203;VrtxOmega](https://github.com/VrtxOmega) ([#&#8203;2864](https://github.com/karakeep-app/karakeep/issues/2864)). - The browser extension now requests host permissions at runtime for client-side crawling ([#&#8203;2784](https://github.com/karakeep-app/karakeep/issues/2784)), instead of asking for them up front. - Added missing Japanese translations by [@&#8203;mahirhir](https://github.com/mahirhir) ([#&#8203;2903](https://github.com/karakeep-app/karakeep/issues/2903)) and filled in the missing Korean translation keys by [@&#8203;moduvoice](https://github.com/moduvoice) ([#&#8203;2938](https://github.com/karakeep-app/karakeep/issues/2938)). - PDF previews now render via `<embed>` so they display in Safari, by [@&#8203;KayMi](https://github.com/KayMi) ([#&#8203;2806](https://github.com/karakeep-app/karakeep/issues/2806)). - Import progress is now tracked per import job ([#&#8203;2950](https://github.com/karakeep-app/karakeep/issues/2950)), so running two imports at once no longer makes their progress bars fight each other. Thanks [@&#8203;jcgoodwin86](https://github.com/jcgoodwin86)! ### For Developers 🛠️ - Docker healthchecks now respect a custom `PORT` by [@&#8203;zerone0x](https://github.com/zerone0x) ([#&#8203;2948](https://github.com/karakeep-app/karakeep/issues/2948)). - OAuth providers can now use a configurable ID token signing algorithm via `OAUTH_ID_TOKEN_SIGNED_RESPONSE_ALG`, by [@&#8203;CertStone](https://github.com/CertStone) ([#&#8203;2850](https://github.com/karakeep-app/karakeep/issues/2850)). ### Community Projects 💡 *Checkout our community projects page [here](https://docs.karakeep.app/community-projects).* - [wdoc](https://github.com/thiswillbeyourgithub/wdoc): A RAG-powered document/knowledge querying tool with Karakeep support, by [@&#8203;thiswillbeyourgithub](https://github.com/thiswillbeyourgithub) ([#&#8203;2904](https://github.com/karakeep-app/karakeep/issues/2904)) ### Screenshots 📸 ##### Offline Reading <img width="603" height="1311" alt="Screenshot 2026-08-01 at 7 41 17 PM" src="https://github.com/user-attachments/assets/15eca558-2fa9-44d2-9c75-c7e6042b44c1" /> ##### New Mobile List Layouts *Please don't judge my saved content* <img width="603" height="1258" alt="Screenshot 2026-08-01 at 7 38 55 PM" src="https://github.com/user-attachments/assets/bf5aa418-b80f-4d75-968a-2b99914df803" /> ### Upgrading 📦 To upgrade: - If you're using `KARAKEEP_VERSION=release`, run `docker compose pull && docker compose up -d`. - If you're pinning it to a specific version, upgrade the version and then run `docker compose pull && docker compose up -d`. #### Enabling Embeddings 1. Karakeep's embedding uses your existing meilisearch installation as the default vector store. If you're an OG, and running an old meilisearch version, you'll need to ensure you're on meilisearch version (1.13 or higher). Check [this guide](https://www.meilisearch.com/docs/resources/migration/updating#updating-a-self-hosted-meilisearch-instance) for info on how to update. 2. If you're using the default OpenAI based configuration, auto embeddings of new bookmarks will be enabled automatically and will use the `text-embedding-3-small` model. 3. If you're using a custom provider, you'll need to pass in the `EMBEDDING_TEXT_MODEL=<your_mode>`, the size of the dimension of the model via `EMBEDDING_DIMENSIONS` and then pass `EMBEDDING_ENABLE_AUTO_INDEXING=true` to enable embeddings. Check out [our docs](https://docs.karakeep.app/configuration/different-ai-providers) for example models and configurations. Once you've enabled embeddings, you'll need to regenerate embeddings for all existing bookmarks. Head to the admin panel's Background Jobs page (new "Embeddings" card) and regenerate embeddings for all/pending bookmarks. This might take a while depending on how many bookmarks you have, and will cost you money (though embeddings are usually pretty cheap). NOTE: Changing the model or its dimension after embedding even a single bookmark will require you to regenerate embeddings for *all* bookmarks. ### All Commits - fix(tagging): loosen the captcha rejection in the prompt a bit - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`8550eb0`](https://github.com/karakeep-app/karakeep/commit/8550eb09) - fix(workers): wait for autoconsent in parallel with page load - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`98c52b8`](https://github.com/karakeep-app/karakeep/commit/98c52b85) - fix(tests): fix failing test after changing default model - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f249307`](https://github.com/karakeep-app/karakeep/commit/f249307b) - feat: change default inference model to gpt-5.6-luna - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1bc351a`](https://github.com/karakeep-app/karakeep/commit/1bc351a7) - fix: enable auto embedding by default for default inference configuration ([#&#8203;2976](https://github.com/karakeep-app/karakeep/issues/2976)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`bcbb577`](https://github.com/karakeep-app/karakeep/commit/bcbb5776) - fix: enable auto embedding by default for default inference configurations - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7722c6a`](https://github.com/karakeep-app/karakeep/commit/7722c6ae) - deps: upgrade docusaurus - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ccddfcf`](https://github.com/karakeep-app/karakeep/commit/ccddfcf3) - feat: Add support for configurable ID token signing algorithm in OAuth ([#&#8203;2850](https://github.com/karakeep-app/karakeep/issues/2850)) - [@&#8203;CertStone](https://github.com/CertStone) in [`b2b2579`](https://github.com/karakeep-app/karakeep/commit/b2b2579b) - feat(landing): 28k starts - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`385ec1d`](https://github.com/karakeep-app/karakeep/commit/385ec1df) - feat: add new article quality assessment ([#&#8203;2975](https://github.com/karakeep-app/karakeep/issues/2975)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`76b477c`](https://github.com/karakeep-app/karakeep/commit/76b477c4) - fix: make queue registration idempotent - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6f12013`](https://github.com/karakeep-app/karakeep/commit/6f120133) - i18n: some translation fixes - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3b7982c`](https://github.com/karakeep-app/karakeep/commit/3b7982c1) - i18n: Sync weblate translations - Hosted Weblate in [`590c670`](https://github.com/karakeep-app/karakeep/commit/590c6700) - feat(web): some UX improvements in signin and password forms - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b4b9474`](https://github.com/karakeep-app/karakeep/commit/b4b94740) - feat(workers): auto-dismiss consent dialogs with autoconsent ([#&#8203;2973](https://github.com/karakeep-app/karakeep/issues/2973)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c333f24`](https://github.com/karakeep-app/karakeep/commit/c333f240) - deps: upgrade nextjs to 16.2.12 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1148889`](https://github.com/karakeep-app/karakeep/commit/11488896) - fix(workers): fix workers in dev mode - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3a0421d`](https://github.com/karakeep-app/karakeep/commit/3a0421d0) - deps: bump a bunch of deps - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`a90034d`](https://github.com/karakeep-app/karakeep/commit/a90034d1) - i18n: Sync weblate translations - Hosted Weblate in [`8b4b917`](https://github.com/karakeep-app/karakeep/commit/8b4b9170) - docs: hide the chat flags for now - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`36c36e3`](https://github.com/karakeep-app/karakeep/commit/36c36e3e) - fix(auth): close account enumeration oracles in login and password reset - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`036da4c`](https://github.com/karakeep-app/karakeep/commit/036da4c0) - fix(mobile): don't silently swallow mutations fired while offline - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9188958`](https://github.com/karakeep-app/karakeep/commit/9188958c) - fix(plugins): don't cache a rejected init promise in the meilisearch providers - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`64ec6cb`](https://github.com/karakeep-app/karakeep/commit/64ec6cbc) - fix(export): escape tag names in the netscape bookmark export - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f0381b4`](https://github.com/karakeep-app/karakeep/commit/f0381b42) - feat: add support for resaving already existing bookmarks ([#&#8203;2962](https://github.com/karakeep-app/karakeep/issues/2962)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f2f6431`](https://github.com/karakeep-app/karakeep/commit/f2f6431d) - feat(web): move keyboard shortcuts inside the profile options menu - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`a698724`](https://github.com/karakeep-app/karakeep/commit/a6987247) - fix(web): fix preview screenshot scrolling ([#&#8203;2864](https://github.com/karakeep-app/karakeep/issues/2864)) - [@&#8203;VrtxOmega](https://github.com/VrtxOmega) in [`595392a`](https://github.com/karakeep-app/karakeep/commit/595392a9) - feat(web): allow triggering bulk edit on hover - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`28a48ec`](https://github.com/karakeep-app/karakeep/commit/28a48ec5) - fix(workers): denoise the log messages coming from the feedWorker - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d155fa0`](https://github.com/karakeep-app/karakeep/commit/d155fa0e) - fix(ux): make the sidebar wider on larger screens - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f417b90`](https://github.com/karakeep-app/karakeep/commit/f417b900) - feat: make it possible to trigger admin jobs for a certain duration - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`0a1821b`](https://github.com/karakeep-app/karakeep/commit/0a1821ba) - release(mobile): release mobile v1.10.0-1 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`369f5a6`](https://github.com/karakeep-app/karakeep/commit/369f5a68) - fix(mobile): improve reader contrast in dark mode - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c007bc7`](https://github.com/karakeep-app/karakeep/commit/c007bc76) - feat(mobile): add semantic search mode selector - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`8175539`](https://github.com/karakeep-app/karakeep/commit/8175539e) - feat(mobile): show offline storage usage - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ec81015`](https://github.com/karakeep-app/karakeep/commit/ec810158) - release(mobile): release mobile v1.10.0 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3a6f282`](https://github.com/karakeep-app/karakeep/commit/3a6f2822) - feat(web): add semantic search to the UI ([#&#8203;2960](https://github.com/karakeep-app/karakeep/issues/2960)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`2f740d0`](https://github.com/karakeep-app/karakeep/commit/2f740d00) - feat: add semantic search ([#&#8203;2959](https://github.com/karakeep-app/karakeep/issues/2959)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`71ea4d9`](https://github.com/karakeep-app/karakeep/commit/71ea4d9b) - feat(mcp): more MCP tools - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`8de38d4`](https://github.com/karakeep-app/karakeep/commit/8de38d48) - feat(cli): expose assets and readable conent in the CLI - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`a296871`](https://github.com/karakeep-app/karakeep/commit/a2968718) - feat(api): add an api for fetching readable content of a bookmark. [#&#8203;2660](https://github.com/karakeep-app/karakeep/issues/2660) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f391113`](https://github.com/karakeep-app/karakeep/commit/f3911139) - feat(mcp): add ability to fetch assets via signed URLs - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`06d99bd`](https://github.com/karakeep-app/karakeep/commit/06d99bd6) - fix(mobile): better error message in the login page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e88a606`](https://github.com/karakeep-app/karakeep/commit/e88a606c) - fix(mobile): fix formsheet colors - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b8fe26a`](https://github.com/karakeep-app/karakeep/commit/b8fe26ad) - feat(mobile): offline reading ([#&#8203;2957](https://github.com/karakeep-app/karakeep/issues/2957)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`2075c33`](https://github.com/karakeep-app/karakeep/commit/2075c33a) - feat(mobile): minor cleanups to the login page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9b1b2b7`](https://github.com/karakeep-app/karakeep/commit/9b1b2b73) - fix(mobile): add a loading indicator to article content - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`198ea1e`](https://github.com/karakeep-app/karakeep/commit/198ea1e5) - readme: drop heavy dev notice now that it's stable enough - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`bc50630`](https://github.com/karakeep-app/karakeep/commit/bc506307) - ci: fix failing trpc test - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`bf2749e`](https://github.com/karakeep-app/karakeep/commit/bf2749e8) - fix: add timeSafe checks for signed tokens and api keys - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e8a138f`](https://github.com/karakeep-app/karakeep/commit/e8a138f1) - fix: drop redundant db indicies - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7ced044`](https://github.com/karakeep-app/karakeep/commit/7ced044b) - feat: archive old completed sessions - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1717af8`](https://github.com/karakeep-app/karakeep/commit/1717af84) - fix: upgrade some packages - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f0d254d`](https://github.com/karakeep-app/karakeep/commit/f0d254d0) - fix: respect PORT in Docker healthchecks ([#&#8203;2948](https://github.com/karakeep-app/karakeep/issues/2948)) - [@&#8203;zerone0x](https://github.com/zerone0x) in [`7d703b8`](https://github.com/karakeep-app/karakeep/commit/7d703b8b) - fix: track import progress per-job ([#&#8203;2950](https://github.com/karakeep-app/karakeep/issues/2950)) - [@&#8203;jcgoodwin86](https://github.com/jcgoodwin86) in [`4224da4`](https://github.com/karakeep-app/karakeep/commit/4224da4f) - feat: prep for sub tier overrides - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`5e5692f`](https://github.com/karakeep-app/karakeep/commit/5e5692f7) - feat: add chat configuration and persistence schema - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`28cb149`](https://github.com/karakeep-app/karakeep/commit/28cb149d) - refactor(web): replace AI Elements message components with shadcn chat components - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4423da1`](https://github.com/karakeep-app/karakeep/commit/4423da19) - \[mobile] Upgrade mobile app to Expo SDK 56 ([#&#8203;2946](https://github.com/karakeep-app/karakeep/issues/2946)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`08fd866`](https://github.com/karakeep-app/karakeep/commit/08fd866b) - fix: rename root package to [@&#8203;karakeep/root](https://github.com/karakeep/root). fixes [#&#8203;2939](https://github.com/karakeep-app/karakeep/issues/2939) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7ff5a46`](https://github.com/karakeep-app/karakeep/commit/7ff5a46f) - \[network] fix dns rebinding problems post internal hostname validation ([#&#8203;2945](https://github.com/karakeep-app/karakeep/issues/2945)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`978544d`](https://github.com/karakeep-app/karakeep/commit/978544df) - fix: add missing indicies needed for bookmark deletion. [#&#8203;2669](https://github.com/karakeep-app/karakeep/issues/2669) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`eb1f472`](https://github.com/karakeep-app/karakeep/commit/eb1f4727) - i18n: fill missing Korean (ko) translation keys ([#&#8203;2938](https://github.com/karakeep-app/karakeep/issues/2938)) - [@&#8203;moduvoice](https://github.com/moduvoice) in [`7b19b0d`](https://github.com/karakeep-app/karakeep/commit/7b19b0da) - fix(mobile): propagate error message in sharing screen - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1b7b247`](https://github.com/karakeep-app/karakeep/commit/1b7b2477) - revert: remove --headless=new flag from default chrome docker compose ([#&#8203;2936](https://github.com/karakeep-app/karakeep/issues/2936)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4af8bb2`](https://github.com/karakeep-app/karakeep/commit/4af8bb2f) - release(mcp): Bump mcp server to 0.32.1 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`aa78aa8`](https://github.com/karakeep-app/karakeep/commit/aa78aa8f) - feat(mcp): add list CRUD, tag CRUD, delete-bookmark ([#&#8203;2917](https://github.com/karakeep-app/karakeep/issues/2917)) - [@&#8203;joestump](https://github.com/joestump) in [`831d6bf`](https://github.com/karakeep-app/karakeep/commit/831d6bf5) - refactor: split crawler file into separate modules ([#&#8203;2933](https://github.com/karakeep-app/karakeep/issues/2933)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b2c52c9`](https://github.com/karakeep-app/karakeep/commit/b2c52c9c) - feat: add extra metadata parse in the probe fetch ([#&#8203;2932](https://github.com/karakeep-app/karakeep/issues/2932)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`8439928`](https://github.com/karakeep-app/karakeep/commit/84399288) - fix(crawler): preserve inline GIF data images ([#&#8203;2928](https://github.com/karakeep-app/karakeep/issues/2928)) - [@&#8203;zerone0x](https://github.com/zerone0x) in [`28d321c`](https://github.com/karakeep-app/karakeep/commit/28d321ce) - feat: add a script to adhocly test the crawler + improve chrome flags ([#&#8203;2929](https://github.com/karakeep-app/karakeep/issues/2929)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`5b0d7fe`](https://github.com/karakeep-app/karakeep/commit/5b0d7fe6) - fix(inference): only set JSON response\_format for schema requests ([#&#8203;2926](https://github.com/karakeep-app/karakeep/issues/2926)) - [@&#8203;eviaaaaa](https://github.com/eviaaaaa) in [`545e6f8`](https://github.com/karakeep-app/karakeep/commit/545e6f80) - fix: fix banner extraction of singlefile archives - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ba6adfc`](https://github.com/karakeep-app/karakeep/commit/ba6adfce) - fix: ratelimit password login attempts - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f7d0429`](https://github.com/karakeep-app/karakeep/commit/f7d04297) - fix: sanitize input url and list names - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ffd1058`](https://github.com/karakeep-app/karakeep/commit/ffd10589) - feat: tagging prompt hardening - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9ceb077`](https://github.com/karakeep-app/karakeep/commit/9ceb077c) - fix(mcp): coerce null htmlContent before turndown in get-bookmark-content ([#&#8203;2915](https://github.com/karakeep-app/karakeep/issues/2915)) - [@&#8203;joestump](https://github.com/joestump) in [`1ebf5b0`](https://github.com/karakeep-app/karakeep/commit/1ebf5b08) - \[codex] Document browser extension dev port ([#&#8203;2918](https://github.com/karakeep-app/karakeep/issues/2918)) - [@&#8203;archit-goyal](https://github.com/archit-goyal) in [`fc1c127`](https://github.com/karakeep-app/karakeep/commit/fc1c127d) - fix: forget password workflow - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c3d6028`](https://github.com/karakeep-app/karakeep/commit/c3d60280) - feat(stripe): add a trpc command for force syncing customer detail - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`a787ee4`](https://github.com/karakeep-app/karakeep/commit/a787ee47) - fix(billing): pick the latest active subscription when user has multiple subs - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9bcac9c`](https://github.com/karakeep-app/karakeep/commit/9bcac9cc) - ci: disable plugin tests - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`43425e1`](https://github.com/karakeep-app/karakeep/commit/43425e1d) - chore: drop jemalloc support - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e862bf3`](https://github.com/karakeep-app/karakeep/commit/e862bf3b) - fix(restate): lower inactivity timeouts on dispatchers ([#&#8203;2911](https://github.com/karakeep-app/karakeep/issues/2911)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ac51b35`](https://github.com/karakeep-app/karakeep/commit/ac51b359) - feat(i18n): add missing Japanese (ja) translations (keyboard shortcuts, admin embeddings) ([#&#8203;2903](https://github.com/karakeep-app/karakeep/issues/2903)) - [@&#8203;mahirhir](https://github.com/mahirhir) in [`475483e`](https://github.com/karakeep-app/karakeep/commit/475483e3) - docs(community): add wdoc to community projects ([#&#8203;2904](https://github.com/karakeep-app/karakeep/issues/2904)) - [@&#8203;thiswillbeyourgithub](https://github.com/thiswillbeyourgithub) in [`c93cbc2`](https://github.com/karakeep-app/karakeep/commit/c93cbc2a) - feat(landing): 26k stars. Take 2 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9879eb5`](https://github.com/karakeep-app/karakeep/commit/9879eb5d) - docker: fix monolith build in docker - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`05c4e04`](https://github.com/karakeep-app/karakeep/commit/05c4e04a) - feat(landing): 26k stars - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3afe675`](https://github.com/karakeep-app/karakeep/commit/3afe675a) - fix(inference): add OpenAI request timeout config ([#&#8203;2876](https://github.com/karakeep-app/karakeep/issues/2876)) - [@&#8203;optix2000](https://github.com/optix2000) in [`c0ac8a4`](https://github.com/karakeep-app/karakeep/commit/c0ac8a47) - feat(mobile): easy clipboard saving ([#&#8203;2868](https://github.com/karakeep-app/karakeep/issues/2868)) - [@&#8203;InventorB](https://github.com/InventorB) in [`207016e`](https://github.com/karakeep-app/karakeep/commit/207016e8) - fix(workers): Fix BROWSER\_WEB\_URL IPv6 host resolution ([#&#8203;2863](https://github.com/karakeep-app/karakeep/issues/2863)) - [@&#8203;VrtxOmega](https://github.com/VrtxOmega) in [`cf1964f`](https://github.com/karakeep-app/karakeep/commit/cf1964ff) - chore: AI assistant component prep ([#&#8203;2861](https://github.com/karakeep-app/karakeep/issues/2861)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`76cbbf3`](https://github.com/karakeep-app/karakeep/commit/76cbbf39) - fix(api): make metrics registration idempotent - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4ae50c5`](https://github.com/karakeep-app/karakeep/commit/4ae50c52) - fix: fast track tagging after embedding generation ([#&#8203;2860](https://github.com/karakeep-app/karakeep/issues/2860)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6369416`](https://github.com/karakeep-app/karakeep/commit/63694167) - feat: add embeddings-based potentially relevant tags to LLM context d… ([#&#8203;2858](https://github.com/karakeep-app/karakeep/issues/2858)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`2fbd77b`](https://github.com/karakeep-app/karakeep/commit/2fbd77bd) - feat: add bookmark embedding support ([#&#8203;2857](https://github.com/karakeep-app/karakeep/issues/2857)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`84ab354`](https://github.com/karakeep-app/karakeep/commit/84ab354d) - deps: upgrade meilisearch client package - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`af3677a`](https://github.com/karakeep-app/karakeep/commit/af3677a1) - feat(cli): add --description flag to bookmarks update command ([#&#8203;2856](https://github.com/karakeep-app/karakeep/issues/2856)) - [@&#8203;TanishValesha](https://github.com/TanishValesha) in [`8463ad0`](https://github.com/karakeep-app/karakeep/commit/8463ad07) - fix: fix twitter renderer - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`dc26820`](https://github.com/karakeep-app/karakeep/commit/dc268202) - fix: fix plugin and stats registration in nextjs across reloads - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`a043c88`](https://github.com/karakeep-app/karakeep/commit/a043c889) - fix(workers): fix misleading error message when rss import fails to create bookmark. fixes [#&#8203;2838](https://github.com/karakeep-app/karakeep/issues/2838) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9651c79`](https://github.com/karakeep-app/karakeep/commit/9651c79c) - release(mobile): release mobile v1.9.5-2 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`78e012f`](https://github.com/karakeep-app/karakeep/commit/78e012f2) - fix(mobile): fix taglist skeleton - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`8d9a015`](https://github.com/karakeep-app/karakeep/commit/8d9a0154) - release(mobile): release mobile v1.9.5-1 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`a031d43`](https://github.com/karakeep-app/karakeep/commit/a031d433) - fix(mobile): remove redundant toasts in the bookmarks info page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4e677c5`](https://github.com/karakeep-app/karakeep/commit/4e677c55) - fix(mobile): change default layout to be list layout - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`5332ca3`](https://github.com/karakeep-app/karakeep/commit/5332ca33) - fix(mobile): add bookmark grid settings to favs and archive pages - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c272037`](https://github.com/karakeep-app/karakeep/commit/c2720375) - release(mobile): release mobile v1.9.5 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`5d29229`](https://github.com/karakeep-app/karakeep/commit/5d292292) - feat(mobile): add mobile sorting support. fixes [#&#8203;2777](https://github.com/karakeep-app/karakeep/issues/2777) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d5ea3f5`](https://github.com/karakeep-app/karakeep/commit/d5ea3f5a) - fix(mobile): fix the padding of the tag pills - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`0fe7d70`](https://github.com/karakeep-app/karakeep/commit/0fe7d706) - feat(mobile): add different mobile layouts to the mobile app ([#&#8203;2837](https://github.com/karakeep-app/karakeep/issues/2837)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`bc29d61`](https://github.com/karakeep-app/karakeep/commit/bc29d61d) - feat(mobile): change tag colors - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`633016c`](https://github.com/karakeep-app/karakeep/commit/633016c7) - feat(mobile): add archive,fav,share and highlights to info page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c32b7f9`](https://github.com/karakeep-app/karakeep/commit/c32b7f99) - refactor(mobile): use a composite component for the bookmark card - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`77c6523`](https://github.com/karakeep-app/karakeep/commit/77c6523c) - feat: instagram renderer ([#&#8203;2836](https://github.com/karakeep-app/karakeep/issues/2836)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3c1a020`](https://github.com/karakeep-app/karakeep/commit/3c1a0201) - fix(web): fix PWA installaiblity in chrome - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`95555f1`](https://github.com/karakeep-app/karakeep/commit/95555f1f) - fix(web): fix alignment of keyboard button in global actions - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`0893e51`](https://github.com/karakeep-app/karakeep/commit/0893e512) - fix(web): change sidebar collapse toggle to chevrons - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e6756e0`](https://github.com/karakeep-app/karakeep/commit/e6756e05) - fix(mobile): remove unncessary toast from manage list actions on mobile - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`199d032`](https://github.com/karakeep-app/karakeep/commit/199d0327) - fix(docker): set yt-dlp to use bundled node as JS runtime ([#&#8203;2805](https://github.com/karakeep-app/karakeep/issues/2805)) - [@&#8203;pike00](https://github.com/pike00) in [`e92f2f0`](https://github.com/karakeep-app/karakeep/commit/e92f2f02) - fix(web): render PDFs via <embed> so Safari can display them ([#&#8203;2806](https://github.com/karakeep-app/karakeep/issues/2806)) - [@&#8203;KayMi](https://github.com/KayMi) in [`ff28861`](https://github.com/karakeep-app/karakeep/commit/ff288613) - chore: upgrade to pnpm 11 ([#&#8203;2833](https://github.com/karakeep-app/karakeep/issues/2833)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`8f19963`](https://github.com/karakeep-app/karakeep/commit/8f199631) - build: stop update old personal docker images - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d10effa`](https://github.com/karakeep-app/karakeep/commit/d10effa2) - chore: pin github action deps ([#&#8203;2832](https://github.com/karakeep-app/karakeep/issues/2832)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`341f721`](https://github.com/karakeep-app/karakeep/commit/341f7217) - chore: Add seed snapshot generator ([#&#8203;2829](https://github.com/karakeep-app/karakeep/issues/2829)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`53da5e2`](https://github.com/karakeep-app/karakeep/commit/53da5e2b) - deps: upgrade nextjs to 16 ([#&#8203;2827](https://github.com/karakeep-app/karakeep/issues/2827)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ff57d9c`](https://github.com/karakeep-app/karakeep/commit/ff57d9c2) - chore: improve AGENTS.md ([#&#8203;2826](https://github.com/karakeep-app/karakeep/issues/2826)) - [@&#8203;ElectricTea](https://github.com/ElectricTea) in [`b45d41c`](https://github.com/karakeep-app/karakeep/commit/b45d41cc) - fix: fix error on admin user list due to react query hydration ([#&#8203;2824](https://github.com/karakeep-app/karakeep/issues/2824)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1997bd3`](https://github.com/karakeep-app/karakeep/commit/1997bd38) - chore: add a .ignore file to filter out noisy dirs from search - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`37b3712`](https://github.com/karakeep-app/karakeep/commit/37b37124) - docs: update SECURITY.md - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4b22229`](https://github.com/karakeep-app/karakeep/commit/4b22229d) - deps: upgrade nextjs to 15.5.18 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f823724`](https://github.com/karakeep-app/karakeep/commit/f8237243) - fix: serve unoptimized nextjs images - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`61a2bde`](https://github.com/karakeep-app/karakeep/commit/61a2bdeb) - release(mobile): release mobile v1.9.4 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`01d636f`](https://github.com/karakeep-app/karakeep/commit/01d636f2) - fix(mobile): improve perf of manage\_tags page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`84dfea5`](https://github.com/karakeep-app/karakeep/commit/84dfea5e) - fix(mobile): fix color of list separator in recent searches list - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d426cdb`](https://github.com/karakeep-app/karakeep/commit/d426cdb2) - fix(mobile): fix formsheet padding in manage\_lists, manage\_tags and info sheets - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`41633c2`](https://github.com/karakeep-app/karakeep/commit/41633c2a) - feat(mobile): tablet/iPad UI polish for toolbar and FAB ([#&#8203;2788](https://github.com/karakeep-app/karakeep/issues/2788)) - [@&#8203;esimkowitz](https://github.com/esimkowitz) in [`d871f57`](https://github.com/karakeep-app/karakeep/commit/d871f57b) - fix(mobile): stack Upload Image Quality slider on two lines ([#&#8203;2794](https://github.com/karakeep-app/karakeep/issues/2794)) - [@&#8203;esimkowitz](https://github.com/esimkowitz) in [`75b6e91`](https://github.com/karakeep-app/karakeep/commit/75b6e910) - fix(mobile): fix insets on new iOS settings formSheet modal ([#&#8203;2793](https://github.com/karakeep-app/karakeep/issues/2793)) - [@&#8203;esimkowitz](https://github.com/esimkowitz) in [`7ce940a`](https://github.com/karakeep-app/karakeep/commit/7ce940a5) - docs: update screenshots in the docs - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`66a7ac4`](https://github.com/karakeep-app/karakeep/commit/66a7ac48) - release(extension): Release version 1.2.11 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f638064`](https://github.com/karakeep-app/karakeep/commit/f638064e) - feat(browser-extension): request host permission at runtime for client side crawling ([#&#8203;2784](https://github.com/karakeep-app/karakeep/issues/2784)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1a7a2fe`](https://github.com/karakeep-app/karakeep/commit/1a7a2fef) - docs: minor docs update to mention the skills and the new singlefile integration - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1c7872c`](https://github.com/karakeep-app/karakeep/commit/1c7872ce) - release(cli): release CLI 0.32.0 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ad9ef51`](https://github.com/karakeep-app/karakeep/commit/ad9ef514) - release: release cli, sdk, mobile and extension - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`58f9b30`](https://github.com/karakeep-app/karakeep/commit/58f9b302) - release(docs): release the 0.32 docs - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d28ff5f`](https://github.com/karakeep-app/karakeep/commit/d28ff5fd) ### [`v0.32.0`](https://github.com/karakeep-app/karakeep/releases/tag/v0.32.0): 0.32.0 [Compare Source](https://github.com/karakeep-app/karakeep/compare/v0.31.0...v0.32.0) Welcome to the `0.32.0` release of Karakeep! The mobile app is getting a major redesign by [@&#8203;esimkowitz](https://github.com/esimkowitz) so that it feels more native and friendly to use. Our long-overdue Safari extension is now available on the app store. Karakeep is now more AI-agents friendly with an official skill, revamped and more powerful CLI, granular API keys (and more coming in the next release). SingleFile is now integrated inside the karakeep extension itself for better crawling of authenticated pages. Keyboard shortcuts for faster actions across the app. And tons of fixes! This release has a huge list of contributors. Some frequent faces, and many contributing their first PRs. Thanks [@&#8203;esimkowitz](https://github.com/esimkowitz), [@&#8203;Mxrk](https://github.com/Mxrk), [@&#8203;beluga73](https://github.com/beluga73), [@&#8203;Ahmed-Abdel-karim](https://github.com/Ahmed-Abdel-karim), [@&#8203;GSAlex](https://github.com/GSAlex), [@&#8203;cinconueves](https://github.com/cinconueves), [@&#8203;keslerm](https://github.com/keslerm), [@&#8203;xingzihai](https://github.com/xingzihai), [@&#8203;howwohmm](https://github.com/howwohmm), [@&#8203;vbalko-claimate](https://github.com/vbalko-claimate), [@&#8203;MaximePinot](https://github.com/MaximePinot), [@&#8203;apo-mak](https://github.com/apo-mak), [@&#8203;NikhilChowdhury27](https://github.com/NikhilChowdhury27), [@&#8203;maxim-mityutko](https://github.com/maxim-mityutko), [@&#8203;xuatz](https://github.com/xuatz), [@&#8203;ir31k0](https://github.com/ir31k0), [@&#8203;Joly0](https://github.com/Joly0), [@&#8203;larsborn](https://github.com/larsborn), [@&#8203;venku122](https://github.com/venku122), [@&#8203;lmgarret](https://github.com/lmgarret), [@&#8203;hoilc](https://github.com/hoilc), [@&#8203;zerone0x](https://github.com/zerone0x), [@&#8203;mrInvincible29](https://github.com/mrInvincible29), [@&#8203;Go2Engle](https://github.com/Go2Engle), [@&#8203;faximan](https://github.com/faximan). *Note: the changes mentioned here for the extension and mobile releases will need to go through the different store (apple, google, mozilla) reviews. So it might take a couple of days until all of them are released.* > If you enjoy using Karakeep, consider supporting the project [here ☕️](https://buymeacoffee.com/mbassem) or via GitHub [here](https://github.com/sponsors/MohamedBassem). Also share Karakeep's managed offering (☁️ [link](https://cloud.karakeep.app)) to your friends who're not into selfhosting. We're offering yearly subscriptions now. <a href="https://www.buymeacoffee.com/mbassem" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" width="auto" height="50" ></a> ### New Features 🚀 - Karakeep's **Safari extension** is now available on the App Store ([link](https://apps.apple.com/gb/app/karakeep-app/id6479258022?platform=mac)), closing Karakeep's oldest open issue ([#&#8203;10](https://github.com/karakeep-app/karakeep/issues/10)). - Huge **mobile app revamp lead by [@&#8203;esimkowitz](https://github.com/esimkowitz)**: - More native screens, headers and action buttons by [@&#8203;esimkowitz](https://github.com/esimkowitz) ([#&#8203;2685](https://github.com/karakeep-app/karakeep/issues/2685)) - Customizable reader toolbar by [@&#8203;esimkowitz](https://github.com/esimkowitz) ([#&#8203;2527](https://github.com/karakeep-app/karakeep/issues/2527)) - Add ability to keep screen on for bookmark reading by [@&#8203;esimkowitz](https://github.com/esimkowitz) ([#&#8203;2691](https://github.com/karakeep-app/karakeep/issues/2691)) - Opening links in the reader view now opens them in an in-app browser so that you can quickly go back to where you left by [@&#8203;esimkowitz](https://github.com/esimkowitz) ([#&#8203;2696](https://github.com/karakeep-app/karakeep/issues/2696)) - Add ability to default open links in external browser by [@&#8203;xingzihai](https://github.com/xingzihai) ([#&#8203;2516](https://github.com/karakeep-app/karakeep/issues/2516)) - **Karakeep for Agentic usage**: Our goal is to make Karakeep very AI agents friendly. This will allow agents (OpenClaw, Hermes, etc) to find and hoard interesting content on your behalf, provide weekly digests, and more. - We're publishing an official skill for karakeep on ClawHub and skills.sh (details [here](https://docs.karakeep.app/next/integrations/agentic-skills)). Those skills teach the agent karakeep's concepts and how to use the CLI. - CLI improvements: - The CLI also got major improvements allowing it to manage more aspects for bookmarks, lists, and tags. Also got more AI friendly formatting, etc. - To avoid having to pass the address and API key with every request, karakeep can now store the auth config in a file and use it for further requests. Init that file with `karakeep auth init`. - If you're afraid to give agents full Read/Write access to your data, API keys now have granular scopes to all resources. Which means you can give agents access to your bookmarks but not administrative actions (like deleting users), etc. - **Keyboard Shortcuts**: You can now do more with the keyboard, as we added support for navigating the bookmark grid with keyboard shortcuts, and taking actions such as favouring/archiving and doing bulk actions. This is the beginning, and please send feature requests for the extra features you need. - **Extension improvements**: - \[Experimental] The extension can now crawl bookmarks from the client-side eliminating the need of using the SingleFile extension separately from Karakeep (Powered by SingleFile core). This allows you to store pages that are behind authentication or unreachable from your Karakeep server. It's currently opt-in until stable, and then will become the default. Enable it from the extension settings ([#&#8203;2197](https://github.com/karakeep-app/karakeep/issues/2197)). - Added support for manual save (instead of the default save on open) by [@&#8203;keslerm](https://github.com/keslerm) ([#&#8203;2693](https://github.com/karakeep-app/karakeep/issues/2693)) - **More import sources**: - Add support for importing from OneTab by [@&#8203;apo-mak](https://github.com/apo-mak) ([#&#8203;2495](https://github.com/karakeep-app/karakeep/issues/2495)) - Add support for importing from Readwise Reader by [@&#8203;cinconueves](https://github.com/cinconueves) ([#&#8203;2690](https://github.com/karakeep-app/karakeep/issues/2690)) - **Others**: - Karakeep MCP now has an update-bookmark tool by [@&#8203;vbalko-claimate](https://github.com/vbalko-claimate) ([#&#8203;2717](https://github.com/karakeep-app/karakeep/issues/2717)) - Add support for writing rule engine rules based on bookmark source by [@&#8203;xingzihai](https://github.com/xingzihai) ([#&#8203;2547](https://github.com/karakeep-app/karakeep/issues/2547)) - Add support for configuring OpenAI reasoning effort by [@&#8203;cinconueves](https://github.com/cinconueves) ([#&#8203;2718](https://github.com/karakeep-app/karakeep/issues/2718)) - New extensive event logging for events that happen all over the app. More info about how to enable it [here](https://docs.karakeep.app/configuration/environment-variables#monitoring). ### UX Improvements ✨ - Visual revamp for the bookmark preview page with nicer colors and ability to collapse the sidebar ([`f500129`](https://github.com/karakeep-app/karakeep/commit/f500129c)). - Visual revamp for the "All lists" page showing list privacy settings and number of items in each list ([`145dda9`](https://github.com/karakeep-app/karakeep/commit/145dda9d)). - List and tags page headers now show more info about the content and type of the list/tag ([#&#8203;2749](https://github.com/karakeep-app/karakeep/issues/2749)) - Quickly favourite and archive a bookmark by new buttons that appear on hover ([`98e173d`](https://github.com/karakeep-app/karakeep/commit/98e173d8)). - Haptic feedback on mobile sidebar navigation ([`f91ec53`](https://github.com/karakeep-app/karakeep/commit/f91ec531)). - Show "+" in the tag count badges when more pages exist by [@&#8203;zerone0x](https://github.com/zerone0x) ([`432235b`](https://github.com/karakeep-app/karakeep/commit/432235be)). - In the add bookmark to list dialog, you no longer need to explicitly save the selection thanks to [@&#8203;xingzihai](https://github.com/xingzihai) ([#&#8203;2629](https://github.com/karakeep-app/karakeep/issues/2629)) - The default new list emoji changed from "🚀" to "📁". Maturity, I guess? - You can now add multiple lists to the same rule engine condition by [@&#8203;Ahmed-Abdel-karim](https://github.com/Ahmed-Abdel-karim) ([#&#8203;2620](https://github.com/karakeep-app/karakeep/issues/2620)) - Timestamps across the app are now correctly localized instead of showing the server's timezone ([#&#8203;2682](https://github.com/karakeep-app/karakeep/issues/2682)) ### Fixes 🐛 - **Important Security fixes**: - Reported by [@&#8203;tahirsercan](https://github.com/tahirsercan) (GHSA-g647-327m-79g9) - Fix SSRF validation bypass caused by redirects in crawler and video worker - Those issues were reported by Sami Zayn: - Add missing ratelimits for the changePassword endpoint - Sanitize user names before storing them to avoid stored XSS in karakeep emails ([#&#8203;2724](https://github.com/karakeep-app/karakeep/issues/2724)) - Invalidate existing password reset tokens before issuing a new one ([#&#8203;2722](https://github.com/karakeep-app/karakeep/issues/2722)) - Reported by [@&#8203;CE2Sec](https://github.com/CE2Sec) (GHSA-7rx4-c5vx-g8w3) - Fix blind SSRF in crawler favicon extraction - Add missing ratelimits for bookmark creation and asset upload APIs - Fix a bug where adding a bookmark to a tag or list didn't appear immediately requiring a refresh. - Bulk actions used to hammer the server with cache refill requests, those are now debounced. - Fix adblocker getting skipped due to the URL validation interception. - Fix "Manage tags" page on iOS not scrolling correctly. - Prevent highlight popup from stealing focus on Firefox ([`11dfe74`](https://github.com/karakeep-app/karakeep/commit/11dfe74d)) - Fix rare crash in the crawler worker ([`d197f59`](https://github.com/karakeep-app/karakeep/commit/d197f595)) - Increase max feed url length to 2k chars ([`07454a6`](https://github.com/karakeep-app/karakeep/commit/07454a6a)) - Fix cropped text in android app when using bold text by [@&#8203;Go2Engle](https://github.com/Go2Engle) ([#&#8203;2554](https://github.com/karakeep-app/karakeep/issues/2554)) - Fix occasional problems connecting to server from mobile app when it's behind a reverse proxy by [@&#8203;mrInvincible29](https://github.com/mrInvincible29) ([#&#8203;2559](https://github.com/karakeep-app/karakeep/issues/2559)) - Better extraction for lazy loaded images from content by [@&#8203;zerone0x](https://github.com/zerone0x) ([#&#8203;2556](https://github.com/karakeep-app/karakeep/issues/2556)) - Expand $tags/$aiTags/$userTags in AI prompt preview by [@&#8203;zerone0x](https://github.com/zerone0x) ([#&#8203;2557](https://github.com/karakeep-app/karakeep/issues/2557)) - Fix sourceUrl not getting saved when creating asset bookmarks via the API by [@&#8203;hoilc](https://github.com/hoilc) ([#&#8203;2574](https://github.com/karakeep-app/karakeep/issues/2574)) - Redact internal server error messages in prod responses ([`c8a75a0`](https://github.com/karakeep-app/karakeep/commit/c8a75a0b)) - Correctly parse linkwarden collections during import ([`722fd8c`](https://github.com/karakeep-app/karakeep/commit/722fd8c0)) - Correctly extract TWZ RSS categories as tags by [@&#8203;venku122](https://github.com/venku122) ([#&#8203;2589](https://github.com/karakeep-app/karakeep/issues/2589)) - Correctly skip tagging and summarization for assets that fail preprocessing to avoid misleading numbers in the admin panel - Improve meilisearch request batching for better performance - Enable configuring monolith timeout and arguments by [@&#8203;NikhilChowdhury27](https://github.com/NikhilChowdhury27) ([#&#8203;2659](https://github.com/karakeep-app/karakeep/issues/2659)) - Fix openai proxy setting not getting respected by the openai client ([#&#8203;2676](https://github.com/karakeep-app/karakeep/issues/2676)) - Fix formality and tone for a bunch of languages to match that of English - Use the same proxy URL for all network interactions within the same crawler job run - Fix parsing archived status for bookmarks imported from Pocket by [@&#8203;howwohmm](https://github.com/howwohmm) ([#&#8203;2656](https://github.com/karakeep-app/karakeep/issues/2656)) - Fix parsing archived status and folder for Instapaper bookmarks - Upgrade playwright to 1.59 to fix browserless compatibility issues - Stricter full text search matching strategy for bookmarks to provide more relevant results ([`68e7350`](https://github.com/karakeep-app/karakeep/commit/68e73500)) - Fix unreachable background script on Firefox by [@&#8203;Joly0](https://github.com/Joly0) ([#&#8203;2649](https://github.com/karakeep-app/karakeep/issues/2649)) - Update default meilisearch version to 1.41 by [@&#8203;ir31k0](https://github.com/ir31k0) ([#&#8203;2643](https://github.com/karakeep-app/karakeep/issues/2643)). - If you want to update your instance, check out meilisearch's guide [here](https://www.meilisearch.com/docs/learn/update_and_migration/updating). - Fix truncate long bookmark titles on mobile app by [@&#8203;xuatz](https://github.com/xuatz) ([#&#8203;2699](https://github.com/karakeep-app/karakeep/issues/2699)) - Dedupe crawl jobs using idempotency key by [@&#8203;NikhilChowdhury27](https://github.com/NikhilChowdhury27) ([#&#8203;2678](https://github.com/karakeep-app/karakeep/issues/2678)) - Add ability to finalize/delete a staged import session that might have been stuck before ([#&#8203;2713](https://github.com/karakeep-app/karakeep/issues/2713)) - Fix low quality video downloads caused by missing ffmpeg dependency to yt-dlp by [@&#8203;MaximePinot](https://github.com/MaximePinot) ([#&#8203;2721](https://github.com/karakeep-app/karakeep/issues/2721)) - Better ratelimiting for users behind the same IP (e.g. NAT) by including userId in the ratelimit key - Use relative path for logout redirect to avoid port mismatch by [@&#8203;howwohmm](https://github.com/howwohmm) ([#&#8203;2655](https://github.com/karakeep-app/karakeep/issues/2655)) - Skip URL type identification requests if a page is crawled with SingleFile by [@&#8203;GSAlex](https://github.com/GSAlex) ([#&#8203;2580](https://github.com/karakeep-app/karakeep/issues/2580)) - Fix text clipping in bookmark card notes by [@&#8203;beluga73](https://github.com/beluga73) ([#&#8203;2748](https://github.com/karakeep-app/karakeep/issues/2748)) - For CLI based server migrations, tags `attachedBy` is now correctly migrated ([`462d713`](https://github.com/karakeep-app/karakeep/commit/462d713f)) ### For Developers 🛠️ - The API docs now have much more extensive documentation. ([`dd2c6cc`](https://github.com/karakeep-app/karakeep/commit/dd2c6cc0)) - New APIs: - For Trigger admin background jobs ([`4974ce5`](https://github.com/karakeep-app/karakeep/commit/4974ce58)) - For managing feed subscriptions by [@&#8203;larsborn](https://github.com/larsborn) ([#&#8203;2635](https://github.com/karakeep-app/karakeep/issues/2635)) - Map TOO\_MANY\_REQUESTS to 429 status code in the API instead of internal server error ([`5b6402f`](https://github.com/karakeep-app/karakeep/commit/5b6402f3)) - The docker-compose based dev-env is now more stable and documented thanks to [@&#8203;xuatz](https://github.com/xuatz) ([#&#8203;2149](https://github.com/karakeep-app/karakeep/issues/2149)) ### Community Projects 💡 *Checkout our community projects page [here](https://docs.karakeep.app/community-projects).* - [Karatui](https://github.com/bercribe/karatui): A rust based TUI for managing your karakeep instance by [@&#8203;bercribe](https://github.com/bercribe) in [`1c17716`](https://github.com/karakeep-app/karakeep/commit/1c177160) - [Karaclean](https://github.com/lmgarret/karaclean): A Docker sidecar that automatically cleans up Karakeep bookmarks based on declarative YAML rules (e.g. age, tags, lists, etc). [@&#8203;lmgarret](https://github.com/lmgarret) ### Screenshots 📸 ##### All Lists Page <img width="988" height="833" alt="SCR-20260508-ophu" src="https://github.com/user-attachments/assets/905c44c5-73bc-4983-9442-8655b0e12df5" /> ##### Mobile App Toolbar <img width="333" height="549" alt="image" src="https://github.com/user-attachments/assets/5a7a1465-7b6d-4034-b739-8a67e39e2de0" /> ##### Revamped Bookmark Preview Page <img width="490" height="786" alt="SCR-20260508-opue" src="https://github.com/user-attachments/assets/d08ab50b-9e55-4768-9ddf-13f41ff6de1b" /> ##### Keyboard Shortcuts <img width="487" height="664" alt="SCR-20260508-opza" src="https://github.com/user-attachments/assets/98137562-7f32-4114-9bc0-16d2d808cc16" /> ##### Granular API Keys <img width="834" height="796" alt="SCR-20260508-opmw" src="https://github.com/user-attachments/assets/b0cef659-0697-4c86-95d3-1cd4d36b1389" /> ##### List Header <img width="348" height="139" alt="SCR-20260508-oqnx" src="https://github.com/user-attachments/assets/6b9ae48e-9630-4e81-805e-374c2f7aa511" /> ##### New Extension Settings <img width="1005" height="874" alt="SCR-20260508-osde" src="https://github.com/user-attachments/assets/e929ff0d-46b3-4c0d-b2c5-cd3040d09fb9" /> ### Upgrading 📦 To upgrade: - If you're using KARAKEEP\_VERSION=release, run `docker compose pull && docker compose up -d`. - If you're pinning it to a specific version, upgrade the version and then run `docker compose pull && docker compose up -d`. ### All Commits - fix(crawler): proper handling for proxy auth with CDP interceptions - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b9b252e`](https://github.com/karakeep-app/karakeep/commit/b9b252ec) - feat(web): add more details to the all lists page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`145dda9`](https://github.com/karakeep-app/karakeep/commit/145dda9d) - i18n: fix automated i18n strings - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f797c4c`](https://github.com/karakeep-app/karakeep/commit/f797c4cf) - i18n: Sync weblate translations - [@&#8203;weblate](https://github.com/weblate) in [`f0ad87f`](https://github.com/karakeep-app/karakeep/commit/f0ad87fb) - feat: add keyboard shortcuts ([#&#8203;2750](https://github.com/karakeep-app/karakeep/issues/2750)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`cb6a25b`](https://github.com/karakeep-app/karakeep/commit/cb6a25b8) - docs: add a comment to security docs about SSRF mitigations - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`62640bd`](https://github.com/karakeep-app/karakeep/commit/62640bd7) - fix(mobile): fix scrolling in manage tags page in ios - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4e1610a`](https://github.com/karakeep-app/karakeep/commit/4e1610ad) - refactor: refactor bulk actions to store bookmark ids ([#&#8203;2767](https://github.com/karakeep-app/karakeep/issues/2767)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`517b87f`](https://github.com/karakeep-app/karakeep/commit/517b87f5) - fix: harden video worker redirect validation against SSRF ([#&#8203;2760](https://github.com/karakeep-app/karakeep/issues/2760)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`43f50e8`](https://github.com/karakeep-app/karakeep/commit/43f50e85) - fix: use correct env variable syntax for perplexity ([#&#8203;2765](https://github.com/karakeep-app/karakeep/issues/2765)) - [@&#8203;Mxrk](https://github.com/Mxrk) in [`9c3a606`](https://github.com/karakeep-app/karakeep/commit/9c3a6061) - fix: use safe favicon resolution in metascraper ([#&#8203;2763](https://github.com/karakeep-app/karakeep/issues/2763)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3dc321e`](https://github.com/karakeep-app/karakeep/commit/3dc321e7) - fix: fix timezone handling in date displays across the app ([#&#8203;2682](https://github.com/karakeep-app/karakeep/issues/2682)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9db69a3`](https://github.com/karakeep-app/karakeep/commit/9db69a33) - fix: typo in docker docs ([#&#8203;2762](https://github.com/karakeep-app/karakeep/issues/2762)) - [@&#8203;Mxrk](https://github.com/Mxrk) in [`9b93dab`](https://github.com/karakeep-app/karakeep/commit/9b93dab2) - feat: Add CLI auth config support ([#&#8203;2751](https://github.com/karakeep-app/karakeep/issues/2751)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`90382dc`](https://github.com/karakeep-app/karakeep/commit/90382dc3) - feat(mobile): open links and images in in-app browser ([#&#8203;2696](https://github.com/karakeep-app/karakeep/issues/2696)) - [@&#8203;esimkowitz](https://github.com/esimkowitz) in [`bcc8d83`](https://github.com/karakeep-app/karakeep/commit/bcc8d83e) - fix: fix SSRF handling with redirects in crawler worker ([#&#8203;2759](https://github.com/karakeep-app/karakeep/issues/2759)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c154729`](https://github.com/karakeep-app/karakeep/commit/c1547297) - feat: Add agentic skills links to the landing page ([#&#8203;2761](https://github.com/karakeep-app/karakeep/issues/2761)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`03c9db0`](https://github.com/karakeep-app/karakeep/commit/03c9db08) - fix: fix allow the adblocker to run after request interception - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c2d7243`](https://github.com/karakeep-app/karakeep/commit/c2d72435) - deps: upgrade protobufjs - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ab498a4`](https://github.com/karakeep-app/karakeep/commit/ab498a48) - feat(landing): add safari links to landing - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9ab522a`](https://github.com/karakeep-app/karakeep/commit/9ab522a4) - feat: redesign list and tag page headers ([#&#8203;2749](https://github.com/karakeep-app/karakeep/issues/2749)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6ccf1fe`](https://github.com/karakeep-app/karakeep/commit/6ccf1fed) - fix(ui): resolve text clipping in bookmark cards ([#&#8203;2748](https://github.com/karakeep-app/karakeep/issues/2748)) - [@&#8203;beluga73](https://github.com/beluga73) in [`dc0c82e`](https://github.com/karakeep-app/karakeep/commit/dc0c82ef) - tests: add a test for browser rendering - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4ea8878`](https://github.com/karakeep-app/karakeep/commit/4ea8878c) - chore: use .gitignore as source of truth for oxfmt and oxlint ([#&#8203;2740](https://github.com/karakeep-app/karakeep/issues/2740)) - [@&#8203;esimkowitz](https://github.com/esimkowitz) in [`6b99eab`](https://github.com/karakeep-app/karakeep/commit/6b99eab9) - feat: Allow multiple lists for Rule Engine [#&#8203;2490](https://github.com/karakeep-app/karakeep/issues/2490) ([#&#8203;2620](https://github.com/karakeep-app/karakeep/issues/2620)) - [@&#8203;Ahmed-Abdel-karim](https://github.com/Ahmed-Abdel-karim) in [`8a1f830`](https://github.com/karakeep-app/karakeep/commit/8a1f8303) - fix: debounce bulk query invalidations ([#&#8203;2745](https://github.com/karakeep-app/karakeep/issues/2745)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`2ffe27e`](https://github.com/karakeep-app/karakeep/commit/2ffe27eb) - feat(mobile): revamp search and navigation chrome ([#&#8203;2685](https://github.com/karakeep-app/karakeep/issues/2685)) - [@&#8203;esimkowitz](https://github.com/esimkowitz) in [`649efb8`](https://github.com/karakeep-app/karakeep/commit/649efb87) - fix: fix subscription tranisiton event logging - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4688a2e`](https://github.com/karakeep-app/karakeep/commit/4688a2e9) - chore: add event logging for bookmark summarization - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`5327671`](https://github.com/karakeep-app/karakeep/commit/53276718) - fix: reject user deletion with active subscription - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`635f846`](https://github.com/karakeep-app/karakeep/commit/635f8469) - fix: upgrade zod resolver to fix form validations ([#&#8203;2744](https://github.com/karakeep-app/karakeep/issues/2744)) - [@&#8203;beluga73](https://github.com/beluga73) in [`c5ed01d`](https://github.com/karakeep-app/karakeep/commit/c5ed01dd) - fix: fix nodejs bundling for the eventLogger - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d83e50c`](https://github.com/karakeep-app/karakeep/commit/d83e50c8) - feat: add exhaustive event logging - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6736c5a`](https://github.com/karakeep-app/karakeep/commit/6736c5a0) - chore: add infra for the event logger - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b18013e`](https://github.com/karakeep-app/karakeep/commit/b18013e1) - feat: add metrics for sub status - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3b3eb75`](https://github.com/karakeep-app/karakeep/commit/3b3eb754) - feat(mobile): customizable reader toolbar ([#&#8203;2527](https://github.com/karakeep-app/karakeep/issues/2527)) - [@&#8203;esimkowitz](https://github.com/esimkowitz) in [`49c2868`](https://github.com/karakeep-app/karakeep/commit/49c28689) - chore: add portless pnpm scripts - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9d9e470`](https://github.com/karakeep-app/karakeep/commit/9d9e4702) - fix: change the archive button in the manage lists dialog to be a secondary button - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f928f97`](https://github.com/karakeep-app/karakeep/commit/f928f975) - fix: fix promise race leaks in the worker ([#&#8203;2737](https://github.com/karakeep-app/karakeep/issues/2737)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6610a1a`](https://github.com/karakeep-app/karakeep/commit/6610a1aa) - feat: add granular API key scopes ([#&#8203;2731](https://github.com/karakeep-app/karakeep/issues/2731)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d95e6f8`](https://github.com/karakeep-app/karakeep/commit/d95e6f8f) - fix: fix broken cache invalidation requiring refresh after adding a bookmark to a tag or a list - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`0949d4f`](https://github.com/karakeep-app/karakeep/commit/0949d4f5) - deps: upgrade astro to 6.1.6. fixes [#&#8203;2728](https://github.com/karakeep-app/karakeep/issues/2728) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`0b15d01`](https://github.com/karakeep-app/karakeep/commit/0b15d01d) - fix: skip url getContentType fetch if precrawledArchiveAssetId exists ([#&#8203;2580](https://github.com/karakeep-app/karakeep/issues/2580)) - [@&#8203;GSAlex](https://github.com/GSAlex) in [`b7c9fe8`](https://github.com/karakeep-app/karakeep/commit/b7c9fe86) - feat: add support for configuring OpenAI reasoning effort ([#&#8203;2718](https://github.com/karakeep-app/karakeep/issues/2718)) - [@&#8203;cinconueves](https://github.com/cinconueves) in [`a075ade`](https://github.com/karakeep-app/karakeep/commit/a075ade0) - feat: change the default new list emoji to folder - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`430c035`](https://github.com/karakeep-app/karakeep/commit/430c035a) - fix: truncate urls in crawler logs - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`44ec077`](https://github.com/karakeep-app/karakeep/commit/44ec0772) - feat: Add native single-file support to browser extension ([#&#8203;2197](https://github.com/karakeep-app/karakeep/issues/2197)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1ed39a3`](https://github.com/karakeep-app/karakeep/commit/1ed39a37) - chore: fix PR template path - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`5e2b85a`](https://github.com/karakeep-app/karakeep/commit/5e2b85ab) - chore: add PR template inspired from immich - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`0e9b1b6`](https://github.com/karakeep-app/karakeep/commit/0e9b1b63) - feat(extension): add manual save toggle for browser extension ([#&#8203;2693](https://github.com/karakeep-app/karakeep/issues/2693)) - [@&#8203;keslerm](https://github.com/keslerm) in [`c397501`](https://github.com/karakeep-app/karakeep/commit/c3975018) - feat(web): auto-add bookmark to list on selection ([#&#8203;2629](https://github.com/karakeep-app/karakeep/issues/2629)) - [@&#8203;xingzihai](https://github.com/xingzihai) in [`a8c5ac9`](https://github.com/karakeep-app/karakeep/commit/a8c5ac94) - fix: use relative path for logout redirect to avoid port mismatch ([#&#8203;2655](https://github.com/karakeep-app/karakeep/issues/2655)) - [@&#8203;howwohmm](https://github.com/howwohmm) in [`4dbcc41`](https://github.com/karakeep-app/karakeep/commit/4dbcc414) - feat(mcp): add update-bookmark tool ([#&#8203;2717](https://github.com/karakeep-app/karakeep/issues/2717)) - [@&#8203;vbalko-claimate](https://github.com/vbalko-claimate) in [`c699bc9`](https://github.com/karakeep-app/karakeep/commit/c699bc90) - fix: include userId in ratelimit key if the user is authed ([#&#8203;2726](https://github.com/karakeep-app/karakeep/issues/2726)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7f18376`](https://github.com/karakeep-app/karakeep/commit/7f18376e) - fix: fix pnpm symlink conflict ([#&#8203;2725](https://github.com/karakeep-app/karakeep/issues/2725)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b3d0cea`](https://github.com/karakeep-app/karakeep/commit/b3d0cea9) - fix: add data: to style-src and font-src CSP directives in serveAsset ([#&#8203;2657](https://github.com/karakeep-app/karakeep/issues/2657)) - [@&#8203;howwohmm](https://github.com/howwohmm) in [`e2a39e4`](https://github.com/karakeep-app/karakeep/commit/e2a39e45) - fix: sanitize user names before storing them ([#&#8203;2724](https://github.com/karakeep-app/karakeep/issues/2724)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6109588`](https://github.com/karakeep-app/karakeep/commit/6109588f) - fix: add ratelimiting for the changePassword endpoint ([#&#8203;2723](https://github.com/karakeep-app/karakeep/issues/2723)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`8b51bff`](https://github.com/karakeep-app/karakeep/commit/8b51bff2) - fix: invalidate existing password reset tokens before issuing a new one ([#&#8203;2722](https://github.com/karakeep-app/karakeep/issues/2722)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`35dcf80`](https://github.com/karakeep-app/karakeep/commit/35dcf80f) - fix(docker): add `ffmpeg` as required by `yt-dlp` ([#&#8203;2721](https://github.com/karakeep-app/karakeep/issues/2721)) - [@&#8203;MaximePinot](https://github.com/MaximePinot) in [`3448746`](https://github.com/karakeep-app/karakeep/commit/34487460) - fix: add ability to manually finalize/delete staged import sessions ([#&#8203;2713](https://github.com/karakeep-app/karakeep/issues/2713)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f67f184`](https://github.com/karakeep-app/karakeep/commit/f67f1847) - chore: add tests for the inference worker - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`364cb8a`](https://github.com/karakeep-app/karakeep/commit/364cb8a4) - feat: add OneTab import support ([#&#8203;2495](https://github.com/karakeep-app/karakeep/issues/2495)) - [@&#8203;apo-mak](https://github.com/apo-mak) in [`00f9ccc`](https://github.com/karakeep-app/karakeep/commit/00f9ccc2) - fix: deduplicate crawl jobs using idempotency key ([#&#8203;2678](https://github.com/karakeep-app/karakeep/issues/2678)) - [@&#8203;NikhilChowdhury27](https://github.com/NikhilChowdhury27) in [`95bd434`](https://github.com/karakeep-app/karakeep/commit/95bd4343) - feat: Add Readwise Reader import ([#&#8203;2690](https://github.com/karakeep-app/karakeep/issues/2690)) - [@&#8203;cinconueves](https://github.com/cinconueves) in [`3d84150`](https://github.com/karakeep-app/karakeep/commit/3d84150a) - fix: add missing source to createBookmarks from import - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7cc0115`](https://github.com/karakeep-app/karakeep/commit/7cc01151) - deps: upgrade oxlint and oxfmt - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`cde625c`](https://github.com/karakeep-app/karakeep/commit/cde625ca) - docs: Update worker list in the environment variable reference ([#&#8203;2710](https://github.com/karakeep-app/karakeep/issues/2710)) - [@&#8203;maxim-mityutko](https://github.com/maxim-mityutko) in [`c854e9e`](https://github.com/karakeep-app/karakeep/commit/c854e9e6) - docs: add skills to docs - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`2330ad3`](https://github.com/karakeep-app/karakeep/commit/2330ad3b) - fix: fix clawhub skill yaml - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b863d7d`](https://github.com/karakeep-app/karakeep/commit/b863d7d6) - fix: add clawhub metadata to karakeep skill - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e438b01`](https://github.com/karakeep-app/karakeep/commit/e438b012) - feat(mobile): add keep screen on toggle for bookmark viewing ([#&#8203;2691](https://github.com/karakeep-app/karakeep/issues/2691)) - [@&#8203;esimkowitz](https://github.com/esimkowitz) in [`64ff1cc`](https://github.com/karakeep-app/karakeep/commit/64ff1cc6) - chore: freshen up docker-compose.yml for local dev purposes ([#&#8203;2149](https://github.com/karakeep-app/karakeep/issues/2149)) - [@&#8203;xuatz](https://github.com/xuatz) in [`26545d6`](https://github.com/karakeep-app/karakeep/commit/26545d64) - deps: upgrade to zod 4 ([#&#8203;2689](https://github.com/karakeep-app/karakeep/issues/2689)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`fa24e42`](https://github.com/karakeep-app/karakeep/commit/fa24e42e) - docs(mobile): add SENTRY\_DISABLE\_AUTO\_UPLOAD=true to build apk without sentry dsn ([#&#8203;2700](https://github.com/karakeep-app/karakeep/issues/2700)) - [@&#8203;xuatz](https://github.com/xuatz) in [`8e6fcdc`](https://github.com/karakeep-app/karakeep/commit/8e6fcdca) - fix(mobile): remove react-native-keyboard-controller patch ([#&#8203;2697](https://github.com/karakeep-app/karakeep/issues/2697)) - [@&#8203;esimkowitz](https://github.com/esimkowitz) in [`bb0d050`](https://github.com/karakeep-app/karakeep/commit/bb0d050c) - fix(mobile): truncate bookmark title with tailwind shrink ([#&#8203;2699](https://github.com/karakeep-app/karakeep/issues/2699)) - [@&#8203;xuatz](https://github.com/xuatz) in [`9082107`](https://github.com/karakeep-app/karakeep/commit/90821073) - fix: add support for instapaper archived status and folders - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`52f9ce0`](https://github.com/karakeep-app/karakeep/commit/52f9ce0a) - feat: start tracking last successful feed fetch ([#&#8203;2688](https://github.com/karakeep-app/karakeep/issues/2688)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`700359e`](https://github.com/karakeep-app/karakeep/commit/700359e9) - fix: compile native modules under pnpm 9 and pin Node 24 ([#&#8203;2686](https://github.com/karakeep-app/karakeep/issues/2686)) - [@&#8203;esimkowitz](https://github.com/esimkowitz) in [`3939536`](https://github.com/karakeep-app/karakeep/commit/39395361) - fix(deps): Update meilisearch version to v1.41.0 ([#&#8203;2643](https://github.com/karakeep-app/karakeep/issues/2643)) - [@&#8203;ir31k0](https://github.com/ir31k0) in [`8a0f497`](https://github.com/karakeep-app/karakeep/commit/8a0f4975) - fix: restate use lazy loading for semaphore state - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6269175`](https://github.com/karakeep-app/karakeep/commit/6269175e) - fix(browser-extension): handle unreachable background script on Firef… ([#&#8203;2649](https://github.com/karakeep-app/karakeep/issues/2649)) - [@&#8203;Joly0](https://github.com/Joly0) in [`6d54cd7`](https://github.com/karakeep-app/karakeep/commit/6d54cd7e) - feat(mobile): iOS 26 header compatibility and header icon fixes ([#&#8203;2523](https://github.com/karakeep-app/karakeep/issues/2523)) - [@&#8203;esimkowitz](https://github.com/esimkowitz) in [`e71681d`](https://github.com/karakeep-app/karakeep/commit/e71681de) - feat(cli): include userId in admin user list output - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`2702f0f`](https://github.com/karakeep-app/karakeep/commit/2702f0fd) - fix: add ratelimiting to the asset upload endpoint - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3b145e5`](https://github.com/karakeep-app/karakeep/commit/3b145e59) - deps: upgrade drizzle to 0.45 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`0b27826`](https://github.com/karakeep-app/karakeep/commit/0b278267) - fix: improve consistency of assetdb between local and s3 when a range is provided - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`546a89b`](https://github.com/karakeep-app/karakeep/commit/546a89b0) - fix(skills): fix the tags of the skill - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7a4c07b`](https://github.com/karakeep-app/karakeep/commit/7a4c07b2) - feat: various improvements to the CLI: pretty print results, list creation, highlights, etc - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d334df9`](https://github.com/karakeep-app/karakeep/commit/d334df92) - feat: add an agent SKILL for using karakeep - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1f8cac3`](https://github.com/karakeep-app/karakeep/commit/1f8cac3a) - fix: move meilisearch to 'all' matching strategy. fixes [#&#8203;2668](https://github.com/karakeep-app/karakeep/issues/2668) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`68e7350`](https://github.com/karakeep-app/karakeep/commit/68e73500) - fix: upgrade playwright to 1.59 to fix browserless issues. fixes [#&#8203;2648](https://github.com/karakeep-app/karakeep/issues/2648) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`8f4dbcc`](https://github.com/karakeep-app/karakeep/commit/8f4dbcc9) - feat(import): thread archived status through Pocket import pipeline ([#&#8203;2656](https://github.com/karakeep-app/karakeep/issues/2656)) - [@&#8203;howwohmm](https://github.com/howwohmm) in [`ddf73a0`](https://github.com/karakeep-app/karakeep/commit/ddf73a07) - fix: use consistent proxy URL per crawler run ([#&#8203;2681](https://github.com/karakeep-app/karakeep/issues/2681)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`db98622`](https://github.com/karakeep-app/karakeep/commit/db986228) - fix(landing): some astro optimizations and cleanups - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`a39b7ba`](https://github.com/karakeep-app/karakeep/commit/a39b7bae) - feat(landing): migrate to astro - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7e0d7ab`](https://github.com/karakeep-app/karakeep/commit/7e0d7abe) - fix(i18n): normalize tone across all translations to match English ([#&#8203;2680](https://github.com/karakeep-app/karakeep/issues/2680)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ce24d99`](https://github.com/karakeep-app/karakeep/commit/ce24d99e) - docs: add karatui to community projects (after karaclean) - [@&#8203;github-actions](https://github.com/github-actions)\[bot] in [`1c17716`](https://github.com/karakeep-app/karakeep/commit/1c177160) - docs: add karaclean to community projects ([#&#8203;2615](https://github.com/karakeep-app/karakeep/issues/2615)) - [@&#8203;lmgarret](https://github.com/lmgarret) in [`a55292b`](https://github.com/karakeep-app/karakeep/commit/a55292ba) - fix: fix passing openai proxy to openai client ([#&#8203;2676](https://github.com/karakeep-app/karakeep/issues/2676)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4c6a95c`](https://github.com/karakeep-app/karakeep/commit/4c6a95ca) - fix: switch feed fetch endpoint to POST and add E2E coverage ([#&#8203;2677](https://github.com/karakeep-app/karakeep/issues/2677)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`de65a47`](https://github.com/karakeep-app/karakeep/commit/de65a47c) - fix: fix sdk error return type in callsites - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`07ecdcd`](https://github.com/karakeep-app/karakeep/commit/07ecdcd7) - release: add a way to publish canary CLI versions - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c6a5c62`](https://github.com/karakeep-app/karakeep/commit/c6a5c626) - feat(api): expose feed subscriptions via REST API ([#&#8203;2635](https://github.com/karakeep-app/karakeep/issues/2635)) - [@&#8203;larsborn](https://github.com/larsborn) in [`25ff6a7`](https://github.com/karakeep-app/karakeep/commit/25ff6a79) - feat(workers): make monolith timeout and arguments configurable ([#&#8203;2659](https://github.com/karakeep-app/karakeep/issues/2659)) - [@&#8203;NikhilChowdhury27](https://github.com/NikhilChowdhury27) in [`f54a9b8`](https://github.com/karakeep-app/karakeep/commit/f54a9b8f) - fix: dedup bookmarks during meilisearch batching - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`bc14214`](https://github.com/karakeep-app/karakeep/commit/bc14214b) - fix: use logger for the meilisearch batch logging - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c5a4e54`](https://github.com/karakeep-app/karakeep/commit/c5a4e545) - chore: add extra batch size logging to the meilisearch plugin - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`885355b`](https://github.com/karakeep-app/karakeep/commit/885355bb) - fix(landing): fix responsivness of the self-hostings docs button - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3a217a6`](https://github.com/karakeep-app/karakeep/commit/3a217a67) - feat: add a new counter for new bookmarks by source - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f42cb35`](https://github.com/karakeep-app/karakeep/commit/f42cb356) - feat: add support for yearly pricing - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3d4194d`](https://github.com/karakeep-app/karakeep/commit/3d4194d6) - fix: speculative quota check pre-archival - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`53a4598`](https://github.com/karakeep-app/karakeep/commit/53a4598e) - fix(tests): fix rule engine tests - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`dc59fe2`](https://github.com/karakeep-app/karakeep/commit/dc59fe2d) - fix: lower priority of rule engine enqueues - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`88d7f40`](https://github.com/karakeep-app/karakeep/commit/88d7f401) - fix: skip tagging and summarization for assets that fail preprocessing - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`db275f2`](https://github.com/karakeep-app/karakeep/commit/db275f25) - fix(restate): better error message on abort, preserve error stacktraces and fix stack undeterminsim - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1745f6f`](https://github.com/karakeep-app/karakeep/commit/1745f6f9) - chore: drop plugin deps from trpc package - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d534ec9`](https://github.com/karakeep-app/karakeep/commit/d534ec9a) - fix: dont fail indexing job if bookmark is not found - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9cc0246`](https://github.com/karakeep-app/karakeep/commit/9cc0246b) - feat: add more admin APIs to semaphore implementation - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`17f4963`](https://github.com/karakeep-app/karakeep/commit/17f4963b) - fix: don't trigger rule engine jobs unless there's a matching rule ([#&#8203;2614](https://github.com/karakeep-app/karakeep/issues/2614)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7f11826`](https://github.com/karakeep-app/karakeep/commit/7f118261) - deps: upgrade metascraper - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`5b60f45`](https://github.com/karakeep-app/karakeep/commit/5b60f45d) - deps: upgrade hono - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6e842d8`](https://github.com/karakeep-app/karakeep/commit/6e842d89) - deps: upgrade vite-tsconfig-paths - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1f8d77e`](https://github.com/karakeep-app/karakeep/commit/1f8d77e5) - deps: upgrade aws client - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7f7e054`](https://github.com/karakeep-app/karakeep/commit/7f7e0546) - fix: only trigger webhook job if user have webhooks configured - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`49d57df`](https://github.com/karakeep-app/karakeep/commit/49d57dfd) - refactor: split models into repos and services for feed, highlights, webhooks and importSessions ([#&#8203;2613](https://github.com/karakeep-app/karakeep/issues/2613)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ddd578c`](https://github.com/karakeep-app/karakeep/commit/ddd578cc) - fix: ratelimit bookmark creation API - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6e5c2ef`](https://github.com/karakeep-app/karakeep/commit/6e5c2ef0) - Remove queue size checks from import worker capacity calculation ([#&#8203;2597](https://github.com/karakeep-app/karakeep/issues/2597)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`fba7108`](https://github.com/karakeep-app/karakeep/commit/fba7108b) - fix: add missing queues to queue monitoring - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`946e263`](https://github.com/karakeep-app/karakeep/commit/946e263a) - Reapply "fix(restate): use queue size from semaphore instead of admin API" - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`bf1963d`](https://github.com/karakeep-app/karakeep/commit/bf1963d5) - Revert "fix(restate): use queue size from semaphore instead of admin API" - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`73720f2`](https://github.com/karakeep-app/karakeep/commit/73720f27) - feat(landing): minor revamp to the landing page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b690b4c`](https://github.com/karakeep-app/karakeep/commit/b690b4c8) - tests: add feed worker e2e tests - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`a8b1e8e`](https://github.com/karakeep-app/karakeep/commit/a8b1e8ea) - fix(workers): handle TWZ RSS category objects ([#&#8203;2589](https://github.com/karakeep-app/karakeep/issues/2589)) - [@&#8203;venku122](https://github.com/venku122) in [`645f2f0`](https://github.com/karakeep-app/karakeep/commit/645f2f0b) - fix(restate): use queue size from semaphore instead of admin API - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c455f0a`](https://github.com/karakeep-app/karakeep/commit/c455f0a6) - fix(import): parse linkwarden collections. fixes [#&#8203;2586](https://github.com/karakeep-app/karakeep/issues/2586) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`722fd8c`](https://github.com/karakeep-app/karakeep/commit/722fd8c0) - fix: redact internal server errors in prod responses - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c8a75a0`](https://github.com/karakeep-app/karakeep/commit/c8a75a0b) - feat(landing): improve SEO of the landing page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`553bb9e`](https://github.com/karakeep-app/karakeep/commit/553bb9ee) - chore: add jean to gitignore - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`8bb529c`](https://github.com/karakeep-app/karakeep/commit/8bb529c1) - feat(landing): add Raycast/Obsidian integrations to the apps page ([#&#8203;2585](https://github.com/karakeep-app/karakeep/issues/2585)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9f57c21`](https://github.com/karakeep-app/karakeep/commit/9f57c212) - fix(mobile): drop the usage of react-native-awesome-slider - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`dfa56a7`](https://github.com/karakeep-app/karakeep/commit/dfa56a7d) - deps: upgrade default meilisearch to 1.37.0 ([#&#8203;2575](https://github.com/karakeep-app/karakeep/issues/2575)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`467c732`](https://github.com/karakeep-app/karakeep/commit/467c732e) - fix: map TOO\_MANY\_REQUESTS to 429 in the api - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`5053050`](https://github.com/karakeep-app/karakeep/commit/5053050d) - fix(api): ensure sourceUrl is saved when creating asset bookmarks ([#&#8203;2574](https://github.com/karakeep-app/karakeep/issues/2574)) - [@&#8203;hoilc](https://github.com/hoilc) in [`eb97627`](https://github.com/karakeep-app/karakeep/commit/eb976279) - release(mobile): release mobile v1.9.2 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3c9349d`](https://github.com/karakeep-app/karakeep/commit/3c9349d3) - feat(mobile): report mobile crashes to sentry - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`5a371f4`](https://github.com/karakeep-app/karakeep/commit/5a371f4b) - fix(mobile): replace deprecated ImagePicker.MediaTypeOptions with media type literal ([#&#8203;2528](https://github.com/karakeep-app/karakeep/issues/2528)) - [@&#8203;esimkowitz](https://github.com/esimkowitz) in [`1df8acb`](https://github.com/karakeep-app/karakeep/commit/1df8acb3) - feat(mobile): add external browser default bookmark view ([#&#8203;2516](https://github.com/karakeep-app/karakeep/issues/2516)) ([#&#8203;2548](https://github.com/karakeep-app/karakeep/issues/2548)) - [@&#8203;xingzihai](https://github.com/xingzihai) in [`ba6a6f9`](https://github.com/karakeep-app/karakeep/commit/ba6a6f97) - fix(web): expand $tags/$aiTags/$userTags in AI prompt preview ([#&#8203;2557](https://github.com/karakeep-app/karakeep/issues/2557)) - [@&#8203;zerone0x](https://github.com/zerone0x) in [`23cd9da`](https://github.com/karakeep-app/karakeep/commit/23cd9dae) - fix(crawler): normalize lazy-load img attributes to src before Readability ([#&#8203;2556](https://github.com/karakeep-app/karakeep/issues/2556)) - [@&#8203;zerone0x](https://github.com/zerone0x) in [`3d18d89`](https://github.com/karakeep-app/karakeep/commit/3d18d89c) - fix(mobile): prevent app hanging behind reverse proxies and fix Hermes compat ([#&#8203;2559](https://github.com/karakeep-app/karakeep/issues/2559)) - [@&#8203;mrInvincible29](https://github.com/mrInvincible29) in [`3c70a57`](https://github.com/karakeep-app/karakeep/commit/3c70a57a) - fix(mobile): fix layout issues when Android bold text accessibility option is enabled ([#&#8203;2554](https://github.com/karakeep-app/karakeep/issues/2554)) - [@&#8203;Go2Engle](https://github.com/Go2Engle) in [`ffba00d`](https://github.com/karakeep-app/karakeep/commit/ffba00d9) - feat: support bookmark source condition in rule engine ([#&#8203;2526](https://github.com/karakeep-app/karakeep/issues/2526)) ([#&#8203;2547](https://github.com/karakeep-app/karakeep/issues/2547)) - [@&#8203;xingzihai](https://github.com/xingzihai) in [`b5d628c`](https://github.com/karakeep-app/karakeep/commit/b5d628cc) - chore(mobile): add APP\_VARIANT to make it easier to install multiple mobile variants ([#&#8203;2422](https://github.com/karakeep-app/karakeep/issues/2422)) - [@&#8203;xuatz](https://github.com/xuatz) in [`bc0d3d2`](https://github.com/karakeep-app/karakeep/commit/bc0d3d27) - feat(api): add admin REST endpoints to trigger background jobs ([#&#8203;2564](https://github.com/karakeep-app/karakeep/issues/2564)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4974ce5`](https://github.com/karakeep-app/karakeep/commit/4974ce58) - docs: revise Gemini API documentation for billing and models ([#&#8203;2514](https://github.com/karakeep-app/karakeep/issues/2514)) - [@&#8203;faximan](https://github.com/faximan) in [`a507f27`](https://github.com/karakeep-app/karakeep/commit/a507f274) - fix: increase max feed url length to 2k chars. fixes [#&#8203;2572](https://github.com/karakeep-app/karakeep/issues/2572) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`07454a6`](https://github.com/karakeep-app/karakeep/commit/07454a6a) - feat(cli): add more admin utilities to the karakeep cli - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c363c4f`](https://github.com/karakeep-app/karakeep/commit/c363c4f6) - fix(restate): use default retry policy for onError and onComplete handlers - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3868ad6`](https://github.com/karakeep-app/karakeep/commit/3868ad69) - fix(web): show "+" in tag count badges when more pages exist ([#&#8203;2558](https://github.com/karakeep-app/karakeep/issues/2558)) - [@&#8203;zerone0x](https://github.com/zerone0x) in [`432235b`](https://github.com/karakeep-app/karakeep/commit/432235be) - fix(workers): prevent crash caused by puppeteer-extra - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d197f59`](https://github.com/karakeep-app/karakeep/commit/d197f595) - fix(workers): retry worker job completion success/failure reporting - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e578322`](https://github.com/karakeep-app/karakeep/commit/e578322e) - fix(workers): avoid doing empty insertions in the tagging worker - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`186b76e`](https://github.com/karakeep-app/karakeep/commit/186b76eb) - feat(web): allow collapsing the sidebar in bookmark previews - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`49d7959`](https://github.com/karakeep-app/karakeep/commit/49d79590) - feat(web): visual revamp for the bookmark preview page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f500129`](https://github.com/karakeep-app/karakeep/commit/f500129c) - chore: migrate to oxfmt - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`85e63ae`](https://github.com/karakeep-app/karakeep/commit/85e63aec) - fix: drop the slowMo setting from the crawler - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`49c620c`](https://github.com/karakeep-app/karakeep/commit/49c620ce) - feat(web): add haptic feedback on mobile sidebar navigation - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f91ec53`](https://github.com/karakeep-app/karakeep/commit/f91ec531) - feat: switch rapid bookmark creations to use low pri queues - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b009585`](https://github.com/karakeep-app/karakeep/commit/b009585d) - chore: add a throttled log line when we're failing open in redis ratelimiter - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`97cddef`](https://github.com/karakeep-app/karakeep/commit/97cddefb) - feat(web): add fav and archive actions on hover. fixes [#&#8203;2360](https://github.com/karakeep-app/karakeep/issues/2360) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`98e173d`](https://github.com/karakeep-app/karakeep/commit/98e173d8) - fix: handle redis network reconnections correcty - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ca70f88`](https://github.com/karakeep-app/karakeep/commit/ca70f888) - fix(mobile): status bar text invisible in dark mode - [@&#8203;esimkowitz](https://github.com/esimkowitz) in [`43e9ea0`](https://github.com/karakeep-app/karakeep/commit/43e9ea03) - chore: move away from ioredis to node-redis client - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`774b255`](https://github.com/karakeep-app/karakeep/commit/774b2559) - fix: redact search params from browser url. fixes [#&#8203;2419](https://github.com/karakeep-app/karakeep/issues/2419) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f4a3923`](https://github.com/karakeep-app/karakeep/commit/f4a39230) - feat: redis based ratelimiting plugin ([#&#8203;2535](https://github.com/karakeep-app/karakeep/issues/2535)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b68ac51`](https://github.com/karakeep-app/karakeep/commit/b68ac513) - fix(cli): respect attachedBy when migrating tags. fixes [#&#8203;2273](https://github.com/karakeep-app/karakeep/issues/2273) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`462d713`](https://github.com/karakeep-app/karakeep/commit/462d713f) - feat(mobile): search on type instead of search on enter - [@&#8203;claude](https://github.com/claude) in [`48a6c86`](https://github.com/karakeep-app/karakeep/commit/48a6c86b) - fix: prevent highlight popup from stealing focus on Firefox. fixes [#&#8203;2510](https://github.com/karakeep-app/karakeep/issues/2510) [#&#8203;997](https://github.com/karakeep-app/karakeep/issues/997) - [@&#8203;claude](https://github.com/claude) in [`11dfe74`](https://github.com/karakeep-app/karakeep/commit/11dfe74d) - docs: more docs fixing - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`57f586f`](https://github.com/karakeep-app/karakeep/commit/57f586fc) - docs: better api docs ([#&#8203;2530](https://github.com/karakeep-app/karakeep/issues/2530)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`dd2c6cc`](https://github.com/karakeep-app/karakeep/commit/dd2c6cc0) - feat(mobile): add empty stats for bookmarks, tags and highlights - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1f7ea12`](https://github.com/karakeep-app/karakeep/commit/1f7ea122) - release(mobile): bump build version for mobile app - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ec2d037`](https://github.com/karakeep-app/karakeep/commit/ec2d0373) - fix: skip session redirect from the mobile signup inline browser - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`0416ef4`](https://github.com/karakeep-app/karakeep/commit/0416ef46) - feat(mobile): add account deletion support in settings - [@&#8203;claude](https://github.com/claude) in [`33c8c77`](https://github.com/karakeep-app/karakeep/commit/33c8c770) - docs: update pikapods link to karakeep - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`a7ea50e`](https://github.com/karakeep-app/karakeep/commit/a7ea50e9) - release(mobile): Bump mobile version to 1.9.1 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`119efef`](https://github.com/karakeep-app/karakeep/commit/119efef6) - fix(mobile): add manual padding to avoid the native tabs on android. fixes [#&#8203;2518](https://github.com/karakeep-app/karakeep/issues/2518) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`dac78a0`](https://github.com/karakeep-app/karakeep/commit/dac78a07) - fix(mobile): fix header color on android causing. [#&#8203;2518](https://github.com/karakeep-app/karakeep/issues/2518) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1791862`](https://github.com/karakeep-app/karakeep/commit/17918626) - fix(mobile): delete hack for hiding parent's header - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3f45d9e`](https://github.com/karakeep-app/karakeep/commit/3f45d9e1) - fix(mobile): fix padding on the header buttons in bookmark info page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`68524d6`](https://github.com/karakeep-app/karakeep/commit/68524d66) - fix(mobile): fix alignment of the header menu in the list page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9524415`](https://github.com/karakeep-app/karakeep/commit/95244156) - fix(mobile): fix query client confusion causing missed invalidation - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`0c25cf2`](https://github.com/karakeep-app/karakeep/commit/0c25cf23) - chore: add claude worktrees to gitignore - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`2f02d15`](https://github.com/karakeep-app/karakeep/commit/2f02d157) - fix(mobile): fix alignment of the header menu in the list page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b1b32f7`](https://github.com/karakeep-app/karakeep/commit/b1b32f7b) - feat(mobile): add SF Symbol icons to native menus - [@&#8203;claude](https://github.com/claude) in [`b58fc6c`](https://github.com/karakeep-app/karakeep/commit/b58fc6c9) - release: bump build version for ios app - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`5b6402f`](https://github.com/karakeep-app/karakeep/commit/5b6402f3) - ci: upgrade ios workflow to use macos 26 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`5c9a0ce`](https://github.com/karakeep-app/karakeep/commit/5c9a0cef) - ci: bypass EAS fingerprinting - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`06fe75e`](https://github.com/karakeep-app/karakeep/commit/06fe75e6) - fix(extension): fix missing trpc provider - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f3c9c83`](https://github.com/karakeep-app/karakeep/commit/f3c9c837) - release(sdk,cli,extension,mcp): release 0.31 sdk, mcp and cli and extension 1.2.9 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d212415`](https://github.com/karakeep-app/karakeep/commit/d212415b) - release(mobile): Bump mobile version to 1.9.0 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`099e3eb`](https://github.com/karakeep-app/karakeep/commit/099e3eb0) - release(docs): release the 0.31 docs - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`473c8a9`](https://github.com/karakeep-app/karakeep/commit/473c8a93) ### [`v0.31.0`](https://github.com/karakeep-app/karakeep/releases/tag/v0.31.0): 0.31.0 [Compare Source](https://github.com/karakeep-app/karakeep/compare/v0.30.0...v0.31.0) ### 0.31.0 Welcome to the 0.31.0 release of Karakeep! This release brings synchronized reading progress, LLM-based OCR, a revamped import pipeline, drag-and-drop for lists, highlights on mobile, a lot of mobile polish, and fixes for some long standing bugs. Huge thanks to our contributors for this release [@&#8203;esimkowitz](https://github.com/esimkowitz), [@&#8203;WieserDaniel](https://github.com/WieserDaniel), [@&#8203;chen-ye](https://github.com/chen-ye), [@&#8203;SnowSquire](https://github.com/SnowSquire), [@&#8203;mokhovyk](https://github.com/mokhovyk), [@&#8203;evan6seven](https://github.com/evan6seven), [@&#8203;ElectricTea](https://github.com/ElectricTea), [@&#8203;RobertRosca](https://github.com/RobertRosca), [@&#8203;sweepies](https://github.com/sweepies), [@&#8203;usr3](https://github.com/usr3) and everyone who shipped code, triaged bugs, or shared feedback for this release. > If you enjoy using Karakeep, consider supporting the project [here ☕️](https://buymeacoffee.com/mbassem) or via GitHub [here](https://github.com/sponsors/MohamedBassem). <a href="https://www.buymeacoffee.com/mbassem" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" width="auto" height="50" ></a> And in case you missed it, we now have a ☁️ managed offering ☁️ for those who don't want to self-host. You can signup [here](https://cloud.karakeep.app) 🎉. ### New Features 🚀 - Synchronized reading progress across all your devices ([#&#8203;2302](https://github.com/karakeep-app/karakeep/issues/2302)). By [@&#8203;esimkowitz](https://github.com/esimkowitz)! - Your reading position is now saved and synced, so you can pick up right where you left off on any device. - LLM-based OCR as an alternative to Tesseract ([#&#8203;2442](https://github.com/karakeep-app/karakeep/issues/2442)) - You can now use your configured LLM for OCR instead of Tesseract, which produces significantly better results for image and asset bookmarks. - Revamped Import pipeline ([#&#8203;2378](https://github.com/karakeep-app/karakeep/issues/2378)) - The import experience got another big overhaul: a new import details page ([#&#8203;2451](https://github.com/karakeep-app/karakeep/issues/2451)), a dedicated low-priority queue for import crawling ([#&#8203;2452](https://github.com/karakeep-app/karakeep/issues/2452)), better progress tracking, ability to pause an import and more resilient error handling. - Drag-and-drop bookmarks into lists ([#&#8203;2469](https://github.com/karakeep-app/karakeep/issues/2469)) - Highlights support on mobile ([#&#8203;2494](https://github.com/karakeep-app/karakeep/issues/2494)) - You can now view and create highlights in the mobile app's reader view. - AI tag suggestions: instructs the model to limit auto-tagging to a subset of your existing tags for more consistent results ([#&#8203;2444](https://github.com/karakeep-app/karakeep/issues/2444)). - Export lists in backups and exports ([#&#8203;2484](https://github.com/karakeep-app/karakeep/issues/2484)) - Automated backups and full exports now include your lists. - Others: - Retry buttons for dangling (aka pending) bookmarks in the admin panel ([#&#8203;2341](https://github.com/karakeep-app/karakeep/issues/2341)). - Add signup support to the mobile app. - OpenAI service tier configuration via `OPENAI_SERVICE_TIER` ([#&#8203;2339](https://github.com/karakeep-app/karakeep/issues/2339)). By [@&#8203;RobertRosca](https://github.com/RobertRosca)! - Import from Instapaper ([#&#8203;2434](https://github.com/karakeep-app/karakeep/issues/2434)). By [@&#8203;WieserDaniel](https://github.com/WieserDaniel)! - Privacy-respecting bookmark debugger admin tool ([#&#8203;2373](https://github.com/karakeep-app/karakeep/issues/2373)) - MCP server now supports custom configurable HTTP headers ([#&#8203;2436](https://github.com/karakeep-app/karakeep/issues/2436)). By [@&#8203;chen-ye](https://github.com/chen-ye)! - New search qualifiers: - `source:` filter to search by bookmark source (mobile, extension, web, etc.) ([#&#8203;2465](https://github.com/karakeep-app/karakeep/issues/2465)). - `tag:` alias for `#` and `!` alias for negation ([#&#8203;2425](https://github.com/karakeep-app/karakeep/issues/2425)). - New "Title Contains" condition in the Rule Engine ([#&#8203;2354](https://github.com/karakeep-app/karakeep/issues/2354)). By [@&#8203;mokhovyk](https://github.com/mokhovyk)! ### UX Improvements ✨ - Mobile app overhaul: - Native tabs and more native-feeling screens. - Animated UI feedback in the sharing modal ([#&#8203;2427](https://github.com/karakeep-app/karakeep/issues/2427)). - Show bookmark count in the all lists view. - Better looking content fetching loading state in the bookmark preview. - Two-phase metadata updates so bookmarks show up faster while crawling is still in progress ([#&#8203;2467](https://github.com/karakeep-app/karakeep/issues/2467)). - Links to apps, extensions and docs in the profile dropdown. - Extension autofocuses on note field on open ([#&#8203;2366](https://github.com/karakeep-app/karakeep/issues/2366)). By [@&#8203;SnowSquire](https://github.com/SnowSquire)! - Improving the visual consistency of the settings page. - Opt-in OAuth auto-redirect for single-provider passwordless setups ([#&#8203;2483](https://github.com/karakeep-app/karakeep/issues/2483)) - Add a download button for assets in the bookmark options menu. - API keys now show their last-used dates to better identify unused keys. - Fix masonry overflow in bookmark grids ([#&#8203;2400](https://github.com/karakeep-app/karakeep/issues/2400)). By [@&#8203;evan6seven](https://github.com/evan6seven)! - Hide confusing `No suggestions` message when no search suggestions are available. ### Fixes 🔧 - \[Security] Sanitize reddit's crawling output to prevent stored XSS. This was reported by [@&#8203;ByamB4](https://github.com/ByamB4) and published as a github advisory (GHSA-mg93-f9mw-wpgj). - Eliminated O(n²) parsing of Netscape bookmark imports ([#&#8203;2338](https://github.com/karakeep-app/karakeep/issues/2338)). - Smart lists can now be used in search qualifiers and in other smart list queries ([#&#8203;2470](https://github.com/karakeep-app/karakeep/issues/2470)) - Parallelize content extraction in the crawler worker for faster crawling. - Batch meilisearch indexing requests for better performance ([#&#8203;2441](https://github.com/karakeep-app/karakeep/issues/2441)). - Auto dismiss dialogs during crawling that might have caused worker crashes before. - Use user's preferred language for manual summarization ([#&#8203;2429](https://github.com/karakeep-app/karakeep/issues/2429)). - Accept more permissive RSS feed content types ([#&#8203;2353](https://github.com/karakeep-app/karakeep/issues/2353)). By [@&#8203;ElectricTea](https://github.com/ElectricTea)! - Fix clipping of reader view in smaller screens. - Fix overscrolling in some setting pages (e.g. AI settings). - Stop theme flashes with Cloudflare Rocket Loader ([#&#8203;2340](https://github.com/karakeep-app/karakeep/issues/2340)). By [@&#8203;sweepies](https://github.com/sweepies)! - Retry 403, 429 and 5XX status codes from the crawler. - Lower priority of recrawling and mass admin actions to avoid starving interactive traffic. - Fix scrolling in manage lists/edit tags when inside a dialog ([#&#8203;2258](https://github.com/karakeep-app/karakeep/issues/2258)). - Respect archived display behavior setting in mobile lists and tags ([#&#8203;2499](https://github.com/karakeep-app/karakeep/issues/2499)). - Fix flicker on closing bookmark preview on search page. - Share PDFs from the mobile app as files instead of links. - Fix high CPU usage of browser container after large imports due to leaking contexts. ([#&#8203;2503](https://github.com/karakeep-app/karakeep/issues/2503)) - Reader settings preview in the mobile app now matches reader view formatting ([#&#8203;2365](https://github.com/karakeep-app/karakeep/issues/2365)). By [@&#8203;esimkowitz](https://github.com/esimkowitz)! - When saving an image or a link from a page using "Add to Karakeep" menu item, the title of the original page is no longer incorrectly used for that link. ### For Developers 🛠️ - Docker images moved from Alpine to Debian. - OpenTelemetry instrumentation for database queries and extra tracing in OTEL traces ([#&#8203;2453](https://github.com/karakeep-app/karakeep/issues/2453)). - Prometheus metric for bookmark crawl latency ([#&#8203;2461](https://github.com/karakeep-app/karakeep/issues/2461)). - New `checkUrl` API endpoint to check if a URL is already bookmarked. - `attachedBy` field in the update tags API endpoint to mark the tag as added by human or AI ([#&#8203;2281](https://github.com/karakeep-app/karakeep/issues/2281)). - Upgraded to Expo SDK 54, React 19.2.1, and Node.js 24. - CLI can now search bookmarks ([#&#8203;2426](https://github.com/karakeep-app/karakeep/issues/2426)). ### Screenshots 📸 ##### Reader Progress ![https://github.com/user-attachments/assets/86b259f6-2ce7-493f-a02c-d883c76c901c](https://github.com/user-attachments/assets/86b259f6-2ce7-493f-a02c-d883c76c901c) ##### Import Details ![https://github.com/user-attachments/assets/b37c91a5-b74a-4de5-94d3-f25c346cae7b](https://github.com/user-attachments/assets/b37c91a5-b74a-4de5-94d3-f25c346cae7b) ### Upgrading 📦 To upgrade: - If you're using `KARAKEEP_VERSION=release`, run `docker compose pull && docker compose up -d`. - If you're pinning it to a specific version, bump the version and then run `docker compose pull && docker compose up -d`. ### All Commits - fix(workers): sanitize reddits metascraper output - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ba3db95`](https://github.com/karakeep-app/karakeep/commit/ba3db95) - fix(i18n): update en\_US translation strings - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`52c1e9f`](https://github.com/karakeep-app/karakeep/commit/52c1e9f0) - i18n: Sync weblate translations - Weblate in [`f7ae922`](https://github.com/karakeep-app/karakeep/commit/f7ae922c) - fix(workers): mitigate leaking browser contexts and setup and auto reaper ([#&#8203;2503](https://github.com/karakeep-app/karakeep/issues/2503)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`627faf5`](https://github.com/karakeep-app/karakeep/commit/627faf51) - fix(web): avoid flicker on closing bookmark preview on search page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ec0aaad`](https://github.com/karakeep-app/karakeep/commit/ec0aaad0) - fix(mobile): respect archiveDisplayBehaviour setting in lists and tags ([#&#8203;2499](https://github.com/karakeep-app/karakeep/issues/2499)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`59a2560`](https://github.com/karakeep-app/karakeep/commit/59a25607) - fix(web): fix scrolling in manage lists/edit tags when inside a dialog. fixes [#&#8203;2258](https://github.com/karakeep-app/karakeep/issues/2258) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e37d728`](https://github.com/karakeep-app/karakeep/commit/e37d7286) - fix(mobile): remove the use of custom safe areas - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ef0b50b`](https://github.com/karakeep-app/karakeep/commit/ef0b50be) - fix(mobile): remove smart lists from manage\_lists page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7124d15`](https://github.com/karakeep-app/karakeep/commit/7124d15b) - docs: correct breaking typo in 05-singlefile.md doc ([#&#8203;2496](https://github.com/karakeep-app/karakeep/issues/2496)) - [@&#8203;brandongalbraith](https://github.com/brandongalbraith) in [`0e3bc6f`](https://github.com/karakeep-app/karakeep/commit/0e3bc6f1) - fix(mobile): fix formsheets on android - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`228eb20`](https://github.com/karakeep-app/karakeep/commit/228eb208) - fix(ui): fix the colors of buttons in the settings page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3d6c83d`](https://github.com/karakeep-app/karakeep/commit/3d6c83d5) - fix(ui): Improve visual consistency in all settings page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e02a4c5`](https://github.com/karakeep-app/karakeep/commit/e02a4c5e) - feat: add checkUrl endpoint to replace searchBookmarks for URL existence checks - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b249273`](https://github.com/karakeep-app/karakeep/commit/b2492735) - fix: auto dismiss dialogs during crawling - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`23ae17f`](https://github.com/karakeep-app/karakeep/commit/23ae17fa) - deps: fix mismatch in [@&#8203;types/react](https://github.com/types/react) across packages - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6f78d2f`](https://github.com/karakeep-app/karakeep/commit/6f78d2f8) - deps: upgrade playwright to 1.58.2 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`07cc3ef`](https://github.com/karakeep-app/karakeep/commit/07cc3eff) - fix(restate): call onError on rpc failures - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4fd0eaf`](https://github.com/karakeep-app/karakeep/commit/4fd0eaf0) - fix(mobile): drop the use of custom safe areas in bookmark lists - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`447d2cc`](https://github.com/karakeep-app/karakeep/commit/447d2cc8) - fix(mobile): fix headers in android app - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`349fe05`](https://github.com/karakeep-app/karakeep/commit/349fe05e) - fix: parallelize content extraction in crawler worker - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`74c3452`](https://github.com/karakeep-app/karakeep/commit/74c34529) - fix(ux): hide autocomplete dropdown when there are no suggestions - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c6417d8`](https://github.com/karakeep-app/karakeep/commit/c6417d8e) - docs: Add Cloudflare Workers AI provider ([#&#8203;2486](https://github.com/karakeep-app/karakeep/issues/2486)) - [@&#8203;usr3](https://github.com/usr3) in [`5946ce8`](https://github.com/karakeep-app/karakeep/commit/5946ce8f) - feat: add synchronized reading progress for bookmarks ([#&#8203;2302](https://github.com/karakeep-app/karakeep/issues/2302)) - [@&#8203;esimkowitz](https://github.com/esimkowitz) in [`fff0a28`](https://github.com/karakeep-app/karakeep/commit/fff0a280) - feat(mobile): Add highlights support for the mobile app ([#&#8203;2494](https://github.com/karakeep-app/karakeep/issues/2494)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`459ee50`](https://github.com/karakeep-app/karakeep/commit/459ee50e) - fix: dont trigger background jobs if bookmark doesn't change on updateTags call - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`fbc63b9`](https://github.com/karakeep-app/karakeep/commit/fbc63b92) - fix(import): truncate title to max length in import worker - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`74b174a`](https://github.com/karakeep-app/karakeep/commit/74b174ad) - feat(crawler): retrun 403, 429 and 5XX status codes - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1c5c8ec`](https://github.com/karakeep-app/karakeep/commit/1c5c8ec6) - fix(web): fix clipping of reader view in smaller screens - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`41d2f0d`](https://github.com/karakeep-app/karakeep/commit/41d2f0d7) - fix(web): fix double scrolling in sidebar layout - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`a8e8ce9`](https://github.com/karakeep-app/karakeep/commit/a8e8ce98) - feat(ui): Add a better content fetching loading state in the bookmark preview - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`be09027`](https://github.com/karakeep-app/karakeep/commit/be090270) - feat: add a download button to the More submenu in bookmark options - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`2c57aa8`](https://github.com/karakeep-app/karakeep/commit/2c57aa87) - feat: add OAuth auto-redirect functionality ([#&#8203;2483](https://github.com/karakeep-app/karakeep/issues/2483)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`33b91e3`](https://github.com/karakeep-app/karakeep/commit/33b91e3f) - feat: export lists in backups and exports ([#&#8203;2484](https://github.com/karakeep-app/karakeep/issues/2484)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`0c458ba`](https://github.com/karakeep-app/karakeep/commit/0c458ba1) - feat(workers): extract html parsing into a subprocess ([#&#8203;2485](https://github.com/karakeep-app/karakeep/issues/2485)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7a10067`](https://github.com/karakeep-app/karakeep/commit/7a100672) - feat(mobile): make the bookmark edit UIs look more native - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ec7ef00`](https://github.com/karakeep-app/karakeep/commit/ec7ef00f) - fix: share PDFs as files instead of links in mobile app - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`0fab1aa`](https://github.com/karakeep-app/karakeep/commit/0fab1aa6) - feat: link to apps and extensions, docs and twitter in profile dropdown - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d72788f`](https://github.com/karakeep-app/karakeep/commit/d72788ff) - fix: dedup list and recent search suggestions - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`8539c83`](https://github.com/karakeep-app/karakeep/commit/8539c836) - fix: Support nested smart lists with cycle detection ([#&#8203;2470](https://github.com/karakeep-app/karakeep/issues/2470)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b3d3602`](https://github.com/karakeep-app/karakeep/commit/b3d3602d) - feat(mobile): Add animated UI feedback to sharing modal ([#&#8203;2427](https://github.com/karakeep-app/karakeep/issues/2427)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b41b564`](https://github.com/karakeep-app/karakeep/commit/b41b5647) - feat(mobile): more native screens - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e455e46`](https://github.com/karakeep-app/karakeep/commit/e455e468) - feat(ai): Support restricting AI tags to a subset of existing tags ([#&#8203;2444](https://github.com/karakeep-app/karakeep/issues/2444)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4186c4c`](https://github.com/karakeep-app/karakeep/commit/4186c4c6) - feat(mcp): Support custom configurable HTTP headers ([#&#8203;2436](https://github.com/karakeep-app/karakeep/issues/2436)) - [@&#8203;chen-ye](https://github.com/chen-ye) in [`77b186c`](https://github.com/karakeep-app/karakeep/commit/77b186c3) - feat: Added Import for Instapaper ([#&#8203;2434](https://github.com/karakeep-app/karakeep/issues/2434)) - [@&#8203;WieserDaniel](https://github.com/WieserDaniel) in [`fbe7e3a`](https://github.com/karakeep-app/karakeep/commit/fbe7e3a9) - feat: Add drag-and-drop support for bookmarks to lists ([#&#8203;2469](https://github.com/karakeep-app/karakeep/issues/2469)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`485e994`](https://github.com/karakeep-app/karakeep/commit/485e9948) - feat(crawler): Split bookmark metadata updates into two phases for faster feedback ([#&#8203;2467](https://github.com/karakeep-app/karakeep/issues/2467)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c8464e3`](https://github.com/karakeep-app/karakeep/commit/c8464e30) - feat: add source filter to query language ([#&#8203;2465](https://github.com/karakeep-app/karakeep/issues/2465)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b05a753`](https://github.com/karakeep-app/karakeep/commit/b05a7531) - fix: treat bookmark not found as a no-op in rule engine instead of a failure ([#&#8203;2464](https://github.com/karakeep-app/karakeep/issues/2464)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`960ca9b`](https://github.com/karakeep-app/karakeep/commit/960ca9b6) - fix(extension): dont store tab title when saving links or images. fixes [#&#8203;2462](https://github.com/karakeep-app/karakeep/issues/2462) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1a01f75`](https://github.com/karakeep-app/karakeep/commit/1a01f75d) - feat: Add separate queue for import link crawling ([#&#8203;2452](https://github.com/karakeep-app/karakeep/issues/2452)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`bbd65fd`](https://github.com/karakeep-app/karakeep/commit/bbd65fd6) - fix: lower the priority of recrawling - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7d53e2e`](https://github.com/karakeep-app/karakeep/commit/7d53e2e4) - feat(metrics): add prometheus metric for bookmark crawl latency ([#&#8203;2461](https://github.com/karakeep-app/karakeep/issues/2461)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b264080`](https://github.com/karakeep-app/karakeep/commit/b2640803) - feat(db): add OpenTelemetry instrumentation for database queries - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9e5693c`](https://github.com/karakeep-app/karakeep/commit/9e5693c6) - feat(import): new import details page ([#&#8203;2451](https://github.com/karakeep-app/karakeep/issues/2451)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e59fd98`](https://github.com/karakeep-app/karakeep/commit/e59fd98b) - feat: add extra instrumentation in the otel traces ([#&#8203;2453](https://github.com/karakeep-app/karakeep/issues/2453)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`538035c`](https://github.com/karakeep-app/karakeep/commit/538035c4) - fix(import): sanitize error messages to prevent backend detail leakage ([#&#8203;2455](https://github.com/karakeep-app/karakeep/issues/2455)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`93ad2e2`](https://github.com/karakeep-app/karakeep/commit/93ad2e20) - fix(import): propagate crawling/tagging failure to import status - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`50320ec`](https://github.com/karakeep-app/karakeep/commit/50320ecd) - fix: backfill old sessions and do queue backpressure ([#&#8203;2449](https://github.com/karakeep-app/karakeep/issues/2449)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e8e48a4`](https://github.com/karakeep-app/karakeep/commit/e8e48a41) - feat: Import workflow v3 ([#&#8203;2378](https://github.com/karakeep-app/karakeep/issues/2378)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3c838dd`](https://github.com/karakeep-app/karakeep/commit/3c838ddb) - feat: Add LLM-based OCR as alternative to Tesseract ([#&#8203;2442](https://github.com/karakeep-app/karakeep/issues/2442)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3fcccb8`](https://github.com/karakeep-app/karakeep/commit/3fcccb85) - feat: batch meilisearch requests ([#&#8203;2441](https://github.com/karakeep-app/karakeep/issues/2441)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`54243b8`](https://github.com/karakeep-app/karakeep/commit/54243b8c) - fix(mobile): migrate from RN image to expo-image - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e861880`](https://github.com/karakeep-app/karakeep/commit/e8618800) - feat(mobile): use native tabs for mobile - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`bf5c99c`](https://github.com/karakeep-app/karakeep/commit/bf5c99cb) - feat(mobile): add signup support to the mobile app - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`5cb7306`](https://github.com/karakeep-app/karakeep/commit/5cb73069) - fix: better looking error message when article content is unavailable - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`67501ed`](https://github.com/karakeep-app/karakeep/commit/67501ed6) - refactor: migrate trpc to the new react query integration mode ([#&#8203;2438](https://github.com/karakeep-app/karakeep/issues/2438)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`65f6e83`](https://github.com/karakeep-app/karakeep/commit/65f6e83f) - feat(mobile): show num bookmarks in the all lists view - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4bc1b90`](https://github.com/karakeep-app/karakeep/commit/4bc1b90f) - fix: use user's preferred language for manual summarization ([#&#8203;2429](https://github.com/karakeep-app/karakeep/issues/2429)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`95bfa56`](https://github.com/karakeep-app/karakeep/commit/95bfa569) - feat(cli): Add bookmark search command ([#&#8203;2426](https://github.com/karakeep-app/karakeep/issues/2426)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`42cdc93`](https://github.com/karakeep-app/karakeep/commit/42cdc937) - feat(search): add tag: alias for # and ! alias for negation ([#&#8203;2425](https://github.com/karakeep-app/karakeep/issues/2425)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`5656e39`](https://github.com/karakeep-app/karakeep/commit/5656e394) - feat(extension): autofocus on note open ([#&#8203;2366](https://github.com/karakeep-app/karakeep/issues/2366)) - [@&#8203;SnowSquire](https://github.com/SnowSquire) in [`bf2c6de`](https://github.com/karakeep-app/karakeep/commit/bf2c6ded) - feat: Add attachedBy field to update tags endpoint ([#&#8203;2281](https://github.com/karakeep-app/karakeep/issues/2281)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e09061b`](https://github.com/karakeep-app/karakeep/commit/e09061bd) - docker: add USE\_JEMALLOC env var and disable it by default - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`edf3f68`](https://github.com/karakeep-app/karakeep/commit/edf3f681) - docker: switch to jemalloc - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6535a5a`](https://github.com/karakeep-app/karakeep/commit/6535a5a2) - docker: move from alpine to debian - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b0036ef`](https://github.com/karakeep-app/karakeep/commit/b0036ef1) - feat: track api key usage dates - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7b5f632`](https://github.com/karakeep-app/karakeep/commit/7b5f6328) - deps(mobile): upgrade to sdk 54 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6094d36`](https://github.com/karakeep-app/karakeep/commit/6094d360) - feat(rules): add "Title Contains" condition to Rule Engine ([#&#8203;1670](https://github.com/karakeep-app/karakeep/issues/1670)) ([#&#8203;2354](https://github.com/karakeep-app/karakeep/issues/2354)) - [@&#8203;mokhovyk](https://github.com/mokhovyk) in [`c56cf4e`](https://github.com/karakeep-app/karakeep/commit/c56cf4e2) - fix(mobile): Reader settings preview on mobile matches reader view formatting ([#&#8203;2365](https://github.com/karakeep-app/karakeep/issues/2365)) - [@&#8203;esimkowitz](https://github.com/esimkowitz) in [`1b98014`](https://github.com/karakeep-app/karakeep/commit/1b98014d) - fix(web): avoid masonry overflow in bookmark grids ([#&#8203;2400](https://github.com/karakeep-app/karakeep/issues/2400)) - [@&#8203;evan6seven](https://github.com/evan6seven) in [`789188b`](https://github.com/karakeep-app/karakeep/commit/789188b5) - deps: upgrade react to 19.2.1 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`086b464`](https://github.com/karakeep-app/karakeep/commit/086b464d) - fix(mobile): add custom headers to card banners. fixes [#&#8203;2342](https://github.com/karakeep-app/karakeep/issues/2342) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b4dbc9c`](https://github.com/karakeep-app/karakeep/commit/b4dbc9ce) - feat: privacy-respecting bookmark debugger admin tool ([#&#8203;2373](https://github.com/karakeep-app/karakeep/issues/2373)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`0f9132b`](https://github.com/karakeep-app/karakeep/commit/0f9132b5) - fix: Accept more permissive RSS feed content types and Fix User-Agent key ([#&#8203;2353](https://github.com/karakeep-app/karakeep/issues/2353)) - [@&#8203;ElectricTea](https://github.com/ElectricTea) in [`0e938c1`](https://github.com/karakeep-app/karakeep/commit/0e938c14) - fix: harden the restate implementation ([#&#8203;2370](https://github.com/karakeep-app/karakeep/issues/2370)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f48e98e`](https://github.com/karakeep-app/karakeep/commit/f48e98e1) - fix: parallelize queue enqueues in bookmark routes - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4ba1475`](https://github.com/karakeep-app/karakeep/commit/4ba1475d) - feat: add openai service tier configuration option ([#&#8203;2339](https://github.com/karakeep-app/karakeep/issues/2339)) - [@&#8203;RobertRosca](https://github.com/RobertRosca) in [`aa7a81e`](https://github.com/karakeep-app/karakeep/commit/aa7a81e0) - fix: stop theme flashes with cloudflare rocket loader ([#&#8203;2340](https://github.com/karakeep-app/karakeep/issues/2340)) - [@&#8203;sweepies](https://github.com/sweepies) in [`2a6fe6e`](https://github.com/karakeep-app/karakeep/commit/2a6fe6e6) - feat: Add retry buttons for pending bookmarks in admin panel ([#&#8203;2341](https://github.com/karakeep-app/karakeep/issues/2341)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e195f40`](https://github.com/karakeep-app/karakeep/commit/e195f40b) - fix: Eliminate the O(n2) parsing of the netscape import parsing ([#&#8203;2338](https://github.com/karakeep-app/karakeep/issues/2338)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6fe2063`](https://github.com/karakeep-app/karakeep/commit/6fe20639) - feat(mobile): use react native sonner - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`016433d`](https://github.com/karakeep-app/karakeep/commit/016433d4) ### [`v0.30.0`](https://github.com/karakeep-app/karakeep/releases/tag/v0.30.0): 0.30.0 [Compare Source](https://github.com/karakeep-app/karakeep/compare/v0.29.3...v0.30.0) ### 0.30.0 (New year release 🎁) Welcome to the 0.30.0 release of Karakeep and happy new year! This release comes with "2025 wrapped" (a bit late), PDF archives, new reader settings, avatars, reddit crawling improvements, and more! Huge thanks to our contributors for this release [@&#8203;esimkowitz](https://github.com/esimkowitz), [@&#8203;Moondragon85](https://github.com/Moondragon85), [@&#8203;rzxczxc](https://github.com/rzxczxc), [@&#8203;colado](https://github.com/colado), [@&#8203;Yeraze](https://github.com/Yeraze), [@&#8203;eriktews](https://github.com/eriktews) and everyone who shipped code, triaged bugs, or shared feedback for this release. > If you enjoy using Karakeep, consider supporting the project [here ☕️](https://buymeacoffee.com/mbassem) or via GitHub [here](https://github.com/sponsors/MohamedBassem). <a href="https://www.buymeacoffee.com/mbassem" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" width="auto" height="50" ></a> And in case you missed it, we now have a ☁️ managed offering ☁️ for those who don't want to self-host. We're in public beta now and you can signup [here](https://cloud.karakeep.app) 🎉. ### New Features 🚀 - 2025 Wrapped is here to celebrate your year in Karakeep ([#&#8203;2322](https://github.com/karakeep-app/karakeep/issues/2322)). - PDF archives - Archive bookmarks as PDFs, generated automatically during crawling or on-demand ([#&#8203;2309](https://github.com/karakeep-app/karakeep/issues/2309)). - Set `CRAWLER_STORE_PDF=true` to enable auto PDF archiving. - Unified reader settings (font, size, etc) across all devices with per-device overrides ([#&#8203;2230](https://github.com/karakeep-app/karakeep/issues/2230)). By [@&#8203;esimkowitz](https://github.com/esimkowitz)! - Better metadata extraction: - Reddit posts should now be crawled correctly, and banners should be fetched more reliably. - Fixed YouTube thumbnail and author extraction. - Fixed Amazon product image extraction (where it was sometimes showing the prime logo) ([#&#8203;2204](https://github.com/karakeep-app/karakeep/issues/2204), [#&#8203;2108](https://github.com/karakeep-app/karakeep/issues/2108)). By [@&#8203;Yeraze](https://github.com/Yeraze) - Upload custom user avatars for more personal profiles ([#&#8203;2296](https://github.com/karakeep-app/karakeep/issues/2296)). - AI Setting customization: - Customize tag styling (case, separators, language) per user. It's highly recommended to set the tag style for more consistent tags ([#&#8203;2312](https://github.com/karakeep-app/karakeep/issues/2312)). - Per-user toggles to disable auto-tagging and/or auto-summarization ([#&#8203;2275](https://github.com/karakeep-app/karakeep/issues/2275)). - Others: - Import libraries from Matter with full export support ([#&#8203;2245](https://github.com/karakeep-app/karakeep/issues/2245)). By [@&#8203;Moondragon85](https://github.com/Moondragon85) - Bulk remove bookmarks from lists ([#&#8203;2279](https://github.com/karakeep-app/karakeep/issues/2279)). - Add a new rule condition to rule engine: "URL Does Not Contain" ([#&#8203;2280](https://github.com/karakeep-app/karakeep/issues/2280)). - Configure an OpenAI proxy via `OPENAI_PROXY_URL` ([#&#8203;2231](https://github.com/karakeep-app/karakeep/issues/2231)). By [@&#8203;rzxczxc](https://github.com/rzxczxc) - Added `is:broken` search qualifier to show links that failed crawling ([#&#8203;2225](https://github.com/karakeep-app/karakeep/issues/2225)). - Edit list now in the mobile app ([#&#8203;2310](https://github.com/karakeep-app/karakeep/issues/2310)). By [@&#8203;colado](https://github.com/colado) ### UX Improvements ✨ - Our docs got a facelift! The docs got some styling, the pages got re-organized and we now have a "Using Karakeep" section that explains some of the core concepts of Karakeep. - Replace bookmark banners and download attachments directly from the drop down menu ([#&#8203;2328](https://github.com/karakeep-app/karakeep/issues/2328)). - Sidebar scrollbar looks cleaner, and pending list invites show as a badge in the sidebar. - Bookmark edit dialog now includes notes. - Bookmark owner avatars now show up in collaborative lists. - Mobile UI/UX improvements: - Fixed title on mobile to be at most 2 lines long. - Mobile settings screens should now feel more native ([#&#8203;2307](https://github.com/karakeep-app/karakeep/issues/2307)). - OLED-friendly colors in the Android app matching the colors of the ios app ([#&#8203;1958](https://github.com/karakeep-app/karakeep/issues/1958)). - Toasts on iOS now appear correctly above the open modals ([#&#8203;2320](https://github.com/karakeep-app/karakeep/issues/2320)). By [@&#8203;colado](https://github.com/colado) - Shared lists now appear in a dedicated subsection on mobile. - Adding a bookmark to a list now shows a spinner during loading ([#&#8203;2283](https://github.com/karakeep-app/karakeep/issues/2283)). - Server version now appears in mobile settings ([#&#8203;2276](https://github.com/karakeep-app/karakeep/issues/2276)). - Fixed the confusing "tick button" beside the server address during login. ### Fixes 🔧 - Fixed missing db indicies that was causing slow bookmark queries ([#&#8203;2246](https://github.com/karakeep-app/karakeep/issues/2246), [#&#8203;2287](https://github.com/karakeep-app/karakeep/issues/2287)). - Improved Ollama summaries by using the generate endpoint ([#&#8203;2324](https://github.com/karakeep-app/karakeep/issues/2324)). By [@&#8203;eriktews](https://github.com/eriktews) - Fixed HTML bookmark imports failing on empty folder names ([#&#8203;2300](https://github.com/karakeep-app/karakeep/issues/2300)). - Fixed non-link bookmarks stuck in pending summarization ([#&#8203;1605](https://github.com/karakeep-app/karakeep/issues/1605)). - Improved tagging prompts and error-page detection. - Reject spoofed content types on file uploads. - Preserve failure counts when rescheduling rate-limited domains ([#&#8203;2303](https://github.com/karakeep-app/karakeep/issues/2303)). - Fixed duplicate backdrop buttons in reader view ([#&#8203;2234](https://github.com/karakeep-app/karakeep/issues/2234)). By [@&#8203;colado](https://github.com/colado) - RSS feed fetching is now spread over the hour ([#&#8203;2227](https://github.com/karakeep-app/karakeep/issues/2227)). - Asset preprocessing worker timeout is now configurable ([`91784cd`](https://github.com/karakeep-app/karakeep/commit/91784cd2)). - Fixed bypassing email verification in apiKey.exchange. - Added limits on number of rss feeds and webhooks per user configurable by admins. - Fixed a bug where failed crawling leave bookmarks as pending tagging in the admin dashboard. ### For Developers 🛠️ - OpenTelemetry integration with OTLP exporter ([#&#8203;2318](https://github.com/karakeep-app/karakeep/issues/2318), [#&#8203;2321](https://github.com/karakeep-app/karakeep/issues/2321)). - CLI can list users for admins. - We're now defaulting to Node.js 24 (the current LTS). - Breaking: In bookmark APIs `includeContent` now defaults to `false`. This change was announced a couple months ago, and is taking effect in this release. ### Community Projects 💡 - Karakeep integration for Home Assistant ([#&#8203;2196](https://github.com/karakeep-app/karakeep/issues/2196)) by [@&#8203;sli-cka](https://github.com/sli-cka). Get it from [here](https://github.com/sli-cka/karakeep-homeassistant). ### Screenshots 📸 #### Wrapped 2025 ![karakeep-wrapped-2025](https://github.com/user-attachments/assets/0e1e3d25-c827-4974-8f0a-9b7b4a75f859) #### Reader Settings ![https://github.com/user-attachments/assets/4d81cb80-f9b8-43f2-998a-736f18e33038](https://github.com/user-attachments/assets/4d81cb80-f9b8-43f2-998a-736f18e33038). ##### AI Settings ![https://github.com/user-attachments/assets/48032bf6-5413-44ee-9c3b-ac7b385aeccf](https://github.com/user-attachments/assets/48032bf6-5413-44ee-9c3b-ac7b385aeccf) ### Upgrading 📦 To upgrade: - If you're using `KARAKEEP_VERSION=release`, run `docker compose pull && docker compose up -d`. - If you're pinning it to a specific version, bump the version and then run `docker compose pull && docker compose up -d`. ### All Commits - i18n: fix en\_US translation - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d472a3a`](https://github.com/karakeep-app/karakeep/commit/d472a3a1) - fix: fix wrapped feature to only show bookmarks in 2025 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4077e28`](https://github.com/karakeep-app/karakeep/commit/4077e286) - i18n: Sync weblate translations - Weblate in [`401ea6a`](https://github.com/karakeep-app/karakeep/commit/401ea6a9) - chore: drop the experimental tag from the rule engine - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`bf9d610`](https://github.com/karakeep-app/karakeep/commit/bf9d6105) - fix: show a toast during banner upload - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9555f40`](https://github.com/karakeep-app/karakeep/commit/9555f409) - fix: don't switch the bookmark back to pending on recrawl - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`79400d0`](https://github.com/karakeep-app/karakeep/commit/79400d04) - fix: use the Ollama generate endpoint instead of chat ([#&#8203;2324](https://github.com/karakeep-app/karakeep/issues/2324)) - [@&#8203;eriktews](https://github.com/eriktews) in [`e8c79f2`](https://github.com/karakeep-app/karakeep/commit/e8c79f29) - feat: add replace banner and attachment download ([#&#8203;2328](https://github.com/karakeep-app/karakeep/issues/2328)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3d652ee`](https://github.com/karakeep-app/karakeep/commit/3d652eee) - feat: Add bulk remove from list ([#&#8203;2279](https://github.com/karakeep-app/karakeep/issues/2279)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7a76216`](https://github.com/karakeep-app/karakeep/commit/7a76216e) - feat: add "URL Does Not Contain" condition to rule engine ([#&#8203;2280](https://github.com/karakeep-app/karakeep/issues/2280)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b20ba9c`](https://github.com/karakeep-app/karakeep/commit/b20ba9cf) - feat: 2025 wrapped ([#&#8203;2322](https://github.com/karakeep-app/karakeep/issues/2322)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`a0b4a26`](https://github.com/karakeep-app/karakeep/commit/a0b4a26a) - chore: worker tracing ([#&#8203;2321](https://github.com/karakeep-app/karakeep/issues/2321)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7ab7db8`](https://github.com/karakeep-app/karakeep/commit/7ab7db8e) - feat(landing): add corporate pricing - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d852ee1`](https://github.com/karakeep-app/karakeep/commit/d852ee1a) - fix(mobile): mobile modal UI issues ([#&#8203;2320](https://github.com/karakeep-app/karakeep/issues/2320)) - [@&#8203;colado](https://github.com/colado) in [`a43d375`](https://github.com/karakeep-app/karakeep/commit/a43d375f) - ci: fix tests - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9d6b128`](https://github.com/karakeep-app/karakeep/commit/9d6b1282) - feat: change default for tag style to be title case with spaces - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9098a5a`](https://github.com/karakeep-app/karakeep/commit/9098a5a6) - fix: more tagging tweaks - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c1cbaa8`](https://github.com/karakeep-app/karakeep/commit/c1cbaa8a) - build: fix broken CI - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`a5ce977`](https://github.com/karakeep-app/karakeep/commit/a5ce977d) - fix: change prompt to better recognize error pages - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f5a5c14`](https://github.com/karakeep-app/karakeep/commit/f5a5c14e) - refactor: reduce duplication in compare-models tool - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f00287e`](https://github.com/karakeep-app/karakeep/commit/f00287ed) - chore: add tracing for email functions - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ba8d84a`](https://github.com/karakeep-app/karakeep/commit/ba8d84a5) - feat(mobile): create new list edit screen ([#&#8203;2310](https://github.com/karakeep-app/karakeep/issues/2310)) - [@&#8203;colado](https://github.com/colado) in [`30fa06f`](https://github.com/karakeep-app/karakeep/commit/30fa06fe) - feat: Add open telemetry ([#&#8203;2318](https://github.com/karakeep-app/karakeep/issues/2318)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`5537fe8`](https://github.com/karakeep-app/karakeep/commit/5537fe85) - fix: reset tagging status on crawl failure ([#&#8203;2316](https://github.com/karakeep-app/karakeep/issues/2316)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f7920bd`](https://github.com/karakeep-app/karakeep/commit/f7920bdc) - feat: add the ability to specify a different changelog version - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1082076`](https://github.com/karakeep-app/karakeep/commit/10820761) - fix: remove duplicate mobile backdrop button in reader view ([#&#8203;2234](https://github.com/karakeep-app/karakeep/issues/2234)) - [@&#8203;esimkowitz](https://github.com/esimkowitz) in [`3f44e31`](https://github.com/karakeep-app/karakeep/commit/3f44e319) - fix(landing): fix cloud banner on mobile - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`23f2853`](https://github.com/karakeep-app/karakeep/commit/23f28530) - refactor: add suspense boundary in sidebar layout - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3c3d868`](https://github.com/karakeep-app/karakeep/commit/3c3d8685) - feat(mobile): make the settings menu look more native ([#&#8203;2307](https://github.com/karakeep-app/karakeep/issues/2307)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6ee48ff`](https://github.com/karakeep-app/karakeep/commit/6ee48ffb) - feat(web): better looking scrollbar in the sidebar - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f7523a2`](https://github.com/karakeep-app/karakeep/commit/f7523a21) - feat(mobile): use oled friendly colors for android app. fixes [#&#8203;1958](https://github.com/karakeep-app/karakeep/issues/1958) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e800d74`](https://github.com/karakeep-app/karakeep/commit/e800d744) - refactor: migrate toasts to sonner - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`173fb99`](https://github.com/karakeep-app/karakeep/commit/173fb99a) - feat: add customizable tag styles ([#&#8203;2312](https://github.com/karakeep-app/karakeep/issues/2312)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`af3010a`](https://github.com/karakeep-app/karakeep/commit/af3010ab) - feat: add Matter import support ([#&#8203;2245](https://github.com/karakeep-app/karakeep/issues/2245)) - [@&#8203;Moondragon85](https://github.com/Moondragon85) in [`93630ce`](https://github.com/karakeep-app/karakeep/commit/93630ce8) - feat: support archiving as pdf ([#&#8203;2309](https://github.com/karakeep-app/karakeep/issues/2309)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`267db79`](https://github.com/karakeep-app/karakeep/commit/267db791) - feat: add OPENAI\_PROXY\_URL configuration and support for proxy in OpenAI client ([#&#8203;2231](https://github.com/karakeep-app/karakeep/issues/2231)) - [@&#8203;rzxczxc](https://github.com/rzxczxc) in [`bb6b742`](https://github.com/karakeep-app/karakeep/commit/bb6b742a) - fix(tests): fix the asset upload tests - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e82694d`](https://github.com/karakeep-app/karakeep/commit/e82694de) - fix: reject spoofed content types on uploads - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`2dbdf76`](https://github.com/karakeep-app/karakeep/commit/2dbdf76c) - deps: upgrade tesseract to v7 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`347793a`](https://github.com/karakeep-app/karakeep/commit/347793ad) - feat(landing): announce cloud public beta in landing page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c3b2326`](https://github.com/karakeep-app/karakeep/commit/c3b2326c) - chore: add a tool for comparing perf of different models - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1dfa5d1`](https://github.com/karakeep-app/karakeep/commit/1dfa5d12) - feat: add notes to the bookmark edit dialog - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ecb7a71`](https://github.com/karakeep-app/karakeep/commit/ecb7a710) - fix(restate): change journal retention for services to 3d - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`0efffdc`](https://github.com/karakeep-app/karakeep/commit/0efffdcc) - fix(cli): migrate bookmark source in migration command - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`65cfa87`](https://github.com/karakeep-app/karakeep/commit/65cfa871) - fix: preserve failure count when rescheduling rate limited domains ([#&#8203;2303](https://github.com/karakeep-app/karakeep/issues/2303)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ddd4b57`](https://github.com/karakeep-app/karakeep/commit/ddd4b578) - feat: show bookmark owner icon in shared lists ([#&#8203;2277](https://github.com/karakeep-app/karakeep/issues/2277)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ef27670`](https://github.com/karakeep-app/karakeep/commit/ef27670f) - fix: make avatars public - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f7d3462`](https://github.com/karakeep-app/karakeep/commit/f7d34627) - refactor: move assets to their own model ([#&#8203;2301](https://github.com/karakeep-app/karakeep/issues/2301)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`013ca67`](https://github.com/karakeep-app/karakeep/commit/013ca67c) - feat: add support for user avatars ([#&#8203;2296](https://github.com/karakeep-app/karakeep/issues/2296)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`314c363`](https://github.com/karakeep-app/karakeep/commit/314c363e) - fix: handle empty folder names in HTML bookmark imports ([#&#8203;2300](https://github.com/karakeep-app/karakeep/issues/2300)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3408e6e`](https://github.com/karakeep-app/karakeep/commit/3408e6e4) - feat: add a warning about viewing archives inline. fixes [#&#8203;2286](https://github.com/karakeep-app/karakeep/issues/2286) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e336513`](https://github.com/karakeep-app/karakeep/commit/e336513f) - fix(tests): fix the user setting tests - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`258bebe`](https://github.com/karakeep-app/karakeep/commit/258bebe0) - feat: Add user settings to disable auto tagging/summarization ([#&#8203;2275](https://github.com/karakeep-app/karakeep/issues/2275)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`0bdba54`](https://github.com/karakeep-app/karakeep/commit/0bdba54b) - feat(mobile): Convert server address editing to modal in mobile app ([#&#8203;2290](https://github.com/karakeep-app/karakeep/issues/2290)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ece68ed`](https://github.com/karakeep-app/karakeep/commit/ece68ed0) - fix: check quota usage instead bookmark transaction - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ca4bfa4`](https://github.com/karakeep-app/karakeep/commit/ca4bfa4c) - fix: optimize tagging db queries ([#&#8203;2287](https://github.com/karakeep-app/karakeep/issues/2287)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e18dc4c`](https://github.com/karakeep-app/karakeep/commit/e18dc4c9) - docs: shuffle some docs around - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4762da1`](https://github.com/karakeep-app/karakeep/commit/4762da12) - docs: add RSS feeds integration documentation ([#&#8203;2288](https://github.com/karakeep-app/karakeep/issues/2288)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`903aa5e`](https://github.com/karakeep-app/karakeep/commit/903aa5e9) - feat(restate): Add a var to control whether to expose core services or not - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`dc8ab86`](https://github.com/karakeep-app/karakeep/commit/dc8ab862) - feat: add more restate semaphore controls - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`58eb6c0`](https://github.com/karakeep-app/karakeep/commit/58eb6c00) - feat(mobile): Show shared lists under a subsection - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`837dea5`](https://github.com/karakeep-app/karakeep/commit/837dea5e) - fix(mobile): Fix title line clamp to 2 lines - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`15cfa13`](https://github.com/karakeep-app/karakeep/commit/15cfa137) - fix(mobile): Add loading spinner to mobile list button ([#&#8203;2283](https://github.com/karakeep-app/karakeep/issues/2283)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7b98c52`](https://github.com/karakeep-app/karakeep/commit/7b98c52a) - feat: add server version display to mobile app settings ([#&#8203;2276](https://github.com/karakeep-app/karakeep/issues/2276)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`bd969b3`](https://github.com/karakeep-app/karakeep/commit/bd969b34) - fix: add authentication checks to settings layout ([#&#8203;2274](https://github.com/karakeep-app/karakeep/issues/2274)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e53f3ae`](https://github.com/karakeep-app/karakeep/commit/e53f3ae5) - fix: only trigger search autocomplete on first search char - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`92e352f`](https://github.com/karakeep-app/karakeep/commit/92e352f3) - feat(landing): remove waitlist link. fixes [#&#8203;2270](https://github.com/karakeep-app/karakeep/issues/2270) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e842c5a`](https://github.com/karakeep-app/karakeep/commit/e842c5a7) - fix: don't fail the script if the user karakeep already exists. fixes [#&#8203;2242](https://github.com/karakeep-app/karakeep/issues/2242) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e78e512`](https://github.com/karakeep-app/karakeep/commit/e78e5129) - fix: collapse reader settings by default - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3955f91`](https://github.com/karakeep-app/karakeep/commit/3955f91a) - docs: Add icons beside category names - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9021822`](https://github.com/karakeep-app/karakeep/commit/9021822a) - Revert "fix: fix restate service to return control to restate service on timeout" - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`510174d`](https://github.com/karakeep-app/karakeep/commit/510174db) - feat: Add unified reader settings with local overrides ([#&#8203;2230](https://github.com/karakeep-app/karakeep/issues/2230)) - [@&#8203;esimkowitz](https://github.com/esimkowitz) in [`7f4202a`](https://github.com/karakeep-app/karakeep/commit/7f4202af) - fix: fix restate service to return control to restate service on timeout - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6db14ac`](https://github.com/karakeep-app/karakeep/commit/6db14ac4) - fix: non-link bookmarks where stuck in pending summarization. Fixes [#&#8203;1605](https://github.com/karakeep-app/karakeep/issues/1605) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d735711`](https://github.com/karakeep-app/karakeep/commit/d7357118) - fix: move trpc error logging inside the dev check - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`0b65e5a`](https://github.com/karakeep-app/karakeep/commit/0b65e5a4) - fix: Fix Amazon product image extraction on amazon.com URLs ([#&#8203;2108](https://github.com/karakeep-app/karakeep/issues/2108)) - [@&#8203;Yeraze](https://github.com/Yeraze) in [`b319635`](https://github.com/karakeep-app/karakeep/commit/b3196354) - feat: use reddit API for metadata extraction. Fixes [#&#8203;1853](https://github.com/karakeep-app/karakeep/issues/1853) [#&#8203;1883](https://github.com/karakeep-app/karakeep/issues/1883) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f5c32d9`](https://github.com/karakeep-app/karakeep/commit/f5c32d94) - fix: use GET requests for the content type request - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d6dd8eb`](https://github.com/karakeep-app/karakeep/commit/d6dd8ebd) - docs: fix sidebar on mobile - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f111cba`](https://github.com/karakeep-app/karakeep/commit/f111cba9) - feat: Add limits on number of rss feeds and webhooks per user - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`74df8bd`](https://github.com/karakeep-app/karakeep/commit/74df8bd7) - release(cli): Bump CLI version to 0.29.1 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`697c853`](https://github.com/karakeep-app/karakeep/commit/697c853a) - readme: some readme updates - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1ebc721`](https://github.com/karakeep-app/karakeep/commit/1ebc721c) - docs: Update screenshots in docs - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c6cf418`](https://github.com/karakeep-app/karakeep/commit/c6cf4188) - docs: Adding user guides - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`04b9c29`](https://github.com/karakeep-app/karakeep/commit/04b9c291) - docs: drop docs for old versions - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`fecb007`](https://github.com/karakeep-app/karakeep/commit/fecb0079) - docs: restructure the docs - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`af69f63`](https://github.com/karakeep-app/karakeep/commit/af69f637) - docs: restyle the docs - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b434440`](https://github.com/karakeep-app/karakeep/commit/b4344401) - ci: run CI with node 24 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`2bdba53`](https://github.com/karakeep-app/karakeep/commit/2bdba536) - deps: Upgrade to nodejs 24 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`480abce`](https://github.com/karakeep-app/karakeep/commit/480abce4) - fix!: changing default for includeContent to be false in the API - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1369ad0`](https://github.com/karakeep-app/karakeep/commit/1369ad01) - deps: Upgrade nextjs to 15.3.8 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`80278ec`](https://github.com/karakeep-app/karakeep/commit/80278ecf) - deps: Upgrade nextjs to 15.3.7 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`74bdc18`](https://github.com/karakeep-app/karakeep/commit/74bdc186) - fix: add more indicies for faster bookmark queries ([#&#8203;2246](https://github.com/karakeep-app/karakeep/issues/2246)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`683083f`](https://github.com/karakeep-app/karakeep/commit/683083f4) - feat: make asset preprocessing worker timeout configurable - [@&#8203;Claude](https://github.com/Claude) in [`91784cd`](https://github.com/karakeep-app/karakeep/commit/91784cd2) - fix: Add cache control header on asset endpoints - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3e8cc74`](https://github.com/karakeep-app/karakeep/commit/3e8cc745) - chore: Allowing multi user benchmarks and adding more coverage - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`265b677`](https://github.com/karakeep-app/karakeep/commit/265b6773) - feat(cli): Add ability to list users for the admin in the CLI - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`69a756a`](https://github.com/karakeep-app/karakeep/commit/69a756aa) - fix: fix correctly accounting for text bookmark in import sessions. [#&#8203;2208](https://github.com/karakeep-app/karakeep/issues/2208) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6886385`](https://github.com/karakeep-app/karakeep/commit/6886385c) - fix: check import quota before importing bookmarks ([#&#8203;2232](https://github.com/karakeep-app/karakeep/issues/2232)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`20d3761`](https://github.com/karakeep-app/karakeep/commit/20d3761c) - build: fix typecheck error in query explainer - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b6c2dad`](https://github.com/karakeep-app/karakeep/commit/b6c2dadd) - fix: migrate to metascraper-x from metascraper-twitter - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c6f93b3`](https://github.com/karakeep-app/karakeep/commit/c6f93b3b) - feat: add is:broken search qualifier for broken links ([#&#8203;2225](https://github.com/karakeep-app/karakeep/issues/2225)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1f43f23`](https://github.com/karakeep-app/karakeep/commit/1f43f232) - feat: spread feed fetch scheduling deterministically over the hour ([#&#8203;2227](https://github.com/karakeep-app/karakeep/issues/2227)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`13a090c`](https://github.com/karakeep-app/karakeep/commit/13a090c4) - fix: better extraction for youtube thumbnails. [#&#8203;2204](https://github.com/karakeep-app/karakeep/issues/2204) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e3cc546`](https://github.com/karakeep-app/karakeep/commit/e3cc5463) - fix: remove queue triggers outside of updateTags transaction - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`cf2a12c`](https://github.com/karakeep-app/karakeep/commit/cf2a12c8) - chore: add benchmarks ([#&#8203;2229](https://github.com/karakeep-app/karakeep/issues/2229)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6180c66`](https://github.com/karakeep-app/karakeep/commit/6180c662) - build: dont update latest tags on release - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`de98873`](https://github.com/karakeep-app/karakeep/commit/de98873a) - deps: Upgrade nextjs to 15.3.6 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`20081a3`](https://github.com/karakeep-app/karakeep/commit/20081a3a) - feat: add a notification badge for list invitations - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3c6b8e9`](https://github.com/karakeep-app/karakeep/commit/3c6b8e97) - docs: add karakeep integration for Home Assistant ([#&#8203;2196](https://github.com/karakeep-app/karakeep/issues/2196)) - [@&#8203;sli-cka](https://github.com/sli-cka) in [`9a33938`](https://github.com/karakeep-app/karakeep/commit/9a339385) - fix: regen turnstile token on signup resubmission - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9257b53`](https://github.com/karakeep-app/karakeep/commit/9257b534) - feat(landing): Add more features to the homepage - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9a6d36f`](https://github.com/karakeep-app/karakeep/commit/9a6d36f2) - ci: run arm docker image builds on arm machines - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`3421246`](https://github.com/karakeep-app/karakeep/commit/3421246d) - ci: parallelize the docker workflow for platforms - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`2e88961`](https://github.com/karakeep-app/karakeep/commit/2e889617) - fix: reenable idempotency key for search indexing - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`2ef751e`](https://github.com/karakeep-app/karakeep/commit/2ef751ef) - fix: fix bypass email verification in apiKey.exchange - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e4f434e`](https://github.com/karakeep-app/karakeep/commit/e4f434e7) - readme: add collaborative lists to the list of features - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d6d319d`](https://github.com/karakeep-app/karakeep/commit/d6d319d3) - fix: Add restate queued idempotency ([#&#8203;2169](https://github.com/karakeep-app/karakeep/issues/2169)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`a71b950`](https://github.com/karakeep-app/karakeep/commit/a71b9505) - feat: add support for turnstile on signup - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b12c1c3`](https://github.com/karakeep-app/karakeep/commit/b12c1c3a) - build: fix npm trusted publishing - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4898b6b`](https://github.com/karakeep-app/karakeep/commit/4898b6be) - release: cli, mcp and sdk - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`28d6750`](https://github.com/karakeep-app/karakeep/commit/28d6750e) - release(extension): Release version 1.2.8 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`fdea086`](https://github.com/karakeep-app/karakeep/commit/fdea0861) - release(mobile): Bump mobile version to 1.8.3 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`8da5b59`](https://github.com/karakeep-app/karakeep/commit/8da5b598) - release(docs): release the 0.29 docs - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`97c386a`](https://github.com/karakeep-app/karakeep/commit/97c386a4) ### [`v0.29.3`](https://github.com/karakeep-app/karakeep/releases/tag/v0.29.3): 0.29.3 [Compare Source](https://github.com/karakeep-app/karakeep/compare/v0.29.2...v0.29.3) Well. Upgrading Nextjs one more time to patch CVE-2025-67779. ### [`v0.29.2`](https://github.com/karakeep-app/karakeep/releases/tag/v0.29.2): 0.29.2 [Compare Source](https://github.com/karakeep-app/karakeep/compare/v0.29.1...v0.29.2) Upgrading Nextjs to patch two new vulnerabilities in react CVE-2025-55184 & CVE-2025-55183. This is on top of the critical vulnerability (CVE-2025-66478) that was patched in 0.29.1. </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "on the first day of the month" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNC45IiwidXBkYXRlZEluVmVyIjoiNDQuMTQuOSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19-->
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin renovate/ghcr.io-karakeep-app-karakeep-0.x:renovate/ghcr.io-karakeep-app-karakeep-0.x
git switch renovate/ghcr.io-karakeep-app-karakeep-0.x

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch main
git merge --no-ff renovate/ghcr.io-karakeep-app-karakeep-0.x
git switch renovate/ghcr.io-karakeep-app-karakeep-0.x
git rebase main
git switch main
git merge --ff-only renovate/ghcr.io-karakeep-app-karakeep-0.x
git switch renovate/ghcr.io-karakeep-app-karakeep-0.x
git rebase main
git switch main
git merge --no-ff renovate/ghcr.io-karakeep-app-karakeep-0.x
git switch main
git merge --squash renovate/ghcr.io-karakeep-app-karakeep-0.x
git switch main
git merge --ff-only renovate/ghcr.io-karakeep-app-karakeep-0.x
git switch main
git merge renovate/ghcr.io-karakeep-app-karakeep-0.x
git push origin main
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sophie/homelab!36
No description provided.