You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Feature Request]: Add chat.bsky.group namespace and group join-link embed #321
The upstream lexicon now ships a full chat.bsky.group.* namespace (group lifecycle, membership, join links, join requests) plus a chat.bsky.embed.joinLink embed object. None of these are reflected in ATProtoKit, so group conversation management is unreachable through the typed pipeline.
Pain points
The entire group surface (lifecycle, membership, join links, join requests, and the messageInput.embed join-link) has to be hand-built on raw XRPC, re-implementing the api.bsky.chat routing and auth plumbing that ATProtoBlueskyChat already handles for every other chat call.
Considered Alternatives
Raw XRPC for the entire group surface — loses typed pipeline, isRelatedToBskyChat host routing, and forces every consumer to repeat the same auth plumbing.
Is this a breaking change?
No
Library Examples
N/A
Additional Context
Missing lexicons
Lexicon
Suggested wrapper
chat.bsky.embed.joinLink
ChatBskyLexicon.Embed.JoinLink embed object, selectable in the sendMessagemessageInput.embed union
chat.bsky.group.addMembers
addMembers(to:memberDIDs:)
chat.bsky.group.approveJoinRequest
approveJoinRequest(for:requesterDID:)
chat.bsky.group.createGroup
createGroup(name:memberDIDs:memberLimit:)
chat.bsky.group.createJoinLink
createJoinLink(for:)
chat.bsky.group.defs
types only
chat.bsky.group.disableJoinLink
disableJoinLink(for:)
chat.bsky.group.editGroup
editGroup(by:name:)
chat.bsky.group.editJoinLink
editJoinLink(for:expiresAt:)
chat.bsky.group.enableJoinLink
enableJoinLink(for:)
chat.bsky.group.getJoinLinkPreviews
getJoinLinkPreviews(for:)
chat.bsky.group.listJoinRequests
listJoinRequests(for:limit:cursor:)
chat.bsky.group.listMutualGroups
listMutualGroups(with:limit:cursor:)
chat.bsky.group.rejectJoinRequest
rejectJoinRequest(for:requesterDID:)
chat.bsky.group.removeMembers
removeMembers(from:memberDIDs:)
chat.bsky.group.requestJoin
requestJoin(by:)
chat.bsky.group.updateJoinRequestsRead
updateJoinRequestsRead(for:)
chat.bsky.group.withdrawJoinRequest
withdrawJoinRequest(by:)
Wrappers follow the existing ATProtoBlueskyChat convention (method name mirrors the lexicon's final segment, no artificial Group prefix — matching getConversation, listConversations). All sit on api.bsky.chat and require isRelatedToBskyChat: true routing, and the group namespace maps to ChatBskyLexicon.Group.
As we discussed, I've filed the missing features as separate feature requests for tracking. None of them are urgent on my end, so I plan to follow up on each as the need actually arises.
Given that ATLexiconC is on the horizon, please feel free to handle these at your own pace — there's no rush, and it may well make sense to let ATLexiconC cover some of them rather than typing everything out by hand. I'm happy to help and provide corrections whenever it's useful.
Activity
KC-2001MS commentedon Jul 17, 2026
As we discussed, I've filed the missing features as separate feature requests for tracking. None of them are urgent on my end, so I plan to follow up on each as the need actually arises.
Given that ATLexiconC is on the horizon, please feel free to handle these at your own pace — there's no rush, and it may well make sense to let ATLexiconC cover some of them rather than typing everything out by hand. I'm happy to help and provide corrections whenever it's useful.