# Awesome Node ESM

A curated list of Node.js modules with native ESM support and resources about ES Modules in Node.js.

## Contents

- Articles
- Tools
- Packages
  - Web frameworks
  - HTTP
  - WebSocket
  - Template engines
  - SSR
  - Databases
  - Logging
  - Testing
  - CLI
  - Date
  - File system
  - Utility (value manipulations)
  - Random
  - Parsing
  - Compression
  - Performance
  - AST
  - Functional programming
  - Math
  - Ethereum
  - Other

## Articles

- ECMAScript Modules Node.js docs
- How to Use ESM on the Web and Node.js
- Using ES modules natively in Node.js
- ES Modules in Node today
- Super Simple Start to ESModules in Node.js

## Tools

- esbuild - an extremely fast JavaScript bundler and minifier.
- tsup - bundle your TypeScript library with no config, powered by esbuild.
- rollup - next-generation ES Module bundler.
- dual-publish - publish JS project as dual ES modules and CommonJS package to npm
- cjstoesm - tool that can transform CommonJS to ESM
- esbuild-node-loader - transpile TypeScript to ESM with Node.js loader.
- tsm - TypeScript Module Loader

## Packages

### Web frameworks

- tinyhttp - tiny web framework as a replacement of Express.
- polka (alpha only) - micro web server so fast, it’ll make you dance!
- koa - expressive middleware for node.js using ES2017 async functions

### HTTP

#### HTTP Clients

- node-fetch - light-weight module that brings window.fetch to Node.js
- httpie - a Node.js HTTP client as easy as pie!

#### API Clients

- kitsu - simple, lightweight & framework agnostic JSON:API client
- twitter-lite - tiny, full-featured, flexible client / server library for the Twitter API

### WebSocket

- sockette - tiny wrapper around WebSocket that will automatically reconnect if the connection is lost!

### Middleware

- milliparsec - tiniest Node.js body parser ever
- sirv - an optimized middleware & CLI application for serving static files~!
- tinyws - tiny WebSocket middleware for Node.js
- malibu - framework-agnostic CSRF middleware for modern Node.js
- lru-send - LRU-based caching middleware for Node.js

### Template engines

- eta - embedded JS template engine for Node, Deno, and the browser
- tempura - A light, crispy, and delicious template engine

### SSR

- preact-render-to-string - universal rendering for Preact: render JSX and Preact components to HTML.
- hyperapp-render - render Hyperapp to an HTML string with SSR and Node.js streaming support.
- hypermdx - Markdown enhanced with Hyperapp
- streamdown - stream markdown to HTML

### Databases

- rxdb - a realtime Database for JavaScript Applications.

### Logging

- logtown - simple Logging Facade for JavaScript.
- oddlog - high-performance payload focused logging library for node.js.
- diary - zero-dependency, fast logging library for both Node and Browser.
- roarr - JSON logger for Node.js and browser.

### Testing

- uvu - an extremely fast and lightweight test runner for Node.js and the browser.
- oletus - minimal ECMAScript Module test runner
- hanbi - a small javascript library for stubbing and spying on methods/functions.
- wirepig - mock HTTP and TCP dependencies with real sockets.

### CLI

#### Argument parsing

- yargs - Command-line parser that automatically generates an elegant user-interface.

#### Colors

- colorette - color your terminal using pure idiomatic JavaScript.
- kleur - the fastest Node.js library for formatting terminal text with ANSI colors~!

### Date

- dayjs - 2KB immutable date library alternative to Moment.js with the same modern API
- tinydate - a tiny (349B) reusable date formatter.
- tempe - Featherlight (< 2kB) helper for Javascript date formatting
- light-date - blazing fast & lightweight (157 bytes) date formatting for Node.js and the browser.

### File system

- istextorbinary - Check if a file is text or binary.
- @tinyhttp/dotenv - A rewrite of dotenv module.

### Utility

- dequal - tiny (304B to 489B) utility to check for deep equality
- klona - tiny (240B to 507B) and fast utility to “deep clone” Objects, Arrays, Dates, RegExps, and more!
- dlv - Safe deep property access in 120 bytes. x = dlv(obj, ‘a.b.x’)

### Random

- uuid - tiny (230B), fast, and cryptographically secure UUID (V4) generator for Node and the browser
- nanoid - Tiny, secure, URL-friendly, unique string ID generator.

### Parsing

- snarkdown - a snarky 1kb Markdown parser written in JavaScript

### Compression

- anzip - simple async unzip library for Node.js

### Performance

- piscina - a fast, efficient Node.js Worker Thread Pool implementation
- nanodelay - a tiny (25 bytes) Promise wrapper around setTimeout

### AST

- acorn - a small, fast, JavaScript-based JavaScript parser

### Functional programming

- immutable - Immutable data collections.
- ramda - practical functional Javascript.
- smoldash - A tiny lodash alternative built for the modern web
- deepdash - tree traversal library written in Underscore/Lodash fashion

### Math

- mathjs - An extensive math library.

### Ethereum

- get-ens - Get text records of an ENS address
- send-tx - Sign & send Ethereum transactions

### Other

- turf - a modular geospatial engine written in JavaScript
- cashify - lightweight currency conversion library, successor of money.js
- astro - build faster websites with the island architecture
- transliterate - convert Unicode characters to Latin characters using transliteration
- emittery - simple and modern async event emitter.