JavaScript · Question 99
What is the difference between a polyfill and transpilation, and why can some JavaScript features not be perfectly polyfilled?
Direct answer
Transpilation rewrites source syntax into code a target environment can parse and run, while a polyfill adds missing runtime APIs or behavior; features that require new syntax, engine internals, or unexposable semantics cannot always be faithfully implemented by ordinary library code.
A transpiler can transform syntax such as newer class or optional-chaining constructs into older syntax where a semantics-preserving transform is possible. A polyfill instead might define a missing method such as Array.prototype.someFeature using capabilities the older runtime already exposes. Real compatibility stacks often need both.
Not every language capability is just a missing function. New syntax must be understood before code can run at all, which is why syntax requires parsing/transformation rather than a library loaded afterward. Some semantics also depend on engine-level behavior or internal slots that userland objects cannot perfectly reproduce.
- Transpilation solves source compatibility.
- Polyfills solve selected runtime capability gaps.
- Target only the environments you support; blindly shipping every transform and polyfill can increase bundle size, startup work, and debugging complexity.