Mako – fast, production-grade web bundler based on Rust
Comparisons and performance
- Mako is built on SWC and positioned against Vite (esbuild + Rollup). Its benchmark claims ~2× speedup over Vite-based bundlers.
- Some argue the benchmark mostly measures Vite’s own overhead, not esbuild itself; older comparisons showed esbuild faster.
- Esbuild is praised for speed but critiqued for: weak code-splitting, limited plugin API, and rougher handling of CommonJS edge cases compared to Webpack.
- For large projects where Vite builds take ~20 seconds, a 2× speedup is seen as significant; for smaller apps already in low seconds, further gains feel marginal.
Features and plugin ecosystem
- Mako advertises advanced code-splitting and strong tree-shaking. A linked (Chinese) article describes tree-shaking mostly at ES module top level, mixing dead-code elimination and link-time optimization.
- Plugin system is explicitly marked as unstable; there’s an intent to support the unplugin ecosystem for compatibility with existing plugins.
- Some users want a stable Rust library interface to call bundling from
build.rsin Cargo; current tooling (Mako, SWC) doesn’t clearly offer that.
Rust tooling wave and related projects
- Mako is part of a broader Rust-based tooling surge: Rspack, Rsbuild, Farm, Rolldown, OXC, etc., including several from major Chinese companies.
- Motivations cited: performance, safer systems language, easy single-binary distribution, reuse of shared Rust crates (Deno, OXC, Biome).
- Others see “rewritten in Rust” as partly hype and KPI-driven, or as parallel efforts that fragment effort instead of consolidating on a few mature tools.
Bundler fatigue vs. perceived necessity
- Many express exhaustion with “yet another bundler,” arguing what’s really missing is full Webpack feature parity in a fast tool.
- Others counter that painful realities—slow builds, complex module formats (CJS/ESM), legacy browser quirks, TS and asset pipelines—justify ongoing experimentation.
- Some wish bundlers were unnecessary or built into the JS runtime; point to import maps, native modules, HTTP/2, and no-bundle dev setups, but note npm/ESM/package.json complexity still pushes most real-world projects toward bundlers.
What bundlers actually do (clarifications)
- Several comments explain bundlers as the web equivalent of a compiler/linker:
- Combine many JS/CSS files into fewer bundles.
- Perform minification, tree-shaking, and dead-code elimination.
- Transpile TS and newer JS features, normalize module systems, and often power dev servers and HMR.