RocketChat/Rocket.Chat · error · Meteor.Error
error-creator-not-in-room
error-creator-not-in-room
Error message
The creator user must be part of the direct room
What it means
createDirectRoom throws error-creator-not-in-room when a federated direct room is being created but the user specified in options.creator does not appear among the resolved room members. For federated DMs the server needs a local creator record to build INVITED subscriptions with an inviter, so a missing creator makes the room state impossible to construct.
Source
Thrown at apps/meteor/server/lib/rooms/createDirectRoom.ts:160
$setOnInsert: generateSubscription(roomMembers[0].name! || roomMembers[0].username!, roomMembers[0].username!, roomMembers[0], {
...options?.subscriptionExtra,
}),
},
{ upsert: true },
);
if (modifiedCount || upsertedCount) {
void notifyOnSubscriptionChangedByRoomIdAndUserId(rid, roomMembers[0]._id, modifiedCount ? 'updated' : 'inserted');
}
} else {
const memberIds = roomMembers.map((member) => member._id);
const membersWithPreferences: IUser[] = await Users.find(
{ _id: { $in: memberIds } },
{ projection: { 'username': 1, 'settings.preferences': 1 } },
).toArray();
const creatorUser = roomMembers.find((member) => member._id === options?.creator);
if (roomExtraData.federated && !creatorUser) {
throw new Meteor.Error('error-creator-not-in-room', 'The creator user must be part of the direct room');
}
const roomNames = getNameForDMs(roomMembers);
for (const member of membersWithPreferences) {
const subscriptionStatus: Partial<ISubscription> =
roomExtraData.federated && options.creator !== member._id && creatorUser
? {
status: 'INVITED',
inviter: {
_id: creatorUser._id,
username: creatorUser.username!,
name: creatorUser.name,
},
open: true,
unread: 1,
userMentions: 1,
}View on GitHub (pinned to 2a7de45707)
Solutions
- Ensure options.creator is set when creating federated direct rooms, e.g. { ...options, creator: options?.creator || owner?._id } (createRoom already does this for type 'd')
- Verify the creator user id is included in the members array passed to createDirectRoom so roomMembers.find(...) resolves it
- Check federation peer setup if the creator is a remote user: the local server must have the creator registered locally before creating the DM
Example fix
// before
await createDirectRoom(members, { federated: true }); // no creator
// after
await createDirectRoom(members, { federated: true }, { creator: owner._id }); Defensive patterns
Strategy: validation
Validate before calling
const creatorId = options?.creator || owner._id;
const memberIds = new Set(members.map(m => typeof m === 'string' ? m : m._id));
if (extraData.federated && !memberIds.has(creatorId)) {
throw new Error(`Creator ${creatorId} must be included in members for federated DMs`);
}
await createDirectRoom(members, extraData, { creator: creatorId }); Type guard
const isCreatorInMembers = (
members: IUser[] | string[],
creatorId: string | undefined,
federated: boolean,
): boolean =>
!federated ||
(creatorId !== undefined &&
members.some(m => (typeof m === 'string' ? m === creatorId : m._id === creatorId))); Try / catch
try {
await createDirectRoom(members, extraData, { creator });
} catch (err) {
if (err instanceof Meteor.Error && err.error === 'error-creator-not-in-room') {
// include the creator id in members and retry once
}
throw err;
} Prevention
- Always pass a resolved creator id when federated: true
- Treat creator as an implicit member — validate membership before the call
- Unit-test federated DM creation with and without the creator in members
When it happens
Trigger: Calling createDirectRoom (directly or via createRoom/createDirectMessage) with roomExtraData.federated = true while options.creator is undefined or references a user id that is not in the members array resolved from the passed usernames/user objects. The check is `roomExtraData.federated && !creatorUser` where creatorUser = roomMembers.find(m => m._id === options?.creator).
Common situations: Federation apps calling the room creation API without passing creator; passing a creator id that was not included in the member list (e.g. expecting the server to add the creator implicitly); federation enabled in settings while an integration or app still uses the non-federated call shape.
Related errors
- error-federated-users-in-non-federated-rooms
- error-invalid-room
- error-federated-users-in-non-federated-rooms
- Federated user not found locally
- error-not-authorized-federation
AI-assisted analysis of RocketChat/Rocket.Chat@2a7de45707 (2026-08-18).
Data as JSON: /api/errors/8b7e6f2cc7307d0f.
Report an issue: GitHub.