Skip to main content
Cloud iMessage messages include a curated set of native metadata in addition to Spectrum’s cross-platform fields. The same fields are available on ordinary inbound messages, messages returned by space.getMessage(), and native outbound results. Synthetic events such as read receipts and group changes may omit them. When a streamed text send requires native edits, its returned record exposes the final nativeText but omits the first-send metadata snapshot because those lifecycle and formatting values no longer describe the edited message. Use space.getMessage() when you need the current native state afterward. Use imessage.is() when consuming the unified Spectrum message stream. It narrows the message to the iMessage-specific type:
The same guard works inside for await (const [, message] of spectrum.messages). nativeText preserves Apple’s original text because formatting and mention ranges use UTF-16 offsets into that string. Spectrum can split native multipart content into grouped messages, so rebuilding these offsets from message.content is not reliable:
Attachment metadata describes Apple’s transfer record; attachment bytes still live in Spectrum attachment content:
sendErrorCode === 0 means Apple recorded no send error. The metadata is intentionally curated: Spectrum does not expose the raw Advanced iMessage database row or unstable Apple-private fields.