the-composable-frontend-architecture

Adaptive Presentation Core (APC)

By Everett Quebral
Picture of the author
Published on

Chapter 3 - The Composable Design System

Introduction

In composable architecture, few elements are as foundational—and as underestimated—as the design system. Where infrastructure manages deployment and backend services define logic, the design system defines experience. It determines how structure, behavior, and aesthetics are consistently delivered across independently built interfaces.

This isn’t just about UI polish. A strong design system reduces cognitive load, lowers onboarding time for new engineers and designers, and enables cohesive experiences to emerge across dozens—or even hundreds—of modular teams. It becomes a common language between disciplines, teams, and runtimes.

To serve this role, the composable design system must be:

  • A runtime architecture layer that adapts in real time to user, context, and brand
  • A collaboration platform between product, design, and engineering
  • A testable, observable, and deployable artifact with contract-enforced APIs
  • A unifying grammar that makes independently built modules look, feel, and behave like one coherent product

This chapter argues that a composable system without a composable design system is like a microservice platform without an API gateway—it might technically work, but it will never feel like a unified system to the user or the team.


Beyond Components: Design Systems as Platforms

Most teams begin with design systems as UI component libraries—a place to source a button, a card, or a form field. But these libraries rarely scale beyond a single product or team without fracturing. What composable systems revealed is that true design infrastructure must be more than a library—it must become a platform.

A platform implies stability, contract enforcement, governance, and extensibility. It creates shared rules and compositional flexibility for teams to build on top of. In a composable architecture, where teams deploy and manage their modules independently, the design system becomes the only reliable way to preserve coherence.

This means reimagining the design system as a runtime participant, not just a compile-time dependency. It must work with dynamic routing, module federation, brand customization, and layout adaptation—often at the edge or even in the browser.

It also means that design systems must offer:

  • Backward compatibility across versions, enabling gradual upgrades
  • Slot-based composition logic, defining how primitives integrate with layouts and shells
  • Governance hooks, such as automated accessibility checks, linting, and telemetry built into every render
  • Runtime diagnostics, so teams can debug style inheritance and behavior overrides across deployed modules

"The design system must evolve from 'how things look' to 'how things work together.'"

Companies that adopt this mindset build systems where design becomes an operational capability—not just a design one.


Capability-Driven Composition

In a composable system, the design system doesn’t just power UI—it becomes a core capability. That capability must be managed, versioned, extended, and orchestrated like any backend service or platform primitive. In this model, design components become not just visual assets but execution surfaces: behaviors, policies, performance contracts, and compliance wrappers.

The implications are far-reaching:

  • Teams consume design capabilities the way they consume APIs—via documented, versioned, observable contracts.
  • Visual primitives are composed into meaningful UI flows, bound by runtime constraints and embedded standards.
  • Accessibility, motion behavior, analytics, and error boundaries are not retrofitted—they're included in the system design contract by default.

Consider these examples:

  • A shared Button is not just a styled element; it exposes a shape for interaction (onClick), state contracts (disabledReason, loading), design variants (primary, ghost), and telemetry hooks that track abandonment or hover behavior. That’s a product platform capability.
  • A LayoutShell isn't just a skeleton. It enforces brand compliance, spacing contracts, and module boundaries. It ensures slots behave predictably, and that injected modules play by layout rules—whether they come from internal teams or third-party plugins.

By treating the design system as an execution capability:

  • Teams can extend primitives without breaking contracts.
  • New experiences can be assembled at runtime, not authored from scratch.
  • Brand and experience governance becomes distributed, observable, and enforced without blocking innovation.

Composable design systems give teams a consistent UX grammar—the way a service mesh gives them a consistent delivery path.


Case Studies: Shopify Polaris and IBM Cobalt

Shopify Polaris

Shopify’s design system, Polaris, is more than just a set of UI guidelines—it's a living platform that reflects Shopify's values, priorities, and commitment to developer and merchant autonomy. It was born not just from a need for consistent interfaces, but from a deeper need: to scale product delivery across hundreds of contributors while maintaining coherence.

Polaris started as a shared visual language for Shopify's admin interfaces. But as the platform evolved to serve partners, embedded apps, and storefronts, Polaris transformed into a composable system. It offers a structured way to build, test, and deploy components that plug into any Shopify experience without duplicating effort or breaking consistency.

What makes Polaris composable:

  • Design language: Polaris introduces a consistent, deeply hierarchical token system that defines spacing, color, motion, and typography—scalable across mobile and desktop contexts.
  • Behavioral composition: Its components are not just styled—they include UX behaviors, animation standards, keyboard support, and accessibility out of the box.
  • Contextual extension: Internal teams and third-party developers build apps that inherit Polaris’s behaviors without forking it. For example, embedded apps in the Shopify ecosystem use Polaris components and feel native—even when built and deployed by external partners.
  • Runtime safety: Components published through Polaris maintain strict versioning and backwards compatibility. Teams consuming them via npm or CDN know what guarantees the system offers.

“Polaris isn’t just reusable UI. It’s how we ship a coherent experience across independent teams.”

Polaris’s impact goes beyond visual design. It became part of Shopify's developer platform—used in SDKs, CLI tools, and app scaffolds. It helped define the rhythm of product releases, QA expectations, and merchant-facing experience standards.

Its success demonstrates what a composable design system looks like when treated as a core product capability—with governance, evolution, and runtime integration, not just static components.


IBM Cobalt: Enterprise-Grade Modularity

IBM Cobalt is a modern, enterprise-grade design system that emphasizes composability, accessibility, and runtime flexibility across IBM's expansive suite of products. As part of IBM’s overall effort to unify its product surfaces across Cloud, AI, and enterprise services, Cobalt functions not only as a visual system but as a runtime delivery platform for experience consistency.

What makes Cobalt composable:

  • Multi-brand support: Cobalt enables runtime theming and customization for different IBM offerings, including Watson, Red Hat, and IBM Cloud, through layered token systems and scoped theming APIs.
  • Design automation: Integrated with IBM’s tooling ecosystem, Cobalt connects design tokens directly with Figma, development pipelines, and continuous delivery systems to reduce handoff friction.
  • Scalable token architecture: Cobalt introduces composable design tokens categorized by purpose—layout, color, motion—which are assembled contextually depending on product, platform, or accessibility mode.
  • Governance and automation: Cobalt enforces contract safety and accessibility through tooling built into IBM’s CI/CD workflows, and provides runtime analytics for adoption, drift detection, and policy enforcement.

Where Polaris enables a startup-to-scale journey, Cobalt illustrates how composability operates in complex, legacy-rich enterprises. Its modular foundation empowers IBM’s teams to deliver tailored interfaces within tightly regulated domains—without losing control over experience quality or technical cohesion.

"Cobalt isn't just IBM’s design system—it's their experience delivery infrastructure."


Adaptive Theming and Runtime Design Context

Composable systems often serve multiple brands, markets, or tenants—with varying UX requirements. This means the design system cannot assume a single visual identity. Instead, it must become context-sensitive, capable of adapting in real time to a user’s identity, locale, brand, theme, or feature set—without requiring teams to redeploy or fork the UI code.

In traditional design systems, theming was handled through precompiled variants or hardcoded overrides. But composable systems require something more powerful: runtime theming as a service.

Here are key strategies to make that possible:

  • CSS custom properties: Use design tokens implemented as CSS variables. This allows for themes to be switched on the fly with minimal rendering cost.
  • Dynamic token delivery: Store themes in a CDN or configuration service, and allow applications to load brand or tenant-specific tokens on initialization.
  • Context-aware layouts: Layout primitives (shells, slots, containers) respond to runtime conditions like theme, region, or role, enabling the same module to look and feel appropriate in different brands.
  • Manifest-driven UIs: UI shells and navigation structures can be defined by a remote manifest, allowing full-branded experiences to shift by tenant, language, or deployment region.

Real-world examples:

  • A retail SaaS platform can switch themes dynamically per tenant: acme-store sees a sleek blue palette with minimal product grids, while bakerhub gets warm tones and recipe-rich layouts. The exact same frontend code is served to both.
  • An enterprise dashboard adapts its spacing, font size, and contrast based on the user's accessibility profile, loaded at session start.
  • A fintech company can roll out brand re-skins across dozens of services by updating a central theme definition, without touching any module-level code.

Runtime theming transforms brand governance from a design chore into a programmable, observable surface.

A composable design system with runtime awareness becomes the backbone of brand scalability—powering internationalization, white-labeling, and user preference adaptation without reinventing the interface or redeploying the system.


Observability and Governance

As composable systems scale across teams and product surfaces, visibility becomes a non-negotiable requirement. Without observability, a design system will slowly drift—from its visual intentions, from its accessibility promises, from its runtime guarantees. And that drift, left unchecked, fragments experience and erodes trust.

Just like with microservices, design systems must be instrumented, versioned, and governed as operational infrastructure:

  • Component telemetry: Every component render should emit useful signals—what variant was used, what props were passed, how long did it take to render, and whether it was mounted successfully. This helps track real-world usage and performance regressions.
  • Version auditing: Design system primitives should publish versioned APIs that can be audited across consuming applications. A central dashboard should show which modules are on which versions, helping teams plan upgrades and deprecations safely.
  • Contract evolution and validation: Introducing breaking changes—such as changing the shape of a prop or removing a token—should require validation against downstream consumers. Tooling should block, warn, or flag regressions during CI/CD pipelines.
  • Live component registry: A centralized portal or API that shows what components are available, what themes they support, where they are used, and what variants are published. This gives designers and developers a shared source of truth.
  • Governance as code: Just like with infrastructure, design system policies should be expressed declaratively—what accessibility rules must be met, what performance budgets exist, and what visual constraints apply to different breakpoints or themes.

Composable systems don’t collapse due to lack of effort—they collapse due to lack of coordination. Observability turns governance into a service, not a bottleneck.

When observability is embedded into the design system, teams gain autonomy without sacrificing alignment. They ship confidently, resolve issues faster, and evolve the system with safety instead of fear.


Final Thought

Composable design systems aren’t just how we share buttons and colors. They are platforms for visual and behavioral consistency across organizational boundaries.

They let teams move fast without losing coherence. They make brand expression modular. They make runtime variation possible. And they transform design from something that is enforced, into something that is composed.

Stay Tuned

Want to become a Next.js pro?
The best articles, links and news related to web development delivered once a week to your inbox.