Create, update, and manage Urbit groups including membership, roles, and navigation.
async function createGroup(params: { group: db.Group; memberIds?: string[]; placeHolderTitle?: string }): Promise<db.Group>;Creates a new group with the specified metadata and optionally invites initial members.
Example:
const newGroup = await createGroup({
group: {
id: '', // Auto-generated by backend
title: 'Book Club',
description: 'A place to discuss our favorite books',
privacy: 'private',
iconImage: 'https://example.com/book-icon.png',
coverImage: 'https://example.com/books-banner.jpg',
currentUserIsMember: true,
currentUserIsHost: true,
hostUserId: '~sampel-palnet'
},
memberIds: ['~zod', '~bus', '~nec']
});
// Returns: { id: '~sampel-palnet/book-club', title: 'Book Club', ... }async function getGroup(groupId: string): Promise<db.Group>;Retrieves a single group by its ID.
Example:
const group = await getGroup('~sampel-palnet/book-club');
// Returns: {
// id: '~sampel-palnet/book-club',
// title: 'Book Club',
// description: 'A place to discuss books',
// privacy: 'private',
// hostUserId: '~sampel-palnet',
// memberCount: 42,
// channels: [...],
// members: [...]
// }async function getGroups(): Promise<db.Group[]>;Retrieves all groups the current user has joined.
Response Data: Array of Group objects containing:
id- Group identifier (e.g.,~sampel-palnet/my-group)title- Display namedescription- Group descriptioniconImage/coverImage- Image URLsprivacy-'public'|'private'|'secret'hostUserId- Ship that hosts the groupcurrentUserIsMember/currentUserIsHost- Membership flagsmemberCount- Number of memberslastPostAt- Timestamp of most recent postchannels- Array ofChannelobjectsmembers- Array ofChatMemberobjectsroles- Array ofGroupRoleobjectsnavSections- Navigation sections
Example:
const groups = await getGroups();
// Returns: [
// { id: '~sampel-palnet/book-club', title: 'Book Club', privacy: 'private', ... },
// { id: '~zod/public-chat', title: 'Public Chat', privacy: 'public', ... }
// ]async function updateGroupMeta(params: { groupId: string; meta: ub.GroupMeta }): Promise<void>;Updates a group's metadata (title, description, image, cover).
Example:
await updateGroupMeta({
groupId: '~sampel-palnet/book-club',
meta: {
title: 'Sci-Fi Book Club',
description: 'Now focusing on science fiction novels',
image: 'https://example.com/scifi-icon.png',
cover: 'https://example.com/space-banner.jpg'
}
});async function deleteGroup(groupId: string): Promise<void>;Permanently deletes a group.
async function updateGroupPrivacy(params: { groupId: string; oldPrivacy: GroupPrivacy; newPrivacy: GroupPrivacy }): Promise<void>;Changes a group's privacy setting between 'public', 'private', and 'secret'.
async function inviteGroupMembers(params: { groupId: string; contactIds: string[] }): Promise<void>;Sends invitations to the specified users to join a group.
Example:
await inviteGroupMembers({
groupId: '~sampel-palnet/book-club',
contactIds: ['~zod', '~bus', '~nec', '~littel-wolfur']
});async function acceptGroupJoin(params: { groupId: string; contactIds: string[] }): Promise<void>;Approves pending join requests from the specified users.
async function rejectGroupJoin(params: { groupId: string; contactIds: string[] }): Promise<void>;Denies pending join requests from the specified users.
async function cancelGroupJoin(groupId: string): Promise<void>;Cancels the current user's pending join request for a group.
async function leaveGroup(groupId: string): Promise<void>;Removes the current user from a group.
async function requestGroupInvitation(groupId: string): Promise<void>;Sends a join request ("knock") to a private group.
async function rescindGroupInvitationRequest(groupId: string): Promise<void>;Withdraws a previously sent join request for a group.
async function kickUsersFromGroup(params: { groupId: string; contactIds: string[] }): Promise<void>;Removes the specified users from a group without banning them.
Example:
await kickUsersFromGroup({
groupId: '~sampel-palnet/book-club',
contactIds: ['~misbehaving-user']
});async function banUsersFromGroup(params: { groupId: string; contactIds: string[] }): Promise<void>;Bans the specified users from a group, preventing them from rejoining.
async function unbanUsersFromGroup(params: { groupId: string; contactIds: string[] }): Promise<void>;Removes a ban on the specified users.
async function addGroupRole(params: { groupId: string; roleId: string; meta: db.ClientMeta }): Promise<void>;Creates a new role in a group.
Example:
await addGroupRole({
groupId: '~sampel-palnet/book-club',
roleId: 'moderator',
meta: {
title: 'Moderator',
description: 'Can manage posts and members',
iconImage: 'https://example.com/mod-badge.png'
}
});async function updateGroupRole(params: { groupId: string; roleId: string; meta: db.ClientMeta }): Promise<void>;Updates an existing role's metadata.
async function deleteGroupRole(params: { groupId: string; roleId: string }): Promise<void>;Removes a role from a group.
async function addMembersToRole(params: { groupId: string; roleId: string; ships: string[] }): Promise<void>;Assigns a role to the specified group members.
Example:
await addMembersToRole({
groupId: '~sampel-palnet/book-club',
roleId: 'moderator',
ships: ['~zod', '~bus']
});async function removeMembersFromRole(params: { groupId: string; roleId: string; ships: string[] }): Promise<void>;Removes a role from the specified group members.
async function addNavSection(params: { groupId: string; navSection: db.GroupNavSection }): Promise<void>;Creates a new navigation section for organizing channels.
Example:
await addNavSection({
groupId: '~sampel-palnet/book-club',
navSection: {
id: 'section-resources',
sectionId: 'resources',
title: 'Resources',
description: 'Helpful links and documents',
sectionIndex: 2
}
});async function updateNavSection(params: { groupId: string; navSection: db.GroupNavSection }): Promise<void>;Updates an existing navigation section's metadata.
async function deleteNavSection(params: { sectionId: string; groupId: string }): Promise<void>;Removes a navigation section from a group.
async function addChannelToNavSection(params: { groupId: string; navSectionId: string; channelId: string }): Promise<void>;Moves or assigns a channel to a specific navigation section.
async function updateGroupNavigation(params: { groupId: string; navSections: db.GroupNavSection[] }): Promise<void>;Batch update of all navigation sections and their channel orderings.
async function addChannelToGroup(params: { channelId: string; groupId: string; sectionId: string }): Promise<void>;Adds a channel to a group in the specified navigation section.
Example:
await addChannelToGroup({
channelId: 'chat/~sampel-palnet/announcements',
groupId: '~sampel-palnet/book-club',
sectionId: 'default'
});async function updateChannel(params: { groupId: string; channelId: string; channel: GroupChannelV7 }): Promise<void>;Updates a channel's configuration including metadata and reader permissions.
async function deleteChannel(params: { groupId: string; channelId: string }): Promise<void>;Removes a channel from a group. All channel content will be deleted.
async function getPinnedItems(): Promise<db.Pin[]>;Retrieves the current user's pinned items.
Response Data: Array of Pin objects:
type-'group'|'channel'|'dm'|'groupDm'itemId- ID of the pinned itemindex- Display order position
async function pinItem(itemId: string): Promise<void>;Adds an item to the user's pinned items list.
async function unpinItem(itemId: string): Promise<void>;Removes an item from the user's pinned items list.
async function getGroupPreview(groupId: string): Promise<db.Group>;Retrieves preview information about a group without joining it.
async function getChannelPreview(channelId: string): Promise<db.Channel | null>;Retrieves preview information about a channel without joining its group.
async function findGroupsHostedBy(userId: string): Promise<db.Group[]>;Discovers all groups hosted by a specific user that the current user can see.