[PR #2146] [MERGED] feat: Add collaborative lists #1998

Closed
opened 2026-03-02 12:00:07 +03:00 by kerem · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/karakeep-app/karakeep/pull/2146
Author: @MohamedBassem
Created: 11/16/2025
Status: Merged
Merged: 11/17/2025
Merged by: @MohamedBassem

Base: mainHead: claude/collaborative-lists-013AvDvMqkoszDVcSoCYgBcM


📝 Commits (10+)

  • 9b63d68 feat: Add collaborative lists backend implementation
  • 6367284 feat: Add collaborative lists frontend UI
  • cd44b6a fix typecheck
  • 84883a1 add collaborator by email
  • 5c22d39 add shared list in the sidebar
  • e9d9679 fix perm issue
  • 7f551d3 hide UI components from non list owners
  • 8fb7e69 list leaving
  • 2659d0a fix shared bookmarks showing up in homepage
  • aee9acb fix getBookmark access check

📊 Changes

40 files changed (+6705 additions, -596 deletions)

View changed files

📝 apps/web/app/dashboard/lists/[listId]/page.tsx (+4 -1)
📝 apps/web/app/reader/[bookmarkId]/page.tsx (+8 -6)
📝 apps/web/components/dashboard/bookmarks/BookmarkLayoutAdaptingCard.tsx (+5 -1)
📝 apps/web/components/dashboard/bookmarks/BookmarkOptions.tsx (+149 -118)
📝 apps/web/components/dashboard/bookmarks/BookmarkTagsEditor.tsx (+8 -1)
📝 apps/web/components/dashboard/bookmarks/SummarizeBookmarkArea.tsx (+40 -24)
📝 apps/web/components/dashboard/bookmarks/TagList.tsx (+26 -10)
📝 apps/web/components/dashboard/bookmarks/TagsEditor.tsx (+3 -1)
📝 apps/web/components/dashboard/highlights/AllHighlights.tsx (+1 -1)
📝 apps/web/components/dashboard/highlights/HighlightCard.tsx (+13 -9)
📝 apps/web/components/dashboard/lists/CollapsibleBookmarkLists.tsx (+3 -11)
apps/web/components/dashboard/lists/LeaveListConfirmationDialog.tsx (+83 -0)
📝 apps/web/components/dashboard/lists/ListHeader.tsx (+24 -6)
📝 apps/web/components/dashboard/lists/ListOptions.tsx (+118 -43)
apps/web/components/dashboard/lists/ManageCollaboratorsModal.tsx (+345 -0)
📝 apps/web/components/dashboard/preview/AttachmentBox.tsx (+38 -28)
📝 apps/web/components/dashboard/preview/BookmarkHtmlHighlighter.tsx (+6 -0)
📝 apps/web/components/dashboard/preview/BookmarkPreview.tsx (+11 -6)
📝 apps/web/components/dashboard/preview/HighlightsBox.tsx (+12 -2)
📝 apps/web/components/dashboard/preview/LinkContentSection.tsx (+4 -0)

...and 20 more files

📄 Description

This commit implements the core backend functionality for collaborative
lists, allowing multiple users to share and interact with bookmark lists.

Database changes:

  • Add listCollaborators table to track users with access to lists and
    their roles (viewer/editor)
  • Add addedBy field to bookmarksInLists to track who added bookmarks
  • Add relations for collaborative list functionality

Access control updates:

  • Update List model to support role-based access (owner/editor/viewer)
  • Add methods to check and enforce permissions for list operations
  • Update Bookmark model to allow access through collaborative lists
  • Modify bookmark queries to include bookmarks from collaborative lists

List collaboration features:

  • Add/remove/update collaborators
  • Get list of collaborators
  • Get lists shared with current user
  • Only manual lists can have collaborators

Bookmark cloning:

  • Add clone() method to Bookmark model
  • Collaborators can clone shared bookmarks to their own collection
  • Cloning copies bookmark content, metadata, and tags
  • Original bookmark remains unchanged

tRPC procedures:

  • addCollaborator: Add a user as a collaborator to a list
  • removeCollaborator: Remove a collaborator from a list
  • updateCollaboratorRole: Change a collaborator's role
  • getCollaborators: Get all collaborators for a list
  • getSharedWithMe: Get all lists shared with the current user
  • cloneBookmark: Clone a bookmark to the current user's collection

Implementation notes:

  • Editors can add/remove bookmarks from the list (must own the bookmark)
  • Viewers can only view bookmarks in the list
  • Only the list owner can manage collaborators and list metadata
  • Smart lists cannot have collaborators (only manual lists)
  • Users cannot edit bookmarks they don't own, even in shared lists

Fixes #37


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/karakeep-app/karakeep/pull/2146 **Author:** [@MohamedBassem](https://github.com/MohamedBassem) **Created:** 11/16/2025 **Status:** ✅ Merged **Merged:** 11/17/2025 **Merged by:** [@MohamedBassem](https://github.com/MohamedBassem) **Base:** `main` ← **Head:** `claude/collaborative-lists-013AvDvMqkoszDVcSoCYgBcM` --- ### 📝 Commits (10+) - [`9b63d68`](https://github.com/karakeep-app/karakeep/commit/9b63d68516abff76ed2c4b5a9bae82878d861c0a) feat: Add collaborative lists backend implementation - [`6367284`](https://github.com/karakeep-app/karakeep/commit/6367284b0ec453101d1631e60ca82aa9b03bcd84) feat: Add collaborative lists frontend UI - [`cd44b6a`](https://github.com/karakeep-app/karakeep/commit/cd44b6a9761fdd1c9255a4ac1b68a2608d47bb6d) fix typecheck - [`84883a1`](https://github.com/karakeep-app/karakeep/commit/84883a1c9763c449613e6471cf66c14c6304dc25) add collaborator by email - [`5c22d39`](https://github.com/karakeep-app/karakeep/commit/5c22d39d87004ae6d8b6a0d81cdd89899a607d50) add shared list in the sidebar - [`e9d9679`](https://github.com/karakeep-app/karakeep/commit/e9d9679b7882c7e4db9db5405fbc892752a4d07a) fix perm issue - [`7f551d3`](https://github.com/karakeep-app/karakeep/commit/7f551d3465f98a529680322ddb7317f18e90a9c6) hide UI components from non list owners - [`8fb7e69`](https://github.com/karakeep-app/karakeep/commit/8fb7e69d99cd8baaf17e53fe409a9523b1f90169) list leaving - [`2659d0a`](https://github.com/karakeep-app/karakeep/commit/2659d0af62b6cd729ac77a61fa6f957f670c9b71) fix shared bookmarks showing up in homepage - [`aee9acb`](https://github.com/karakeep-app/karakeep/commit/aee9acb597c97a564543917707335dbff67be431) fix getBookmark access check ### 📊 Changes **40 files changed** (+6705 additions, -596 deletions) <details> <summary>View changed files</summary> 📝 `apps/web/app/dashboard/lists/[listId]/page.tsx` (+4 -1) 📝 `apps/web/app/reader/[bookmarkId]/page.tsx` (+8 -6) 📝 `apps/web/components/dashboard/bookmarks/BookmarkLayoutAdaptingCard.tsx` (+5 -1) 📝 `apps/web/components/dashboard/bookmarks/BookmarkOptions.tsx` (+149 -118) 📝 `apps/web/components/dashboard/bookmarks/BookmarkTagsEditor.tsx` (+8 -1) 📝 `apps/web/components/dashboard/bookmarks/SummarizeBookmarkArea.tsx` (+40 -24) 📝 `apps/web/components/dashboard/bookmarks/TagList.tsx` (+26 -10) 📝 `apps/web/components/dashboard/bookmarks/TagsEditor.tsx` (+3 -1) 📝 `apps/web/components/dashboard/highlights/AllHighlights.tsx` (+1 -1) 📝 `apps/web/components/dashboard/highlights/HighlightCard.tsx` (+13 -9) 📝 `apps/web/components/dashboard/lists/CollapsibleBookmarkLists.tsx` (+3 -11) ➕ `apps/web/components/dashboard/lists/LeaveListConfirmationDialog.tsx` (+83 -0) 📝 `apps/web/components/dashboard/lists/ListHeader.tsx` (+24 -6) 📝 `apps/web/components/dashboard/lists/ListOptions.tsx` (+118 -43) ➕ `apps/web/components/dashboard/lists/ManageCollaboratorsModal.tsx` (+345 -0) 📝 `apps/web/components/dashboard/preview/AttachmentBox.tsx` (+38 -28) 📝 `apps/web/components/dashboard/preview/BookmarkHtmlHighlighter.tsx` (+6 -0) 📝 `apps/web/components/dashboard/preview/BookmarkPreview.tsx` (+11 -6) 📝 `apps/web/components/dashboard/preview/HighlightsBox.tsx` (+12 -2) 📝 `apps/web/components/dashboard/preview/LinkContentSection.tsx` (+4 -0) _...and 20 more files_ </details> ### 📄 Description This commit implements the core backend functionality for collaborative lists, allowing multiple users to share and interact with bookmark lists. Database changes: - Add listCollaborators table to track users with access to lists and their roles (viewer/editor) - Add addedBy field to bookmarksInLists to track who added bookmarks - Add relations for collaborative list functionality Access control updates: - Update List model to support role-based access (owner/editor/viewer) - Add methods to check and enforce permissions for list operations - Update Bookmark model to allow access through collaborative lists - Modify bookmark queries to include bookmarks from collaborative lists List collaboration features: - Add/remove/update collaborators - Get list of collaborators - Get lists shared with current user - Only manual lists can have collaborators Bookmark cloning: - Add clone() method to Bookmark model - Collaborators can clone shared bookmarks to their own collection - Cloning copies bookmark content, metadata, and tags - Original bookmark remains unchanged tRPC procedures: - addCollaborator: Add a user as a collaborator to a list - removeCollaborator: Remove a collaborator from a list - updateCollaboratorRole: Change a collaborator's role - getCollaborators: Get all collaborators for a list - getSharedWithMe: Get all lists shared with the current user - cloneBookmark: Clone a bookmark to the current user's collection Implementation notes: - Editors can add/remove bookmarks from the list (must own the bookmark) - Viewers can only view bookmarks in the list - Only the list owner can manage collaborators and list metadata - Smart lists cannot have collaborators (only manual lists) - Users cannot edit bookmarks they don't own, even in shared lists Fixes #37 --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
kerem 2026-03-02 12:00:07 +03:00
Sign in to join this conversation.
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
starred/karakeep#1998
No description provided.