Emotion

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

Library
npm
v11.14.0
18,020 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
62 /100 Good
Development Activity 36
Maintenance 44
Community 68
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
79 /100 Good
Architecture 82
Code Quality 80
Innovation 76
Learning Curve 78

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 156 apps in this directory

TypeScript
97%
MIT

Promptfoo

AI Development

25,506

An open-source CLI and library for evaluating and red-teaming LLM applications — replace trial-and-error prompt engineering with systematic evals, vulnerability scanning, and CI/CD integration.

View details
90
Repo Health
73
Technical
68
Dependency
Built with
TypeScript 97%
Updated 1 weeks ago
JavaScript
50%
AGPL 3.0

QRev

AI Agents · CRM

363

Open source AI-first sales platform that replaces Salesforce with autonomous agents handling prospecting, outreach, and lead management at scale.

View details
38
Repo Health
68
Technical
63
Dependency
Built with
JavaScript 50%
Python 28%
TypeScript 14%
Updated 8 months ago
JavaScript
50%
AGPL 3.0

QRev

AI Agents · CRM

363

Open source AI-first sales platform that replaces Salesforce with autonomous agents handling prospecting, outreach, and lead management at scale.

View details
38
Repo Health
68
Technical
63
Dependency
Built with
JavaScript 50%
Python 28%
TypeScript 14%
Updated 8 months ago
Rust
91%
Apache 2.0

Quickwit

Monitoring · Search

11,682

Cloud-native search engine for logs and traces, delivering sub-second search directly on S3, GCS, or Azure Blob storage at a fraction of Elasticsearch's cost.

View details
87
Repo Health
83
Technical
73
Dependency
Built with
Rust 91%
Updated 2 weeks ago
Rust
91%
Apache 2.0

Quickwit

Monitoring · Search

11,682

Cloud-native search engine for logs and traces, delivering sub-second search directly on S3, GCS, or Azure Blob storage at a fraction of Elasticsearch's cost.

View details
87
Repo Health
83
Technical
73
Dependency
Built with
Rust 91%
Updated 2 weeks ago
Rust
68%
MIT

Readur

Bookmarks Archiving · File Storage · Knowledge Management

797

A self-hosted document management system that OCRs, indexes, and makes every PDF, scan, and Office file instantly searchable.

View details
81
Repo Health
78
Technical
67
Dependency
Built with
Rust 68%
TypeScript 30%
Updated 1 weeks ago
Rust
68%
MIT

Readur

Bookmarks Archiving · File Storage · Knowledge Management

797

A self-hosted document management system that OCRs, indexes, and makes every PDF, scan, and Office file instantly searchable.

View details
81
Repo Health
78
Technical
67
Dependency
Built with
Rust 68%
TypeScript 30%
Updated 1 weeks ago
TypeScript
99%
Other

Rowy

Databases · Low Code Platforms

6,843

Manage Firestore data in an Airtable-like spreadsheet UI and build Cloud Functions workflows directly in your browser—on your own GCP project.

View details
45
Repo Health
71
Technical
65
Dependency
Built with
TypeScript 99%
Updated 1 years ago
TypeScript
99%
Other

Rowy

Databases · Low Code Platforms

6,843

Manage Firestore data in an Airtable-like spreadsheet UI and build Cloud Functions workflows directly in your browser—on your own GCP project.

View details
45
Repo Health
71
Technical
65
Dependency
Built with
TypeScript 99%
Updated 1 years 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