syncfusion-blazor-chat-ui — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited syncfusion-blazor-chat-ui (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Build feature-rich conversational chat interfaces with the Syncfusion Blazor Chat UI component. This skill provides complete guidance for creating multi-user messaging applications, chat panels, and interactive conversation UIs in Blazor Server, WebAssembly, and Web App projects.
The SfChatUI component is a specialized UI control for building conversational chat applications. It manages the complete chat interface including:
📄 Read: references/getting-started.md
📄 Read: references/messages-and-users.md
📄 Read: references/user-profiles-avatars.md
📄 Read: references/typing-indicators.md
📄 Read: references/timestamps-and-formatting.md
📄 Read: references/templates-and-customization.md
📄 Read: references/attachments-and-events.md
📄 Read: references/programmatic-api.md
📄 Read: references/advanced-features.md
@using Syncfusion.Blazor.InteractiveChat
<div style="height: 500px; width: 600px;">
<SfChatUI ID="chatUser" User="CurrentUser" Messages="Messages"></SfChatUI>
</div>
@code {
private UserModel CurrentUser = new UserModel
{
ID = "user1",
User = "Albert",
AvatarBgColor = "#4a90e2"
};
private UserModel OtherUser = new UserModel
{
ID = "user2",
User = "Michale Suyama",
AvatarBgColor = "#7cb342"
};
private List<ChatMessage> Messages = new()
{
new ChatMessage
{
Text = "Hi, how are you?",
Author = new UserModel { ID = "user1", User = "Albert" }
},
new ChatMessage
{
Text = "I'm doing great! How about you?",
Author = new UserModel { ID = "user2", User = "Michale Suyama" }
}
};
}Display multiple users with online/offline status indicators:
<SfChatUI ID="chat" User="CurrentUser" Messages="Messages">
</SfChatUI>
@code {
private UserModel CurrentUser = new UserModel
{
ID = "user1",
User = "Albert",
StatusIconCss = "e-icons e-user-online"
};
private List<ChatMessage> Messages = new();
}Show when users are typing:
<SfChatUI
ID="chat"
User="CurrentUser"
Messages="Messages"
TypingUsers="TypingUsers">
</SfChatUI>
@code {
private List<UserModel> TypingUsers = new();
private void UserStartTyping(UserModel user)
{
TypingUsers.Add(user);
StateHasChanged();
}
}Personalize message appearance:
<SfChatUI ID="chat" User="CurrentUser" Messages="Messages">
<MessageTemplate>
<div class="custom-message">
<strong>@context.Message.Author.User</strong>
<p>@((MarkupString)context.Message.Text)</p>
</div>
</MessageTemplate>
</SfChatUI>Enable users to share files:
<SfChatUI ID="chat" User="CurrentUser" Messages="Messages">
<ChatUIAttachment
Enable
SaveUrl="@SaveUrl"
RemoveUrl="@RemoveUrl"
AllowedFileTypes=".pdf,.docx,.jpg,.png">
</ChatUIAttachment>
</SfChatUI>
@code {
private string SaveUrl = "api/upload/save";
private string RemoveUrl = "api/upload/remove";
}Automatically scroll to bottom and navigate to specific messages:
<SfChatUI
@ref="chatRef"
ID="chat"
User="CurrentUser"
Messages="Messages"
AutoScrollToBottom="true">
</SfChatUI>
<button @onclick="ScrollToBottom">Go to Latest</button>
<button @onclick="FocusInput">Focus Input</button>
@code {
private SfChatUI chatRef;
private async Task ScrollToBottom()
{
await chatRef.ScrollToBottomAsync();
}
private async Task FocusInput()
{
await chatRef.FocusAsync();
}
}Edit existing messages programmatically:
<SfChatUI @ref="chatRef" ID="chat" User="CurrentUser" Messages="Messages">
</SfChatUI>
@code {
private SfChatUI chatRef;
private async Task EditMessage(string messageId, string newText)
{
var message = Messages.FirstOrDefault(m => m.ID == messageId);
if (message != null)
{
message.Text = newText;
await chatRef.UpdateMessageAsync(message, messageId);
}
}
}Enable users to mention others in messages:
<SfChatUI
ID="chat"
User="CurrentUser"
Messages="Messages"
MentionChar="@"
MentionUsers="AllUsers"
ValueSelecting="@OnMentionSelected">
</SfChatUI>
@code {
private List<UserModel> AllUsers = new()
{
new UserModel { ID = "user1", User = "Albert" },
new UserModel { ID = "user2", User = "Michale" },
new UserModel { ID = "user3", User = "Reena" }
};
private void OnMentionSelected(MentionValueSelectingEventArgs<UserModel> args)
{
Console.WriteLine($"User mentioned: {args.ItemData.User}");
}
}Display all messages left-aligned for group chat style:
<SfChatUI
ID="chat"
User="CurrentUser"
Messages="Messages"
EnableCompactMode="true">
</SfChatUI>
@code {
// In compact mode, all messages appear on left side
// Useful for group chat or support ticket interfaces
}| Property | Type | Purpose |
|---|---|---|
ID | string | Unique component identifier |
User | UserModel | Current logged-in user |
Messages | List\<ChatMessage\> | Conversation messages collection |
ShowTimestamp | bool | Display message timestamps (default: true) |
TimestampFormat | string | Date/time format (default: "dd/MM/yyyy hh:mm tt") |
ShowTimeBreak | bool | Display date separators between messages |
TypingUsers | List\<UserModel\> | Users currently typing |
AutoScrollToBottom | bool | Auto-scroll to bottom on new messages (default: false) |
EnableCompactMode | bool | Align all messages to left side (default: false) |
Height | string | Component height (default: "100%") |
Width | string | Component width (default: "100%") |
HeaderText | string | Header text display (default: "Chat") |
ShowHeader | bool | Show/hide header (default: true) |
ShowFooter | bool | Show/hide footer (default: true) |
Placeholder | string | Input placeholder text (default: "Type your message…") |
Suggestions | List\<string\> | Quick reply suggestions |
MentionChar | char | Mention trigger character (default: '@') |
MentionUsers | List\<UserModel\> | Users available for mention |
LoadOnDemand | bool | Load messages on demand (default: false) |
CssClass | string | Custom CSS styling |
EnableRtl | bool | Right-to-left direction support (default: false) |
EmptyChatTemplate | RenderFragment | Custom empty state content |
MessageTemplate | RenderFragment\<MessageTemplateContext\> | Custom message rendering |
TimeBreakTemplate | RenderFragment\<TimeBreakTemplateContext\> | Custom date separator |
TypingUsersTemplate | RenderFragment\<TypingUsersTemplateContext\> | Custom typing indicator |
SuggestionTemplate | RenderFragment\<SuggestionTemplateContext\> | Custom suggestion display |
FooterTemplate | RenderFragment | Custom footer area |
PreviewTemplate | RenderFragment\<PreviewTemplateContext\> | Custom attachment preview |
The Chat UI component provides async methods for programmatic control:
Scrolls the chat to the bottom, useful for showing latest messages:
@ref="chatRef"
private SfChatUI chatRef;
private async Task ShowLatestMessages()
{
await chatRef.ScrollToBottomAsync();
}Navigates to a specific message by ID:
private async Task NavigateToMessage(string targetMessageId)
{
await chatRef.ScrollToMessageAsync(targetMessageId);
}Updates an existing message content:
private async Task EditMessage(string messageId, string newText)
{
var message = Messages.FirstOrDefault(m => m.ID == messageId);
if (message != null)
{
message.Text = newText;
await chatRef.UpdateMessageAsync(message, messageId);
}
}Sets focus on the chat input field:
private async Task FocusChatInput()
{
await chatRef.FocusAsync();
}~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.