Version 6.5.3 keeps CSS beside React components
styled-components 6.5.3 turns tagged template literals into React components with generated class names. A style can read props, a transient prop prefixed with $ stays off the DOM, and the as prop swaps the rendered element without discarding its CSS. The API also includes reusable style fragments, keyframes, global rules, default attributes, and a ThemeProvider. This is a productive model for a component library whose visual variants already live in React props.
The templates accept normal CSS, including media queries, pseudo-elements, nesting, and animations. A wrapped third-party component must pass through className, which is easy to forget in hand-written wrappers. Theming uses React context, while createTheme can turn tokens into CSS custom properties for stable theme hashes. React Native has its own package entry, so shared conventions do not mean identical browser and native CSS behavior.
The README claims under 13 kB, while styles still run at render time
The README describes the browser package as under 13 kB gzipped and says no build plugin is required. That is convenient for adoption, yet the library still evaluates interpolations and manages styles at runtime. Dynamic values are its reason to exist, so this is an architectural trade rather than a hidden flaw. A mostly static marketing site may gain little from that work compared with CSS Modules or extracted TypeScript styles.
Current main-branch documentation emits CSS without vendor prefixes by default. A bundled prefix plugin can be applied to a subtree, and custom plugins may transform declarations or selectors. Teams supporting older browsers need to make that choice deliberately. Global styles and theme variables also require planned placement near the application root, particularly when server output and client hydration must agree on ordering.
What happened when we ran it
Our sandbox cloned commit 5f2a27a, a 9 MB checkout with 770 files and about 129,066 lines of source. Pnpm completed installation in 57 seconds, reported 1 package installed, and used 1,218 MB on disk. The build succeeded in 90 seconds. We ran the checkout in a fresh unprivileged Debian container with 3 CPUs, 8 GB of RAM, Node.js 22, and no secrets.
The test command completed successfully in 52 seconds. Jest reported 1,465 passed and 0 failed out of 1,465. That is the cleanest test result in this review set and gives useful confidence in the exact commit. The measurement block supplied no dependency-audit result, so there is no vulnerability count to report or infer.
Our scan found 4 CI workflow files and a workspace monorepo, with no Dockerfile or tests directory. Those signals do not conflict with the passing command because the package keeps tests outside a top-level tests folder. The unusual install line, 1 reported package but 1,218 MB on disk, is worth preserving exactly; the log does not justify translating it into a different dependency count.
Suspense streaming has an open disappearing-style report
Open issue 5808, updated September 6, 2026, describes inline style tags disappearing when a Next.js Suspense fallback is replaced by resolved content. The reporter says styling vanishes because the replacement no longer contains the unique tag. This is one reported setup rather than proof that all streaming SSR fails. It is still a good pre-release test case for any application using cache components and styled content inside a fallback.
Issue 5788 is narrower and just as actionable. It reports a React Hooks crash in development when MUI DataGrid runs through @mui/styled-engine-sc on 6.4.x and 6.5.0-era code. A fix that reevaluates interpolations on every render appeared in the 6.6.0 prerelease published September 5. Stable-package buyers should reproduce their DataGrid path instead of assuming a passing library suite covers that integration.
One primary maintainer supports 41,123 starred users
The README states that styled-components is largely maintained by 1 person and asks for funding to make support more consistent. GitHub showed 41,123 stars, 29 combined issues and pull requests, and a last push on September 5, 2026. Issue and pull request activity continued through September 8, including a React Native safe-area report and proposed fix. The project is active, though maintainer concentration belongs in a dependency-risk review.
The latest stable release, 6.5.3, shipped on August 15, 2026 to fix TypeScript errors caused by a data-* template-literal index signature. A 6.6.0 prerelease followed with the Hooks crash fix. commit 5f2a27a predates both releases, so our green 1,465-test result cannot validate either later artifact. Test the exact npm version selected for production, especially when React types, SSR, or MUI integration affect the build.
A green 1,465-test run makes a trial easy to justify
The measured checkout built in 90 seconds and passed 1,465 tests in 52 seconds, giving React teams a credible base for evaluation. styled-components is most convincing when styles depend heavily on props and the team wants one component abstraction across browser and native work. Linaria or vanilla-extract better suit teams that want static CSS output. The open streaming and DataGrid reports make release pinning and application-level rendering tests part of the purchase price.

