UX Spec: Classification Markings

UX Spec: Classification Markings

Overview

This spec defines the end-to-end user experience for Classification Markings in Mattermost. The feature enables defense, intelligence, and allied-nation customers to visually mark their Mattermost environment and channels with the correct security classification level.

classification markings -_ default view - no cancel.png

What’s in scope:

  • A simple, flexible data model for classification levels (text, color, rank)

  • Prepackaged country/framework presets (Tier 1: US DoD, UK, Canada, Australia. and NATO)

  • Fully custom classification level creation for admins

  • Persistent global classification banner (top and/or bottom, admin-configured)

  • Channel-level classification banners (configured per channel)

  • Consistent rendering across web, desktop, and mobile clients

Goals

  1. Regulatory compliance: Meet the visual marking requirements of STIG V-222643/V-6146, DoDM 5200.01 Vol. 2, ISOO marking standards, UK GSCP, Australian PSPF Policy 8, Canadian security policy, and NATO STANAG 4774/4778. Ensure customers can achieve and maintain their ATO and equivalent certifications.

  2. Competitive differentiation: ship native, multi-national classification marking out of the box, across all clients.

  3. Admin simplicity: A system admin with no developer expertise can select a country preset, configure the global banner, and have classification markings live in under 15 minutes.

  4. Extensibility: The data model and UX must accommodate custom organizational taxonomies and future phases (team classification, smart markings, ABAC) without requiring architectural rework.

Terminology

Term

Definition

Term

Definition

Classification Level

A single classification marking that can be applied to resources. Each level has a text label, a color (background), and a rank determined by its position in the ordered list. Dissemination controls or caveats can be embedded directly in the level text if needed (e.g., "SECRET//NOFORN").

Classification Preset

A prepackaged set of classification levels shipped with Mattermost that provides the standard classification levels and color codes for a specific country or framework. Presets auto-fill the classification levels table and are fully editable after selection.

Global Classification Banner

A persistent, fixed-position banner displayed at the top of the Mattermost application on every view. Indicates the overall classification level of the system. Configured exclusively by the system admin via the System Console.

Channel Classification Banner

A banner displayed at the top of a channel view indicating the classification level assigned to that channel. Configured per channel in the channel configuration settings. Extends to threads and displays the same channel classification banner when viewing a specific conversation/thread.


Admin Console UX (System Console)

The Classification Markings feature lives under the Site Configuration section in the System Console sidebar, as shown in the mockup:

We will serve a notice as per the below mockup to highlight to users that classification markings are for display purposes only at this time. Once this changes we will need to remove this notice from being displayed.

classification markings -_ default view - no cancel.png

Enable Classification Markings

How: A True/False radio button toggle at the top of the page.

  • Label: "Enable classification markings"

  • Help text: "Use this to enable classification markings as banners at the system and channel level. You can pre-select text and colors for your banner, as well as set a default option for consistency."

  • When set to False, the rest of the page is hidden or disabled.

Classification preset

A dropdown selector at the top of the section. Options include country presets (e.g., "United States", "NATO", "UK", "Canada", "Australia") and "Custom classification levels". Help text: "Select a classification preset from the dropdown menu based on your country affiliation. This will help tailor the options to your specific needs. You can also create set custom classification levels."

When a preset is selected, the classification levels table below is auto-filled with the preset's levels.

classification-presets.png

Classification Levels

classification-levels-us.png

 

Classification Level Object

Each classification level is a simple object with three user-facing properties: text, color, and rank. Rank is automatically derived from the order of levels in the table (position 1 = rank 1, etc.).

Classification Level Table Elements

Column

Description

Column

Description

Drag handle (only visible if custom selected)

Allows reordering rows via drag-and-drop (reordering updates rank) for custom classification markings only

Text

The classification level text (e.g., "UNCLASSIFIED", "CUI", "CONFIDENTIAL")

Color

A color swatch and hex value (e.g., #007A33), clicking opens a color picker

Rank

Automatically assigned based on row position (1, 2, 3, ...)

Delete

A red trash icon to permanently delete the level from the table

Below the table: an "+ Add level" button to add a new classification level row.

Behavior when the table is modified: If the admin adds a new level, edits any text or color, deletes a level, or reorders levels, the classification preset dropdown automatically switches to "Custom classification markings". This indicates that the configuration no longer matches a standard preset. To revert to the original preset, the admin can re-select the country from the dropdown.

Hierarchy Enforcement Rules (Nice-to-have)

  1. Global classification level is the absolute ceiling. No channel can be classified above the global level (if one is set).

  2. Channel classification can be independently set at any level ≤ global level.

  3. Upward reclassification is allowed up to the global classification level set for the server: a channel can be increased from UNCLASSIFIED → CONFIDENTIAL so long as the server’s global classification level is set to CONFIDENTIAL or higher.

  4. Downward reclassification is blocked once messages exist: if messages were posted under a classification of SECRET, the channel cannot be downgraded below SECRET. This prevents inadvertent declassification of existing content.

  5. Classification at channel creation is optional, channels may be created without a classification.

new channel setup.png
New channel setup, where channel classification is not enabled.

Country Presets & Custom Classification Levels

Tier 1 Presets (Ship in V1)

These are prepackaged classification level sets shipped with the product. Each preset is a starting template, fully editable after selection. Selecting a preset auto-fills the classification levels table.

United States

Source: https://www.astrouxds.com/components/classification-markings/

Text

color

Rank

Text

color

Rank

UNCLASSIFIED

#007A33 (Green)

1

CUI

#502B85 (Purple)

2

CONFIDENTIAL

#0033A0 (Blue)

3

SECRET

#C8102E (Red)

4

TOP SECRET

#FF8C00 (Orange)

5

TOP SECRET//SCI

#FCE83A (Yellow)

6

NATO

Source: https://cyberintelsystems.com/classification-codes/

Text

color

Rank

Text

color

Rank

NATO UNCLASSIFIED

#007A33 (Green)

1

NATO RESTRICTED

#FF671F (Orange)

2

NATO CONFIDENTIAL

#0033A0 (Blue)

3

NATO SECRET

#C8102E (Red)

4

COSMIC TOP SECRET

#F7EA48 (Yellow)

5

UK (GSCP)

Source: https://cyberintelsystems.com/classification-codes/

Text

color

Rank

Text

color

Rank

OFFICIAL

#2B71C7 (Blue)

1

OFFICIAL-SENSITIVE

#2B71C7 (Blue)

2

SECRET

#F39C2C (Orange)

3

TOP SECRET

#AA0000 (Dark Red)

4

Canada

Source: https://cyberintelsystems.com/classification-codes/

Text

color

Rank

Text

color

Rank

PROTECTED A

#227ABC (Blue)

1

PROTECTED B

#900FB5 (Purple)

2

PROTECTED C

#460FB5 (Dk Purple)

3

CONFIDENTIAL

#0033A0 (Blue)

4

SECRET

#C8102E (Red)

5

TOP SECRET

#FF671F (Orange)

6

Australia (PSPF)

Source: Classification Codes

Text

color

Rank

Text

color

Rank

UNOFFICIAL

#FFFFFF (White)

1

OFFICIAL

#D5D7D8 (Grey)

2

OFFICIAL:Sensitive

#FFEA00 (Yellow)

3

PROTECTED

#4676B6 (Blue)

4

SECRET

#E2AFAE (Light red)

5

TOP SECRET

#E1211D (Red)

6

Preset Auto-Fill and Custom Levels Behavior

When an admin selects a preset from the Classification preset dropdown:

  1. The classification levels table is auto-filled with the preset's levels (text, color, rank order).

  2. The admin can immediately see all levels populated in the table.

  3. The ability to reorder the classification levels is disabled

Custom Classification Levels

Admins can create a fully custom set of classification levels from scratch by selecting "Custom classification levels" from the preset dropdown, or by starting from a preset and modifying it. Each level requires only a text label and a color. The rank is determined by the row order in the table.

classification markings -_ default view - no cancel.png

Retention of custom classification markings: Custom classification levels are retained in the system even if the admin switches to a different preset and saves. This means if an admin has built a custom set of levels, switches to a country preset, saves, and later wants to return to their custom configuration, the custom levels are preserved and can be restored by selecting "Custom classification markings" from the preset dropdown.

Global Classification Banner

The global classification banner fulfills the requirements that applications processing classified information must display a persistent classification banner indicating the highest classification level of information the system is authorized to process.

As per different requirements, the banner marking must be displayed conspicuously at the top of the interface or at both the top and bottom of the interface depending on the users selection choice for the banner visibility option.

indicators.png

The global classification banner is configured under the "Global Classification Indicators" section of the Classification Markings page in the System Console, and is different from the current announcement banner we have today:

  • Global Classification Banner: Radio buttons for setting whether the global classification banner is visible for the entire Mattermost environment.

  • Banner visibility: Radio buttons for setting whether the global classification banner is visible only at the top or across both the top and bottom of the application.

  • Global classification level: A dropdown to select the classification level for the global classification banner. The dropdown shows all enabled classification levels from the levels table, with their associated color swatch.

banners for channels and threads - top and bottom global.png
Example above shows the global classification banner when enabled for both top and bottom visibility.
banners for channels and threads.png
Example above shows the global classification when enabled for top only visibility.

 

Both global classification banners and channel classification banners (when both enabled) are always visible simultaneously. They are never hidden, collapsed, or dismissed. This is a regulatory requirement, not a user preference. Additionally these banners extend to threads, showing the corresponding classification banner for the channel where that thread originates from.

banners for channels and threads.png

Relationship to Channel Classification Banner

  • The global classification banner and the channel classification banner are independent visual elements displayed simultaneously.

  • The global classification banner is present on every view; the channel classification banner is present only within a classified channel, and on any thread a user is looking at.

  • A channel's classification level rank cannot exceed the global classification level rank.

Channel Classification Banner vs. Channel Classification Label

This work may be out of scope for the MVP but is documented here for future understanding.

  • Users can specify during initial channel setup or via the channel settings (documented below) whether they want a channel to utilize a channel classification banner or a channel classification label. The below mockups display the difference between the two implementations. The underlying component driving the label is the label tag component.

banners for channels and threads.png
Example of using banners where a user is viewing an unclassified channel as well as a thread from a secret channel they are also a member of.
labels for channels and threads.png
Example of using labels, where a user is viewing an unclassified channel as well as a thread from a secret channel they are also a member of.

Edge case: Announcements

  • Announcement banners will display alongside global classification banners and channel classification banners, persisting below these banners as they are by definition content of either the Mattermost environment or the channel itself.

announcements.png

Channel Classification Banner

Once classification markings are enabled in the System Console, the option to set a classification level becomes available in the Channel Settings dialog under the Configuration tab for existing channels. Additionally, the option to add a channel classification banner is shown when creating a new channel as demonstrated in the mockup below.

new channel setup.png

Creating a new channel → Channel Banner configuration

As shown in the mockup above, the channel classification banner options appear within the modal displayed during new channel creation.

  • Channel classification: A toggle switch (on/off). Help text: "When enabled, classification markings will appear for this channel."

  • Classification level: A dropdown showing all enabled classification levels with their color swatch (e.g., "UNCLASSIFIED" with a green swatch). Only levels with a rank ≤ the global classification level are shown.

  • Banner text: A text field that auto-populates based on the selected classification level. The admin or channel admin can edit this to customize the banner text (e.g., adding dissemination controls: "UNCLASSIFIED").

  • Classification indicator: A radio button pair where a user can select either Channel Header Label or Channel Banner (this work is potentially not part of MVP delivery)

channel settings -_ classification on.png

Channel Settings → Configuration → Channel classification

As shown in the mockup above, the channel classification settings appear within the Configuration section of Channel Settings:

  • Channel classification: A toggle switch (on/off). Help text: "When enabled, classification markings will appear for this channel."

  • Warning notice: A warning notice stating that, “Classification markings are information only.” Help text: “Markings are not tied to access control decisions at this time and are for display purposes only.”

  • Classification level: A dropdown showing all enabled classification levels with their color swatch (e.g., "UNCLASSIFIED" with a green swatch). Only levels with a rank ≤ the global classification level are shown. (future functionality)

The remaining controls are driven by the channel banner section, which becomes enabled due to the use of the channel classification settings.

  • Banner text: A text field that auto-populates based on the selected classification level. The admin or channel admin can edit this to customize the banner text (e.g., adding dissemination controls: "UNCLASSIFIED").

  • Banner color: This field is disabled as the color value for channel classifications is externally managed.

Behavior

  • Selecting a classification level from the dropdown auto-populates the banner text and banner color fields.

  • The admin/channel admin can override the banner text if needed (e.g., to add "//NOFORN" to the text).

  • Disabling the channel banner toggle hides the classification dropdown, text, color fields, and .

  • The dropdown only shows classification levels that are enabled (visible) in the System Console and with a rank ≤ the global classification level.

Downgrade protection (nice-to-have): If the channel has messages posted under the current classification, the dropdown disables all levels with a lower rank. A tooltip on the disabled options reads: "Cannot downgrade since messages exist at [CURRENT LEVEL] classification."

channel settings -_ channel banner on.png

Channel Settings → Configuration → Channel banner

As shown in the mockup above, a user can still utilize the channel banner functionality so long as the classification functionality is in a disabled state.

Reclassification Rules

Action

Allowed?

Conditions

Action

Allowed?

Conditions

Set classification on an unclassified channel

✅ Yes

Must be ≤ global classification level (if set)

Increase classification (e.g., UNCLASSIFIED → CONFIDENTIAL)

✅ Yes

New level must be ≤ global classification level

Decrease classification

⚠️ Conditional

Blocked if messages have been posted at the current or higher classification. If no messages exist at the current level, downgrade is allowed. (future functionality)

Remove classification entirely

⚠️ Conditional

Same rule as decrease — blocked if any messages exist under a classification. (future functionality)

When a downgrade is blocked, the UI shows:

"This channel's classification cannot be reduced below [LEVEL] because messages have been posted at this classification level. Contact your system administrator for assistance."

Threads

The channel classification banner applies to the entire channel, including the thread panel.

image-20260219-004113.png

When the thread RHS is open or in the threads inbox, the channel banner should be displayed.

image-20260219-004156.png
Thread view with channel view
image-20260219-003648.png
Expanded thread view

 

Mobile

Below are mockups which represent the various ways a global classification banner, channel classification banner, and channel classification label can appear on mobile.

The global classification banner on mobile has been adjusted to be 20px in height and uses the Body 75 - Semibold - 12px/16px font token. We also intend for the global classification color to the top bar / status bar area as well.

mobile-screens-new-2.png

Resources