Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/privatenumber/ts-runtime-comparison
Comparison of Node.js TypeScript runtimes
https://github.com/privatenumber/ts-runtime-comparison
Last synced: about 4 hours ago
JSON representation
Comparison of Node.js TypeScript runtimes
- Host: GitHub
- URL: https://github.com/privatenumber/ts-runtime-comparison
- Owner: privatenumber
- Created: 2022-06-09T05:03:58.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-06-25T00:00:58.000Z (5 months ago)
- Last Synced: 2024-10-30T18:02:35.809Z (14 days ago)
- Language: TypeScript
- Homepage:
- Size: 414 KB
- Stars: 474
- Watchers: 7
- Forks: 8
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome - privatenumber/ts-runtime-comparison - Comparison of Node.js TypeScript runtimes (TypeScript)
README
# TypeScript runtime comparisons
Comparison of Node.js TypeScript runtimes.
> **Disclaimer:** This comparison is by the author & maintainer of [tsx]
## Compared runtimes
- [tsx]
- [@swc/register]
- [esbuild-runner]
- [jiti]
- [sucrase]
- [ts-node]
- [tsm]## Methodology
- Tested on Node.js v12.20.0 because they all support it, and the `node:` prefix is not supported in `require()`- Tested in both [package types](https://nodejs.org/api/packages.html#type) `commonjs` & `module` when applicable
### Symbols
| Symbol | Description |
| :----: | ----------- |
| ✅ | Pass (Sometimes clickable) |
| ❌ | Fail |
| ⛔️ | Error (Hover to see error message) |## Project stats
| | [tsx] | [@swc/register] | [esbuild-runner] | [jiti] | [sucrase] | [ts-node] | [tsm] |
| :------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| npm downloads | [![](https://img.shields.io/npm/dm/tsx?label)](https://www.npmjs.com/package/tsx) | [![](https://img.shields.io/npm/dm/@swc/register?label)](https://www.npmjs.com/package/@swc/register) | [![](https://img.shields.io/npm/dm/esbuild-runner?label)](https://www.npmjs.com/package/esbuild-runner) | [![](https://img.shields.io/npm/dm/jiti?label)](https://www.npmjs.com/package/jiti) | [![](https://img.shields.io/npm/dm/sucrase?label)](https://www.npmjs.com/package/sucrase) | [![](https://img.shields.io/npm/dm/ts-node?label)](https://www.npmjs.com/package/ts-node) | [![](https://img.shields.io/npm/dm/tsm?label)](https://www.npmjs.com/package/tsm) |
| Install size | [![](https://badgen.net/packagephobia/install/tsx?color=blue&label)](https://packagephobia.com/result?p=tsx) | [![](https://badgen.net/packagephobia/install/@swc/register?color=blue&label)](https://packagephobia.com/result?p=@swc/register) | [![](https://badgen.net/packagephobia/install/esbuild-runner?color=blue&label)](https://packagephobia.com/result?p=esbuild-runner) | [![](https://badgen.net/packagephobia/install/jiti?color=blue&label)](https://packagephobia.com/result?p=jiti) | [![](https://badgen.net/packagephobia/install/sucrase?color=blue&label)](https://packagephobia.com/result?p=sucrase) | [![](https://badgen.net/packagephobia/install/ts-node?color=blue&label)](https://packagephobia.com/result?p=ts-node) | [![](https://badgen.net/packagephobia/install/tsm?color=blue&label)](https://packagephobia.com/result?p=tsm) |
| GitHub stars | [![](https://img.shields.io/github/stars/esbuild-kit/tsx?color=gray&label)](https://github.com/esbuild-kit/tsx/stargazers) | [![](https://img.shields.io/github/stars/swc-project/register?color=gray&label)](https://github.com/swc-project/register/stargazers) | [![](https://img.shields.io/github/stars/folke/esbuild-runner?color=gray&label)](https://github.com/folke/esbuild-runner/stargazers) | [![](https://img.shields.io/github/stars/unjs/jiti?color=gray&label)](https://github.com/unjs/jiti/stargazers) | [![](https://img.shields.io/github/stars/alangpierce/sucrase?color=gray&label)](https://github.com/alangpierce/sucrase/stargazers) | [![](https://img.shields.io/github/stars/TypeStrong/ts-node?color=gray&label)](https://github.com/TypeStrong/ts-node/stargazers) | [![](https://img.shields.io/github/stars/lukeed/tsm?color=gray&label)](https://github.com/lukeed/tsm/stargazers) |
| Issues open | [![](https://img.shields.io/github/issues-raw/esbuild-kit/tsx?color=orange&label)](https://github.com/esbuild-kit/tsx/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc) | [![](https://img.shields.io/github/issues-raw/swc-project/register?color=orange&label)](https://github.com/swc-project/register/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc) | [![](https://img.shields.io/github/issues-raw/folke/esbuild-runner?color=orange&label)](https://github.com/folke/esbuild-runner/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc) | [![](https://img.shields.io/github/issues-raw/unjs/jiti?color=orange&label)](https://github.com/unjs/jiti/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc) | [![](https://img.shields.io/github/issues-raw/alangpierce/sucrase?color=orange&label)](https://github.com/alangpierce/sucrase/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc) | [![](https://img.shields.io/github/issues-raw/TypeStrong/ts-node?color=orange&label)](https://github.com/TypeStrong/ts-node/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc) | [![](https://img.shields.io/github/issues-raw/lukeed/tsm?color=orange&label)](https://github.com/lukeed/tsm/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc) |
| Issues closed | [![](https://img.shields.io/github/issues-closed-raw/esbuild-kit/tsx?color=blue&label)](https://github.com/esbuild-kit/tsx/issues?q=is%3Aissue+is%3Aclosed) | [![](https://img.shields.io/github/issues-closed-raw/swc-project/register?color=blue&label)](https://github.com/swc-project/register/issues?q=is%3Aissue+is%3Aclosed) | [![](https://img.shields.io/github/issues-closed-raw/folke/esbuild-runner?color=blue&label)](https://github.com/folke/esbuild-runner/issues?q=is%3Aissue+is%3Aclosed) | [![](https://img.shields.io/github/issues-closed-raw/unjs/jiti?color=blue&label)](https://github.com/unjs/jiti/issues?q=is%3Aissue+is%3Aclosed) | [![](https://img.shields.io/github/issues-closed-raw/alangpierce/sucrase?color=blue&label)](https://github.com/alangpierce/sucrase/issues?q=is%3Aissue+is%3Aclosed) | [![](https://img.shields.io/github/issues-closed-raw/TypeStrong/ts-node?color=blue&label)](https://github.com/TypeStrong/ts-node/issues?q=is%3Aissue+is%3Aclosed) | [![](https://img.shields.io/github/issues-closed-raw/lukeed/tsm?color=blue&label)](https://github.com/lukeed/tsm/issues?q=is%3Aissue+is%3Aclosed) |
| Last commit | ![](https://img.shields.io/github/last-commit/esbuild-kit/tsx?label) | ![](https://img.shields.io/github/last-commit/swc-project/register?label) | ![](https://img.shields.io/github/last-commit/folke/esbuild-runner?label) | ![](https://img.shields.io/github/last-commit/unjs/jiti?label) | ![](https://img.shields.io/github/last-commit/alangpierce/sucrase?label) | ![](https://img.shields.io/github/last-commit/TypeStrong/ts-node?label) | ![](https://img.shields.io/github/last-commit/lukeed/tsm?label) |## Transformation
Supported transformation features and code tranformation correctness.
#### Package type: CommonJS
| | [tsx] | [@swc/register] | [esbuild-runner] | [jiti] | [sucrase] | [ts-node] | [tsm] |
| :-------------------------------- | :---: | :-------------: | :--------------: | :----: | :-------: | :-------: | :---: |
| TypeScript syntax | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ESM → CJS: import/export syntax | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ |
| ESM → CJS: `import.meta.url` shim | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
| CJS scope in `.js` file | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| CJS scope in `.ts` file | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| CJS scope in `.cjs` file | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| CJS scope in `.cts` file | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| No CJS scope in `.mjs` file | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ |
| No CJS scope in `.mts` file | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| Source maps | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |#### Package type: Module
| | [tsx] | [@swc/register] | [esbuild-runner] | [jiti] | [sucrase] | [ts-node] | [tsm] |
| :-------------------------- | :---: | :---------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------: | :----: | :---------------------------------------------------------------------------------------------------------------------------------------------: | :-------: | :---: |
| TypeScript syntax | ✅ | ⛔️ | ⛔️ | ✅ | ⛔️ | ✅ | ✅ |
| CJS scope in `.cjs` file | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| CJS scope in `.cts` file | ✅ | ⛔️ | ⛔️ | ✅ | ⛔️ | ✅ | ❌ |
| No CJS scope in `.js` file | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ |
| No CJS scope in `.ts` file | ✅ | ⛔️ | ⛔️ | ❌ | ⛔️ | ✅ | ✅ |
| No CJS scope in `.mjs` file | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ |
| No CJS scope in `.mts` file | ✅ | ⛔️ | ⛔️ | ❌ | ⛔️ | ✅ | ✅ |
| Source maps | ✅ | ⛔️ | ⛔️ | ❌ | ⛔️ | ✅ | ✅ |_* [CommonJS scope](https://nodejs.org/api/modules.html#the-module-scope) (CJS scope) refers to having the following variables available in the module scope: `module`, `exports`, `require`, `__filename`, `__dirname`._
## Resolution
Whether `require()`/`import()` can resolve a given specifier.#### `require()`
| | [tsx] | [@swc/register] | [esbuild-runner] | [jiti] | [sucrase] | [ts-node] | [tsm] |
| :------------------------------------------------------------------------------------------------------- | :---: | :-------------: | :--------------: | :----: | :-------: | :-------: | :---: |
| `.ts` file | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| `.ts` file [via `.js`](https://www.typescriptlang.org/docs/handbook/esm-node.html#new-file-extensions) | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
| `.ts` file without extension | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| `index.ts` file via directory | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| `.cts` file | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| `.cts` file [via `.cjs`](https://www.typescriptlang.org/docs/handbook/esm-node.html#new-file-extensions) | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
| `.mts` file | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
| `.mts` file [via `.mjs`](https://www.typescriptlang.org/docs/handbook/esm-node.html#new-file-extensions) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| `node:` prefix | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ |
| tsconfig.json [paths](https://www.typescriptlang.org/tsconfig#paths) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |#### `import()`
| | [tsx] | [@swc/register] | [esbuild-runner] | [jiti] | [sucrase] | [ts-node] | [tsm] |
| :------------------------------------------------------------------------------------------------------- | :---: | :-------------: | :--------------: | :----: | :-------: | :-------: | :---: |
| `.ts` file | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ |
| `.ts` file [via `.js`](https://www.typescriptlang.org/docs/handbook/esm-node.html#new-file-extensions) | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| `.ts` file without extension | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ |
| `index.ts` file via directory | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| `.cts` file | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ |
| `.cts` file [via `.cjs`](https://www.typescriptlang.org/docs/handbook/esm-node.html#new-file-extensions) | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| `.mts` file | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ |
| `.mts` file [via `.mjs`](https://www.typescriptlang.org/docs/handbook/esm-node.html#new-file-extensions) | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| tsconfig.json [paths](https://www.typescriptlang.org/tsconfig#paths) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |## Interoperability
Whether it can correctly load a file for interoperability.
#### Package type: CommonJS
| | [tsx] | [@swc/register] | [esbuild-runner] | [jiti] | [sucrase] | [ts-node] | [tsm] |
| :-------------------------------- | :---: | :-----------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------: |
| require() `.js` file (ESM export) | ✅ | ⛔️ | ✅ | ✅ | ✅ | ✅ | ⛔️ |
| require() `.ts` file (ESM export) | ✅ | ⛔️ | ✅ | ✅ | ✅ | ✅ | ⛔️ |
| require() `.cjs` file | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| require() `.cts` file | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| require() `.mjs` file | ✅ | ⛔️ | ✅ | ✅ | ⛔️ | ⛔️ | ⛔️ |
| require() `.mts` file | ✅ | ⛔️ | ⛔️ | ✅ | ⛔️ | ⛔️ | ⛔️ |
| import() `.js` file (ESM export) | ✅ | ⛔️ | ❌ | ⛔️ | ✅ | ❌ | ⛔️ |
| import() `.ts` file (ESM export) | ✅ | ⛔️ | ⛔️ | ⛔️ | ✅ | ❌ | ✅ |
| import() `.cjs` file | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
| import() `.cts` file | ✅ | ⛔️ | ⛔️ | ⛔️ | ❌ | ✅ | ✅ |
| import() `.mjs` file | ✅ | ✅ | ✅ | ✅ | ⛔️ | ✅ | ✅ |
| import() `.mts` file | ✅ | ⛔️ | ⛔️ | ⛔️ | ⛔️ | ✅ | ✅ |#### Package type: Module
| | [tsx] | [@swc/register] | [esbuild-runner] | [jiti] | [sucrase] | [ts-node] | [tsm] |
| :-------------------------------- | :---: | :---------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| require() `.js` file (ESM export) | ✅ | ⛔️ | ⛔️ | ⛔️ | ⛔️ | ⛔️ | ⛔️ |
| require() `.ts` file (ESM export) | ✅ | ⛔️ | ✅ | ⛔️ | ✅ | ⛔️ | ⛔️ |
| require() `.cjs` file | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| require() `.cts` file | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| require() `.mjs` file | ✅ | ⛔️ | ✅ | ⛔️ | ⛔️ | ⛔️ | ⛔️ |
| require() `.mts` file | ✅ | ⛔️ | ⛔️ | ⛔️ | ⛔️ | ⛔️ | ⛔️ |
| import() `.js` file (ESM export) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| import() `.ts` file (ESM export) | ✅ | ⛔️ | ⛔️ | ✅ | ⛔️ | ✅ | ✅ |
| import() `.cjs` file | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ |
| import() `.cts` file | ✅ | ⛔️ | ⛔️ | ❌ | ⛔️ | ✅ | ✅ |
| import() `.mjs` file | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| import() `.mts` file | ✅ | ⛔️ | ⛔️ | ✅ | ⛔️ | ✅ | ✅ |## Performance features
| | [tsx] | [@swc/register] | [esbuild-runner] | [jiti] | [sucrase] | [ts-node] | [tsm] |
| :--------- | :--------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------: | :-----------------------------------: |
| Compiler | [esbuild](https://esbuild.github.io/) | [SWC](https://github.com/swc-project/register/blob/3b17c954386bbbe01100ac00a80ced68d6e10281/package.json#L38) | [esbuild](https://esbuild.github.io/) | [Babel](https://github.com/unjs/jiti/blob/main/package.json#L26) | [Sucrase (Babel fork)](https://github.com/alangpierce/sucrase#:~:text=sucrase's%20parser%20is%20forked%20from%20babel's%20parser) | [TypeScript](https://github.com/TypeStrong/ts-node#compiler) / [SWC](https://github.com/TypeStrong/ts-node#swc-1) | [esbuild](https://esbuild.github.io/) |
| Disk cache | [✅ ?](https://github.com/esbuild-kit/tsx#cache) | ❌ | [✅ ?](https://github.com/folke/esbuild-runner/blob/9dfb19f8fdead4d56abe4b70fe16bde745fd4d9c/src/cli.ts#L12) | [✅ ?](https://github.com/unjs/jiti#cache) | ❌ | [❌ ?](https://github.com/TypeStrong/ts-node/issues/908#issuecomment-1060214613) | ❌ |## DX features
| | [tsx] | [@swc/register] | [esbuild-runner] | [jiti] | [sucrase] | [ts-node] | [tsm] |
| :---------------------------------- | :------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------: |
| TypeScript REPL | [✅ ?](https://github.com/esbuild-kit/tsx#repl) | ❌ | ❌ | ❌ | ❌ | [✅ ?](https://github.com/TypeStrong/ts-node#:~:text=Typechecking%20(optional)-,REPL,-Write%20standalone%20scripts) | ❌ |
| Watch mode | [✅ ?](https://github.com/esbuild-kit/tsx#watch-mode) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Type checking | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
| Hides experimental feature warnings | ✅ | - | - | - | - | [✅ ?](https://github.com/TypeStrong/ts-node/blob/599f28bbed574003aea08cffab098a3348475649/src/child/child-require.ts#L19-L24) | ❌ |
| Binaries | [tsx](https://github.com/esbuild-kit/tsx/blob/3e81d19bf759b512eb74360861f5abeb9d638ef0/package.json#L30) | [swc-node](https://github.com/swc-project/register/blob/3b17c954386bbbe01100ac00a80ced68d6e10281/package.json#L54) | [esr](https://github.com/folke/esbuild-runner/blob/949c847e413f5ce32aa2b06eab2a80ea99c221d3/package.json#L21) | [jiti](https://github.com/unjs/jiti/blob/912645967d095b7d1a97829e2013019b948a9761/package.json#L9) | [sucrase-node](https://github.com/alangpierce/sucrase/blob/c01f429ddc86e0d819396170981284b8593cdb29/package.json#L10-L13) | [ts-node, ts-node-esm, +4](https://github.com/TypeStrong/ts-node/blob/14323f9d00d5c7051ac09b944c7f423e442145ea/package.json#L38-L43) | [tsm](https://github.com/lukeed/tsm/blob/d65d835a8a9fc3bb60dae7336eabdd713bfed0fc/package.json#L7) |## Testing
| | [tsx] | [@swc/register] | [esbuild-runner] | [jiti] | [sucrase] | [ts-node] | [tsm] |
| :---------------- | :--------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------: | :--------------: | :------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------: |
| Operating systems | [Linux & Windows](https://github.com/esbuild-kit/tsx/blob/3e81d19bf759b512eb74360861f5abeb9d638ef0/.github/workflows/test.yml#L13) | [Linux](https://github.com/swc-project/register/blob/3b17c954386bbbe01100ac00a80ced68d6e10281/.github/workflows/test.yml#L6) | No tests | [Linux & Windows](https://github.com/unjs/jiti/blob/912645967d095b7d1a97829e2013019b948a9761/.github/workflows/ci.yml#L17) | [Linux](https://github.com/alangpierce/sucrase/blob/2a3f723/.github/workflows/build.yml) | [Linux & Windows](https://github.com/TypeStrong/ts-node/blob/14323f9d00d5c7051ac09b944c7f423e442145ea/.github/workflows/continuous-integration.yml#L52) | [Linux & Windows](https://github.com/lukeed/tsm/blob/d65d835a8a9fc3bb60dae7336eabdd713bfed0fc/.github/workflows/ci.yml#L19) |
| Node.js versions | [12.20 ~ 18](https://github.com/esbuild-kit/tsx/blob/3e81d19bf759b512eb74360861f5abeb9d638ef0/tests/index.ts#L12-L25) | [Latest LTS](https://github.com/swc-project/register/blob/3b17c954386bbbe01100ac00a80ced68d6e10281/.github/workflows/test.yml#L11) | No tests | [16](https://github.com/unjs/jiti/blob/912645967d095b7d1a97829e2013019b948a9761/.github/workflows/ci.yml#L18) | [14 & 16](https://github.com/alangpierce/sucrase/blob/2a3f723/.github/workflows/build.yml) | [12 ~ 18 + Nightly](https://github.com/TypeStrong/ts-node/blob/14323f9d00d5c7051ac09b944c7f423e442145ea/.github/workflows/continuous-integration.yml#L55-L143) | [12.22.10 ~ 16.14](https://github.com/lukeed/tsm/blob/d65d835a8a9fc3bb60dae7336eabdd713bfed0fc/.github/workflows/ci.yml#L18) |[tsx]: https://github.com/esbuild-kit/tsx
[@swc/register]: https://github.com/swc-project/register
[esbuild-runner]: https://github.com/folke/esbuild-runner
[jiti]: https://github.com/unjs/jiti
[sucrase]: https://github.com/alangpierce/sucrase
[ts-node]: https://github.com/TypeStrong/ts-node
[tsm]: https://github.com/lukeed/tsm