TLCommentThread
Extends BaseRecord<'comment-thread', TLCommentThreadId>.
A comment thread. The thread owns the anchor (where the conversation lives on the canvas) and the resolution state; the messages themselves are TLComment records pointing at the thread via threadId, ordered by createdAt. v1 threads are flat — no nested replies.
Threads and comments are document records, but they're intended to be served through the sync server's object-store lane: gated by the session's objectAccess rather than isReadonly (so "can comment but not edit" is expressible), excluded from document snapshots and .tldr exports server-side, and persisted in a separate lane from the main document.
Opt-in: register with createTLSchema({ records: commentSchemaRecords }) on the server and the matching records option on the client — neither type is part of the default schema, and both sides must register them identically.
interface TLCommentThread extends BaseRecord<
"comment-thread",
TLCommentThreadId
> {}Properties
anchor
Where the thread is anchored on that page.
anchor: TLCommentAnchor;createdAt
createdAt: number;createdBy
Who started the thread. Client-supplied; sync servers are expected to stamp/verify it.
createdBy: string;id
readonly id: Id;isDeleted
Whether the thread is soft-deleted. Clients set the flag and leave the record in place. Sync servers are expected to enforce it as write-once and creator-only, reject client hard deletes, and drop flagged threads from future room loads.
isDeleted: boolean;meta
meta: JsonObject;pageId
The page the thread lives on.
pageId: TLPageId;resolved
Resolution state: when and by whom the thread was resolved, or null while open.
resolved: {
at: number;
by: string;
} | null;typeName
readonly typeName: TypeName;