NowChatThemeable protocol - iOS
concept australia Updated Sep 10, 2026 3 min read NowChatThemeableiOSProtocol.md
The NowChatThemeable protocol provides properties that enable you to override the colors used within chat pages hosted on your ServiceNow instance.
JavaScript
public protocol NowChatThemeable { var color: NowChatColoring { get }}The NowChatColoring protocol contains NowUIColoring. This property is used to reference default color variables that NowWebThemeable can use.
For additional information on how to theme the UI, see Use NowUIColoring to theme NowWebTheme and NowChatTheme in the Mobile SDK Developer Guide - iOS.
Define ChatColors using default colors
JavaScript
/// Sample structure for using default colors that comes with Mobile SDK.struct ChatColors: NowUIColoring {}Define ChatColors using custom colors
JavaScript
/// Use Custom Colors with light themestruct ChatColors: NowUIColoring { private var defaultTheme: NowChatDefaultTheme { NowChatDefaultTheme(nowUITheme: NowUIDefaultTheme()) } var brand: UIColor { lightBrand } var primary: UIColor { lightPrimary } var secondary: UIColor { lightSecondary } var textTertiary: UIColor { lightTextTertiary } var destructive: UIColor { lightDestructive } var textPrimary: UIColor { lightTextPrimary } var textSecondary: UIColor { lightTextSecondary } var textActionable: UIColor { lightTextActionable } var screenHeaderText: UIColor { lightScreenHeaderText } var backgroundPrimary: UIColor { lightBackgroundPrimary } var backgroundSecondary: UIColor { lightBackgroundSecondary } var backgroundTertiary: UIColor { lightBackgroundTertiary } var backgroundPrimaryActionable: UIColor { lightBackgroundPrimaryActionable } var backgroundSecondaryActionable: UIColor { lightBackgroundSecondaryActionable } var brandBackground: UIColor { lightBrandBackground } var linkPrimaryText: UIColor { lightLinkPrimary } var linkSecondary: UIColor { lightLinkSecondary } var separatorPrimary: UIColor { lightSeparatorPrimary } var separatorTertiary: UIColor { lightSeparatorTertiary } var borderTertiary: UIColor { lightBorderTertiary } var shadow: UIColor { lightShadow } var notification: UIColor { lightNotification } var alertCritical0: UIColor { lightAlertCritical0 } var alertCritical3: UIColor { lightAlertCritical3 }
// Light Colors var lightBrand: UIColor { defaultTheme.color.nowUIColor.brand } var lightPrimary: UIColor { defaultTheme.color.nowUIColor.primary } var lightSecondary: UIColor { defaultTheme.color.nowUIColor.secondary } var lightDestructive: UIColor { defaultTheme.color.nowUIColor.destructive } var lightTextPrimary: UIColor { defaultTheme.color.nowUIColor.textPrimary } var lightTextSecondary: UIColor { defaultTheme.color.nowUIColor.textSecondary } var lightTextTertiary: UIColor { defaultTheme.color.nowUIColor.textTertiary } var lightTextActionable: UIColor { defaultTheme.color.nowUIColor.textActionable } var lightScreenHeaderText: UIColor { defaultTheme.color.nowUIColor.screenHeaderText } var lightBackgroundPrimary: UIColor { defaultTheme.color.nowUIColor.backgroundPrimary } var lightBackgroundSecondary: UIColor { defaultTheme.color.nowUIColor.backgroundSecondary } var lightBackgroundTertiary: UIColor { defaultTheme.color.nowUIColor.backgroundTertiary } var lightBackgroundPrimaryActionable: UIColor { defaultTheme.color.nowUIColor.backgroundPrimaryActionable } var lightBackgroundSecondaryActionable: UIColor { defaultTheme.color.nowUIColor.backgroundSecondaryActionable } var lightBrandBackground: UIColor { defaultTheme.color.nowUIColor.brandBackground } var lightLinkPrimary: UIColor { defaultTheme.color.nowUIColor.linkPrimaryText } var lightLinkSecondary: UIColor { defaultTheme.color.nowUIColor.linkSecondary } var lightSeparatorPrimary: UIColor { defaultTheme.color.nowUIColor.separatorPrimary } var lightSeparatorTertiary: UIColor { defaultTheme.color.nowUIColor.separatorTertiary } var lightBorderTertiary: UIColor { defaultTheme.color.nowUIColor.borderTertiary } var lightShadow: UIColor { defaultTheme.color.nowUIColor.shadow } var lightNotification: UIColor { defaultTheme.color.nowUIColor.notification } var lightAlertCritical0: UIColor { defaultTheme.color.nowUIColor.alertCritical0 } var lightAlertCritical3: UIColor { defaultTheme.color.nowUIColor.alertCritical3 }}Define ChatTheme structure with NowChatThemeable protocol
JavaScript
struct CarrascoChatTheme: NowChatThemeable { var color: NowChatColoring struct Color: NowChatColoring { var nowUIColor: NowUIColoring var backgroundPrimary: UIColor var backgroundSecondary: UIColor var backgroundPrimaryActionable: UIColor var backgroundSecondaryActionable: UIColor var brandBackground: UIColor var backgroundTertiary: UIColor var separatorPrimary: UIColor var separatorTertiary: UIColor var borderTertiary: UIColor var shadow: UIColor var linkSecondary: UIColor
init(inputs: ChatColors) { nowUIColor = ThemeColor(inputs) backgroundPrimary = inputs.backgroundPrimary backgroundSecondary = inputs.backgroundSecondary backgroundTertiary = inputs.backgroundTertiary backgroundPrimaryActionable = inputs.backgroundPrimaryActionable backgroundSecondaryActionable = inputs.backgroundSecondaryActionable brandBackground = inputs.brandBackground separatorPrimary = inputs.separatorPrimary separatorTertiary = inputs.separatorTertiary borderTertiary = inputs.borderTertiary shadow = inputs.shadow linkSecondary = inputs.linkSecondary } }
init(chatColors: ChatColors) { color = Color(inputs: chatColors) }}Instantiate ChatTheme object by passing ChatColor as input
JavaScript
let chatTheme = CarrascoChatTheme(chatColors: ChatColors())Pass ChatTheme object to NowChatService.makeChatUI ()
JavaScript
func makeChatScreen() -> UIViewController? { guard let chatService = chatService else { return nil } let result = chatService.makeChatUI(theme: CarrascoChatTheme(chatColors: ChatColors())) switch result { case .success(let chatViewController): return chatViewController case .failure(let error): debugPrint("Chat screen creation failed with error: \(error)") return nil }}Parent Topic:Mobile SDK - iOS
219 lines · 7.8 KB
---
title: NowChatThemeable protocol - iOS
description: The NowChatThemeable protocol provides properties that enable you to override the colors used within chat pages hosted on your ServiceNow instance.
locale: en-US
canonical_url: https://www.servicenow.com/docs/r/australia/api-reference/cllent-mobile-api-reference/NowChatThemeableiOSProtocol.html
release: australia
product: Cllent Mobile API Reference
classification: cllent-mobile-api-reference
topic_type: concept
last_updated: "2026-09-10"
reading_time_minutes: 3
breadcrumb: [Mobile SDK - iOS, Mobile SDK API reference, API reference, API implementation and reference]
---
# NowChatThemeable protocol- iOS
The NowChatThemeable protocol provides properties that enable you to override the colors used within chat pages hosted on your ServiceNow instance.
```
public protocol NowChatThemeable {
var color: NowChatColoring { get }
}
```
The [NowChatColoring](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/api-reference/cllent-mobile-api-reference/NowChatColoringiOSProtocol.md) protocol contains **NowUIColoring**. This property is used to reference default color variables that NowWebThemeable can use.
For additional information on how to theme the UI, see [Use NowUIColoring to theme NowWebTheme and NowChatTheme](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/api-reference/developer-guides/mobsdk-and-color-theming.md) in the Mobile SDK Developer Guide - iOS.
## Define ChatColors using default colors
```
/// Sample structure for using default colors that comes with Mobile SDK.
struct ChatColors: NowUIColoring {
}
```
## Define ChatColors using custom colors
```
/// Use Custom Colors with light theme
struct ChatColors: NowUIColoring {
private var defaultTheme: NowChatDefaultTheme {
NowChatDefaultTheme(nowUITheme: NowUIDefaultTheme())
}
var brand: UIColor {
lightBrand
}
var primary: UIColor {
lightPrimary
}
var secondary: UIColor {
lightSecondary
}
var textTertiary: UIColor {
lightTextTertiary
}
var destructive: UIColor {
lightDestructive
}
var textPrimary: UIColor {
lightTextPrimary
}
var textSecondary: UIColor {
lightTextSecondary
}
var textActionable: UIColor {
lightTextActionable
}
var screenHeaderText: UIColor {
lightScreenHeaderText
}
var backgroundPrimary: UIColor {
lightBackgroundPrimary
}
var backgroundSecondary: UIColor {
lightBackgroundSecondary
}
var backgroundTertiary: UIColor {
lightBackgroundTertiary
}
var backgroundPrimaryActionable: UIColor {
lightBackgroundPrimaryActionable
}
var backgroundSecondaryActionable: UIColor {
lightBackgroundSecondaryActionable
}
var brandBackground: UIColor {
lightBrandBackground
}
var linkPrimaryText: UIColor {
lightLinkPrimary
}
var linkSecondary: UIColor {
lightLinkSecondary
}
var separatorPrimary: UIColor {
lightSeparatorPrimary
}
var separatorTertiary: UIColor {
lightSeparatorTertiary
}
var borderTertiary: UIColor {
lightBorderTertiary
}
var shadow: UIColor {
lightShadow
}
var notification: UIColor {
lightNotification
}
var alertCritical0: UIColor {
lightAlertCritical0
}
var alertCritical3: UIColor {
lightAlertCritical3
}
// Light Colors
var lightBrand: UIColor { defaultTheme.color.nowUIColor.brand }
var lightPrimary: UIColor { defaultTheme.color.nowUIColor.primary }
var lightSecondary: UIColor { defaultTheme.color.nowUIColor.secondary }
var lightDestructive: UIColor { defaultTheme.color.nowUIColor.destructive }
var lightTextPrimary: UIColor { defaultTheme.color.nowUIColor.textPrimary }
var lightTextSecondary: UIColor { defaultTheme.color.nowUIColor.textSecondary }
var lightTextTertiary: UIColor { defaultTheme.color.nowUIColor.textTertiary }
var lightTextActionable: UIColor { defaultTheme.color.nowUIColor.textActionable }
var lightScreenHeaderText: UIColor { defaultTheme.color.nowUIColor.screenHeaderText }
var lightBackgroundPrimary: UIColor { defaultTheme.color.nowUIColor.backgroundPrimary }
var lightBackgroundSecondary: UIColor { defaultTheme.color.nowUIColor.backgroundSecondary }
var lightBackgroundTertiary: UIColor { defaultTheme.color.nowUIColor.backgroundTertiary }
var lightBackgroundPrimaryActionable: UIColor { defaultTheme.color.nowUIColor.backgroundPrimaryActionable
}
var lightBackgroundSecondaryActionable: UIColor { defaultTheme.color.nowUIColor.backgroundSecondaryActionable
}
var lightBrandBackground: UIColor { defaultTheme.color.nowUIColor.brandBackground }
var lightLinkPrimary: UIColor { defaultTheme.color.nowUIColor.linkPrimaryText }
var lightLinkSecondary: UIColor { defaultTheme.color.nowUIColor.linkSecondary }
var lightSeparatorPrimary: UIColor { defaultTheme.color.nowUIColor.separatorPrimary }
var lightSeparatorTertiary: UIColor { defaultTheme.color.nowUIColor.separatorTertiary }
var lightBorderTertiary: UIColor { defaultTheme.color.nowUIColor.borderTertiary }
var lightShadow: UIColor { defaultTheme.color.nowUIColor.shadow }
var lightNotification: UIColor { defaultTheme.color.nowUIColor.notification }
var lightAlertCritical0: UIColor { defaultTheme.color.nowUIColor.alertCritical0 }
var lightAlertCritical3: UIColor { defaultTheme.color.nowUIColor.alertCritical3 }
}
```
## Define ChatTheme structure with NowChatThemeable protocol
```
struct CarrascoChatTheme: NowChatThemeable {
var color: NowChatColoring
struct Color: NowChatColoring {
var nowUIColor: NowUIColoring
var backgroundPrimary: UIColor
var backgroundSecondary: UIColor
var backgroundPrimaryActionable: UIColor
var backgroundSecondaryActionable: UIColor
var brandBackground: UIColor
var backgroundTertiary: UIColor
var separatorPrimary: UIColor
var separatorTertiary: UIColor
var borderTertiary: UIColor
var shadow: UIColor
var linkSecondary: UIColor
init(inputs: ChatColors) {
nowUIColor = ThemeColor(inputs)
backgroundPrimary = inputs.backgroundPrimary
backgroundSecondary = inputs.backgroundSecondary
backgroundTertiary = inputs.backgroundTertiary
backgroundPrimaryActionable = inputs.backgroundPrimaryActionable
backgroundSecondaryActionable = inputs.backgroundSecondaryActionable
brandBackground = inputs.brandBackground
separatorPrimary = inputs.separatorPrimary
separatorTertiary = inputs.separatorTertiary
borderTertiary = inputs.borderTertiary
shadow = inputs.shadow
linkSecondary = inputs.linkSecondary
}
}
init(chatColors: ChatColors) {
color = Color(inputs: chatColors)
}
}
```
## Instantiate ChatTheme object by passing ChatColor as input
```
let chatTheme = CarrascoChatTheme(chatColors: ChatColors())
```
## Pass ChatTheme object to NowChatService.makeChatUI \(\)
```
func makeChatScreen() -> UIViewController? {
guard let chatService = chatService else { return nil }
let result = chatService.makeChatUI(theme: CarrascoChatTheme(chatColors: ChatColors()))
switch result {
case .success(let chatViewController):
return chatViewController
case .failure(let error):
debugPrint("Chat screen creation failed with error: \(error)")
return nil
}
}
```
**Parent Topic:**[Mobile SDK - iOS](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/api-reference/cllent-mobile-api-reference/MobileSDKiOSAPI.md)
| title | NowChatThemeable protocol - iOS |
| description | The NowChatThemeable protocol provides properties that enable you to override the colors used within chat pages hosted on your ServiceNow instance. |
| locale | en-US |
| canonical_url | https://www.servicenow.com/docs/r/australia/api-reference/cllent-mobile-api-reference/NowChatThemeableiOSProtocol.html |
| release | australia |
| product | Cllent Mobile API Reference |
| classification | cllent-mobile-api-reference |
| topic_type | concept |
| last_updated | 2026-09-10 |
| reading_time_minutes | 3 |
| breadcrumb | Mobile SDK - iOSMobile SDK API referenceAPI referenceAPI implementation and reference |