Plugin systems are one of the reasons modern frontend tooling became so flexible.
Vite proved this extremely well.
A good plugin system lets a tool support frameworks, experiments, edge cases, and ecosystem creativity without forcing everything into the core.
But there is a point where something changes.
Plugins stop being extensions.
They become architecture.
And once foundational behavior lives across many plugin hooks, the cost is no longer just “install one more package”.
The cost becomes engineering complexity.
The plugin cost is not the package
When people talk about plugins, they usually talk about installation:
npm install plugin-name
Enter fullscreen mode
Exit fullscreen mode
But that is not the real cost.
The real cost is:
hook ordering
duplicated graph knowledge
dev/build parity
cache invalidation
transform boundaries
hidden runtime assumptions
debugging intermediate output
plugin compatibility across versions
A plugin can add a feature.
But if the feature affects the…