tailwindlabs/tailwindcss
Packages
The pnpm workspace at pnpm-workspace.yaml includes everything under packages/*, plus crates/node and crates/node/npm/* (which are the Rust-derived npm packages). Nine of those packages publish to npm; one (internal-example-plugin) is private and used only as a test fixture.
| Package | Purpose | Page |
|---|---|---|
tailwindcss |
The CSS compiler. The thing everyone imports. | tailwindcss |
@tailwindcss/cli |
tailwindcss command-line build tool. |
cli |
@tailwindcss/standalone |
Single-binary CLI built with Bun. | cli |
@tailwindcss/vite |
Vite plugin. | vite |
@tailwindcss/postcss |
PostCSS plugin. | postcss |
@tailwindcss/webpack |
Webpack loader. | webpack |
@tailwindcss/node |
Node-only helpers shared between CLI/Vite/PostCSS/Webpack. | node |
@tailwindcss/browser |
Drop-in browser bundle that watches the DOM. | browser |
@tailwindcss/upgrade |
v3 → v4 migration tool (npx @tailwindcss/upgrade). |
upgrade |
internal-example-plugin |
Private test fixture for the v3 plugin loader. | (n/a) |
Dependency shape
Every adapter package (CLI, Vite, PostCSS, Webpack) depends on three things:
graph LR
Adapter["Adapter package<br/>(cli/vite/postcss/webpack)"]
Compiler["tailwindcss<br/>(workspace:*)"]
NodeHelpers["@tailwindcss/node<br/>(workspace:*)"]
Scanner["@tailwindcss/oxide<br/>(workspace:*)"]
Adapter --> Compiler
Adapter --> NodeHelpers
Adapter --> ScannerThe browser bundle is the exception — it depends only on tailwindcss (the compiler ships with no runtime deps so it bundles cleanly into the browser).
The standalone package depends on @tailwindcss/cli plus the official forms/typography/aspect-ratio plugins it ships pre-bundled.
@tailwindcss/upgrade is independent: it depends directly on @tailwindcss/node, @tailwindcss/oxide, and on tailwindcss to read its built-in utility list when canonicalizing class names.
Versioning
All workspace packages release together. As of the wiki snapshot, every published package is at 4.2.4. Releases are orchestrated by .github/workflows/prepare-release.yml plus .github/workflows/release.yml.
The version numbers are kept in sync via scripts/version-packages.mjs. There is no runtime check that they match — but the integration tests catch any drift.
How adapters are tested
Each adapter has unit tests inside its package and at least one integration suite under integrations/. The integration suites install the actual packed tarballs into a temporary project and run real builds, which is the most reliable way to catch ecosystem regressions.
| Package | Unit tests | Integration suite |
|---|---|---|
tailwindcss |
packages/tailwindcss/src/**/*.test.ts |
(drives all adapters) |
@tailwindcss/cli |
(no separate unit tests; covered via CLI) | integrations/cli/ |
@tailwindcss/postcss |
packages/@tailwindcss-postcss/src/index.test.ts |
integrations/postcss/ |
@tailwindcss/vite |
(mostly integration-tested) | integrations/vite/ |
@tailwindcss/webpack |
(mostly integration-tested) | integrations/webpack/ |
@tailwindcss/upgrade |
packages/@tailwindcss-upgrade/src/**/*.test.ts |
integrations/upgrade/ |
@tailwindcss/browser |
packages/@tailwindcss-browser/tests/ |
(Playwright UI, see testing) |
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.