v0.26.0
karakeep-app/karakeepv0.26.0Jul 20, 2025by MohamedBassem
AI Summary
This release focuses heavily on user management, server infrastructure improvements, and fixes. It introduces a new managed instance beta, comprehensive user stats, reader mode customization, and S3 storage support.
Key Highlights
- Introduction of Managed Karakeep instance (Private Beta)
- Comprehensive User Management (Email verification, password reset, invitations, quotas)
- Server Infrastructure Upgrades (S3 support, Prometheus monitoring, rate limiting)
- Migration from Puppeteer to Playwright
- New Search History feature
Breaking Changes
- Database schema changes requiring automatic migration on startup
New Features
- Markdown file upload support
- New user stats page
- Customizable reader mode (font type and size)
- Proxy support for crawler network requests
- WAL mode for database
- Customizable parallelism for workers
- Reddit posts banner image support
- Helm chart support
- Linux installation script improvements
- Start-dev.sh script for development
- Upgraded to pnpm@9.15.9
- Migrated from ESLint to oxlint
- Added CLAUDE.md file
- Greek translation support
- iOS tinted variant for mobile app icon
Full Release Notes
# 0.26.0 Welcome to the 0.26.0 release of Karakeep! This release focuses on user management, servers improvements, and lots of fixes. We've a new comprehensive usage stats, reader mode, search history, S3 support, and much more. As always, we have amazing contributors in this release: @xuatz, @Ashok28, @HarryPeach, @Mostafa-Wahied, @adumat, @alexjsp, @apo-mak, @birnam, @deepanshu2711, @hametovbr, @irobot, @kdwils, @lexafaxine, @maelp, @rodsnts, @sheyabernstein, @simplytoast1, @thiswillbeyourgithub, @vhsdream! > 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> # Managed Karakeep ☁️ I have some news to share! With Pocket shutting down, I've been thinking about how to make Karakeep more accessible to a wider audience. So I've decided to start the journey of offering a managed karakeep instance to serve those who can't selfhost. Karakeep wouldn't be where it is today without its amazing self-hosting community, and that will always remain my first priority. This managed offering is just an experiment. If it works, it could help support the development of the project. **We're now starting a private beta, and you can join the waitlist [here](https://tally.so/r/wo8zzx)!** # New Features 🚀 - **User Management & Authentication:** - Added email verification support for new user registrations - Implemented password reset and forgot password functionality - Added user invitation system - Revamped signin/signup pages with better UX - Added per-user bookmark count / storage quotas - New delete account feature for users who want to remove their data - **Search History:** You'll now get search suggestions from your karakeep search history (#1627 by @lexafaxine) - **File Upload Support:** Added markdown file upload support (#1672 by @rodsnts) - **Usage Statistics:** New user stats page showing tons of stats about your bookmarks and usage of karakeep (#1523) - **New Reader Mode:** A new revamped reader mode with customizable font type and size (got jealous of how that of linkwarden looked!) - **Proxy Support:** Added proper proxy support for crawler network requests (#1265) - **Server Improvements:** - **S3 Storage Support:** Option to store assets in S3-compatible storage (#1703) - **Prometheus Monitoring:** We're now exposing a Prometheus endpoint for monitoring stats about the server (#758) - **Rate Limiting:** Added optional API rate limiting - Large HTML content now stored in asset storage (instead of db) for better performance - Allow enabling WAL mode on the database (opt-in, recommended) - Allow customizing parallelism for workers (#724) - **Reddit Crawling:** Reddit posts will now get a more relevant banner image (#1302 by @birnam) # UX Improvements ✨ - Prioritize crawling user-added links over bulk imports (#1717) - Mobile app now has user setting for default bookmark view mode (#1723 by @xuatz) - More lenient JSON parsing for LLM responses (#1267) - Tweaks to mobile app icon padding with iOS tinted variant (#1620 by @alexjsp) - Minor styling changes to the "All Tags" page - Added icons to bookmark preview selectors - Clicking on search tooltip now opens the search language guide (#1540) - Added confirmation dialog for user deletion in admin panel (#1649 by @deepanshu2711) - Added tag clearing functionality to tag list in the mobile app(#1595 by @Ashok28) - Always visible search bar in the mobile app's tags list (#1596 by @Ashok28) # Fixes 🔧 - Fixed OAuth creation failure due to missing UserSettings table (#1583) - Fixed webhook not firing on deletion (#1613) - Normalized leading hashes in tag names (#1351 by @Mostafa-Wahied) - Fixed import/export icons being swapped (#1682 by @HarryPeach) - Disabled metascraper readability plugin that was causing worker stuckness - Fixed jsdom console logs leaking into worker logs - Collapsed long runs of repeated whitespaces before tokenization to speed it up (#1622) - Fixed public image signed tokens for better caching - Fixed clear parent button in edit list dialog (#1742) - Fixed running workers in production without tsx for lower resource usage (#1673) - Fixed get-lists MCP tool (#1697 by @hametovbr) - Fixed image quality slider in mobile showing excessive decimal places (#1735) - Fixed mobile app crash when bookmark doesn't have archive or screenshot (#1584) - Migrated from Puppeteer to Playwright (#1296 by @maelp) - Video downloader now properly logs yt-dlp errors (#1624 by @irobot) # For Developers 🛠️ - Added Helm chart support ([link](https://github.com/karakeep-app/helm-charts)). (#1350 by @sheyabernstein) - **Build & Deployment:** - A much fancier linux installation script (#1576 by @vhsdream) - Added start-dev.sh script for easier development (#1628 by @xuatz) - Upgraded to pnpm@9.15.9 (#1544 thanks to @xuatz) - Migrated from ESLint to oxlint for faster linting (#1642 by @xuatz) - We now have a `CLAUDE.md` file to help the vibe coders out there. # Community Projects 💡 ### [Karakeeper](https://apps.apple.com/us/app/karakeeper-for-karakeep/id6746722790) 3rd Party Safari Extension - *by @simplytoast1* <img width="640" height="874" alt="Screenshot 2025-07-20 at 2 16 48@2x" src="https://github.com/user-attachments/assets/03f8baf1-b8a6-4c92-9248-1127dcb72587" /> ### [Karakeep Homedash](https://github.com/CodeJawn/karakeep-homedash) *by @CodeJawn* <img width="1918" height="1060" alt="image" src="https://github.com/user-attachments/assets/35e0614e-9d92-4cf1-9d53-c5c3dc1ab4c9" /> # Screenshots 📸 ## Usage Stats <img width="2882" height="2812" alt="image" src="https://github.com/user-attachments/assets/2add1f9c-5bf3-4307-b6c7-f9e347f45bc8" /> ## The new Sign In page <img width="1072" height="1202" alt="Screenshot 2025-07-20 at 1 58 50@2x" src="https://github.com/user-attachments/assets/4e59daeb-04e9-456c-8e17-4ec9bec0763b" /> ## Recent Searches <img width="1502" height="338" alt="Screenshot 2025-07-20 at 1 59 55@2x" src="https://github.com/user-attachments/assets/9bf99d12-e900-44a9-8e1c-c8a1293b5a9b" /> ## Reader Mode <img width="2318" height="1558" alt="Screenshot 2025-07-20 at 2 04 29@2x" src="https://github.com/user-attachments/assets/f35c52e9-4858-4fa6-be60-8c2b3f2e54ab" /> # 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`. **Note:** This release includes database schema changes. The migration will run automatically on startup. # All Commits * fix(web): Remove horizontal scroll in PWA's header - @MohamedBassem in 202924c9 * feat(web): Slightly nicer looking tags page - @MohamedBassem in 61a6ac83 * fix: Run workers in prod without tsx. Fixes #1673 - @MohamedBassem in 2cce45b7 * deps: bump s6-overlay version (#1750) - @adumat in 4fe541c4 * fix: Fix edit list modal not clearing parent - @MohamedBassem in b992fadd * feat: Add a proper reader mode - @MohamedBassem in 49f38efd * fix: Increase crawler max worker count in tests - @MohamedBassem in 4a4ff37b * feat: Allow setting browserless crawling per user - @MohamedBassem in 4e9544b0 * feat: Allow enabling journaling mode on the db - @MohamedBassem in 64a0d918 * fix(mobile): Fix image quality slider showing lots of decimal places. fixes #1735 - @MohamedBassem in ae1352f3 * fix: Rename the proxy settings such that they don't interfer with other requests - @MohamedBassem in 1da8b458 * chore: Move the helm charts to their own repo - @MohamedBassem in f3feb599 * fix(web): Fix the clear parent button in the edit list dialog. Fixes #1742 - @MohamedBassem in 8bd3b586 * feat(mobile): Add user setting for default bookmark view mode (#1723) - @xuatz in fe69ca8c * fix: Clear search history on logout - @MohamedBassem in a3627569 * feat: adding search history #1541 (#1627) - @lexafaxine in 39fcda01 * feat: markdown file upload support (#1647) (#1672) - @rodsnts in ecb13cec * Revert "fix: Fix the types of the bookmark types in the db query" - @MohamedBassem in 0addc7bc * fix: Fix the types of the bookmark types in the db query - @MohamedBassem in 4ba3e804 * feat: Add stripe based subscriptions - @MohamedBassem in d1d52634 * feat: Add delete account support - @MohamedBassem in 845ccf1a * fix: Drop auth failure logger - @MohamedBassem in f8ae9866 * feat: Add proper proxy support. fixes #1265 - @MohamedBassem in 360ef9db * feat(api): Expose the update user API in the openapi specs - @MohamedBassem in 1105b4a4 * build: Restrict claude actions invocations - @MohamedBassem in ba7a87fe * fix(web): Fix the alignment in the user options page - @MohamedBassem in 49648c4c * deps: Upgrade typescript to 5.8 - @MohamedBassem in 6b77736b * fix: Add ratelimiting to bookmark recrawl and summarization - @MohamedBassem in 21076b83 * deps: Upgrade drizzle - @MohamedBassem in f4436e19 * fix(web): Fix dark mode in auth pages - @MohamedBassem in 92311191 * fix(tests): Fix missing mock in trpc tests - @MohamedBassem in 8c3bf481 * fix: Prioritize crawling user added links over bulk imports. fixes #1717 - @MohamedBassem in 9fb3ef6f * refactor: Move db interactions into the trpc routes - @MohamedBassem in 8e3013ba * feat: Support forget and reset password - @MohamedBassem in 140311d7 * chore: Add claude code github action - @MohamedBassem in 385f9f0b * feat(ui): Revamp the signin/signup page - @MohamedBassem in db9a02b8 * feat: Add API ratelimits - @MohamedBassem in 613137ff * feat: Add invite user support - @MohamedBassem in 333d1610 * feat: Add support for email verification - @MohamedBassem in 93049e86 * fix(api): Fix handling for CORS after the trpc move to hono. Fixes #1709 - @MohamedBassem in aae3ef17 * fix: Drop the need to for the self-call for providers and NEXTAUTH_INTERNAL_URL - @MohamedBassem in f7f577af * feat: Add a logout page - @MohamedBassem in bb4a687b * fix: Add a dummy bcrypt comparison in validatePassword when the user is not found - @MohamedBassem in 58488e1c * build: Add an open-api husky check - @MohamedBassem in 71458166 * fix(build): Regenerate openapi spec - @MohamedBassem in 0eeefd68 * fix: Fix search indexing after content split - @MohamedBassem in f5a674c2 * fix(web): Clicking on search tooltip opens the search language guide. Fixes #1540 - @MohamedBassem in f3b925ad * feat: Store large html content in the asset db - @MohamedBassem in dee3a4d4 * fix(mobile): Fix crash when bookmark doesn't have archive or screenshot. Fixes #1584 - @MohamedBassem in 362be300 * fix(tests): Fix broken user setting test - @MohamedBassem in 959da9a8 * chore: Excluded unneeded docker context using dockerignore - @MohamedBassem in 5c8a2b9b * feat: Add a new timezone user setting - @MohamedBassem in 0e94ad36 * feat: Add prometheus monitoring. Fixes #758 - @MohamedBassem in b60ece57 * fix(build): Regenerate openapi spec - @MohamedBassem in cfa0385b * fix: Fix i18n in the new stats page - @MohamedBassem in f96680fc * feat: Add per user storage quota - @MohamedBassem in 384432d3 * feat: Add new user stats page. Fixes #1523 - @MohamedBassem in 47624547 * feat(workers): Allow custmoizing max parallelism for a bunch of workers. Fixes #724 - @MohamedBassem in 5576361a * feat: Add support for S3 as an asset storage layer (#1703) - @MohamedBassem in d66b3b86 * fix(workers): A more lenient JSON parsing for LLM responses. Fixes #1267 - @MohamedBassem in 53b6b3c2 * refactor: Move the health endpoint to hono as well - @MohamedBassem in f144f1bc * refactor: Move the trpc endpoint to hono - @MohamedBassem in f5e737bf * chore: Symlink Gemini.md to CLAUDE.md - @MohamedBassem in 474ca7f2 * feat: Add per user bookmark count quota - @MohamedBassem in 545cac19 * chore: Symlink Gemini.md to AGENTS.md - @MohamedBassem in 73a0c951 * fix(web): Add icons to preview selectors - @MohamedBassem in ad92fa24 * chore: Add a GEMINI.md file for people using gemini-cli - @MohamedBassem in 4776b4cd * fix(mcp): add empty params object (#1697) - @hametovbr in 6cc249d1 * fix: switch import / export icons (#1682) - @HarryPeach in 7febebe1 * fix(workers): Disable the metascraper readability as it's causing slowness in worker - @MohamedBassem in 71f8e970 * fix(workers): Fix jsdom console logs leaking into worker logs - @MohamedBassem in b74377d2 * feat(workers): adding a local metascraper plugin for Reddit posts (#1302) - @birnam in 7cc4b08a * fix(tags): normalise leading hashes in tag names (#1317) (#1351) - @Mostafa-Wahied in 112aa9d9 * feat(workers): migrate from puppeteer to playwright (#1296) - @maelp in c70d64d4 * feat(mobile): Add tag clearing functionality to tag list (#1595) - @Ashok28 in 727c7f22 * fix(mobile): always visible search bar in tags list (#1596) - @Ashok28 in 4134649d * fix: minor changes to the tagging prompts (#1474) - @thiswillbeyourgithub in a74afc9d * build: Install script v3.0 - Bling version (#1576) - @vhsdream in e310ba9f * feat: Add Helm chart (#1350) - @sheyabernstein in 43d3210b * chore: More oxlint changes - @MohamedBassem in f7b31938 * chore: migrate away from eslint to oxlint (#1642) - @xuatz in d5e2973d * docs: update meilisearch key generation instruction (#1651) - @kdwils in 91a9d3c1 * fix: Fix webhook not firing on deletion. Fixes #1613 - @MohamedBassem in 04f93941 * feat(admin): add confirmation dialog for user deletion (#1648) (#1649) - @deepanshu2711 in 0f4c6162 * fix: Collapse long runs of repeated whitespaces before tokenization to avoid choking the tokenizer. Fixes #1622 - @MohamedBassem in 426beff1 * fix: Change public image's signed tokens to be time aligned for better caching - @MohamedBassem in 10d45e8d * fix: Fix oauth creation failure due to missing UserSettings table. Fixes #1583 - @MohamedBassem in f1f665f8 * fix(mobile): tweaks to mobile app icon padding + added iOS tinted variant (#1620) - @alexjsp in 6c0bcca1 * fix(workers): video downloader should log yt-dlp errors (#1624) - @irobot in a16c5424 * chore: add start-dev.sh for laziness (#1628) - @xuatz in 88e4ea98 * i18n: Add Greek translation (#1564) - @apo-mak in 004eb5ad * docs: Mention the community safari extension in the quick sharing docs (#1562) - @simplytoast1 in e5307f19 * release(cli): Bump CLI version to 0.25.0 - @MohamedBassem in bb00699b * build: Pin ios github action to macos-15 to comply with apple's requirement for min ios SDK - @MohamedBassem in d7617cc2 * fix: Fix UI infinite recursion by upgrading radix packages - @MohamedBassem in 675ed5c3