Live Demo
Liveblocks
This design system captures Liveblocks' realtime collaboration product UI and its marketing and documentation surfaces. It keeps compact, host-integrated collaboration components distinct from the dark, expressive pages used to explain the platform.
- Components
- 80
- Tokens
- 378
- Guidelines
- 19
- Full pages
- 9
01
Foundations
The visual decisions and reusable values that shape every interface.
color
232 tokens--lb-accent#1177ff--lb-accent-foreground#ffffff--lb-destructive#ff4455--lb-destructive-foreground#ffffff--lb-background#ffffff--lb-foreground#111111--lb-dynamic-backgroundvar(--lb-background)--lb-foreground-subtlecolor-mix(in srgb,var(--lb-foreground),var(--lb-dynamic-background) calc(100% - var(--lb-foreground-contrast)))--lb-foreground-moderatecolor-mix(in srgb,var(--lb-foreground),var(--lb-dynamic-background) calc(100% - (var(--lb-foreground-contrast) + 3*((100% - var(--lb-foreground-contrast))/9))))--lb-foreground-tertiarycolor-mix(in srgb,var(--lb-foreground),var(--lb-dynamic-background) calc(100% - (var(--lb-foreground-contrast) + 5*((100% - var(--lb-foreground-contrast))/9))))--lb-foreground-secondarycolor-mix(in srgb,var(--lb-foreground),var(--lb-dynamic-background) calc(100% - (var(--lb-foreground-contrast) + 7*((100% - var(--lb-foreground-contrast))/9))))--lb-accent-subtlecolor-mix(in srgb,var(--lb-accent),var(--lb-dynamic-background) calc(100% - var(--lb-accent-contrast)))--lb-accent-moderatecolor-mix(in srgb,var(--lb-accent),var(--lb-dynamic-background) calc(100% - (var(--lb-accent-contrast) + 3*((100% - var(--lb-accent-contrast))/9))))--lb-accent-tertiarycolor-mix(in srgb,var(--lb-accent),var(--lb-dynamic-background) calc(100% - (var(--lb-accent-contrast) + 5*((100% - var(--lb-accent-contrast))/9))))--lb-accent-secondarycolor-mix(in srgb,var(--lb-accent),var(--lb-dynamic-background) calc(100% - (var(--lb-accent-contrast) + 7*((100% - var(--lb-accent-contrast))/9))))--lb-destructive-subtlecolor-mix(in srgb,var(--lb-destructive),var(--lb-dynamic-background) calc(100% - var(--lb-destructive-contrast)))--lb-destructive-moderatecolor-mix(in srgb,var(--lb-destructive),var(--lb-dynamic-background) calc(100% - (var(--lb-destructive-contrast) + 3*((100% - var(--lb-destructive-contrast))/9))))--lb-destructive-tertiarycolor-mix(in srgb,var(--lb-destructive),var(--lb-dynamic-background) calc(100% - (var(--lb-destructive-contrast) + 5*((100% - var(--lb-destructive-contrast))/9))))--lb-destructive-secondarycolor-mix(in srgb,var(--lb-destructive),var(--lb-dynamic-background) calc(100% - (var(--lb-destructive-contrast) + 7*((100% - var(--lb-destructive-contrast))/9))))--lb-background-accent-subtlecolor-mix(in srgb,var(--lb-accent),var(--lb-background) calc(100% - var(--lb-accent-contrast)))--lb-background-destructive-subtlecolor-mix(in srgb,var(--lb-destructive),var(--lb-background) calc(100% - var(--lb-destructive-contrast)))--lb-selectioncolor-mix(in srgb,var(--lb-accent) 40%,transparent)--accentvar(--lb-accent)--accent-foregroundvar(--lb-accent-foreground)--destructivevar(--lb-destructive)--destructive-foregroundvar(--lb-destructive-foreground)--backgroundvar(--lb-background)--foregroundvar(--lb-foreground)--dynamic-backgroundvar(--lb-dynamic-background)--foreground-contrastvar(--lb-foreground-contrast)--accent-contrastvar(--lb-accent-contrast)--destructive-contrastvar(--lb-destructive-contrast)--foreground-subtlevar(--lb-foreground-subtle)--foreground-moderatevar(--lb-foreground-moderate)--foreground-tertiaryvar(--lb-foreground-tertiary)--foreground-secondaryvar(--lb-foreground-secondary)--accent-subtlevar(--lb-accent-subtle)--accent-moderatevar(--lb-accent-moderate)--accent-tertiaryvar(--lb-accent-tertiary)--accent-secondaryvar(--lb-accent-secondary)--destructive-subtlevar(--lb-destructive-subtle)--destructive-moderatevar(--lb-destructive-moderate)--destructive-tertiaryvar(--lb-destructive-tertiary)--destructive-secondaryvar(--lb-destructive-secondary)--background-accent-subtlevar(--lb-background-accent-subtle)--background-destructive-subtlevar(--lb-background-destructive-subtle)--selectionvar(--lb-selection)--success#1f9c6e--success-foreground#ffffff--warning#b45309--warning-foreground#ffffff--semantic-destructivevar(--destructive)--semantic-destructive-foregroundvar(--destructive-foreground)--semantic-successvar(--success)--semantic-success-foregroundvar(--success-foreground)--semantic-warningvar(--warning)--semantic-warning-foregroundvar(--warning-foreground)--semantic-infovar(--lb-accent-text-safe)--semantic-info-foreground#ffffff--surface-page#ffffff--surface-raised#fafafa--surface-sunken#f4f4f5--surface-card#ffffff--surface-overlay#ffffff--border-faintrgb(0 0 0/6%)--border-subtlergb(0 0 0/10%)--border-strongrgb(0 0 0/16%)--cursor-colorvar(--lb-accent)--avatar-outline-colorvar(--lb-accent)--lb-hover-overlayrgb(0 0 0/4%)--lb-pressed-overlayrgb(0 0 0/8%)--hover-overlayvar(--lb-hover-overlay)--pressed-overlayvar(--lb-pressed-overlay)--lb-accent#44aaff--lb-destructive#ff7777--lb-background#222222--lb-foreground#ffffff--lb-accent-foreground#ffffff--lb-destructive-foreground#ffffff--success#83eecd--success-foreground#111111--warning#f0b429--warning-foreground#111111--surface-page#000000--surface-raised#0a0a0a--surface-sunken#111111--surface-card#161616--surface-overlay#1c1c1c--border-faintrgb(255 255 255/6%)--border-subtlergb(255 255 255/10%)--border-strongrgb(255 255 255/16%)--lb-hover-overlayrgb(255 255 255/6%)--lb-pressed-overlayrgb(255 255 255/12%)--family-comments#efad6c--family-multiplayer#6c79ef--family-notifications#6cefc3--family-presence#bde421--family-ai-copilots#f288ab--uc-media-player#f44e6b--uc-media-player-lightcolor-mix(in srgb,#f44e6b,#fff 50%)--uc-whiteboard#0090ff--uc-whiteboard-lightcolor-mix(in srgb,#0090ff,#fff 50%)--uc-website#30a46c--uc-website-lightcolor-mix(in srgb,#30a46c,#fff 50%)--uc-video-editor#8f6cef--uc-video-editor-lightcolor-mix(in srgb,#8f6cef,#fff 50%)--syntax-background#050505--syntax-header#111111--syntax-borderrgb(255 255 255/11%)--syntax-plain#e4e4e7--syntax-comment#7c7c86--syntax-meta#8b8b93--syntax-active#f4f4f5--syntax-punctuation#a78bfa--syntax-keyword#a78bfa--syntax-string#5eead4--syntax-function#f472b6--syntax-param#c4b5fd--marketing#f7f7f8--marketing-subtlergb(247 247 248/70%)--marketing-subtlerrgb(247 247 248/48%)--marketing-subtlestrgb(247 247 248/28%)--marketing-surface-base#000000--marketing-surface-faded-subtlergb(247 247 248/3%)--marketing-surface-fadedrgb(247 247 248/6%)--marketing-surface-faded-boldrgb(247 247 248/10%)--marketing-surface-faded-bolderrgb(247 247 248/14%)--marketing-surface-accent-green#83eecd--marketing-dividerrgb(247 247 248/8%)--marketing-divider-boldrgb(247 247 248/14%)--marketing-divider-bold-opaque#1c1c1d--marketing-divider-bolderrgb(247 247 248/22%)--marketing-divider-boldestrgb(247 247 248/40%)--marketing-accent#8f71f1--marketing-accent-faint#100d1b--marketing-accent-subtle#171227--marketing-accent-moderate#3f326a--marketing-accent-tertiary#5a4797--marketing-accent-secondary#745cc4--docs-accent-sidebar#887bd6--docs-accent-fill#241e3f--resource-card-background#171717--resource-card-background-hover#1c1c1c--resource-card-foreground#fafafa--resource-card-muted#a1a1a1--resource-card-borderrgb(66 66 66/45%)--resource-card-border-strong#424242--marketing-link#d4d4d4--marketing-link-hover#fafafa--marketing-link-underline#595959--marketing-link-nav#a1a1a1--marketing-link-focus-ring-color#fafafa--lb-link-focus-ring0 0 0 2px var(--marketing-surface-base,#000),0 0 0 4px var(--marketing-link-focus-ring-color)--sidebar-background#0a0a0a--sidebar-foreground#fafafa--sidebar-muted-foreground#a1a1a1--sidebar-accent-surface#1d1d1d--sidebar-accent-foreground#fafafa--sidebar-borderrgb(66 66 66/45%)--sidebar-focus-ringvar(--lb-link-focus-ring)--notification-backgroundvar(--surface-card)--notification-foregroundvar(--foreground)--notification-secondary-foregroundvar(--text-secondary)--notification-bordervar(--border-subtle)--notification-border-strongvar(--border-strong)--notification-unread-indicatorvar(--accent)--notification-icon-backgroundvar(--foreground-subtle)--notification-icon-foregroundvar(--foreground-tertiary)--notification-background#171717--notification-foreground#fafafa--notification-secondary-foreground#a1a1a1--notification-borderrgb(66 66 66/45%)--notification-border-strong#424242--notification-unread-indicator#44aaff--notification-icon-backgroundrgb(250 250 250/8%)--notification-icon-foreground#a1a1a1--avatar-stack-overlapcalc(0.25 * var(--avatar-stack-size))--modal-scrim-colorrgb(0 0 0/50%)--lb-focus-ring-colorvar(--lb-accent)--lb-focus-ring0 0 0 var(--lb-focus-ring-gap) var(--lb-dynamic-background,#fff),0 0 0 calc(var(--lb-focus-ring-gap) + var(--lb-focus-ring-width)) var(--lb-focus-ring-color)--focus-ringvar(--lb-focus-ring)--transition-durationvar(--lb-transition-duration)--transition-easingvar(--lb-transition-easing)--transition-duration-menuvar(--lb-transition-duration-menu)--transition-duration-tabsvar(--lb-transition-duration-tabs)--lb-link-focus-ringvar(--lb-focus-ring)--button-default-backgroundvar(--foreground)--button-default-foregroundvar(--background)--button-default-bordervar(--foreground)--button-default-hovercolor-mix(in srgb,var(--foreground),var(--background) 15%)--button-default-pressedcolor-mix(in srgb,var(--foreground),var(--background) 28%)--button-secondary-backgroundvar(--surface-sunken)--button-secondary-foregroundvar(--foreground)--button-secondary-bordervar(--border-subtle)--button-secondary-border-hovervar(--border-strong)--button-secondary-hovervar(--foreground-subtle)--button-secondary-pressedvar(--foreground-moderate)--button-outline-backgroundtransparent--button-outline-foregroundvar(--foreground)--button-outline-bordervar(--border-strong)--button-outline-hovervar(--foreground-subtle)--button-outline-pressedvar(--foreground-moderate)--button-ghost-foregroundvar(--foreground)--button-ghost-hovervar(--foreground-subtle)--button-ghost-pressedvar(--foreground-moderate)--button-destructive-backgroundvar(--destructive)--button-destructive-foregroundvar(--destructive-foreground)--button-destructive-bordervar(--destructive)--button-destructive-hovervar(--destructive-secondary)--button-destructive-pressedvar(--destructive-tertiary)--button-link-foregroundvar(--foreground)--button-focus-ringvar(--lb-focus-ring)--button-default-background#fafafa--button-default-foreground#171717--button-default-borderrgb(255 255 255/10%)--button-default-hover#ededed--button-default-pressed#dadada--button-secondary-background#171717--button-secondary-foreground#fafafa--button-secondary-borderrgb(66 66 66/45%)--button-secondary-border-hover#424242--button-secondary-hover#222222--button-secondary-pressed#292929--button-outline-backgroundtransparent--button-outline-foreground#fafafa--button-outline-border#424242--button-outline-hoverrgb(255 255 255/8%)--button-outline-pressedrgb(255 255 255/14%)--button-ghost-foreground#fafafa--button-ghost-hoverrgb(255 255 255/8%)--button-ghost-pressedrgb(255 255 255/14%)--button-link-foreground#fafafafont
32 tokens--lb-accent-text-safe#006cfc--accent-text-safevar(--lb-accent-text-safe)--text-primary#111111--text-secondaryrgb(17 17 17/72%)--text-tertiaryrgb(17 17 17/52%)--text-disabledrgb(17 17 17/32%)--text-primary#ffffff--text-secondaryrgb(255 255 255/70%)--text-tertiaryrgb(255 255 255/48%)--text-disabledrgb(255 255 255/30%)--uc-text-editor#e89304--uc-text-editor-lightcolor-mix(in srgb,#e89304,#fff 50%)--docs-accent-text#a090fd--font-sans"Inter",ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif--font-mono"JetBrains Mono",ui-monospace,"SF Mono","Menlo","Consolas",monospace--lb-line-height1.5--lb-line-height-cropcalc(1lh - 1em)/-2--line-heightvar(--lb-line-height)--line-height-cropvar(--lb-line-height-crop)--text-micro0.625em--text-timestamp0.675em--text-small0.75em--text-dense0.8125em--text-default0.875em--text-emphasized0.9375em--text-base1em--text-heading-sm1.125em--text-subheading1.25em--text-panel-title1.5em--text-heading-lg1.75em--lb-icon-weight1.5px--icon-weightvar(--lb-icon-weight)other
19 tokens--hero-washradial-gradient(120% 80% at 50% 0%,rgb(17 119 255/8%),transparent 70%)--hero-washradial-gradient(120% 80% at 50% 0%,rgb(68 170 255/12%),transparent 70%)--sidebar-transition200ms--toast-duration5000ms--lb-transition-duration0.1s--lb-transition-duration-menu150ms--lb-transition-duration-tabs250ms--lb-transition-easingcubic-bezier(0.4,0,0.2,1)--ease-out-cubiccubic-bezier(0.33,1,0.68,1)--ease-out-bouncecubic-bezier(0.34,1.56,0.64,1)--z-focus1--z-overlay1--z-base0--z-sticky-nav100--z-dropdown200--z-tooltip300--z-modal-scrim400--z-modal410--z-toast500radius
11 tokens--lb-radius0.5em--lb-button-radiusvar(--lb-radius)--lb-avatar-radius50%--lb-radius-panel12px--lb-radius-feature-tile16px--lb-radius-hero-media20px--lb-radius-code10px--radiusvar(--lb-radius)--button-radiusvar(--lb-button-radius)--avatar-radiusvar(--lb-avatar-radius)--radius-full9999pxshadow
12 tokens--elevation-padding4px--lb-highlight-shadowinset 0 0 0 1px rgb(0 0 0/10%)--lb-elevation-shadow0 0 0 1px rgb(0 0 0/4%),0 2px 6px rgb(0 0 0/8%),0 8px 26px rgb(0 0 0/12%)--lb-elevation-shadow-moderate0 0 0 1px rgb(0 0 0/4%),0 2px 6px rgb(0 0 0/5%),0 8px 26px rgb(0 0 0/6%)--lb-tooltip-shadow0 2px 4px rgb(0 0 0/8%),0 4px 12px rgb(0 0 0/12%)--highlight-shadowvar(--lb-highlight-shadow)--elevation-shadowvar(--lb-elevation-shadow)--elevation-shadow-moderatevar(--lb-elevation-shadow-moderate)--tooltip-shadowvar(--lb-tooltip-shadow)--inset-shadowinset 0 0 0 1px rgb(0 0 0/10%)--inset-shadowinset 0 0 0 1px rgb(255 255 255/6%)--lb-highlight-shadowinset 0 0 0 1px rgb(255 255 255/12%)spacing
72 tokens--lb-foreground-contrast8%--lb-accent-contrast8%--lb-destructive-contrast8%--lb-foreground-contrast10%--lb-accent-contrast16%--lb-destructive-contrast16%--syntax-inset-highlightinset 0 1px 0 rgb(255 255 255/6%)--mkt-hero-h12.5rem--mkt-section-h23rem--mkt-lead1.25rem--mkt-card-title1.0625rem--mkt-caption0.875rem--lb-spacing1em--lb-icon-size20px--spacingvar(--lb-spacing)--icon-sizevar(--lb-icon-size)--emoji-picker-padding6px--container-wide1280px--container1152px--container-narrow896px--container-prose680px--container-docs1440px--space-10.25rem--space-20.5rem--space-30.75rem--space-41rem--space-51.5rem--space-62rem--space-83rem--space-104rem--space-126rem--space-168rem--section-pad-desktop6rem--section-pad-tablet4.5rem--section-pad-mobile3.5rem--section-pad-desktop-lg8rem--mkt-nav-height80px--mkt-nav-scroll-trigger8px--mkt-mega-icon-size36px--mkt-logo-height28px--mkt-hero-media-max640px--mkt-testimonial-avatar32px--sidebar-width-expanded256px--sidebar-width-collapsed56px--avatar-stack-size24px--avatar-stack-gap2px--avatar-outline-width2px--avatar-outline-gap2px--floating-thread-size350px--floating-composer-size350px--anchored-threads-gap1.25rem--anchored-threads-active-offset-0.75rem--inbox-notification-aside-size36px--mention-suggestion-avatar-size1.25rem--lb-icon-button-size-dense2em--lb-icon-button-size-touch2.75em--input-padding-block0.5em--input-padding-inline0.75em--checkbox-radio-size1em--switch-track-width1.75em--switch-track-height1em--switch-thumb-size0.75em--switch-thumb-inset0.125em--modal-max-width28em--modal-max-width-large40em--modal-padding1.5em--toast-padding-block0.75em--toast-padding-inline1em--toast-max-width24em--toast-gap0.5em--lb-focus-ring-gap2px--lb-focus-ring-width2px02
Components
Manifest-driven component groups and their generated live previews.
ai
5 componentsLiveblocks ai component preview
- AgentActivityItem
- AiChat
- AiTool
- ToolConfirmation
- ToolInspector
avatar
2 componentsLiveblocks avatar component preview
- Avatar
- AvatarStack
code
1 componentsLiveblocks code component preview
- CodeBlock
comments
12 componentsLiveblocks comments component preview
- Comment
- CommentPin
- Composer
- FloatingComposer
- FloatingThread
- Thread
- DEFAULT_EMOJIS
- Attachments
- EmojiPicker
- Mention
- Reactions
- Timestamp
core
8 componentsLiveblocks core component preview
- Badge
- Button
- Card
- Chip
- IconButton
- Link
- SemanticStatesPanel
- Tag
feedback
5 componentsLiveblocks feedback component previewModal + Toast [A] authored this pass
- Modal
- Skeleton
- Toast
- ToastStack
- Tooltip
forms
6 componentsLiveblocks forms component preview[A] authored this pass — never measured, review before shipping
- Checkbox
- Input
- Radio
- Select
- Switch
- Textarea
history
2 componentsLiveblocks history component preview
- HistoryVersionSummary
- HistoryVersionSummaryList
marketing
22 componentsLiveblocks marketing component previewFramed panel + Accordion variant=marketing-faq, single-open
- AlternatingFeatureSection
- AnnouncementPill
- BentoMosaic
- CTABand
- DotMatrixMap
- FeatureGrid
- HeroShell
- HeroStage
- LogoWall
- MarketingFooter
- MarketingNav
- MegaMenu
- PricingFAQ
- PricingPlans
- RealtimeInfrastructureVisual
- RealtimeNodeDiagram
- SpotlightButton
- StatBlock
- Testimonial
- UseCaseCarousel
- Wordmark
- DEFAULT_INSTALL_PROMPT
notifications
2 componentsLiveblocks notifications component preview
- InboxNotification
- InboxNotificationList
presence
2 componentsLiveblocks presence component preview
- Cursor
- Cursors
product
3 componentsLiveblocks product component preview
- CommentThread
- ProductIcon
- StatusIndicator
utils
4 componentsLiveblocks utils component preview
- FeatureIcon
- Icon
- LiveblocksUiConfig
- LiveblocksPortal
03
Guidelines
Live reference cards for the system's visual and interaction decisions.
Brand
8 referencesWordmark — no logo providedrender brand name in type; never approximate a mark
Icons — line grid20px grid, 1.5px stroke, round caps/joins, currentColor — icon and label move together
Interaction stateshover, focus-visible, disabled, selected/expanded — never remove outline without a replacement
Link — marketing vs. productrestrained neutral marketing links; product keeps its blue accent
Motion — timing & easing100ms default; bg/color/opacity only, never `all`
Radius scale0.5em base is one of two public knobs
Elevation & shadowalways a 3-layer stack — reserved for things that float
Sidebar — persistent page navigationexpanded, collapsed rail, mobile off-canvas — same production component
Colors
6 referencesMarketing — violet accentmeasured dark; light is reconstructed [D], unverified
Product accent — blue--lb-accent, light + dark; white text on filled controls; light is the default theme
Use-case categorical palettemarketing carousel only — permanent, never semantic
Product neutralsforeground ramp, light + dark
Product-line accentsComments · Multiplayer · Notifications · Presence · AI Copilots — marketing atmosphere colors, confirmed hex
Semantic statesdestructive · success · warning · info — connected panel, see usage notes for source confidence
Spacing
2 referencesProduct spacing — em multiplesscales with host font-size, zero overrides
Marketing spacing scalefixed rem — 0.25rem to 8rem
Type
3 referencesFamily & weightsInter (marketing/docs) + JetBrains Mono (code) — 400/500/600, no 700
Marketing scalefixed rem, non-inheriting
Product scaleem-relative, 11 steps — compresses with host font-size
04
Full-page examples
Complete, interactive product surfaces rendered from the generated package.
Docs shellheader, sidebar, content, TOC, reduced footer
Documentationdocs shell — sidebar, TOC, use-case index, API reference, reduced footer
Commentsfull page — live thread hero, context demos, metadata, customization playground
Homepagefull page — nav, use-case hero, bento, agentic, dev experience, trust, footer
Notificationsfull page — live inbox hero, grouping, custom notification types, states
Pricing4-plan comparison, billing toggle, mobile plan-by-plan compare, FAQ
Realtime Infrastructurefull page — node-diagram hero, sync engines, capabilities, monitoring, cross-sell, footer
Syncfull page — agent/human hero modes, collapsible section rail, use cases, integrations, vs Yjs
Embedded collaboration demomock host app showing presence, comments, notifications in context