Skip to content

Conversation

@MohamedBassem
Copy link
Collaborator

@MohamedBassem MohamedBassem commented Nov 8, 2025

Summary

  • replace the custom fetch/effect chain in SidebarVersion with a React Query hook that caches GitHub release notes and reports loading or failure states
  • preserve local dismissal logic while skipping release checks when disabled and falling back to the GitHub link for non-stable builds
  • normalize the sidebar import order after formatting

Testing

  • pnpm --filter web lint

Fixes #1698


Codex Task

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 8, 2025

Warning

Rate limit exceeded

@MohamedBassem has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 14 minutes and 58 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between c254fc6 and a7a2b12.

📒 Files selected for processing (1)
  • apps/web/components/shared/sidebar/SidebarVersion.tsx (1 hunks)

Walkthrough

Replaces a hardcoded sidebar version link with a new SidebarVersion component; adds release-notes fetching/display logic, seen-state tracking, and new English translation keys for version UI strings. Sidebar now passes serverVersion into SidebarVersion.

Changes

Cohort / File(s) Summary
Sidebar update
apps/web/components/shared/sidebar/Sidebar.tsx
Removes hardcoded external link showing the Karakeep version and renders the new SidebarVersion component, passing serverConfig.serverVersion as a prop.
New SidebarVersion component
apps/web/components/shared/sidebar/SidebarVersion.tsx
Adds client-side component that: detects stable releases, builds release URLs, conditionally fetches GitHub release notes via React Query, handles errors (ignoring aborts), tracks seen versions in localStorage, shows a notification badge, and renders a modal with release notes or a fallback GitHub link.
i18n additions
apps/web/lib/i18n/locales/en/translation.json
Adds top-level version keys for UI strings (new release notification, "What's new" title, loading/error messages, no-release-notes text, sync note, and "view on GitHub" link).

Sequence Diagram

sequenceDiagram
    participant Sidebar as Sidebar (parent)
    participant SV as SidebarVersion
    participant Store as localStorage
    participant GH as GitHub API
    participant UI as User / Dialog

    rect rgba(200,220,240,0.6)
    Sidebar->>SV: render(serverVersion)
    SV->>SV: isStableRelease(version)
    SV->>Store: read lastSeenVersion
    SV-->>SV: compute shouldNotify
    end

    rect rgba(220,200,240,0.6)
    UI->>SV: open dialog
    SV->>SV: evaluate fetch conditions (stable && featureFlag-off && version)
    alt fetch conditions true
        SV->>GH: fetch release notes (React Query)
        GH-->>SV: markdown / error
        SV->>SV: show loader -> notes or error
    else
        SV->>UI: show fallback GitHub link
    end
    end

    rect rgba(240,220,200,0.6)
    UI->>SV: close dialog
    SV->>Store: mark version as seen
    SV->>UI: update badge visibility
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Review React Query enablement and retry/stale settings in SidebarVersion.tsx.
  • Verify localStorage read/write edge cases and seen-version race conditions.
  • Check error mapping (ensure abort/cancel detection is correct) and UX fallback behavior.
  • Validate new i18n keys usage and fallback behavior if translations are missing.

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main change: adding a what's new modal in the sidebar, which is the primary feature introduced across the modified files.
Description check ✅ Passed The description is directly related to the changeset, explaining the React Query integration, dismissal logic preservation, and sidebar import normalization that align with the file changes.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@MohamedBassem MohamedBassem changed the title Use React Query for sidebar release modal feat: Add what's new modal in the sidebar Nov 8, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between dffea2c and c254fc6.

📒 Files selected for processing (2)
  • apps/web/components/shared/sidebar/SidebarVersion.tsx (1 hunks)
  • apps/web/lib/i18n/locales/en/translation.json (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
apps/web/**

📄 CodeRabbit inference engine (AGENTS.md)

The main Next.js web application code resides in apps/web

Files:

  • apps/web/lib/i18n/locales/en/translation.json
  • apps/web/components/shared/sidebar/SidebarVersion.tsx
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (AGENTS.md)

Use oxlint as the linter for JavaScript/TypeScript code

Files:

  • apps/web/components/shared/sidebar/SidebarVersion.tsx
🧬 Code graph analysis (1)
apps/web/components/shared/sidebar/SidebarVersion.tsx (2)
apps/web/lib/clientConfig.tsx (1)
  • useClientConfig (21-23)
apps/web/components/ui/markdown/markdown-readonly.tsx (1)
  • MarkdownReadonly (25-108)
🔇 Additional comments (9)
apps/web/lib/i18n/locales/en/translation.json (1)

681-691: LGTM!

The translation keys are well-structured and provide clear, user-friendly text for the release notes feature. The interpolation syntax for the version placeholder is correct.

apps/web/components/shared/sidebar/SidebarVersion.tsx (8)

1-31: LGTM!

The imports, constants, and schema definition are well-organized. The 10-minute stale time for release notes is appropriate, and the Zod schema correctly validates the GitHub API response structure.


33-46: LGTM!

The isStableRelease function correctly identifies non-stable releases by filtering out nightly, beta, and development versions. The case-insensitive check is appropriate.


54-66: LGTM!

The hook usage and memoization are correct. The releasePageUrl properly falls back to the repository root for non-stable versions, and the dependencies are accurate.


67-97: LGTM!

The React Query configuration follows best practices:

  • Proper query key with version dependency for cache invalidation
  • Conditional fetching prevents unnecessary API calls
  • Appropriate stale time and retry settings
  • AbortSignal support for request cancellation
  • Zod validation ensures type safety

99-124: LGTM!

The error handling is robust and defensive. It properly filters out expected abort/cancellation errors while surfacing genuine failures with user-friendly messages. The type-safe error name extraction prevents runtime errors.


126-139: LGTM!

The localStorage access is properly wrapped in try-catch with sensible fallback behavior. The dependency array is correct, and the early return when release checks are disabled prevents unnecessary work.


141-162: LGTM!

The callbacks are correctly implemented with appropriate memoization. The handleOpenChange properly uses the functional setState form to avoid race conditions, and marks the release as seen only when the dialog closes (transitioning from open to closed).


164-250: LGTM!

The render logic is well-structured with proper accessibility features:

  • Appropriate fallback for non-stable releases and disabled checks
  • Accessible notification badge with sr-only text and aria-label
  • Clear loading, error, and empty states
  • Scrollable content area for long release notes
  • All user-facing text properly internationalized

@MohamedBassem MohamedBassem merged commit 474f642 into main Nov 8, 2025
8 of 9 checks passed
alexlebens pushed a commit to alexlebens/infrastructure that referenced this pull request Nov 14, 2025
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/karakeep-app/karakeep](https://github.com/karakeep-app/karakeep) | minor | `0.27.1` -> `0.28.0` |

---

### Release Notes

<details>
<summary>karakeep-app/karakeep (ghcr.io/karakeep-app/karakeep)</summary>

### [`v0.28.0`](https://github.com/karakeep-app/karakeep/releases/tag/v0.28.0): 0.28.0

[Compare Source](karakeep-app/karakeep@v0.27.1...v0.28.0)

### 0.28.0 (20k stars ⭐)

Welcome to the 0.28.0 release of Karakeep! We've have hit 20k stars on Github 🎉 (well 21k because I was too late with the release)! Thanks a lot for your support throughout this journey! This release brings a refreshed import pipeline, uploading custom attachments, revamped tags page, inline checklists, and a bunch of quality-of-life touches across the web app, extension and mobile app. Huge thanks to [@&#8203;BOTkirial](https://github.com/BOTkirial), [@&#8203;qixing-jk](https://github.com/qixing-jk), @&#8203;[@&#8203;maya-doshi](https://github.com/maya-doshi), [@&#8203;BenjaminMichaelis](https://github.com/BenjaminMichaelis), [@&#8203;cloudchristoph](https://github.com/cloudchristoph), [@&#8203;claytono](https://github.com/claytono), as usual [@&#8203;xuatz](https://github.com/xuatz) 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 still in private beta (you can signup for access [here](https://tally.so/r/wo8zzx)) and gradually letting more and more users in.

### New Features 🚀

- Revamped import experience with progress tracking ([#&#8203;2001](karakeep-app/karakeep#2001))
- Revamped Tags page that adds search and pagination to better serve users with thousands of tags ([#&#8203;1987](karakeep-app/karakeep#1987))
- You can now upload custom attachments to bookmarks ([#&#8203;2100](karakeep-app/karakeep#2100))
- When deleting a list, you can now optionally delete all its children ([#&#8203;1989](karakeep-app/karakeep#1989))
- Server overview highlights service dependency health.
- Inline checklist toggling for text bookmarks ([#&#8203;1933](karakeep-app/karakeep#1933)) – [@&#8203;BOTkirial](https://github.com/BOTkirial)
- With every release, you'll be prompted to view what's new in that release from inside the app.
- You can now pass custom headers from the mobile app to the server ([#&#8203;2103](karakeep-app/karakeep#2103))
- Extension improvements:
  - Tab bookmark badge indicator by [@&#8203;qixing-jk](https://github.com/qixing-jk) shows when a page is already bookmarked ([#&#8203;1745](karakeep-app/karakeep#1745))
  - You can now write notes directly after saving a bookmark in the extension ([#&#8203;2104](karakeep-app/karakeep#2104))

### UX Improvements ✨

- Grid view controls expose title/tag toggles and image fit options ([#&#8203;1960](karakeep-app/karakeep#1960))
- Bookmark cards can surface saved notes across web and mobile ([#&#8203;2083](karakeep-app/karakeep#2083)) – [@&#8203;xuatz](https://github.com/xuatz)
- Manage Lists modal is searchable for faster sorting ([#&#8203;2029](karakeep-app/karakeep#2029))
- The tags page now has a "Create Tag" button ([#&#8203;1942](karakeep-app/karakeep#1942))
- You can now regenerate the API key without having to recreate it.
- New `title:` seach qualifier for searching bookmarks by title ([#&#8203;1940](karakeep-app/karakeep#1940))

### Fixes 🔧

- ⚠️ (Potentially breaking change) ⚠️ Stricter URL valdaition to protect against SSRF attacks ([#&#8203;2082](karakeep-app/karakeep#2082))
  - Webhook requests now go through the proxy if there's one configured
  - All server-initiated requests (including webhooks) to internal IP addresses are now blocked by default unless explicitly allowed via `CRAWLER_ALLOWED_INTERNAL_HOSTNAMES`. If your webhooks are hitting internal services, you'll have to allowlist them via `CRAWLER_ALLOWED_INTERNAL_HOSTNAMES`.
  - Monolith now honors the configured crawler proxy.
  - Metascraper logo extraction now respects the crawler proxy.
- Crawler memory footprint shrinks with targeted optimizations ([#&#8203;1748](karakeep-app/karakeep#1748))
- Allow karakeep to use newer openai models that was previously failing because of deprecated max\_tokens ([#&#8203;2000](karakeep-app/karakeep#2000)) - [@&#8203;BenjaminMichaelis](https://github.com/BenjaminMichaelis)
  - You'll need to set `INFERENCE_USE_MAX_COMPLETION_TOKENS=true` in your `.env` file to use the new models. This is eventually going to become the default.
- Admin maintenance jobs respect abort signals to stop gracefully
- Search input no longer crashes on percent signs and also works correctly with IME composition
- Fixed a crash when sharing a list publicly that didn't have any bookmarks ([#&#8203;1990](karakeep-app/karakeep#1990))
- Screenshots are now stored as jpegs instead of pngs to reduce file size
- Fixed a bug that was preventing tag merging ([#&#8203;1938](karakeep-app/karakeep#1938))
- RSS imports can apply feed categories as tags ([#&#8203;2031](karakeep-app/karakeep#2031))

### For Developers 🛠️

- Create bookmark API returns 200 instead of 201 when a bookmark already exists
- CLI Improvements:
  - New commands to migrate data from one server to another
  - New command to dump a full account archive
  - A new wipe command to selectively clean up data from the account

### Community Projects 💡

##### [Karakeeper](https://apps.apple.com/us/app/karakeeper-for-karakeep/id6746722790)

3rd Party iOS/Safari Client - *by [@&#8203;simplytoast1](https://github.com/simplytoast1)*

Karakeeper now is providing an alternative iOS native mobile/desktop client for Karakeep beyond its existing functionality of providing a safari extension.

##### [Karakeep Sync](https://github.com/sidoshi/karakeep-sync)

A syncing tool for Karakeep - *by [@&#8203;sidoshi](https://github.com/sidoshi)*

A rust-based syncing tool that syncs: Hacker News upvotes, Reddit saved posts, Github stars and Pinboard bookmarks automatically to Karakeep!

### Screenshots 📸

#### Inline Checklists

<img width="1230" height="806" alt="Screenshot 2025-11-08 at 8  55 18@&#8203;2x" src="https://github.com/user-attachments/assets/c092d903-eb6f-40c6-aee6-1ce6127f67e8" />

#### Import Sessions
<img width="1814" height="762" alt="Screenshot 2025-11-08 at 8  58 21@&#8203;2x" src="https://github.com/user-attachments/assets/dfcb856b-6a63-4d7a-ba4b-ce2ca83bc844" />

#### Service Health Indicators
<img width="1874" height="540" alt="Screenshot 2025-11-08 at 8  56 00@&#8203;2x" src="https://github.com/user-attachments/assets/7835f1ad-239d-477c-8e00-951e4a09f8c6" />

### 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: standardize US English translations to professional tone - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4f025f5`](karakeep-app/karakeep@4f025f5a)
- i18n: Sync weblate translations - [@&#8203;weblate](https://github.com/weblate) in [`5387c98`](karakeep-app/karakeep@5387c982)
- tests: fix crawling and search e2e tests ([#&#8203;2105](karakeep-app/karakeep#2105)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c4bee9f`](karakeep-app/karakeep@c4bee9fe)
- feat(extension): Allow writing notes directly in the extension ([#&#8203;2104](karakeep-app/karakeep#2104)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`098e56a`](karakeep-app/karakeep@098e56a8)
- fix(mobile): fix default address not correctly stored in settings - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`a220319`](karakeep-app/karakeep@a2203196)
- feat(mobile): add custom headers configuration in sign-in screen ([#&#8203;2103](karakeep-app/karakeep#2103)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ec621bf`](karakeep-app/karakeep@ec621bf5)
- tests: Fix failing test - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`27ed0a1`](karakeep-app/karakeep@27ed0a19)
- feat: Add what's new modal in the sidebar ([#&#8203;2099](karakeep-app/karakeep#2099)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`474f642`](karakeep-app/karakeep@474f6429)
- feat: Add support for user uploaded files ([#&#8203;2100](karakeep-app/karakeep#2100)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`31960fc`](karakeep-app/karakeep@31960fcd)
- refactor: consolidate multiple karakeep plugins into one package ([#&#8203;2101](karakeep-app/karakeep#2101)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`99413db`](karakeep-app/karakeep@99413db0)
- fix: metascraper logo to go through proxy if one configured. fixes [#&#8203;1863](karakeep-app/karakeep#1863) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`737b031`](karakeep-app/karakeep@737b0317)
- feat(extension): add tab bookmark badge indicator ([#&#8203;1745](karakeep-app/karakeep#1745)) - [@&#8203;qixing-jk](https://github.com/qixing-jk) in [`f0b0959`](karakeep-app/karakeep@f0b0959e)
- fix: restore image size in grid layout - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`2056582`](karakeep-app/karakeep@2056582c)
- deps: Upgrade react-query to 5.90 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`560900b`](karakeep-app/karakeep@560900bb)
- feat: Support inline toggling for todos. fixes [#&#8203;1931](karakeep-app/karakeep#1931) ([#&#8203;1933](karakeep-app/karakeep#1933)) - [@&#8203;BOTkirial](https://github.com/BOTkirial) in [`393bbd9`](karakeep-app/karakeep@393bbd9a)
- fix: fix monolith to respect crawler proxy - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`085c832`](karakeep-app/karakeep@085c832c)
- feat(rss): Add import tags from RSS feed categories ([#&#8203;2031](karakeep-app/karakeep#2031)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`5358682`](karakeep-app/karakeep@5358682a)
- fix: fix crash in search input when query contains a percent. fixes [#&#8203;1941](karakeep-app/karakeep#1941) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`633686b`](karakeep-app/karakeep@633686b5)
- feat: Add view options to show tag/title and control image fit. Fixes [#&#8203;1960](karakeep-app/karakeep#1960) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`34d2b48`](karakeep-app/karakeep@34d2b485)
- refactor: improve the userLocalSetting server functions - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`bb00c99`](karakeep-app/karakeep@bb00c996)
- feat: Make search job timeout configurable - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`965c603`](karakeep-app/karakeep@965c603d)
- feat: display notes on bookmark card ([#&#8203;2083](karakeep-app/karakeep#2083)) - [@&#8203;xuatz](https://github.com/xuatz) in [`33f4077`](karakeep-app/karakeep@33f40779)
- fix: Stricter SSRF validation ([#&#8203;2082](karakeep-app/karakeep#2082)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b63a49f`](karakeep-app/karakeep@b63a49fc)
- fix: correctly handle composition in search input. fixes [#&#8203;2048](karakeep-app/karakeep#2048) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c6ebceb`](karakeep-app/karakeep@c6ebceb9)
- fix: browser service connection check using dns instead. Fixes [#&#8203;2080](karakeep-app/karakeep#2080) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c9c73d4`](karakeep-app/karakeep@c9c73d41)
- fix: More memory optimizations for crawler worker. [#&#8203;1748](karakeep-app/karakeep#1748) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`40d548b`](karakeep-app/karakeep@40d548bd)
- fix: fix screenshot filepath in crawler - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`0704b8b`](karakeep-app/karakeep@0704b8bb)
- docs: Add Azure configuration details for OpenAI-compatible API ([#&#8203;2072](karakeep-app/karakeep#2072)) - [@&#8203;cloudchristoph](https://github.com/cloudchristoph) in [`bd9c933`](karakeep-app/karakeep@bd9c933b)
- fix: Respect abort signal in admin maintenance jobs - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`8a330dc`](karakeep-app/karakeep@8a330dc2)
- deps: Upgrade metascraper plugins - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e43c7e0`](karakeep-app/karakeep@e43c7e0f)
- deps: Upgrade metascraper-readability 5.49.6 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6d234de`](karakeep-app/karakeep@6d234de8)
- feat: Allow configuring inline asset size threshold - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`cf3ffff`](karakeep-app/karakeep@cf3ffff0)
- feat: Add admin maintenance job to migrate large inline HTML ([#&#8203;2071](karakeep-app/karakeep#2071)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`2b769cb`](karakeep-app/karakeep@2b769cba)
- fix(inferance): skip token slicing when content is already witin max length - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`1713600`](karakeep-app/karakeep@17136006)
- refactor: generalize tidy assets queue into admin maintenance ([#&#8203;2059](karakeep-app/karakeep#2059)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6ea5dd1`](karakeep-app/karakeep@6ea5dd19)
- fix: update OpenAI API to use max\_completion\_tokens instead of max\_tokens ([#&#8203;2000](karakeep-app/karakeep#2000)) - [@&#8203;BenjaminMichaelis](https://github.com/BenjaminMichaelis) in [`046c29d`](karakeep-app/karakeep@046c29dc)
- fix(restate): Fix priority for restate queue - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`8c0aae3`](karakeep-app/karakeep@8c0aae33)
- fix(restate): Ensure that the semaphore and idProvider services are ingress private - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`cdf8121`](karakeep-app/karakeep@cdf81213)
- feat: Add source field to track bookmark creation sources ([#&#8203;2037](karakeep-app/karakeep#2037)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`2defc24`](karakeep-app/karakeep@2defc247)
- feat: support passing multiple proxy values ([#&#8203;2039](karakeep-app/karakeep#2039)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c14b693`](karakeep-app/karakeep@c14b6934)
- deps: Upgrade oxlint to 1.22 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`88a7ffe`](karakeep-app/karakeep@88a7ffec)
- feat: Add service dependency checks in the server overview page - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`fda1c85`](karakeep-app/karakeep@fda1c851)
- fix(web): Add w-full to tags editor to prevent unusable narrow width ([#&#8203;2035](karakeep-app/karakeep#2035)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7ee9416`](karakeep-app/karakeep@7ee9416e)
- fix(api): Return 200 when bookmark already exists instead of 200 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`f2dec26`](karakeep-app/karakeep@f2dec26f)
- tests: Add a test for the GET /bookmarks/bookmarkId/lists api - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d578038`](karakeep-app/karakeep@d5780388)
- fix(api): Document the API for getting lists of a bookmark. fixes [#&#8203;2030](karakeep-app/karakeep#2030) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7f138b9`](karakeep-app/karakeep@7f138b99)
- feat: make list dropdown searchable in Manage Lists modal ([#&#8203;2029](karakeep-app/karakeep#2029)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`87053d2`](karakeep-app/karakeep@87053d2e)
- fix: fix dev script shebang for better compatibility ([#&#8203;2019](karakeep-app/karakeep#2019)) - [@&#8203;maya-doshi](https://github.com/maya-doshi) in [`dcddda5`](karakeep-app/karakeep@dcddda56)
- fix: Correct grammatical errors in prompts ([#&#8203;2020](karakeep-app/karakeep#2020)) - [@&#8203;atsggx](https://github.com/atsggx) in [`f1e8cea`](karakeep-app/karakeep@f1e8cea2)
- docs: Add karakeep-sync to community projects ([#&#8203;1994](karakeep-app/karakeep#1994)) - [@&#8203;sidoshi](https://github.com/sidoshi) in [`36ffbdf`](karakeep-app/karakeep@36ffbdf8)
- fix: round feed refresh hour for idempotency ([#&#8203;2013](karakeep-app/karakeep#2013)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`bae8386`](karakeep-app/karakeep@bae8386d)
- fix: fix show no bookmark page when there isn't search results - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`57d731b`](karakeep-app/karakeep@57d731ba)
- fix: Disable idempotency keys for search - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b6867be`](karakeep-app/karakeep@b6867be4)
- feat: Restate-based queue plugin ([#&#8203;2011](karakeep-app/karakeep#2011)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`74a1f7b`](karakeep-app/karakeep@74a1f7b6)
- feat: Revamp import experience ([#&#8203;2001](karakeep-app/karakeep#2001)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`4a580d7`](karakeep-app/karakeep@4a580d71)
- docs: Add doc updates for prometheus metrics ([#&#8203;1957](karakeep-app/karakeep#1957)) - [@&#8203;claytono](https://github.com/claytono) in [`5e331a7`](karakeep-app/karakeep@5e331a7d)
- fix: fix public list sharing for empty lists ([#&#8203;1990](karakeep-app/karakeep#1990)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7df6d94`](karakeep-app/karakeep@7df6d942)
- feat: recursive list delete ([#&#8203;1989](karakeep-app/karakeep#1989)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7d0b414`](karakeep-app/karakeep@7d0b414f)
- feat: use jpegs for screenshots instead of pngs - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`ed1f24f`](karakeep-app/karakeep@ed1f24f2)
- feat: Stop downloading video/audio in playwright - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`37845f9`](karakeep-app/karakeep@37845f99)
- fix: Abort dangling processing when crawler is aborted ([#&#8203;1988](karakeep-app/karakeep#1988)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9eecda1`](karakeep-app/karakeep@9eecda18)
- fix: Cleanup temp assets on monolith timeout - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`8dd84ef`](karakeep-app/karakeep@8dd84ef5)
- chore: Silence lint on <a> and <img> tags when it's intentional - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`cdbedf6`](karakeep-app/karakeep@cdbedf6c)
- fix: dont re-enqueue indexing for a bookmark already pending indexing - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`e395ac2`](karakeep-app/karakeep@e395ac27)
- feat: Add tag search and pagination ([#&#8203;1987](karakeep-app/karakeep#1987)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`62f7d90`](karakeep-app/karakeep@62f7d900)
- fix: optimize memory usage of tag listing - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`9fe09bf`](karakeep-app/karakeep@9fe09bfa)
- deps: Upgrade oxlint to 1.16 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`bbc5e6c`](karakeep-app/karakeep@bbc5e6c2)
- fix: fix bundling liteque in the workers - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`851d3e2`](karakeep-app/karakeep@851d3e29)
- refactor: Move callsites to liteque to be behind a plugin - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`8d32055`](karakeep-app/karakeep@8d320554)
- fix(dev): worker not started properly in helper start script ([#&#8203;1946](karakeep-app/karakeep#1946)) - [@&#8203;xuatz](https://github.com/xuatz) in [`6ba61b4`](karakeep-app/karakeep@6ba61b46)
- feat: Regen api keys - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`7671f4f`](karakeep-app/karakeep@7671f4ff)
- release(cli): Bump CLI version to 0.27.1 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`69ef2ff`](karakeep-app/karakeep@69ef2ffe)
- feat(cli): Give more targetting options for dump/migrate/wipe - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`6501f69`](karakeep-app/karakeep@6501f69a)
- release(cli): Bump CLI version to 0.27.0 - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`0700aab`](karakeep-app/karakeep@0700aab8)
- feat(cli): Implement a full account dump archive - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`b9a8ca2`](karakeep-app/karakeep@b9a8ca29)
- feat(cli): Implement a wipe command in the CLI - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`bc0e746`](karakeep-app/karakeep@bc0e7461)
- feat: Add scripts to migrate all content from one server to the other - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`783f72c`](karakeep-app/karakeep@783f72cb)
- fix(web): Handle user deletion more gracefully - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`92e357f`](karakeep-app/karakeep@92e357f1)
- feat: A better looking catch all error boundary - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d53b282`](karakeep-app/karakeep@d53b2826)
- fix(web): fix error when attempting to merge tags. fixes [#&#8203;1938](karakeep-app/karakeep#1938) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`d173b10`](karakeep-app/karakeep@d173b101)
- feat: Add Create Tag button to tags page ([#&#8203;1942](karakeep-app/karakeep#1942)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`820b7e6`](karakeep-app/karakeep@820b7e65)
- chore: fix claude code action - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`c2dcb9d`](karakeep-app/karakeep@c2dcb9dc)
- refactor: strongly type the search plugin interface - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`bf5bf99`](karakeep-app/karakeep@bf5bf996)
- feat(search): add title search qualifier ([#&#8203;1940](karakeep-app/karakeep#1940)) - [@&#8203;MohamedBassem](https://github.com/MohamedBassem) in [`a92ada7`](karakeep-app/karakeep@a92ada77)
- feat(extension): add current tab title while saving from extension ([#&#8203;1930](karakeep-app/karakeep#1930)) - [@&#8203;Abel](https://github.com/Abel) in [`b594ff0`](karakeep-app/karakeep@b594ff09)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

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

♻ **Rebasing**: Whenever PR is behind base branch, 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 [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi41LjAiLCJ1cGRhdGVkSW5WZXIiOiI0Mi41LjAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbImltYWdlIl19-->

Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/2006
Co-authored-by: Renovate Bot <[email protected]>
Co-committed-by: Renovate Bot <[email protected]>
@MohamedBassem MohamedBassem deleted the codex/add-what-s-new-modal-after-upgrades branch November 16, 2025 12:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

What's new

2 participants