postcss-import

A PostCSS plugin that inlines @import rules, merging split CSS files into one stylesheet before other plugins run.

Library
npm
v17.0.0
1,411stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
66/100Good
Development Activity68
Maintenance52
Community56
Maturity60
Momentum28

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
68/100Good
Architecture82
Code Quality78
Innovation60
Learning Curve50

postcss-import is a PostCSS plugin that resolves and inlines CSS @import statements at build time. It can pull in content from local files, node_modules/web_modules packages, or data URLs, recursively following nested imports until a single flattened stylesheet remains. Because it runs as the first plugin in a PostCSS pipeline, every subsequent plugin sees one merged file instead of a tree of @import-linked partials, which avoids the correctness pitfalls that come from processing files independently.

Beyond straightforward inlining, it resolves node modules the same way Node’s own require algorithm does (checking a package’s style field, then main, then falling back to index.css), preserves @media/@layer/@supports conditions around imported content, detects and skips duplicate imports per-scope, and emits PostCSS dependency messages so watch-mode tooling knows which files to track. It has become a de facto standard for CSS import resolution and ships as a dependency inside many higher-level build tools and frameworks.

What You Get

  • Recursive inlining of local, node_modules, and web_modules @import targets
  • Preserved media/layer/supports conditions wrapped around inlined content
  • Dependency messages on result.messages for watch-mode file tracking
  • Configurable custom resolve/load functions for non-standard module setups
  • Per-scope duplicate import detection to avoid redundant CSS output

Common Use Cases

  • Splitting a large stylesheet into maintainable partials that get merged at build time
  • Importing shared CSS packages published to npm by name, resolved like a JS require
  • Feeding watch-mode build tools accurate per-file dependency information
  • Running as the first step in a PostCSS pipeline ahead of Tailwind/Autoprefixer/etc.

Under The Hood

Architecture The plugin follows a linear pipeline architecture rooted in a single AtImport factory (index.js) that returns a PostCSS plugin object with one Once hook; execution flows from parse-statements.js (which walks the root AST and classifies each node into import/charset/layer/nodes statements) into parse-styles.js, which recursively resolves each @import via resolve-id.js (a thin wrapper around the resolve package’s node-module algorithm) and load-content.js, then re-parses the loaded content and recurses back into itself to handle nested imports, accumulating a per-scope importedFiles map to dedupe by resolved path and by a media/layer/supports key computed in format-import-prelude.js. Once the tree is resolved, apply-conditions.js wraps content in the appropriate @media/@layer/@supports nodes, apply-raws.js normalizes whitespace, and apply-styles.js performs the final in-place AST replacement of the original import node. Each lib/*.js file has a single, narrow responsibility with no dependency-injection framework — resolve/load are passed as plain functions through an options object — and the main risk surface for change is the parseStyles/resolveImportId recursion contract that every other module relies on.

Tech Stack The package targets Node >=22 and is built directly as a PostCSS 8 plugin (peerDependency postcss ^8.0.0), with runtime dependencies limited to postcss-value-parser (parsing/serializing @import prelude arguments like media queries and layer names), resolve (Node’s module-resolution algorithm, reused to resolve @import "some-package" against node_modules/web_modules), and read-cache (a small mtime-based cache around file reads to avoid re-reading unchanged files across builds). There is no bundler or transpiler step — the package ships plain CommonJS with no build step. Dev tooling is test/lint focused: ava and c8 for tests and coverage, eslint (with eslint-config-problems and eslint-plugin-prettier) and prettier for style, wired through an npm run ci script.

Code Quality Testing uses ava with c8 coverage, and the suite is fixture-driven: a shared checkFixture helper runs a named CSS fixture through the plugin and diffs the output against an expected file, with extensive dedicated suites covering media queries, layers, filters, custom resolvers, custom loaders, sourcemaps, syntax errors, and plugin chaining — a genuinely thorough behavioral test suite for a package this size. Error handling is explicit and PostCSS-idiomatic: failures are thrown via node.error(...)/atRule.error(...) so they carry source-file and line context rather than generic errors, and async failures propagate naturally through async/await rather than being swallowed. The codebase is plain CommonJS with no TypeScript types, so there is no static type safety, but naming conventions are consistent across every lib file and a Prettier-integrated ESLint config enforces uniform style, gated by lint-then-test in CI.

API Design The public API is a single factory function accepting a flat options object (root, path, plugins, resolve, load, skipDuplicates, addModulesDirectories, warnOnEmpty) with sensible defaults, so the zero-config case (postcss().use(atImport())) works immediately while advanced use (custom resolvers/loaders, extra plugin chains) is opt-in rather than required upfront. Documentation in the README is thorough for a small plugin, covering every option with type, default, and example usage, and the dependency message convention is a documented, stable extension point other tooling can rely on without reading source.

Used by 33 apps in this directory

PHP
82%
Other

Akaunting

Invoicing Finance

10,111

Open-source online accounting for small businesses and freelancers — invoices, expenses, and reporting without monthly fees or vendor lock-in.

View details
98
Repo Health
73
Technical
63
Dependency
Built with
PHP82%
Blade13%
Updated yesterday
JavaScript
94%
MIT

Another Redis Desktop Manager

Developer Tools · Databases

34,729

Fast, stable Redis GUI with cluster, SSH, and massive key support

View details
83
Repo Health
56
Technical
67
Dependency
Built with
JavaScript94%
Updated 2 weeks ago
TypeScript
68%
Apache 2.0

Appsmith

Developer Tools · Automation · No Code Platforms

40,825

Open-source low-code platform to build admin panels, dashboards, and internal tools connected to any database or API.

View details
93
Repo Health
79
Technical
66
Dependency
Built with
TypeScript68%
Java21%
Updated 3 days ago
TypeScript
96%
Other

Cal.diy

Scheduling

48,218

The 100% MIT-licensed, community-driven scheduling platform — self-host your own booking infrastructure with no enterprise strings attached.

View details
95
Repo Health
86
Technical
65
Dependency
Built with
TypeScript96%
Updated yesterday
JavaScript
90%
Other

CodeSandbox

Code Editors · Developer Tools

13,640

Instantly ready browser-based IDE that runs full npm dependency resolution and transpilation entirely client-side, with no server needed.

View details
69
Repo Health
76
Technical
62
Dependency
Built with
JavaScript90%
Updated 1 weeks ago
Ruby
40%
AGPL 3.0

DocuSeal

Digital Signiture

18,446

Open source document signing platform with WYSIWYG PDF builder, multi-party workflows, REST API, and full self-hosting via Docker.

View details
87
Repo Health
80
Technical
68
Dependency
Built with
Ruby40%
Vue28%
HTML20%
Updated 1 weeks ago
TypeScript
100%
Other

Dub

Marketing · Analytics

24,676

The open-source link attribution platform for short links, conversion tracking, and affiliate programs — powering 100M+ clicks monthly.

View details
80
Repo Health
78
Technical
62
Dependency
Built with
TypeScript100%
Updated 2 days ago
TypeScript
94%
AGPL 3.0

Element Web

Team Chat · Collaboration

13,437

A polished, self-hostable Matrix client for secure, decentralized messaging and collaboration that puts your organization in full control of its data.

View details
96
Repo Health
83
Technical
65
Dependency
Built with
TypeScript94%
Updated yesterday
JavaScript
69%
AGPL 3.0

Fleetbase

Logistics

2,552

Modular open-source logistics and supply chain operating system

View details
91
Repo Health
75
Technical
67
Dependency
Built with
JavaScript69%
PHP12%
Updated yesterday

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