Design systems Rebuilt screens Figma kit

overview

Slack's design system, new (2023 on) and classic (2019 to 2023), light and dark · study copy for the AltLeads team

Slack design system

Slack's colours, type, 722 real icons and components, in the new design (2023 on) and the classic one (2019 to 2023), light and dark. Every value comes from Slack's own public files (its "Slack Kit" stylesheet and icon font) or was measured on Slack's own pictures. Nothing was read behind a login.

real = Slack's own fileshot = measured on Slack's picturesest. = our estimateours = our design where Slack shows none

Slack at a glance

A friendly chat app. One font (Slack-Lato), 15px text, black-weight names, an aubergine window around a white message pane, and one green for "send". Messages sit in a calm list; colour is saved for mentions, reactions and unread badges. Small things move fast (80ms) along one curve.

What you notice first

An aubergine window. The new design wraps everything in a purple gradient with a rail of big icons on the left (Home, DMs, Activity). The white message pane floats inside with 12px corners.
Messages are the screen. Avatar, a black-weight name, a grey time, then plain 15px text. Hover a message and a small toolbar appears: react, reply in thread, forward, save, more.
One loud colour per job: green to send, red badges for mentions, blue for links and your own reactions, yellow for warnings. Everything else is black, greys and white.

Product screens

Left: Slack's own picture. Right: our copy, built only from this design system. The copies work. Open one full size to hover messages, react, type and post, switch channels and use the filters. The bar at the bottom of a copy switches dark mode and wipes against the original with a blue line.

New design · channel

Slack's own picture of the #astrocraft-account channel
Original · slack.com feature page · 2190 × 1500
Our copy · open full size · difference map
91.1% of all pixels match47.9% on edges only (text, lines, icons): the stricter checkSlack drew its picture on a Mac, which draws text a little differently from Windows; that keeps the edges score lower.

New design · search with an AI answer

Slack's own picture of search with an AI answer
Original · slack.com feature page
Our copy · open full size · difference map
88.3% of all pixels match40.2% on edges only

Classic design (2020 to 2023) · Aubergine theme

Slack Help Center picture of the classic channel screen
Original · Slack Help Center "Quick start" (archived 2021 to 2023). The grey bars and blue outlines are Slack's own.
Our copy · open full size · difference map
95.9% of all pixels match66.1% on edges only

Classic design (2019) · real dark mode

Slack Engineering picture of classic Slack in dark mode, 2019
Original · Slack Engineering, "Building dark mode on desktop" (Sept 2019)
Our copy · open full size · difference map
91.9% of all pixels match57.4% on edges onlyAll four copies, with their dark versions: Slack screens.

Colours real

Slack names colours by job: base = surfaces, content = text and icons, otl = lines (outlines), pry / sec / ter = first, second, third strength, hgl = highlight (1 blue, 2 green, 3 yellow), imp = important (red), inv = for dark-on-light flips. The values below are read live from the token file, so they are always the real ones.

Core roles · light and dark

Light = Slack's own values. Dark (new design) = ours: Slack's real dark values load only inside the signed-in app, so our dark swaps each role for Slack's own "inverse" token. The classic dark further down is real.

The window and sidebar (new design) shot

Not in the public stylesheet; measured on Slack's pictures. The window is a gradient from deep aubergine (#3d0157) to plum (#77236a). The selected channel in the A1 Company picture is blue (#1f70c1).

Full palette real

20 colour families in 12 strengths (0 = palest, 100 = darkest). Aubergine is Slack's own purple; the others carry Slack's playful names (Cilantro, Horchata, Honeycomb…).

Typography real

One font everywhere: Slack-Lato, Slack's own build of Lato 2 (regular, bold, black, light, and italics). Text is 15px with a line height of 1.46668 (22px). Names and titles use the black weight (900), which gives Slack its friendly, chunky look.

Regular 400
Aa Gg
messages, menus
Bold 700
Aa Gg
buttons, labels
Black 900
Aa Gg
names, titles
Italic 400
Aa Gg
_italic_ in messages
Welcome to A1 Company
Headline28px · 900 · --dt_static_type-size-headline real
Create a channel
Title (dialogs)22px · 900 · …-title real
#astrocraft-account
Subtitle (channel name, large buttons)18px · 900 / 700 real
Faisal Hasan 10:42 AM
Thanks A1 Company team! We would like to move forward with the proposal.
Base (messages, sidebar, menus)15px · 400 · line 1.46668 · names 900 real
Add coworkers · Message #general
Caption (small buttons, tooltips)13px · 400 / 700 real
10:42 AM · 3 replies · Last reply today
Micro (times, counts)12px · 400 real

Slack's size steps: 12, 13, 15, 18, 22, 28. Weights: 400, 600 (semibold, rare), 700, 900. Line heights: 1, 1.25, 1.5 and the 1.46668 used for messages.

Icons real

722 named icons from Slack's own icon font, "Slack v2" (a font where each letter is a picture). Each was turned into a drawing (SVG) with its real name, so none are redrawn. They are filled with the text colour and drawn on a 20px square in menus, 16 to 24px elsewhere. Two newer icons (Tools, Unreads) are not in the public font; they are cut from Slack's own picture.

The ones you see on the channel screen

All icons

Shape & space real

Slack keeps corners friendly but small: 4px on small buttons, 8px on medium buttons, inputs and avatars, 12px on large buttons, dialogs and the message pane. Space comes from one 4px grid.

2px · smalltiny chips, mentions
4px · basesmall buttons, menus
8px · largebuttons, inputs, avatars
12px · xlargelarge buttons, dialogs, pane
roundreactions, badges, presence

Space steps

Heights and sizes

PartSizeDetails
Buttons small / medium / large28 / 36 / 44px12–16px sides · 4 / 8 / 12px corners · 13 / 15 / 18px text real
Text input36px12px sides · 8px corners · 1px line, focus ring instead of a line real
Menu row28px24px sides · 15px text · 12px top and bottom padding real
Tooltipauto8 × 12px padding · 8px corners · 13px bold · max 200px wide real
Reaction24px8px sides · round · 14px emoji · 11px count real
Sidebar row28px16px left · 6px corners · 15px text shot est.
Message36px avatar8px gap · 20px sides · avatar corners 8px (classic: 4px) shot
Message boxauto, 40px min8px corners · 1px line · tools row under the text shot
Classic sidebar / top bar260 / 40pxrows 27–28px · channel header 65px shot

Shadows real

Slack's shadows are soft and grey, from sm (a 1px whisper) to 2xl (dialogs). Two more are rings, not shadows: a11y is the blue keyboard-focus ring and error the red one.

Components

Live and clickable, built with slack.css. Hover, click and use the keyboard. Buttons, inputs, menus and tooltips are copied from Slack's own stylesheet; the app frame (messages, sidebar, message box) is measured on Slack's pictures.

Buttons real
Primary Slack green --dt_color-base-inv-hgl-2 (#007a5a) with white bold text; hover adds a darker layer and a small shadow, pressing removes the shadow. Outline white with a 1px line, hover grey. Ghost no fill until hover. Danger red --dt_color-base-inv-imp. Sizes 28 / 36 / 44px with 4 / 8 / 12px corners. All change colour in 80ms (--dt_static_transition-duration-short). Focus shows Slack's blue ring --dt_static_shadow-a11y.
Inputs, menus & tooltips real
Start a huddle
Input 36px, 8px corners, 1px line --dt_color-otl-pry; on focus the line is replaced by the blue a11y ring in 80ms. Menu white, 4px corners, a 1px ring plus a soft shadow; rows 28px with 24px sides; the row under the mouse or keyboard turns blue #1264a3 with white text, the danger row turns red. Arrow keys move, Esc closes. Tooltip near-black, 13px bold, 8px corners, appears after a 0.3s pause.
Messages & reactions shot
Message 36px avatar (8px corners), name in black 900, time 12px grey, text 15px on 22px lines. Hover = grey --dt_color-base-sec wash and a toolbar of 32px buttons (react, reply in thread, forward, save, more). Mention blue text on a pale blue fill. Reaction real 24px pill, 4% grey; yours turns blue (#0576b9 at 5%, a 30% blue line, bold count). Day divider a bold pill on a thin line.
Sidebar shot
Classic (Aubergine)
Channels
team-design
hiring-designer
project-social-media
random
New 28px rows on the aubergine gradient, white text at 70%, a white 7% wash on hover, the open channel blue #1f70c1, unread channels in white black-weight with a red badge. Classic full-width 27px rows on #3e103f, white text at 80%, hover #350d36, open channel blue #1264a3. Click a row to open it.
Message box shot
Message box 1px line, 8px corners, 15px text, tools under the text. Focus darkens the line and adds a soft shadow. Send stays grey until there is text, then turns Slack green. Enter sends, Shift+Enter adds a line (Slack's default).
Tabs, badges & avatars
Fathima Parveen Madhu Sharma AL 312 @Madhu
Tabs 13px bold, grey until chosen, the open tab underlined in aubergine 2px est.. Badge 18px round, red --dt_color-base-inv-imp, white 12px bold. Presence 10px dot with a 2px ring in the page colour: green = active, hollow = away. Avatar 8px corners (new), 4px (classic).
Dialogs & toasts est.
Dialog 520px wide, 12px corners, title 22px black-weight, buttons right-aligned (green to confirm), dark see-through backdrop; focus stays inside, Esc closes and returns focus. Toast near-black pill at the bottom with an Undo link, gone after 5s. Sizes from Slack's help-centre pictures.

Try it: mini Slack

A small working Slack built only from this design system. Switch channels, post (use *bold*, _italic_, ~strike~ and `code`), react, reply in a thread, edit or delete your own messages (with Undo), search, and flip between the new and the classic look. It follows the page's dark mode.

Keys: ↑ in an empty box edits your last message · Esc closes menus · Enter sends

States & motion

Every clickable thing has the same few looks. Each state is frozen below so you can compare them without hovering. Button, input, menu and tooltip states are Slack's own rules real; the app-frame ones are measured shot.

Focus = Slack's two-step blue ring: a 1px blue line plus a 4px blue glow at 30% (--dt_static_shadow-a11y). Errors use the same shape in red. Disabled = grey fill, grey text, no pointer.

Motion

Slack moves little and fast, all on one curve (cubic-bezier(.36, .19, .29, 1): quick start, soft landing). Colours change in 80ms; panels and popovers take 160 to 240ms. Press Play to watch each one.

Slack's motion tokens real

If someone turns on "reduce motion" on their computer, every transition on this page switches off.

Dark mode

Two stories. Classic dark is real: Slack's 2019 dark-mode picture gives the sidebar #19171d, the pane #1a1d21 and text #d1d2d3-ish, all measured. New-design dark is ours: the public stylesheet only says "dark" exists; the values load after login. Ours uses Slack's own inverse tokens, so it stays in Slack's family. Flip this whole page with Dark mode at the top.

What changes in dark mode

Surfacesnear-blacknew (ours): Slack's inverse base · classic (real): pane #1a1d21, sidebar #19171d, rail #0b0a0d
Textsoft whitenever pure white for long text: classic body measured at #d1d2d3 to #e4e5e6
Windowdarker auberginenew (ours): #1a0d1b to #2c1530 · classic sidebar loses its purple in dark
Selected channelblueclassic dark #0576b9 (real) · new #1f70c1
Green, red, bluekeptsend, badges and links keep their job and stay bright enough on dark
Picturessee-throughlogos and emoji cut from light pictures get see-through versions so no white boxes show

Classic Slack (2019 to 2023) shot

Before the 2023 redesign Slack had a dark top bar with search (2020 on), a sidebar painted by a theme (Aubergine by default), full-width rows, square-ish avatars (4px corners), and in 2019 a workspace rail with team icons. Slack no longer publishes those styles, so every value here was measured on Slack's own old pictures (file: slack/slack-classic.css).

Theme colours

Classic Slack let anyone paint the sidebar with 8 colours (column, menu hover, active item, active text, hover item, text, presence, mention badge). The commonly quoted Aubergine string is #3F0E40, #350d36, #1164A3, #FFFFFF, #350D36, #FFFFFF, #2BAC76, #CD2553; we could not find it on an archived Slack page, so treat it as hearsay. The measured picture agrees closely: column #3e103f, active #1264a3, badge #e01e5a.

Do & don't

Checked against Slack's own pictures and files. The small grey label after each rule names the Law of UX behind it; click it to jump there. A red bullet marks a rule where Slack itself falls short.

Do

  • Keep one job per colour: green sends, red counts mentions, blue is links and your own reaction, yellow warns. SimilarityVon Restorff
  • Make names easy to find: black-weight names, grey times, plain text. The eye jumps from name to name down the list. Selective attentionSerial position
  • Show actions where the work is: hover a message to react, reply or save, right next to it. Fitts's lawProximity
  • Group the sidebar into sections with headers you can fold (Channels, Direct messages, External connections). ChunkingCommon region
  • Mark what is new: bold unread channels and red mention badges, so nothing waits unseen. Zeigarnik
  • Let people answer with a click: reactions replace "ok, thanks" messages. Doherty thresholdTesler's law
  • Keep the send button quiet until there is something to send. Cognitive load
  • Warn about outsiders in shared channels (the yellow "7 external people" bar). Mental model

Don't

  • Don't add new colours for decoration; the aubergine frame is the only brand colour on screen. Occam's razor
  • Don't make people wait for motion: colour changes take 80ms, popovers about 0.2s. Doherty threshold
  • Don't move familiar things without warning. Slack's 2023 redesign moved channels, DMs and activity into a new rail, and many people had to relearn it. Jakob's lawMental model
  • Don't hide key actions behind hover only. Slack's message toolbar appears only on hover, so touch and new users miss it (Slack offers long-press on phones). Fitts's law
  • Don't flood people. Busy workspaces turn every channel bold with badges everywhere, and the important mention drowns. Cognitive loadChoice overload
  • Don't use pale grey for text people must read. Slack's tertiary grey (placeholder) is too faint for real text; keep it for hints. Aesthetic-usability
For AltLeads: borrow Slack's hover toolbar idea for lead rows (call, note, snooze right on the row), red badges for overdue follow-ups, and reactions as one-click call outcomes (answered, voicemail, not interested). Skip the full-colour window: callers need the height for the list.

UX principles, in plain words

The rules behind Slack's feel, for AltLeads too. Each card names the UX law, explains it simply, and shows where Slack follows it. All 29 laws are checked one by one in the scorecard below.

Make the main thing big and calm

Selective attention · Aesthetic-usability

The thing people come for gets the most space and the least decoration.

Slack: messages fill the white pane; the frame stays one colour.

One click to answer

Tesler's law · Doherty threshold

Take the work off people: a quick answer should not need typing.

Slack: emoji reactions, "Mark as read", one-click huddles.

Show what waits for you

Zeigarnik effect · visibility of status

Unfinished things should nag a little until they are done.

Slack: bold unread channels, red badges, the Activity tab.

Group and fold

Chunking · common region

Long lists get labelled sections that people can fold away.

Slack: Channels, Direct messages, External connections, each foldable.

Actions next to the thing

Fitts's law · proximity

Put a button where the eye already is, not in a far menu.

Slack: the hover toolbar sits on the message's top-right corner.

Quiet until ready

Cognitive load · Von Restorff

A main button that lights up only when it can act tells people what to do next.

Slack: the send arrow is grey on an empty box and green once you type.

Works without a mouse

Keyboard access · visible focus

Every action has a key path and a clear focus ring.

Slack: Ctrl+K to jump anywhere, ↑ to edit your last message, the blue a11y ring.

Readable for everyone

WCAG contrast (4.5:1 for text)

Check every text colour on its background; see the live check below.

Slack: body #1d1c1d and grey #616061 pass easily on white; the faint #868686 is only for hints.

Live contrast check

Checklist before any screen ships

Laws of UX scorecard

All 29 laws from lawsofux.com, each checked against Slack. Every card says what the law means in plain words, what Slack really does, and what AltLeads should take from it. Click a coloured bar to jump to a law, or filter by result.

UI is the look. UX is how it works and feels.
We copy the look (UI) to learn the feel (UX). The laws explain why one screen feels easy and another feels heavy.
Looks still count.
People believe a polished screen is easier to use. That is why we copy every pixel, state and timing.
Rules of thumb, not maths.
Use the laws to explain and check a design, then confirm with real callers using AltLeads.

Copy & use

Add these files to any HTML page, then use the classes. Put sk-dark on <html> (or any parent) for dark mode, and slc-dark for classic dark. The same files are in the Figma kit as variables.

<link rel="stylesheet" href="slack/slack-tokens.css">   <!-- Slack Kit tokens: light (real) + dark (ours) -->
<link rel="stylesheet" href="slack/slack-classic.css">  <!-- classic 2019-2023 values, light + real dark -->
<link rel="stylesheet" href="slack/slack.css">          <!-- components: c-button, c-input_text, c-menu, sk-msg… -->
<body class="sk-root">
<script src="slack/slack-icons.js"></script>            <!-- 722 real icons -->
<script src="slack/slack-kit.js"></script>              <!-- draws <svg data-i="…"> -->

<button class="c-button c-button--primary c-button--medium">Send message</button>
<button class="sk-reaction is-mine"><span class="e">🎉</span>5</button>
<svg class="sk-i" data-i="paperplane-filled"></svg>

Where it came from

Tokens418 + paletteSlack Kit stylesheet (public, slack.com), copied 1:1: colours, type, space, corners, shadows, motion
ComponentsrealButtons, input, menu, tooltip from Slack Kit; reaction and "redacted" grey bars from Slack's product-picture stylesheet
Icons722Slack's own "Slack v2" icon font, each letter turned into a drawing; Tools and Unreads cut from a Slack picture
FontSlack-LatoSlack's own font files (Lato 2), public
New design screens10 picturesSlack's feature pages (2190 × 1500, light) plus about 50 demo videos
Classic screens17 picturesArchived Slack Help Center pages (Wayback Machine) and Slack Engineering's 2019 dark-mode post
Our designoursNew-design dark mode (Slack's inverse tokens), the dialog and toast sizes, the search panel's dark wash, a drawn 2019 "Jump to" icon
Never doneno loginWe never signed in, signed up or bypassed a bot check. Details: SOURCES.md