

Most enterprise product teams waste months building UI components that already exist, tested and accessible, inside a system IBM has maintained for years. The IBM Carbon Design System is an open-source enterprise design system that gives teams shared design and code foundations for building consistent digital products across web and mobile. It connects design decisions directly to production code, which means your Figma components and your React components speak the same language.
This post covers Carbon's core principles, how it handles accessible enterprise UI components out of the box, Carbon Design System Figma workflows, Carbon Design System React implementation, and where the official documentation lives. Whether you're a product manager evaluating options or a developer about to install your first npm package, you'll leave with a clear, practical picture of what Carbon actually delivers.
Carbon is IBM's open-source design framework, built to give product teams a shared language across design, engineering, and governance. At its core, it packages over 50 production-ready components, a token-based visual system, Figma assets, and React libraries into one coherent offering. Every piece maps directly to another: what your designer places in Figma matches what your developer imports from @carbon/react.
That alignment is the real value proposition. Large product teams bleed time in the gap between design files and code. A designer specifies a button with a hover state, a focused outline, and a disabled variant. The developer interprets the spec differently. QA flags discrepancies. The cycle repeats across every component, every sprint. Carbon closes that gap by defining the button once, with documented states, matching design tokens, and implementation expectations that travel together from Figma to production. Your designer uses the Carbon Figma kit to build a DataTable with sorting controls and row selection. Your developer imports that exact DataTable from @carbon/react with the same props, the same visual states, the same interaction model. No interpretation required.
Accessibility is another place where Carbon does heavy lifting that teams often underestimate. Components ship with keyboard navigation built in, visible focus states that meet WCAG 2.1 AA contrast requirements, semantic HTML structure, and ARIA patterns appropriate to each component type. Buttons carry correct role and aria-label support. Modals trap focus correctly. Data tables expose column headers to screen readers.
That said, Carbon handling the component layer does not guarantee your application is fully compliant. Your implementation choices still matter. Custom content, layout decisions, dynamic updates, and third-party integrations can introduce gaps that Carbon's components alone cannot cover. Accessible enterprise UI components give you a strong foundation, not a finished audit.
For teams evaluating whether Carbon fits into a broader modernization push, our UI modernization and design-system adoption resources walk through the adoption trade-offs in detail.
Adopting the IBM Carbon Design System means getting a complete, production-tested toolkit, not just a component library with a style guide PDF attached. Here's what that actually looks like in practice.
Carbon ships with over 40 UI components verified in the official documentation. Use that number consistently if you reference it elsewhere in this post. These components span every functional area your team will hit during a real product build:
| Category | Example Components or Assets |
|---|---|
| Forms | Text input, dropdown, checkbox, toggle, date picker |
| Navigation | Header, breadcrumb, side nav, tabs, pagination |
| Data display | Data table, structured list, tag, accordion |
| Feedback and overlay | Modal, notification, loading spinner, tooltip |
| Icons | 600+ icons via @carbon/icons-react |
| Charts | Bar, line, donut, scatter via @carbon/charts-react |
| Design tokens | Color, spacing, typography, motion variables |
Each component comes with documented usage patterns, accessibility annotations, and variants for different states like disabled, error, and focus. You're not guessing how a component behaves in edge cases.
The design tokens are the backbone holding it all together. Tokens define your color palette, type scale, spacing increments, and motion curves as named variables rather than hardcoded values. When you override a token, every component that references it updates automatically. That's how Carbon supports theming without requiring you to hunt down individual CSS properties across hundreds of files.
Carbon ships four built-in themes: White, Gray 10, Gray 90, and Gray 100. Your team picks a base theme and applies token overrides to match your brand, rather than rebuilding from scratch.
Getting from zero to a working Carbon implementation follows a clear sequence:
npm install @carbon/react and add @carbon/styles for Sass tokens and CSS variables.That last step matters more than most teams realize. Governance is what separates a design system that stays consistent over two years from one that becomes a mess of one-off exceptions. Carbon's contribution guidelines give your team a neutral framework for deciding what belongs in the shared system versus what stays as a local component.
One practical note on packages: Carbon splits its offering intentionally. You get icons from @carbon/icons-react, charts from @carbon/charts-react, and tokens from @carbon/styles. Install only what your project needs, and your bundle size reflects that discipline.
The combination of typed tokens, modular packages, and documented governance is what makes Carbon viable for enterprise teams, not just a convenient shortcut for the first sprint.
Here is a distinction that trips up a lot of teams: the IBM Design Language and the IBM Carbon Design System are not the same thing, and treating them as interchangeable will cause real confusion when you try to apply either one.
The IBM Design Language is philosophy. It captures how IBM thinks about human experience, the values that should shape every product IBM ships, and the aesthetic sensibility behind IBM's visual identity. Think of it as the "why" and the "what we believe."
Carbon is the implementation of that philosophy.
The IBM Carbon Design System translates IBM Design Language principles into something you can actually ship: design tokens, component specifications, usage patterns, and documented behaviors. When IBM Design Language says interfaces should feel clear and intentional, Carbon gives you the specific button padding, the exact color contrast ratio, and the interaction state logic that delivers that clarity in a real product.
This flow matters because it dictates how you apply both. Your product decisions should trace back to IBM Design Language values. Your component choices, your token overrides, and your pattern selections come from Carbon. Conflating the two leads to teams debating philosophy when they should be picking a component variant, or copying token values without understanding the design rationale behind them.
In practice, the principle chain looks like this: IBM Design Language establishes that interfaces should reduce cognitive friction. Carbon expresses that through consistent spacing scales, predictable interaction patterns, and a restrained color system. Your product decisions then inherit that coherence without rebuilding it from scratch.
If you want a clearer breakdown of where design language ends and a design system begins (and where a component library fits into that picture), the Brilworks glossary on design language vs. design system vs. component library covers the distinctions without the abstraction.
One thing to get right before you customize anything: do not present Carbon's four principles (clarity, efficiency, consistency, beauty) and IBM Design Language's values as separate frameworks. They describe the same commitment at different levels of specificity. Keeping your team aligned on that relationship prevents the documentation drift that makes design systems fall apart months after adoption.
The Carbon Design System Figma library is your starting point, and finding it takes less than two minutes. Search "Carbon Design System" directly in Figma Community, and you'll land on IBM's official kit. It's maintained by IBM's core team, not a third-party fork, so what you get matches the production React components exactly.
Here's how to move from discovery to an active workflow:
Once enabled, you work with components rather than flat designs. Variants handle state changes, like hover, disabled, and error, without you recreating anything from scratch. Auto Layout is already configured inside most components, so resizing a button or input field behaves predictably. For themes, Carbon ships with White, Gray 10, Gray 90, and Gray 100 tokens. Applying dark mode means swapping the active theme across your token set, not manually repainting components one by one.
Governance matters more than most teams expect.
Library permissions deserve explicit decisions. Designate one owner, typically your lead designer or a dedicated design ops role, to control who can publish updates. Without that, multiple people pushing library changes breaks consistency fast.
For version reviews, schedule a quarterly check against IBM's Carbon release notes. Components do get updated, and skipping those reviews means your Figma files drift from the React implementation over time.
On custom components: before detaching any core Carbon component, run it through a simple filter. If your team needs the same pattern in three or more places and Carbon has no equivalent, build a custom component from scratch using Carbon tokens. If the need is isolated or project-specific, detach locally and document the decision. Undocumented detachments are how design debt accumulates silently.
Quick governance checklist:
For a deeper look at how Figma library management connects to your broader handoff process, design governance and Figma handoff workflows.
Carbon Design System React gives your development team a direct path from npm install to production-ready components, with IBM maintaining every package you need. Getting started takes three commands and one import.
# Install the core library
npm install @carbon/react
# Install peer dependencies if not already present
npm install react react-dom
Then pull in the global styles at your app's entry point:
import '@carbon/react/scss/globals/scss/styles.scss';
import { Button } from '@carbon/react';
function App() {
return <Button kind="primary">Get Started</Button>;
}
That's the minimal viable setup. One package, one style import, one component rendering correctly with Carbon's default White theme.
Breaking down the package ecosystem:
@carbon/react — your primary install for all UI components: buttons, modals, data tables, dropdowns, forms, notifications. This is the package every Carbon-powered React project starts with.@carbon/icons-react — a separate icon library with 2,000+ SVG icons as React components. Install this when your designs call for Carbon's iconography rather than a third-party icon set.@carbon/charts-react — IBM's data visualization package built on top of D3. Install this specifically when you need charts, graphs, or analytics displays.@carbon/styles — the Sass token system and CSS variables that power Carbon's theming layer. You'll reference this directly if you're customizing themes or building component-level overrides.React app setup considerations:
In a standard Create React App or Vite project, the SCSS import works out of the box once you add a Sass preprocessor. With Next.js, you need to handle the SCSS compilation differently. Carbon's SCSS doesn't play well with Next.js's default CSS handling, so you'll want to configure next.config.js to transpile @carbon/react explicitly:
const nextConfig = {
transpilePackages: ['@carbon/react'],
};
Also in Next.js, import the precompiled CSS instead of raw SCSS to sidestep build conflicts:
import '@carbon/react/css/index.min.css';
Theming entry points:
Carbon ships with four built-in themes: White, Gray 10, Gray 90, and Gray 100. You apply them by wrapping your app in a Theme provider component:
import { Theme } from '@carbon/react';
<Theme theme="g90">
<YourApp />
</Theme>
Custom theming requires modifying Sass token overrides before your style import, which is where @carbon/styles becomes relevant. For teams building custom component architectures on top of Carbon, our React component architecture guide walks through how to structure those overrides without polluting your global stylesheet.
Finding official docs:
IBM's component documentation lives at carbondesignsystem.com/components. Each component page includes props tables, usage guidelines, accessibility notes, and live code examples. For @carbon/charts-react, the dedicated storybook at charts.carbondesignsystem.com gives you interactive chart configurations with copy-paste code snippets. That's your reference when you need to configure axes, tooltips, or custom color schemes for a Carbon chart component.
Before your team commits to the IBM Carbon Design System, you need two things: the right resources bookmarked, and an honest read on whether Carbon actually fits your context. Here's both.
Official resources worth bookmarking
The primary documentation lives at carbondesignsystem.com. That's where you'll find component-level guidance, including usage, anatomy, accessibility behavior, and code examples for every element in the library. Accessibility docs go deeper than most systems, covering keyboard interactions, ARIA patterns, and WCAG 2.1 AA mapping per component.
The GitHub repository at github.com/carbon-design-system/carbon is where the actual source lives. You can track releases, open issues, review the contribution guide, and monitor the migration path if you're moving from Carbon v10 to v11. Figma resources are published directly in Figma Community under IBM's official profile, covering both light and dark themes with full token libraries attached.
For release notes and breaking changes, the GitHub changelog is more reliable than the documentation site. Worth subscribing to releases if Carbon components are in production.
Carbon versus the alternatives
| Criteria | IBM Carbon | Material Design | Ant Design |
|---|---|---|---|
| Enterprise governance | Strong, IBM-backed, versioned releases | Google-backed, consumer-product focus | Community-driven, less formal governance |
| Accessibility posture | WCAG 2.1 AA built in per component | Partial, requires additional work | Basic, varies by component |
| Opinionation level | High, IBM Design Language is prescriptive | High, Material visual identity is distinct | Moderate, more flexible defaults |
| Customization tradeoffs | Possible via tokens, but themed deviations are costly | Surface-level theming, deep changes break identity | Easier to override, less systematic |
Good fit versus watch-outs
Carbon is the right call when you're building internal enterprise tools, compliance-heavy applications, or products where WCAG conformance is a procurement requirement rather than a nice-to-have. Teams already in the IBM ecosystem get additional leverage since Carbon aligns with other IBM Cloud and Watson product patterns. For organizations prioritizing a mature enterprise design system with documented governance and a clear upgrade path, Carbon is one of the few genuinely enterprise-grade options available as open source.
Watch out if your product needs a highly differentiated visual identity. Carbon's design language is recognizably IBM. You can theme it, but fighting the system to achieve something that looks nothing like Carbon becomes expensive fast. Also consider team size: Carbon rewards teams with dedicated design system ownership. Smaller teams without that capacity often find the maintenance overhead of staying current with releases harder to absorb.
If you're evaluating Carbon as part of a larger UI modernization effort, Brilworks' enterprise application development services cover exactly this kind of decision: assessing design system fit, planning token architecture, and executing migration without disrupting active development.
Carbon doesn't win every evaluation. But for regulated industries, data-heavy interfaces, and teams that need accessibility compliance baked in rather than bolted on, it's a serious contender.
The IBM Carbon Design System makes the most sense for teams building enterprise-grade products where accessibility compliance, design-to-code consistency, and long-term maintainability actually matter. If your product serves regulated industries, large organizations, or users who depend on assistive technology, Carbon gives you a foundation that would take years to build independently.
What ties the whole system together is how each layer reinforces the next. The principles shape component decisions, those components show up identically in Figma and in Carbon Design System React packages, and the documentation keeps designers and developers speaking the same language throughout delivery.
Before adopting it, be honest about your constraints. Carbon has opinions, and customizing heavily against its grid or token system creates maintenance debt.
If your team is rolling out Carbon, migrating legacy UI to a design system, or evaluating whether enterprise UI modernization is worth the investment, Brilworks can help you scope and execute it properly. Reach out to discuss your project.
IBM Carbon Design System is IBM's open-source design framework, built to help teams create accessible, consistent digital products without building every pattern from scratch. It covers everything from color tokens and typography to fully interactive React components, all maintained by IBM and freely available on GitHub.
No. Carbon is open-source and available to any team, inside or outside IBM. Many enterprises, SaaS companies, and product agencies adopt it specifically because it handles accessibility compliance and component consistency at a level that would take years to replicate independently.
Search "Carbon Design System" on Figma Community and add the official IBM library to your workspace. Once connected, your team gets immediate access to components, color styles, and spacing tokens that mirror the production React code. The Carbon Design System Figma kit is organized by component category, so you can drop in buttons, modals, or data tables without building variants from scratch. Updates from IBM sync automatically when you keep the library connected.
Carbon is purpose-built for enterprise contexts, with stronger out-of-the-box WCAG 2.1 AA compliance and deeper data-heavy component coverage like complex data tables and structured dashboards. Material Design prioritizes consumer product aesthetics and Google's visual language, making it a natural fit for B2C apps. Ant Design sits closer to Carbon in enterprise use cases but leans toward Chinese market conventions and has a larger component surface area. If your product requires auditable accessibility, dense information layouts, or strict design governance across large teams, Carbon is the more defensible choice.
The IBM Carbon Design System offers a dedicated React component library called @carbon/react, installable via npm. Developers can import individual IBM Carbon Design System components, apply built-in theming, and leverage TypeScript support to build accessible and consistent enterprise applications efficiently.
You might also like