# Silent & System Messages

Sometimes you want to add system or transactional messages to channels such as: "your ride is waiting for you", "James updated the information for the trip", "You and Jane are now matched" and so on.

You may not want these messages to mark a channel as unread or increase the unread messages for users.

Silent messages are special messages that don't increase the unread messages count nor mark a channel as unread. Creating a silent message is very simple, you only need to include the `silent` field boolean field and set it to `true` .

<codetabs>

<codetabs-item value="kotlin" label="Kotlin">

```kotlin
val message = Message(
  text = "You and Jane are now matched!",
  user = systemUser,
  silent = true,
)
channelClient.sendMessage(message).enqueue { /* ... */ }
```

</codetabs-item>

<codetabs-item value="javascript" label="JavaScript">

```js
const text = "You completed your trip";
const message = {
  text,
  user: systemUser,
  silent: true,
  attachments: [{ type: "trip", ...tripData }],
};
await channel.sendMessage(message);
```

</codetabs-item>

<codetabs-item value="swift" label="Swift">

```swift
let channelController = client.channelController(for: .init(type: .messaging, id: "general"))

channelController.createNewMessage(text: "hello!", isSilent: true)
```

</codetabs-item>

<codetabs-item value="dart" label="Dart">

```dart
final text = 'You completed your trip';
const message = {
  text: text,
  user: systemUser,
  silent: true,
  attachments: tripAttachments,
};
await channel.sendMessage(message);
```

</codetabs-item>

<codetabs-item value="unreal" label="Unreal">

```cpp
FMessage Message{TEXT("You completed your trip")};
Message.User = SystemUser;
Message.bIsSilent = true;
Channel->SendMessage(Message);
```

</codetabs-item>

<codetabs-item value="php" label="PHP">

```php
$message = $channel->sendMessage([
	 'text' => 'You completed your trip',
  'silent' => true
 ],
	'jenny');
```

</codetabs-item>

<codetabs-item value="python" label="Python">

```python
message = {
  "text": "You completed your trip",
  "silent": True,
}

channel.send_message(message, user_id)
```

</codetabs-item>

<codetabs-item value="ruby" label="Ruby">

```ruby
# require 'stream-chat'

message = {
  text: "You completed your trip",
  silent: true,
}

channel.send_message(message, user_id)
```

</codetabs-item>

<codetabs-item value="go" label="Go">

```go
msg := &Message{Text: "You completed your trip"}

channel.SendMessage(ctx, msg, user.ID, func(msg *messageRequest) {
	msg.Message.Silent = true
})
```

</codetabs-item>

<codetabs-item value="csharp" label="C#">

```csharp
await messageClient.SendMessageAsync(channel.Type, channel.Id, new MessageRequest
{
  Text = "You completed your trip",
  Silent = true,
}, user.Id);
```

</codetabs-item>

<codetabs-item value="unity" label="Unity">

```csharp
// This message will not trigger events for channel members
var silentMessage = await channel.SendNewMessageAsync(new StreamSendMessageRequest
{
  Text = "System message",
  Silent = true
});
```

</codetabs-item>

<codetabs-item value="java" label="Java">

```java
// Android SDK
Message message = new Message();
message.setText("You and Jane are now matched!");
message.setUser(systemUser);
message.setSilent(true);

channelClient.sendMessage(message).enqueue(result -> { /* ... */ });

// Backend SDK
Message.send(type, id)
  .message(
    MessageRequestObject.builder()
      .text("You completed your trip")
      .userId(systemUserId)
      .silent(true)
      .build())
  .request();
```

</codetabs-item>

</codetabs>

<admonition type="info">

Existing messages cannot be turned into a silent message or vice versa.

</admonition>

<admonition type="info">

Silent replies will still increment a message's reply_count

</admonition>

<admonition type="info">

Silent messages do send push notifications by default. To skip our push notification service, mark the message with skip_push: true, as described [here](/chat/docs/<framework>/send_message/).

</admonition>

It is also possible to send system messages. System messages differ from normal messages in the way they are presented to the user. Like the name says, system messages are normally send from the system itself, but a user is able to send it as well by specifying `type: 'system'` with the message. The user who sends a system message client-side should have the `Create System Message` permission. Server-side system messages don't need that permission.

<codetabs>

<codetabs-item value="javascript" label="JavaScript">

```js
const text = "You completed your trip";
const message = {
  text,
  user: systemUser,
  type: "system",
};
await channel.sendMessage(message);
```

</codetabs-item>

<codetabs-item value="php" label="PHP">

```php
$message = $channel->sendMessage([
  'text' => 'You completed your trip',
  'type' => 'system'
],
 'jenny');
```

</codetabs-item>

<codetabs-item value="python" label="Python">

```python
message = {
  "text": "You completed your trip",
  "type": "system",
}

channel.send_message(message, user_id)
```

</codetabs-item>

<codetabs-item value="ruby" label="Ruby">

```ruby
message = {
  text: "You completed your trip",
  type: "system",
}

channel.send_message(message, user_id)
```

</codetabs-item>

<codetabs-item value="go" label="Go">

```go
msg := &Message{
	Text: "You completed your trip",
	Type: "system"
}

resp, err := ch.SendMessage(ctx, msg, systemUserID)
```

</codetabs-item>

<codetabs-item value="java" label="Java">

```java
// Backend SDK
Message.send(type, id)
  .message(
    MessageRequestObject.builder()
      .text(text)
      .type(MessageType.SYSTEM)
      .userId(systemUserId)
      .build())
  .request();
```

</codetabs-item>

</codetabs>

---

This page was last updated at 2025-08-15T14:15:26.582Z.

For the most recent version of this documentation, visit [https://getstream.io/chat/docs/unity/silent_messages/](https://getstream.io/chat/docs/unity/silent_messages/).