/ /

Plug widget customization

PLuG widget customization

There are three ways to customize the PLuG widget. They can be combined: SDK values take priority over dashboard settings, and CSS overrides both.

  1. Dashboard settings — No-code configuration in DevRev Settings.

  2. SDK initialization — Programmatic options passed to plugSDK.init().

  3. CSS customization — Full brand styling via a custom stylesheet.


1. Dashboard settings

Go to Settings > PLuG & Portal > PLuG Chat.

Configuration tab

Setting

Description

Unique App ID

Widget identifier. Pass this as app_id in init().

Enable PLuG widget

Master on/off toggle for all PLuG surfaces.

Widget alignment

Left or right relative to the launcher.

Enable default launcher

Show or hide the floating button.

Custom launcher selector

CSS selector for a custom element to use as the trigger.

Styling tab

Setting

Description

Launcher logo

Image shown on the floating launcher button.

Accent color

Primary brand color used for buttons and links.

Primary text color

Main body text color.

Theme

Light or dark mode.

Brand logo

Logo displayed in the widget header.

Launcher position

Bottom/side spacing from screen edges.

Banner

Promotional banner shown on the home screen.

Custom CSS

Upload a CSS stylesheet for deep brand styling (see section 3).

Layout tab

Setting

Description

Welcome message

Heading shown when the widget opens (max 50 characters). Configured here, not via SDK.

Welcome subtitle

Supporting text below the welcome heading.

Quick links

Predefined action buttons on the home screen.

Show search

Display the search bar on the home screen.

Show conversations

Display the conversations list on the home screen.

Show tickets

Display the tickets list on the home screen.

Conversations tab

Setting

Description

Auto-popup greeting

Automatically show a greeting when PLuG loads.

Greeting delay

Delay (in seconds) before the greeting appears.

Enable file attachments

Allow users to attach files in conversations.

Enable emoji

Allow emoji in the message input.

One message at a time

Prevent users from sending multiple messages while the CX Agent is responding. On by default.

Language & Region tab

Setting

Description

Language

Default language for the widget UI. Supported: English, Spanish, Dutch, Portuguese.


2. SDK initialization

Pass options to plugSDK.init(). These override any matching settings configured in the dashboard.

window.plugSDK.init({
  app_id: '<your_unique_app_id>',          // Required
  theme: 'light',                           // 'light' | 'dark'
  accent_color: '#0047FF',                  // Hex color
  primary_text_color: '#111111',            // Hex color
  enable_default_launcher: true,            // Show floating launcher button
  custom_launcher_selector: '#my-trigger',  // CSS selector for custom trigger
  widget_alignment: 'right',               // 'left' | 'right'
  spacing: {
    bottom: '20px',                         // Distance from bottom of screen
    side: '20px',                           // Distance from side of screen
  },
  disable_plug_chat_window: false,          // Set true to use search-only mode
  session_token: '<backend_generated_token>', // Identifies logged-in users
  enable_session_recording: false,          // Enable session recording
  session_recording_key: '<key>',           // Key for session recording
  send_button_disable_duration: 5000,       // ms; controls one-message-at-a-time timeout
});

Parameter reference

Parameter

Type

Default

Description

app_id

string

Required. Your unique PLuG App ID.

theme

string

'light'

Widget color theme: 'light' or 'dark'.

accent_color

string

Primary brand color (hex).

primary_text_color

string

Main text color (hex).

enable_default_launcher

boolean

true

Show or hide the floating launcher button.

custom_launcher_selector

string

CSS selector for a custom element to use as the widget trigger.

widget_alignment

string

'right'

Widget position relative to launcher: 'left' or 'right'.

spacing.bottom

string

'10px'

Padding distance from the bottom of the screen.

spacing.side

string

'0px'

Distance between the widget and launcher icon.

disable_plug_chat_window

boolean

false

Set to true to disable chat and use search only.

session_token

string

Backend-generated token to identify logged-in users.

enable_session_recording

boolean

false

Enable session recording for analytics.

session_recording_key

string

Key for session recording integration.

Priority: Values passed to init() override dashboard settings. CSS overrides both.


3. CSS customization (deep brand styling)

For full brand alignment — fonts, component shapes, spacing, etc — you can use Computer or upload a custom stylesheet manually. Both options are available from Settings > PLuG & Portal > PLuG Chat > Styling > Custom stylesheet.

Option A — Use Computer (recommended)

Computer has a dedicated skill for PLuG theming. Describe your brand or share a screenshot, and Computer generates a theme, gives you a live preview URL to review, and can re-upload and publish directly. No manual file handling needed.

*"I want to redesign PLuG to match our brand. Here's our website: https://yourcompany.com"*

*"Redesign PLuG to match this screenshot."* [attach screenshot]

Iterate conversationally until it looks right, then tell Computer to publish. Nothing goes live until you approve it.

Option B — Download the template and edit manually

  1. Go to Settings > PLuG & Portal > PLuG Chat > Styling > Custom stylesheet.

  2. Click Download CSS template to get all available selectors with the BEM-style prefix.

  3. Edit the file to match your brand. Override only the properties you need.

  4. Upload it and click Preview to see changes live before publishing.

  5. Click Save and Publish.

What you can style

The class system covers all PLuG surfaces:

Buttons

Class

Description

.plug-button

Common button class applied to all buttons for shared styling

.plug-primary-button

Primary button style (e.g., Create Ticket, Send Message)

.plug-secondary-button

Secondary button style

.plug-tertiary-button

Tertiary button style

.plug-tertiary-button__text

Text label inside a tertiary button

.plug-destructive-button

Destructive button style (e.g., Delete, Remove actions)

.plug-submit-button

Submit button in forms (e.g., Create Ticket form)

.plug-cancel-button

Cancel button in forms (e.g., Create Ticket form)

.plug-view-all-button

View All button in cards (e.g., Recent Tickets, Articles)

.plug-search-button

Search component in the header that opens the search page

.plug-search-button__text

Placeholder text displayed inside the search button

Cards

Class

Description

.plug-card

Common card class applied to all card components for shared styling

.plug-banner-card

Banner card component on the home page

.plug-banner-image

Banner image in banner card

.plug-recent-conversations-card

Recent conversations card on the home page

.plug-recent-conversation-item

Recent conversation item in the recent conversations card

.plug-recent-tickets-card

Recent tickets card on the home page

.plug-recent-ticket-item

Recent ticket item in the recent tickets card

Lists

Class

Description

.plug-conversation-list-item

Conversation list item in recent conversations card

.plug-ticket-list-item

Ticket list item in recent tickets card

Tabs

Class

Description

.plug-tabs

Tabs container component for navigation

.plug-tabs__tab

Individual tab item

.plug-tabs__tab--active

Active/selected state of a tab

.plug-tabs__text

Text label inside a tab item

.plug-ticket-tabs

Ticket tabs container component for switching between Public Comments and Details

.plug-ticket-tabs__tab

Individual ticket tab item

.plug-ticket-tabs__tab--active

Active/selected state of a ticket tab

SnapKit Buttons

Class

Description

.snapkit-button

Common class applied to all SnapKit buttons

.snapkit-button-primary

SnapKit primary button

.snapkit-button-secondary

SnapKit secondary button

.snapkit-button-tertiary

SnapKit tertiary button

.snapkit-button-destructive

SnapKit destructive button

SnapKit Cards

Class

Description

.snapkit-card

Common class applied to all SnapKit card components

CSS limits and behavior

  • Stylesheets are size-limited for performance. If your file exceeds the limit, PLuG falls back to defaults and shows an error in Settings.

  • Override only the properties you need. Avoid re-declaring the full default stylesheet.

  • Customizations apply per chat widget.

  • CSS overrides do not affect the Portal, only the PLuG widget.


One message at a time

When enabled, PLuG prevents users from sending a second message while the CX Agent is still responding. This avoids duplicate conversations and prevents automations from firing more than once.

How it works:

PLuG cannot always know upfront whether the conversation will go to a CX Agent or a human. So:

  • On the first message, the send button is disabled for up to 5 seconds ( This is customisable at org level ) while PLuG waits to learn who is responding.

  • If the response comes from a CX Agent, disabling becomes intelligent. The button stays disabled only while the agent is actively streaming, then re-enables automatically.

  • If the other side is a human agent, disabling stops entirely.

The input field remains active throughout so users can keep composing.

Toggle: Settings > PLuG & Portal > PLuG Chat > Conversations > One message at a time — on by default.


CX Agent response streaming

The CX Agent streams responses token-by-token so users see answers appearing in real time. Before its first tool call, the agent sends a brief personalised acknowledgement, which eliminates the silent wait.

Streaming is off by default for all organisations on web. To turn it ON pass enable_streaming parameter while initialising the SDK and make sure to turn ON the streaming for that respective agent via Agent studio.

window.plugSDK.init({
    ...,
    enable_streaming: true,
  });

Streaming behaviour is configurable per agent via Agent Studio.

Value

Behaviour

final_response

Streams the final answer token-by-token. Default.

intermediate_thoughts

Also streams intermediate reasoning steps to the user.

disabled

Returns the full response at once with no streaming.

On mobile SDKs (iOS / Android), streaming support has been added. Refer to the iOS and Android SDK reference pages for the current syntax.


Related articles

Was this article helpful?