Built for assistants.

Your question rises to the top and the answer streams in under it as Markdown, the way Siri answers. Photos run full width, cards you design sit inside the reply, and a status line tells people what the assistant is doing.

Recorded off the package, unedited. A long answer streams in word by word, a photo opens full screen on a tap, and a short answer carries its own card.

Two modifiers.

Hand it your messages as usual, then switch the style. Stream a reply by appending one message and rewriting its text as tokens arrive.

https://github.com/unionst/swift-chat.git
Version 1.0.6 or later. Or start from a complete app that streams Claude.
Chat(thread.messages, typingUsers: thread.thinking ? [assistant] : []) { message in
    Message(message.text, role: message.role, timestamp: message.sentAt)
        .messageMedia(message.media)
}
.chatStyle(.assistant)
.chatTypingStatus(thread.status)
.chatInputCapabilities([.camera, .photoLibrary, .files])
.onChatSend { text, media in
    await thread.send(text, media)
}