CINXE.COM
esbuild - An extremely fast bundler for the web
<!DOCTYPE html><html lang="en"><head><meta charset="utf8"><title>esbuild - An extremely fast bundler for the web</title><link rel="icon" type="image/svg+xml" href="/favicon.svg"><meta property="og:title" content="esbuild - An extremely fast bundler for the web"/><meta property="og:type" content="website"/><style>html:not([data-theme=dark]){--bg-grad: rgba(255, 255, 255, 0) 0%, #fff 25%, #fff 75%, rgba(255, 255, 255, 0) 100%;--bg: #fff;--dark: none;--fg-on: #000;--fg: #222;--lite: block;--menu-bg: #fff;--menu-fg: #222;--menu-a: .25;--pre-dim: #777;--pre-val: #870;--pre: #222;--svg: #444;--td: #ddd;--tr: #f7f7f7;--warn-info: #222}html[data-theme=dark]{color-scheme:dark;--bg-grad: rgba(25, 25, 25, 0) 0%, #191919 25%, #191919 75%, rgba(25, 25, 25, 0) 100%;--bg: #191919;--dark: block;--fg-on: #ddd;--fg: #aaa;--lite: none;--menu-bg: #222;--menu-fg: #aaa;--menu-a: .65;--pre-dim: #999;--pre-val: #cb8;--pre: #ccc;--svg: #aaa;--td: #333;--tr: #151515;--warn-info: #ddd}@media (prefers-color-scheme: dark){html:not([data-theme=light]){color-scheme:dark;--bg-grad: rgba(25, 25, 25, 0) 0%, #191919 25%, #191919 75%, rgba(25, 25, 25, 0) 100%;--bg: #191919;--dark: block;--fg-on: #ddd;--fg: #aaa;--lite: none;--menu-bg: #222;--menu-fg: #aaa;--menu-a: .65;--pre-dim: #999;--pre-val: #cb8;--pre: #ccc;--svg: #aaa;--td: #333;--tr: #151515;--warn-info: #ddd}}body{font:16px/140% sans-serif}a{color:inherit}b,strong{color:var(--fg-on)}footer{font-size:80%;line-height:140%;font-style:italic}sup{vertical-align:top;font-size:70%;line-height:100%;font-style:normal}footer>sup[id]{position:relative;padding-top:20px}code{font-family:Noto Sans Mono,monospace;background:rgba(159,159,159,.15);padding:1px 4px;margin:-1px 0;border-radius:5px;white-space:nowrap}.dl{display:block;width:22px;height:22px}.dl:after{content:"";display:block;width:22px;height:22px;mask-repeat:no-repeat;mask-position:center;-webkit-mask-repeat:no-repeat;-webkit-mask-position:center}@-moz-document url-prefix(){code{white-space:pre-wrap}}@keyframes scale-bar{0%{transform:scaleX(.0000001)}to{transform:scale(1)}}.logo{display:inline-block;font-size:200%;font-weight:700;margin-top:10px;margin-bottom:10px;line-height:40px;padding-left:50px;background-image:url(/favicon.svg);background-repeat:no-repeat;background-size:40px 40px}nav a{text-decoration:none}nav a:hover{text-decoration:underline}nav ul{margin:0;padding:0}nav li{list-style:none}#menu>ul>li{padding-top:20px}nav li.current{font-weight:700}nav ul.h2{padding-left:10px;font-size:80%;line-height:150%}nav ul.h3{padding:0 0 0 10px}nav li.current>ul.h3{font-weight:400}#icons a{display:inline-block}body:not(.has-js) #theme{display:none}.index h1{text-align:center}.index blockquote{text-align:center;font-style:italic;margin:0 0 100px}.bench a{text-decoration:none}.bench a:hover{text-decoration:underline}figure{margin:60px auto}figcaption{font-weight:700;text-align:center;margin:40px 0 -40px}figure+figcaption{font-weight:400;text-align:left;margin:-40px auto 60px;font-size:13px;line-height:140%;font-style:italic;max-width:800px;padding:0 15%;box-sizing:border-box}h1{margin:10px 0 20px;font-size:200%;line-height:40px}h2{font-size:160%;border-bottom:2px solid #FFCF00;padding-top:63px;line-height:40px}h3{font-size:140%;padding-top:67px;line-height:32px}h4{font-size:100%;padding-top:70px;line-height:26px}h2,h3,h4{position:relative;margin:-10px 0 20px}h2 .permalink,h3 .permalink,h4 .permalink{position:absolute;width:25px;left:-25px;text-align:center;text-decoration:none;opacity:50%;-khtml-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none;-webkit-user-select:none}h2:not(:hover) .permalink:not(:focus),h3:not(:hover) .permalink:not(:focus),h4:not(:hover) .permalink:not(:focus){color:transparent}p{margin:20px 0}.warning{border:1px solid #a90;border-radius:10px;padding:20px 20px 20px 50px;background-color:rgba(255,223,0,.2)}.warning:before{content:"!";font:700 43px/43px serif;margin-left:-30px;display:block;float:left}.info{border:1px solid var(--fg-on);border-radius:10px;padding:20px 20px 20px 60px}.info:before{content:"\24d8";font:700 43px/43px serif;margin-left:-43px;display:block;float:left}table{font-size:inherit;margin:30px auto;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow-x:auto}td,th{padding:7px 10px;white-space:nowrap;vertical-align:top}pre{position:relative;font:14px/140% Noto Sans Mono,monospace;background:rgba(127,127,127,.1);border:1px solid rgba(127,127,127,.5);border-radius:10px;padding:8px 10px;margin:30px 0;overflow-x:auto}pre:before{position:absolute;display:block;right:0;top:0;padding:5px 8px;font:12px/140% sans-serif}pre.cli3:before{content:"CLI"}pre.js3:before,pre.js2:before{content:"JS"}pre.go3:before,pre.go2:before{content:"Go"}pre.unix2:before{content:"Unix"}pre.windows2:before{content:"Windows"}.has-js pre.switchable{margin-top:0;display:none;border-top-right-radius:0}body[data-mode3=cli] pre.cli3,body[data-mode3=js] pre.js3,body[data-mode2=js] pre.js2,body[data-mode3=go] pre.go3,body[data-mode2=go] pre.go2,body[data-os2=unix] pre.unix2,body[data-os2=windows] pre.windows2{display:block}.has-js pre:before{display:none}.color-bold{font-weight:700;color:var(--fg-on)}.color-underline{text-decoration:underline;color:var(--fg-on)}.bg-red{background:#e24834}.color-red{color:#e24834}.bg-yellow{background:#f2d42d}.color-yellow{color:#f2d42d}.color-green{color:#58a549}.color-black{color:#000}.color-white{color:#fff}.color-dim{color:#777}.repl-in{margin-left:15px;display:block}.repl-in:before{position:absolute;display:block;left:10px;color:#7f7f7f}.cli1 .repl-in:before,.unix1 .repl-in:before,.cli2 .repl-in:before,.unix2 .repl-in:before,.cli3 .repl-in:before,.unix3 .repl-in:before{content:"$"}.windows1 .repl-in:before,.windows2 .repl-in:before,.windows3 .repl-in:before{content:">"}.js1 .repl-in:before,.js2 .repl-in:before,.js3 .repl-in:before{content:"";display:block;width:16px;height:20px}.repl-out{color:#7f7f7f}.repl-in+.repl-in,.repl-out+.repl-in{margin-top:20px}.switcher{display:none}.has-js .switcher{display:flex;justify-content:flex-end}.switcher a{background:rgba(127,127,127,.1);border:1px solid rgba(127,127,127,.5);border-bottom:none;border-right:none;text-decoration:none;-khtml-user-select:none;-moz-user-select:-moz-none;-ms-user-select:none;user-select:none;-webkit-user-select:none;padding:5px 8px;font:12px/140% sans-serif}.switcher a:first-child{border-top-left-radius:10px}.switcher a:last-child{border-top-right-radius:10px;border-right:1px solid rgba(127,127,127,.5)}body[data-mode3=cli] .switcher .cli3,body[data-mode3=js] .switcher .js3,body[data-mode2=js] .switcher .js2,body[data-mode3=go] .switcher .go3,body[data-mode2=go] .switcher .go2,body[data-os2=unix] .switcher .unix2,body[data-os2=windows] .switcher .windows2{background:rgba(127,127,127,.25)}body{margin:0;padding:30px}nav{margin-bottom:50px}#menubar{display:none;position:fixed;left:-20px;top:0;right:-20px;height:50px;padding:0 20px;z-index:2}#menutoggle{display:block;width:50px;height:50px}body.has-js{padding-top:60px}.has-js #menubar{display:block}.has-js #shadow{position:fixed;left:0;top:0;right:0;bottom:0;z-index:3;background:rgba(0,0,0,0);visibility:hidden;transition:visibility .25s,background-color .25s}.has-js .open #shadow{background:rgba(0,0,0,.5);visibility:visible}.has-js #menu{position:fixed;left:0;top:0;bottom:0;width:220px;box-sizing:border-box;overflow-y:auto;padding:30px 0 0 30px;z-index:4;transition:transform .25s;transform:translate(-220px);box-shadow:none}.has-js .open #menu{transform:translate(0);box-shadow:0 0 20px rgba(0,0,0,.5)}#icons{position:static;margin:20px 0 20px 50px}.index h1{font-size:75px;line-height:40px}.index blockquote{font-size:16px}.available-options{margin-top:50px;display:flex;flex-flow:wrap;flex-direction:row}.option-group{padding-right:20px}.option-group ul{margin:0;padding:0 0 0 20px}@media (min-width: 800px){body,body.has-js{position:relative;max-width:1000px;margin:0 auto;padding:50px 50px 500px 250px}.index h1{font-size:100px;line-height:70px}.index blockquote{font-size:21px}main{position:relative;z-index:1}.has-js #menubar,.has-js #shadow{display:none}nav,.has-js nav{position:fixed;left:0;right:0;top:0;bottom:0;max-width:1300px;margin:0 auto;display:block}#menu,.has-js #menu,.has-js .open #menu{position:absolute;left:0;top:0;bottom:0;padding:50px 0 30px 30px;overflow-y:auto;transform:none;box-shadow:none}pre{margin-left:30px;margin-right:30px}li pre{margin-left:0;margin-right:0}.switcher{margin-right:30px}.available-options{justify-content:center}}body,#menu,nav ul ul{background:var(--bg);color:var(--fg)}#menubar{box-shadow:0 0 10px rgba(0,0,0,var(--menu-a));background:var(--menu-bg);color:var(--menu-fg)}.progress{background:linear-gradient(to right,var(--bg-grad))}path,rect,circle{fill:var(--svg);stroke:var(--svg)}h1,h2,h3,.logo,nav ul,nav li.current{color:var(--fg-on)}a:hover path,a:hover rect,a:hover circle{fill:var(--fg-on);stroke:var(--fg-on)}pre,.hljs-tag .hljs-string{color:var(--pre)}.hljs-comment,.hljs-keyword,.hljs-literal{color:var(--pre-dim)}.hljs-regexp,.hljs-string,.hljs-number,.hljs-tag{color:var(--pre-val)}#theme-dark{display:var(--dark)}#theme-light{display:var(--lite)}td,th{border:1px solid var(--td)}tr:hover{background:var(--tr)}.warning,.info{color:var(--warn-info)}.dl:after{background:var(--fg)}.dl:hover:after{background:var(--fg-on)}.js2 .repl-in:before,.js3 .repl-in:before{background-image:url('data:image/svg+xml,<svg width="16" height="20" xmlns="http://www.w3.org/2000/svg"><path d="M2 5.5L6 9.5 2 13.5" stroke-width="1.5" fill="none" stroke="%237f7f7f"/></svg>')}.dl:after{mask-image:url('data:image/svg+xml,<svg width="22" height="22" xmlns="http://www.w3.org/2000/svg"><path d="M11 2V15M4 8L11.7071 15.7071M18 8L10.2929 15.7071M2 19H20" stroke="black" stroke-width="2"/></svg>');-webkit-mask-image:url('data:image/svg+xml,<svg width="22" height="22" xmlns="http://www.w3.org/2000/svg"><path d="M11 2V15M4 8L11.7071 15.7071M18 8L10.2929 15.7071M2 19H20" stroke="black" stroke-width="2"/></svg>')}</style><meta name="viewport" content="width=device-width, initial-scale=1"></head><body class="index"><script>(function(){var s=document,L=s.body,r=s.documentElement,c=r.dataset,l=L.dataset,i=s.getElementById.bind(s),T=navigator.platform==="Win32"?"windows":"unix";try{l.mode3=localStorage.getItem("mode3")||"cli",l.mode2=localStorage.getItem("mode2")||"js",l.os2=localStorage.getItem("os2")||T,c.theme=localStorage.getItem("theme")}catch(t){l.mode3="cli",l.mode2="js",l.os2=T,c.theme=null}L.classList.add("has-js"),addEventListener("click",function(t){if(t.target.parentElement&&t.target.parentElement.className==="switcher"){var o=t.target.className;if(/^(cli|js|go)[23]$/.test(o)){for(var m=t.target.offsetTop-r.scrollTop,d=o==="cli3"?3:2;d<=3;d++)l["mode"+d]=o.slice(0,-1),localStorage.setItem("mode"+d,o.slice(0,-1));var h=t.target.offsetTop-r.scrollTop;r.scrollTop+=h-m}if(/^(unix|windows)2$/.test(o)){var m=t.target.offsetTop-r.scrollTop;l.os2=o.slice(0,-1),localStorage.setItem("os2",o.slice(0,-1));var h=t.target.offsetTop-r.scrollTop;r.scrollTop+=h-m}}}),addEventListener("DOMContentLoaded",function(){function t(){for(var a,u,g,n=0;n<v.length;n++){var e=v[n];if(e.getBoundingClientRect().top>10)break;e.tagName==="H2"?(a=e,u=g=null):e.tagName==="H3"?(u=e,g=null):g=e}for(var n=0;n<v.length;n++){var e=v[n];e.tagName!=="H4"&&i("nav-"+e.id).classList.toggle("current",e===(u||a))}var e=g||u||a;f=location.pathname+(e?"#"+e.id:""),p===null&&(p=setTimeout(o,300))}function o(){p=null,location.pathname+location.hash!==f&&history.replaceState(null,"",f)}var m=i("menutoggle"),d=i("shadow"),h=i("menu"),S=s.querySelector("nav");m.addEventListener("click",function(){h.scrollTop=0,S.classList.add("open")}),d.addEventListener("click",function(a){S.classList.remove("open")});var f,p=null,v=s.querySelectorAll("h2,h3,h4");addEventListener("scroll",t,{passive:!0}),addEventListener("load",t);function y(){return E.matches?"light":"dark"}function I(a){localStorage.setItem("theme",a),c.theme=a}addEventListener("storage",function(){c.theme=localStorage.getItem("theme")}),i("theme").addEventListener("click",function(){var a=y();I(c.theme===a?null:a)});var E=matchMedia("(prefers-color-scheme: dark)");function k(){c.theme!==y()&&I(null)}try{E.addEventListener("change",k)}catch(a){E.addListener(k)}})})();</script><div id="menubar"><a id="menutoggle" href="javascript:void 0" aria-label="Toggle the menu"><svg width="50" height="50" xmlns="http://www.w3.org/2000/svg"><rect x="15" y="18" width="20" height="2" stroke-width="0"></rect><rect x="15" y="24" width="20" height="2" stroke-width="0"></rect><rect x="15" y="30" width="20" height="2" stroke-width="0"></rect></svg></a></div><nav><div id="shadow"></div><div id="menu"><a href="/" class="logo">esbuild</a><ul><li><a href="/try/">Try in the browser</a></li><li><a href="/getting-started/">Getting Started</a><ul class="h2"><li><a href="/getting-started/#install-esbuild">Install esbuild</a></li><li><a href="/getting-started/#your-first-bundle">Your first bundle</a></li><li><a href="/getting-started/#build-scripts">Build scripts</a></li><li><a href="/getting-started/#bundling-for-the-browser">Bundling for the browser</a></li><li><a href="/getting-started/#bundling-for-node">Bundling for node</a></li><li><a href="/getting-started/#simultaneous-platforms">Simultaneous platforms</a></li><li><a href="/getting-started/#yarn-pnp">Using Yarn Plug'n'Play</a></li><li><a href="/getting-started/#other-ways-to-install">Other ways to install</a></li></ul></li><li><a href="/api/">API</a><ul class="h2"><li><a href="/api/#overview">Overview</a></li><li><a href="/api/#general-options">General options</a></li><li><a href="/api/#input">Input</a></li><li><a href="/api/#output-contents">Output contents</a></li><li><a href="/api/#output-location">Output location</a></li><li><a href="/api/#path-resolution">Path resolution</a></li><li><a href="/api/#transformation">Transformation</a></li><li><a href="/api/#optimization">Optimization</a></li><li><a href="/api/#source-maps">Source maps</a></li><li><a href="/api/#build-metadata">Build metadata</a></li><li><a href="/api/#logging">Logging</a></li></ul></li><li><a href="/content-types/">Content Types</a><ul class="h2"><li><a href="/content-types/#javascript">JavaScript</a></li><li><a href="/content-types/#typescript">TypeScript</a></li><li><a href="/content-types/#jsx">JSX</a></li><li><a href="/content-types/#json">JSON</a></li><li><a href="/content-types/#css">CSS</a></li><li><a href="/content-types/#text">Text</a></li><li><a href="/content-types/#binary">Binary</a></li><li><a href="/content-types/#base64">Base64</a></li><li><a href="/content-types/#data-url">Data URL</a></li><li><a href="/content-types/#external-file">External file</a></li><li><a href="/content-types/#empty-file">Empty file</a></li></ul></li><li><a href="/plugins/">Plugins</a><ul class="h2"><li><a href="/plugins/#finding-plugins">Finding plugins</a></li><li><a href="/plugins/#using-plugins">Using plugins</a></li><li><a href="/plugins/#concepts">Concepts</a></li><li><a href="/plugins/#on-resolve">On-resolve callbacks</a></li><li><a href="/plugins/#on-load">On-load callbacks</a></li><li><a href="/plugins/#on-start">On-start callbacks</a></li><li><a href="/plugins/#on-end">On-end callbacks</a></li><li><a href="/plugins/#on-dispose">On-dispose callbacks</a></li><li><a href="/plugins/#build-options">Accessing build options</a></li><li><a href="/plugins/#resolve">Resolving paths</a></li><li><a href="/plugins/#example-plugins">Example plugins</a></li><li><a href="/plugins/#plugin-api-limitations">Plugin API limitations</a></li></ul></li><li><a href="/faq/">FAQ</a><ul class="h2"><li><a href="/faq/#why-is-esbuild-fast">Why is esbuild fast?</a></li><li><a href="/faq/#benchmark-details">Benchmark details</a></li><li><a href="/faq/#upcoming-roadmap">Upcoming roadmap</a></li><li><a href="/faq/#production-readiness">Production readiness</a></li><li><a href="/faq/#anti-virus-software">Anti-virus software</a></li><li><a href="/faq/#old-go-version">Outdated version of Go</a></li><li><a href="/faq/#minified-newlines">Minified newlines</a></li><li><a href="/faq/#top-level-name-collisions">Avoiding name collisions</a></li><li><a href="/faq/#top-level-var">Top-level <code>var</code></a></li></ul></li><li><a href="/analyze/">Bundle Size Analyzer</a></li></ul><div id="icons"><a href="https://github.com/evanw/esbuild" aria-label="View this project on GitHub"><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25"><path fill-rule="evenodd" stroke-width="0" d="M13 5a8 8 0 00-2.53 15.59c.4.07.55-.17.55-.38l-.01-1.49c-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82a7.42 7.42 0 014 0c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48l-.01 2.2c0 .21.15.46.55.38A8.01 8.01 0 0021 13a8 8 0 00-8-8z"></path></svg></a><a href="javascript:void 0" id="theme" aria-label="Toggle dark mode"><svg id="theme-light" width="25" height="25" xmlns="http://www.w3.org/2000/svg"><path d="M13.5 4v3m9.5 6.5h-3M13.5 23v-3M7 13.5H4M9 9L7 7m13 0l-2 2m2 11l-2-2M7 20l2-2"></path><circle cx="13.5" cy="13.5" r="4.5" stroke-width="0"></circle></svg><svg id="theme-dark" width="25" height="25" xmlns="http://www.w3.org/2000/svg"><path d="M10.1 6.6a8.08 8.08 0 00.24 11.06 8.08 8.08 0 0011.06.24c-6.46.9-12.2-4.84-11.3-11.3z" stroke-width="0"></path></svg></a></div></div></nav><main><h1>esbuild</h1><blockquote>An extremely fast bundler for the web</blockquote><style>@keyframes bench0-anim{0%{left:0}to{left:85.915%}}#bench0-progress{animation:bench0-anim 41.21s linear;left:85.915%}.bench0-bar0{animation:scale-bar .39s linear;transform-origin:left}.bench0-bar1{animation:scale-bar 14.91s linear;transform-origin:left}.bench0-bar2{animation:scale-bar 34.1s linear;transform-origin:left}.bench0-bar3{animation:scale-bar 41.21s linear;transform-origin:left}</style><figure class="bench" style="position:relative;max-width:800px;height:110px;font-size:13px;line-height:20px;"><div style="position:absolute;left:90px;top:0;right:0;height:80px;"><div style="position:absolute;left:0.00%;top:0;width:1px;bottom:0;background:rgba(127,127,127,0.25);"></div><div style="position:absolute;left:20.85%;top:0;width:1px;bottom:0;background:rgba(127,127,127,0.25);"></div><div style="position:absolute;left:41.70%;top:0;width:1px;bottom:0;background:rgba(127,127,127,0.25);"></div><div style="position:absolute;left:62.54%;top:0;width:1px;bottom:0;background:rgba(127,127,127,0.25);"></div><div style="position:absolute;left:83.39%;top:0;width:1px;bottom:0;background:rgba(127,127,127,0.25);"></div><div style="position:absolute;left:0;top:3px;width:0.81%;height:14px;background:rgba(191,191,191,0.2);"></div><div style="position:absolute;left:0;top:3px;width:0.81%;height:14px;background:#FFCF00;" class="bench0-bar0"></div><div style="position:absolute;right:100%;top:0px;width:90px;height:20px;text-align:right;white-space:nowrap;margin-right:8px;font-weight:bold;"><a href="https://esbuild.github.io/">esbuild</a></div><div style="position:absolute;left:0.81%;top:0px;height:20px;margin-left:8px;font-weight:bold;">0.39s</div><div style="position:absolute;left:0;top:23px;width:31.08%;height:14px;background:rgba(191,191,191,0.2);"></div><div style="position:absolute;left:0;top:23px;width:31.08%;height:14px;background:#FFCF00;" class="bench0-bar1"></div><div style="position:absolute;right:100%;top:20px;width:90px;height:20px;text-align:right;white-space:nowrap;margin-right:8px;"><a href="https://parceljs.org/">parcel 2</a></div><div style="position:absolute;left:31.08%;top:20px;height:20px;margin-left:8px;">14.91s</div><div style="position:absolute;left:0;top:43px;width:71.09%;height:14px;background:rgba(191,191,191,0.2);"></div><div style="position:absolute;left:0;top:43px;width:71.09%;height:14px;background:#FFCF00;" class="bench0-bar2"></div><div style="position:absolute;right:100%;top:40px;width:90px;height:20px;text-align:right;white-space:nowrap;margin-right:8px;"><a href="https://rollupjs.org/">rollup 4</a> + <a href="https://terser.org/">terser</a></div><div style="position:absolute;left:71.09%;top:40px;height:20px;margin-left:8px;">34.10s</div><div style="position:absolute;left:0;top:63px;width:85.92%;height:14px;background:rgba(191,191,191,0.2);"></div><div style="position:absolute;left:0;top:63px;width:85.92%;height:14px;background:#FFCF00;" class="bench0-bar3"></div><div style="position:absolute;right:100%;top:60px;width:90px;height:20px;text-align:right;white-space:nowrap;margin-right:8px;"><a href="https://webpack.js.org/">webpack 5</a></div><div style="position:absolute;left:85.92%;top:60px;height:20px;margin-left:8px;">41.21s</div><div style="position:absolute;left:0.00%;top:84px;width:50px;margin-left:-25px;text-align:center;">0s</div><div style="position:absolute;left:20.85%;top:84px;width:50px;margin-left:-25px;text-align:center;">10s</div><div style="position:absolute;left:41.70%;top:84px;width:50px;margin-left:-25px;text-align:center;">20s</div><div style="position:absolute;left:62.54%;top:84px;width:50px;margin-left:-25px;text-align:center;">30s</div><div style="position:absolute;left:83.39%;top:84px;width:50px;margin-left:-25px;text-align:center;">40s</div><div id="bench0-progress" class="progress" style="position:absolute;top:84px;width:50px;margin-left:-25px;text-align:center;"></div></div><script>(function(){var e=document.getElementById("bench0-progress"),n,t,a=function(){t||(t=e.getAnimations()[0]),t&&(e.textContent=Math.floor(t.timeline.currentTime/1e3)+"s",t.playState==="finished"&&(clearInterval(n),e.style.display="none"))};e.getAnimations&&(n=setInterval(a,250),a())})();</script></figure><figcaption>Above: the time to do a production bundle of 10 copies of the <a href="https://github.com/mrdoob/three.js">three.js</a> library from scratch using default settings, including minification and source maps. More info <a href="/faq/#benchmark-details">here</a>.</figcaption><p>Our current build tools for the web are 10-100x slower than they could be. The main goal of the esbuild bundler project is to bring about a new era of build tool performance, and create an easy-to-use modern bundler along the way.</p><p>Major features:</p><ul><li>Extreme speed without needing a cache</li><li><a href="/content-types/#javascript">JavaScript</a>, <a href="/content-types/#css">CSS</a>, <a href="/content-types/#typescript">TypeScript</a>, and <a href="/content-types/#jsx">JSX</a> built-in</li><li>A straightforward <a href="/api/">API</a> for CLI, JS, and Go</li><li>Bundles ESM and CommonJS modules</li><li>Bundles CSS including <a href="https://github.com/css-modules/css-modules">CSS modules</a></li><li>Tree shaking, <a href="/api/#minify">minification</a>, and <a href="/api/#sourcemap">source maps</a></li><li><a href="/api/#serve">Local server</a>, <a href="/api/#watch">watch mode</a>, and <a href="/plugins/">plugins</a></li></ul><p>Check out the <a href="/getting-started/">getting started</a> instructions if you want to give esbuild a try.</p></main></body></html>