[Feature Request]: Add `chat.bsky.group` namespace and group join-link embed · Issue #321 · MasterJ93/ATProtoKit · GitHub
Skip to content

[Feature Request]: Add chat.bsky.group namespace and group join-link embed #321

Open

Description

@KC-2001MS

Summary

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 sendMessage messageInput.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.

Cross-reference

References

Activity

  1. KC-2001MS commented on Jul 17, 2026

    @KC-2001MS
    ContributorAuthor

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    new featureNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions