0.27.0
Welcome to the 0.27.0 release of Karakeep! This release brings website-aware previews, cookies support, redesigned background jobs page, and a lot of fixes and cleanups that accumulated over the past 1.5 months. Huge thanks to our contributors in this release:
@Ahmed-Abdel-karim, @qixing-jk, @youenchene, @Drashi, @thiswillbeyourgithub, @xuatz, @haappi, @CrazyWolf13, @landonepps, @dvdpearson, @vivienbcr, @yinan-c, @packetmonkey, @liCells and
everyone who reported issues and tested changes!
If you enjoy using Karakeep, consider supporting the project here ☕️ or via GitHub here.
And in case you missed it from the last release, we now have a ☁️ managed offering ☁️ for those who don't want to self-host. We're still in private beta (you can signup for access here) and gradually letting more and more users in.
New Features 🚀
- [Experimental] Karakeep now detects specific websites and renders a customized cards for them. We're starting with 4 special renders (and are accepting contributions for more):
- X (twitter): Now shows a tweet embed by default.
- Amazon: A card that shows the product.
- Youtube: Renders a youtube embed (i.e. a player) by default.
- Tiktok: Renders a tiktok embed (i.e. a player) by default.
- If you want to see more websites supported, don't hesitate to send PRs. This is meant to evolve into karakeep understanding the different bookmark types (e.g. products, articles, etc) and showing more specialized cards for each type.
- Background Jobs page got a complete redesign to better explain the different jobs (#1551)
- Cookie support for crawling login-protected sites (#1664 by @liCells)
- You can now pass a list of cookies for karakeep to use while crawling to access session-protected websites. Checkout the documentation of
BROWSER_COOKIE_PATH
here. - Note: This is an advanced feature. Cookies are extremely sensitive. Make sure you're handling them carefully. Also note that the cookies that you set are going to be shared with all the users in your instance. SingleFile remains the recommended way for accessing login-protected websites.
- You can now pass a list of cookies for karakeep to use while crawling to access session-protected websites. Checkout the documentation of
- GIF asset support (#1876 by @Drashi)
- Updated default chrome container to v124, make sure to update yours as well.
UX Improvements ✨
- Browser Extension:
- Theme selection and theme-adapting icon support (#1894 by @qixing-jk)
- Constrain height of list and tag selectors to prevent viewport overflow (#1895 by @qixing-jk)
- Both will come in the next extension release (aka soon).
- Mobile:
- Render author, publisher, and publish date in bookmark view
- Configurable number of grid columns in the bookmark grid (#1713)
- Show loading indicator while the karakeep export is being generated (#1787/#1870 by @Ahmed-Abdel-karim)
- Hide AI settings tab if inference isn’t configured (#1781)
- Render human tags before AI tags (#1740 by @haappi)
- Preserve selected bookmark preview section in link preview via query params
- Hide bookmark actions from the navbar when no bookmark grid is shown
- Dark mode titles fixed for public lists
- Render AI summary in Markdown (#1869 by @youenchene)
- Bookmark skeleton while search results are loading
Fixes 🔧
- [Security] CSP policies on asset-serving paths
- Speed improvements:
- Avoid prefetching assets and tags which should make the tags page loading smoother
- Fixed a big (accidental) performance bottleneck in the API endpoints caused by API key validation. Re-login in your mobile app (and regenerate your API keys if you use any) for a significantly noticeable speed improvement.
- Queue DB respects configured WAL mode
- This fixes issues of slow imports and frequent locked databases
- Enabling WAL is highly advisable
- fix search query getting rest when bookmark preview is closed
- Handle lists with slashes during imports and truncate long list names for more resilient imports
- Don’t mark inference job as failed when content is missing (#1666)
- fix WebView deceleration rate on iOS (#1835 by @landonepps)
- Fix PDF detection when Content-Type includes charset (#1677)
- Rule engine: deleting an action now doesn't auto-save (#1858)
- Fix feed worker to use proxy when it's configured
- Web UI will poll for longer (incrementally) as bookmarks are being fetched.
- Fixed an issue with using SingleFile with S3 caused by unaccepted chars in filenames (#1765)
- fix admin API route to be under /v1
- fixed assets incorrectly marked as pending summarization
- Add max output tokens env variable to control the max allowed number of tokens returned by the LLM (to control the costs).
For Developers 🛠️
- Prometheus:
- Workers now also export prometheus metrics. You need to enable the metrics endpoint and the port to crawl them.
- Trpc latency was switched to histograms
karakeep_
prefix was added to all exported metrics (by @CrazyWolf13), you'll need to update your dashboards.
- Enable/disable specific workers via env variables
- You can now upload video attachments to bookmarks from the API (#1847 by @packetmonkey)
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
.
Also upgrade your chrome
container to 124
if you have it pinned.
All Commits
- i18n: Sync weblate translations - Weblate in d06c85d
- fix: fix tag flicker caused by tag sorting - @MohamedBassem in d623abd
- chore: Update the agent files - @MohamedBassem in 8e95dae
- feat: Show loading indicator while file is being generated #1787 (#1870) - @Ahmed-Abdel-karim in 9aa609e
- feat: Add cookie support for browser page access - @liCells in c57fd51
- feat(workers): add worker enable/disable lists (#1885) - @MohamedBassem in 492b152
- fix(extension): constrain height to prevent viewport overflow (#1580) (#1895) - @qixing-jk in 4cc8624
- feat(extension): Add theme and dynamic icon support (#1894) - @qixing-jk in 44bc838
- deps: Upgrade the extension deps - @MohamedBassem in 4362663
- fix: fix assets being marked as pending summarization - @MohamedBassem in 14db7ae
- readme: Add floccus support to readme and docs - @MohamedBassem in 67c394e
- docs: readme mentions importers + enhancements (#1448) - @thiswillbeyourgithub in 1976c53
- feat(web): render AI summary in markdown (#1869) - @youenchene in 9dd93f8
- feat: add gif asset type support (#1876) - @Drashi in 0994814
- fix: don't mark inferenace job as failed when there's no content. fixes #1666 - @MohamedBassem in 5f87054
- fix: fix pdf detection when the header contains charset. fix: #1677 - @MohamedBassem in 517e0c1
- fix(web): Fix deleting the action in the rule engine auto saves. fixes #1858 - @MohamedBassem in 03f10c7
- fix: Fix feed worker to fetch feeds with proxy - @MohamedBassem in 03f7cc1
- fix: Change the inferance working logging when disabled to be a debug log level - @MohamedBassem in 767c083
- fix: Dont attempt to fetch rss if the user if out of quota - @MohamedBassem in a0dd73f
- refactor: Extract quota logic into its own class - @MohamedBassem in 3760d23
- fix: Reduce polling interval on meilisearch tasks - @MohamedBassem in fcfe6a5
- fix: Don't enqueue video tasks when video downlaod is disabled - @MohamedBassem in 80a1023
- fix(landing): fixed typo in FAQ (#1893) - @midhun3301 in 473845a
- fix: Incremental polling interval for ongoing crawls - @MohamedBassem in 18c1d15
- refactor: Move highlights object into models - @MohamedBassem in ac4e4fa
- refactor: Move feed object into models - @MohamedBassem in 15efda6
- release(mobile): Bump mobile version to 1.8.0 - @MohamedBassem in ce9a006
- fix(mobile): Use uncontrolled inputs for signin page - @MohamedBassem in c706469
- feat(mobile): Add a default server address during signin - @MohamedBassem in 1a4e88a
- deps: Drop ronionoss icons - @MohamedBassem in e7c9f39
- fix(mobile): Fix text bookmark editor - @MohamedBassem in be7311a
- fix(mobile): Disable the save button when bookmark is being saved - @MohamedBassem in 1e0cce7
- fix(docs): typo: Optaining -> Obtaining in 09-command-line.md (#1850) - @yinan-c in 50d426f
- doc: clarify that groups can't be negated (#1881) - @thiswillbeyourgithub in d455c70
- fix: show login button in the landing page on mobile - @MohamedBassem in 2f6fe4f
- fix: fix long worker log lines when downloading base64 images - @MohamedBassem in f17ca24
- fix: Respect wal mode for the queue db - @MohamedBassem in be2646e
- fix: handle list with slashes in their names and truncate long list names. fixes #1597 - @MohamedBassem in aecbe6a
- fix: fix move the admin route to the /v1 prefix - @MohamedBassem in f196182
- feat: Add a bookmark skeleton for search - @MohamedBassem in f1509fc
- feat(mobile): Retheme the mobile app (#1872) - @MohamedBassem in ed86f7e
- fix(mobile): Fix crash in android webview - @MohamedBassem in ec56ea3
- feat(mobile): Add edit menu item to bookmark card - @MohamedBassem in eb54bf4
- fix(mobile): Change the icon of the share button - @MohamedBassem in 5d502f5
- feat: Add delete button and creation dates to mobile info page - @MohamedBassem in b927574
- u18n: Update french translation.json (#1866) - @vivienbcr in 9e3ea20
- fix: fix nextjs warning about dialog without title in bookmark preview - @MohamedBassem in 8f8ce16
- fix(web): fix query getting rest when bookmark preview is closed. fixes #1521 - @MohamedBassem in cf06bbb
- fix(web): Fix hydration errors in add api key page - @MohamedBassem in 9df0f44
- fix: preserve selected section in link preview in query params - @MohamedBassem in 6dde9f2
- fix: Hide bookmark global actions when there's no bookmark grid shown - @MohamedBassem in 8c20524
- fix(security): Add CSP policies on asset serving path - @MohamedBassem in a4b2fc7
- fix: Dont attempt to remove uploaded tmp file if it's already removed - @MohamedBassem in 096af7e
- fix: Sanitize uploaded file names. #1765 - @MohamedBassem in 39a650f
- deps: Upgrade oxlint to 1.12 - @MohamedBassem in 3ed8af5
- fix: dangling assets created by changing crawling config - @MohamedBassem in 940550b
- fix(workers): Drop the withTimeout wrappers - @MohamedBassem in 3ab31c2
- feat: Export prometheus metrics from the workers - @MohamedBassem in 52d018c
- fix: Remove dev indicator config from nextjs config - @MohamedBassem in 9d6b0ef
- feat: generate a random prometheus token on startup - @MohamedBassem in a64307e
- feat: Support video uploads and attachments (#1847) - @packetmonkey in f1662b8
- fix(web): Fix dark mode titles for public lists - @MohamedBassem in 7bdc8b2
- feat: Add confirmations to background job actions - @MohamedBassem in f620dc6
- feat: A redesigned background jobs page. #1551 - @MohamedBassem in e2c303a
- Revert "deps: Upgrade nextjs to 15.5" - @MohamedBassem in ff33b31
- deps: Upgrade nextjs to 15.5 - @MohamedBassem in be420c9
- fix(web): Suppress hydration warning on root html - @MohamedBassem in f7b145c
- deps: Upgrade expo & nextjs to react 19 (#1565) - @MohamedBassem in dd53ccb
- fix(mobile): fix WebView deceleration rate on iOS (#1835) - @landonepps in 5f07b50
- fix: renamed export filename to karakeep (#1829) - @dvdpearson in 5b91250
- feat: Render human tags before AI tags (#1740) - @haappi in 2263c0f
- fix(mobile): remove type: module so expo works (#1846) - @xuatz in df6814f
- docs: Fix the name of the development section - @MohamedBassem in 6e525eb
- docs: rename docs into actual name in a separate commit - @xuatz in 6f14115
- docs: rename docs into tmp name in a separate commit - @xuatz in b3feee7
- fix(mobile): change to metro.config.cjs since migrating to type: module (#1845) - @xuatz in 17b5908
- fix: add CORS configuration for chrome-extension origin (#1823) - @qixing-jk in 9059ca2
- fix: Add support email to pricing page - @MohamedBassem in 8367173
- feat: Add an error boundary around the custom renderer - @MohamedBassem in 01ae8b5
- feat(web): Add special cards for specific websites. Fixes #1344 - @MohamedBassem in c68e509
- docker: Update chrome to 124 - @MohamedBassem in 03aa172
- fix: Merge the quota columns in the user lists - @MohamedBassem in 9912a0a
- feat(landing): The pricing page - @MohamedBassem in 141f411
- fix: Trim trailing slashes from nextauth urls. Fixes #1799 - @MohamedBassem in eb720c4
- release(mcp): Bump mcp server to 0.26 - @MohamedBassem in 801930a
- fix: Get rid of the userSetting table completely - @MohamedBassem in 88c4035
- refactor: Move webhook, users and tags into models - @MohamedBassem in 9965356
- feat: Drop support for time bounded invitations - @MohamedBassem in 2493ccf
- refactor: Refactor crawlerWorker to use tryCatch - @MohamedBassem in 160fd97
- fix: Use prometheus histogram instead of summary - @MohamedBassem in afcc27d
- fix: fix hidden env variable parse error. fixes #1790 - @MohamedBassem in cc36131
- fix(tests): Load plugins on API package entrypoint - @MohamedBassem in 6f69949
- fix: Fix the path to worker binary post-build - @MohamedBassem in bd5d9b9
- feat: Support NO_COLOR for logging. Fixes #1778 - @MohamedBassem in 8fe4975
- fix(docs): Fix git case sensitivity Take 3 - @MohamedBassem in 802f93b
- fix(docs): Fix git case sensitivity Take 2 - @MohamedBassem in a8b2c06
- fix(docs): Fix git case sensitivity - @MohamedBassem in f2975af
- deps: Upgrade docusourus - @MohamedBassem in 16ec2f6
- fix(docs): Fix the docs one more time - @MohamedBassem in 5c9de51
- refactor: Extract meilisearch as a plugin - @MohamedBassem in b94896a
- chore: Add opencode agent - @MohamedBassem in 7bb7f18
- docs: Drop docs older than 0.21 - @MohamedBassem in a34331b
- chore: More turbo fixes - @MohamedBassem in 77ae89b
- fix: Ensure that all packages are ESM packages - @MohamedBassem in 8f1cb06
- fix: Fix package boundary violations - @MohamedBassem in 57d1e50
- fix: Add karakeep_ prefix to hono's metrics - @MohamedBassem in 77e3611
- deps: Upgrade vite - @MohamedBassem in a441a67
- refactor: Extract the importing logic into its own hook - @MohamedBassem in 118ffc6
- feat(mobile): add context aware sharing option in mobile app (#1785) - @xuatz in 8db89bb
- feat: Configurable number of grid columns. Fixes #1713 - @MohamedBassem in 154efe1
- feat: Render author, publisher and pub data in the bookmark view - @MohamedBassem in 8b4fb49
- fix: Avoid prefetching assets and tags in the link component. Fixes #1759 - @MohamedBassem in 94f3958
- feat: Hide AI settings tab if inference is not configured. #1781 - @MohamedBassem in 1b14043
- fix: Stop forcing next-auth to read email from id_token. Fixes #410 - @MohamedBassem in 2cb0ab0
- fix: Drop legacy container notice - @MohamedBassem in 5019c8d
- deps: Upgrade form-data - @MohamedBassem in 2717d8a
- deps: Upgrade trpc - @MohamedBassem in fd0bac2
- fix: prometheus add karakeep prefix to metrics (#1780) - @CrazyWolf13 in f6f6f79
- deps: Upgrade turbo, sherif and oxlint - @MohamedBassem in ea6bab0
- fix: Remove bcrypt from the api key validation route - @MohamedBassem in bb11907
- feat: Add a max output tokens env variable - @MohamedBassem in 52ac086
- fix(test): Fix subscription.test - @MohamedBassem in 2f3da0b
- fix(stripe): Allow promotion codes - @MohamedBassem in 298b347
- release(sdk): Release the 0.26 sdk - @MohamedBassem in c7f0af0
- docs: Release the 0.26.0 docs - @MohamedBassem in 0cd9eea
- docs: Update api docs in prep for the 0.26.0 release - @MohamedBassem in 705e46d
- docs: Restructure the config docs a bit - @MohamedBassem in fe501cf
- i18n: Add new translations - @MohamedBassem in a93601e