Choosing the technology stack
The design-system stack shapes development speed, maintenance cost, onboarding friction, and how easily components get adopted in products. There is no “correct forever” stack — there is a stack that matches team skills, product type, and support horizon.
Selection criteria
- Team: what they already know, whether experts exist, how steep a learning curve is acceptable.
- Products: web-only or multi-platform, browser and performance requirements.
- Ecosystem: community, libraries, hiring, technology longevity.
- Time-to-market: how much time you have to bootstrap the DS.
Do not pick a technology only because it is “trendy.” Pick one the team can actually maintain for a year or more.
Frontend: React and alternatives
React
The most common base for modern design systems: Material UI, Ant Design, Chakra, shadcn/ui. Pros — ecosystem, TypeScript, flexibility, many examples. Cons — many ways to do the same thing; you need discipline in component APIs.
Vue / Angular / Svelte
Vue works well for teams that value simpler syntax. Angular fits enterprise with stricter structure. Svelte offers a great runtime and bundle size, but a smaller DS ecosystem.
Web Components
A strong option when consumers use multiple frameworks. Cons: harder DX, fewer familiar patterns, more care needed for accessibility and API shape.
In this course the default stack is React + design tokens + Storybook. It is not the only correct path — it is a practical baseline with many examples and tools.
Styling approaches
Tailwind CSS (utility-first)
Fast development, good spacing/color discipline when tokens are configured, small final CSS after purge. Cons — verbose markup and a learning curve for utility classes.
CSS Modules / Sass
Familiar CSS, scoping, no runtime cost. Weaker for dynamic themes unless you plan CSS variables carefully.
CSS-in-JS (styled-components, emotion)
Convenient for dynamic themes and co-located styles. Cons — runtime overhead, harder debugging, heavier bundles without discipline.
For a DS, the winning combo is often tokens (CSS variables / theme object) + one styling approach, not a mix of three approaches in one package.
Documentation and build
Storybook
The industry standard for UI libraries: component isolation, variants, a11y addons, visual regressions, living examples. For this course it is a required part of the stack.
Alternatives like Docz/Docusaurus help with textual site docs, but they are a poor substitute for a component explorer.
Build tools
- Vite — fast DX for apps and demos.
- Rollup / tsup / unbuild — convenient for building a publishable library.
- Webpack — still common in enterprise, but heavier to configure.
For a component library you usually split: Vite/Storybook for development, Rollup/tsup for the npm artifact.
Recommended course stack
React 18+ (TypeScript)
Design Tokens (JS objects → CSS variables)
Tailwind or CSS Modules on top of tokens
Storybook
Vite (dev) + library build for publishing
Vitest + Testing Library (as the system grows)
Why this:
- React transfers well across learning and production cases;
- tokens give a single source of truth independent of the styling layer;
- Storybook makes the system testable and documentable from the first component.
Tradeoffs — honestly
| Choice | Upside | Cost | | :--- | :--- | :--- | | React | Ecosystem, hiring, examples | Need agreement on patterns | | Tailwind | Speed, scale consistency | Verbose JSX, config discipline | | CSS-in-JS | Dynamic themes | Runtime and complexity | | Web Components | Cross-framework | Harder DX and adoption | | Storybook | Living docs and isolation | Setup and story maintenance |
A practical decision for your team
Before the final choice, answer in writing:
- Which framework is already in production?
- Do you need themes (light/dark/white-label)?
- Will the library be a publishable package or an internal monorepo package?
- Who writes docs — designers, engineers, or both?
The final decision doc should include: framework, styling, docs tool, build, rationale, and rejected alternatives. Without that, the stack gets “re-chosen” every sprint.