kataw
esbuild
kataw | esbuild | |
---|---|---|
19 | 325 | |
328 | 37,351 | |
0.0% | - | |
0.0 | 9.5 | |
about 1 year ago | 7 days ago | |
TypeScript | Go | |
ISC License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
kataw
-
We've been lied to: JavaScript is very fast
It then builds on the assumption that all of Javascript performance scales linearly based on the results of that fishy benchmark. Never mind that in C you can stack allocate, or use arena allocators, or use a million of other tricks, where in JS, once you write {}, you got a heap allocation that you don't have any control over (and if you think this doesn't matter, this is one of the reasons why esbuild is so much faster than babel, or heck even kataw, the fastest JS parsing toolkit I'm aware of).
-
Rome will be written in Rust
esbuild is the current darling leading the pack, but there are also various other projects in the space (swc[0] is written in Rust, fjb[1] is written in C, bun[2] is written in zig, leveraging JavascriptCore's engine).
The most significant performance-oriented effort in this space still leveraging JS that I know of is kataw[3], and while that's quite fast compared to babel, it's still within an order of magnitude from babel. Kataw itself is a CST-based implementation that was created to outperform seafox (a AST-based parser by the same developer).
Babel gained popularity due to the crazy amount of churn in grammar over the past few years, but more and more I think the dust is settling, and flexibility is no longer the name of the game, making an AST-based implementation less appealing. The Rome team must be feeling the heat if the data structure design choices are being informed by performance. I highly doubt someone will be able to compete in performance using a JS implementation in today's landscape.
[0] https://github.com/swc-project/swc
[1] https://github.com/sebbekarlsson/fjb
[2] https://bun.sh/
[3] https://github.com/kataw/kataw
-
An 100% spec compliant ES2022 Javascript toolchain
Kataw is a *work in progress* javascript toolchain with high focus on performance, and it's main goal is to unify functionality that has previously been separate tools. It's core is an ECMAScript friendly CST that allows you to parse `ECMAScript® 2022 (ECMA-262 12th Edition) language specification`. Each CST node contains several properties, and the `flags` property contains the CST info. The CST info can be extracted from the CST node through public API methods. Click [here](https://github.com/kataw/kataw/tree/main/src/parser#public-api-methods-to-extract-info-from-cst-nodes) for a complete list over all the public API methods. Many of these APIs have the advantage that they allow you to "retrieve" info that is not otherwise available with a standard AST parser. One example is that you only need to use `kataw.isStatementNode` to find out if the current CST node is a statement node. With an AST parser you must use a `switch statement` with 60 `switch cases`. Another example is how easy it is to find out if a keyword node contains an `escaped keyword`. You only need to use `kataw.hasUnicodeEscape`. You can narrow this down further if you use `kataw.isChildLess`. A keyword doesn't have any child nodes. A third benefit with this CST parser is that it is running in `recovery mode` by `default` and can be used in any editor. A build-in diagnostic system reports diagnostics if an `error handler` have been used. The diagnostics are dynamic. It means all the diagnostics are informative, and they will will change based on the context you are parsing in. The diagnostics have been designed like this so you can quickly understand what the problem is and correct it. These features used together gives you more options to adjust, modify and customize the CST tree compared to a regular AST parser and you can also write fewer code lines and at the same time experience insane performance.
- About An 100% spec compliant ES2022 Javascript toolchain
- Kataw - An 100% spec compliant ES2022 Javascript toolchain
- ECMAScript2022 CST parser with error recovery and types
- JavaScript CST Parser
- ECMAScript2022 CST parser with error recovery
- kataw/kataw An insane fast Javascript toolchain.
esbuild
- Esbuild implements the JavaScript decorators proposal
-
How and why do we bundle zx?
At first we wanted to just get rid of all the helper utilities. Keep only the kernel, but this would mean a loss of backward compatibility. We needed some efficient code processing instead with recomposition and tree-shaking. We needed a bundler. But which one? Our testing approach relies on targets, not sources. We rebuilt the project frequently, speed was critical requirement. In essence, we chose a solution from a couple of among all available alternatives: esbuild and parcel. Esbuild won. Specifically in our case, it proved to be more productive and customizable.
-
Use Notion as your CMS along with Next.js
During my search for deploying Lambdas via GitHub actions, I came across a tutorial that utilized ncc for converting TypeScript and bundling. While ncc is effective, I discovered esbuild, which proved to be significantly faster and perfectly suited to my requirements.
-
⏰ It’s time to talk about Import Map, Micro Frontend, and Nx Monorepo
The advent of esbuild, the native support for ES Modules in browsers, the widespread adoption of import map, the emergence of tools like Native Federation, and the Nx ecosystem all combine to forge a flexible and well-maintained Micro Frontend Architecture.
-
JS Toolbox 2024: Bundlers and Test Frameworks
EsBuild is a relatively new, blazing-fast JavaScript bundler and minifier. It stands out for its high performance, significantly speeding up the build process in development pipelines.
-
Build a Vite 5 backend integration with Flask
Unlike Webpack, the Vite DevServer only compiles files when they are requested. It leverages ES module imports, which allow JS files to import other files without needing to bundle them together during development. When one file changes, only that file needs to be re-compiled, and the rest can remain unchanged. Project files are compiled with Rollup.js. Third-party dependencies in node_modules are pre-compiled using the ultra-fast esbuild bundler for maximum speed, and they are cached until the dependency version changes. Vite also provides a client script for hot module reloading.
-
SSR React in Go
Use esbuild to build the React code into a form executable on both the server and client sides.
-
Effortless Function as a Service: A Simple Guide to Implementing it with Query
The functions will bundle using esbuild. For that, it is required to install esbuild globally:
-
How to run TypeScript natively in Node.js with TSX
TSX is the newest and most improved version of our ts-node, using ESBuild to transpile TS files to JS very quickly. The most interesting part is that TSX was developed to be a complete replacement for Node, so you can actually use TSX as a TypeScript REPL, if you install it globally with npm i -g tsx, just run tsx in your terminal and you can write TSX natively. But what's even cooler is that you can load TSX for all TypeScript files using --loader tsx when you run your file. For example, let's say we have this file called index.ts:
-
Quick Summary of Angular 17
esbuild plus Vite is out of developer preview and enabled by default, yielding 67%, 87%, 80% speed improvements for build time, hybrid build time and hybrid serve time respectively.
What are some alternatives?
estree - The ESTree Spec
swc - Rust-based platform for the Web
vite - Next generation frontend tooling. It's fast!
fjb - fast javascript bundler :package:
Rollup - Next-generation ES module bundler
cli - CLI for swc
webpack - A bundler for javascript and friends. Packs many modules into a few bundled assets. Code Splitting allows for loading parts of the application on demand. Through "loaders", modules can be CommonJs, AMD, ES6 modules, CSS, Images, JSON, Coffeescript, LESS, ... and your custom stuff.
Node-Estree - Complete and compliant ESTree spec implementation in TypeScript
parcel - The zero configuration build tool for the web. 📦🚀
binjs-ref - Reference implementation for the JavaScript Binary AST format
terser - 🗜 JavaScript parser, mangler and compressor toolkit for ES6+