Emotion

Performant, flexible CSS-in-JS styling for React with the css prop, theming, and SSR support

Library
npm
v11.14.0
18,015stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
57/100Fair
Development Activity16
Maintenance44
Community68
Maturity60
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
79/100Good
Architecture82
Code Quality80
Innovation76
Learning Curve78

Emotion is a CSS-in-JS library for styling React applications with either string or object styles. Its @emotion/react package provides a css prop and ClassNames/Global components that let you write component-scoped styles directly in JSX, backed by a caching layer (@emotion/cache) that deduplicates and injects styles efficiently at runtime or build time.

Beyond the css prop, Emotion offers predictable style composition that avoids CSS specificity conflicts, built-in theming via a ThemeProvider/useTheme hook, and first-class server-side rendering support with critical CSS extraction. A companion Babel plugin adds source-map-backed labels and further build-time optimizations, and the sibling @emotion/styled package layers a styled-components-like API on top of the same core.

What You Get

  • A css prop for writing scoped styles directly on any JSX element, accepting template literals or plain style objects
  • ThemeProvider, useTheme, and withTheme for a fully typed theming system shared across styled components and the css prop
  • Global component for injecting global CSS and ClassNames for generating class names without the css prop
  • keyframes helper for defining CSS animations that integrate with Emotion’s caching and label system
  • Server-side rendering utilities (via @emotion/server) for extracting and inlining critical CSS to avoid FOUC
  • An optional Babel plugin that adds development labels, source maps, and minification/dead-code elimination for styles

Common Use Cases

  • Styling component libraries and design systems where scoped, composable styles avoid class-name collisions
  • Theming a React app (light/dark mode, brand variants) with a single typed theme object consumed via useTheme
  • Server-rendered React apps (Next.js, Remix) that need critical CSS extracted and inlined for fast first paint
  • Migrating from styled-components or plain CSS Modules to a smaller-runtime CSS-in-JS engine
  • Building dynamic, prop-driven styles that respond to component state without hand-written class toggling

Under The Hood

Architecture Emotion is a Yarn/Lerna-style monorepo of small, single-purpose packages (@emotion/react, @emotion/styled, @emotion/cache, @emotion/serialize, @emotion/utils, @emotion/sheet, @emotion/hash, @emotion/weak-memoize) composed into the public @emotion/react entry point. The css prop flows through packages/react/src/emotion-element.tsx, which wraps the target element via withEmotionCache (context.tsx) to read an EmotionCache from React context, serializes the style object with serializeStyles from @emotion/serialize, registers/inserts the resulting class via @emotion/utils, and renders a sibling <Insertion> component that writes the <style> tag using useInsertionEffectAlwaysWithSyncFallback so styles land before paint on the client and inline during SSR. Theming (theming.tsx) and globals (global.tsx) are thin wrappers around the same cache/context machinery, keeping the runtime surface small and composable.

Tech Stack The published package is TypeScript compiled with Preconstruct, targeting multiple conditions (browser, edge-light/worker, development vs. production) via package.json exports maps, and ships CJS, ESM, and UMD builds. Runtime dependencies are Emotion’s own micro-packages plus @babel/runtime and hoist-non-react-statics; React itself is a peer dependency (>=16.8.0), and an optional Babel plugin (@emotion/babel-plugin) provides compile-time label/source-map injection and minification without adding to the runtime bundle.

Code Quality The react package has 29 test files in __tests__/ (including snapshot tests, a babel/ subfolder for compiler-output fixtures, and compat/ for cross-version checks), run via Jest across multiple configs (jest.config.js, jest-react18.config.js, jest.prod.js, jest.dist.js) to cover dev, production, and React 18 builds separately. Source files are typed throughout with explicit exported types (Theme, SerializedStyles, CSSObject, etc.), development-only warnings are gated behind an isDevelopment compile-time flag so they’re stripped from production bundles, and naming is consistent with the rest of the CSS-in-JS ecosystem (css, styled, keyframes, ThemeProvider).

API Design The public API is intentionally minimal — a css prop, a handful of named exports (Global, ClassNames, keyframes, ThemeProvider/useTheme/withTheme, css) and zero required configuration to start styling a component. Getting started is a single import plus (optionally) a /** @jsx jsx */ pragma or automatic JSX runtime setup; the sibling @emotion/styled package mirrors the styled-components API for teams that prefer that ergonomics, and extensive docs (32 files under docs/) plus a dedicated docs site (emotion.sh) cover install, composition, theming, SSR, and migration paths in depth.

Used by 56 apps in this directory

TypeScript
88%
Other

AFFiNE

Productivity · Project Management · Note Taking

71,668

Write, draw, and plan in one infinite canvas — the open-source alternative to Notion and Miro that keeps your data yours.

View details
91
Repo Health
87
Technical
68
Dependency
Built with
TypeScript88%
Updated today
Python
90%
Apache 2.0

Apache Airflow

Data Engineering

46,530

Define, schedule, and monitor complex data workflows as Python code — with a powerful UI, 80+ provider integrations, and battle-tested scalability across thousands of production deployments.

View details
96
Repo Health
89
Technical
66
Dependency
Built with
Python90%
Updated today
TypeScript
96%
Other

Amplication

Developer Tools · AI Code Assistants · Automation

16,010

Create production-ready backend services with your organization's standards baked in — generating NestJS, Prisma, and GraphQL code that you own and control.

View details
61
Repo Health
84
Technical
60
Dependency
Built with
TypeScript96%
Updated 1 months ago
Rust
86%
Other

Arroyo

Data Engineering · Analytics

5,005

A distributed stream processing engine written in Rust that lets you write SQL to run stateful, real-time computations over data streams with subsecond results.

View details
86
Repo Health
74
Technical
62
Dependency
Built with
Rust86%
Updated 1 weeks ago
Go
86%
Apache 2.0

Authelia

Security · Authentication

28,626

OpenID Certified SSO and MFA portal for securing self-hosted web applications behind reverse proxies.

View details
91
Repo Health
81
Technical
77
Dependency
Built with
Go86%
TypeScript12%
Updated today
JavaScript
100%
Other

Automatisch

Automation · No Code Platforms

13,936

Self-hosted, no-code workflow automation that keeps your data on your own servers—a privacy-first alternative to Zapier with 90+ integrations.

View details
49
Repo Health
78
Technical
64
Dependency
Built with
JavaScript100%
Updated 6 months ago
TypeScript
97%
AGPL 3.0

Bigcapital

Invoicing Finance

3,846

Self-hostable double-entry accounting platform with invoicing, inventory, multi-currency, and real-time financial reporting for small and medium businesses.

View details
91
Repo Health
77
Technical
64
Dependency
Built with
TypeScript97%
Updated yesterday
Rust
67%
MIT

Bun

Developer Tools

95,452

An all-in-one JavaScript and TypeScript toolkit — one Rust-and-JavaScriptCore binary that replaces Node.js, npm, a bundler, and a test runner with faster equivalents.

View details
92
Repo Health
91
Technical
66
Dependency
Built with
Rust67%
C++19%
Updated today
TypeScript
53%
Other

Chaskiq

CRM · Customer Support

3,560

Self-hosted live chat, video calls, help center, and marketing automation — a full-stack Intercom alternative you run on your own infrastructure.

View details
60
Repo Health
66
Technical
68
Dependency
Built with
TypeScript53%
Ruby36%
Updated 1 months ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers

Search