NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #138 most downloaded on npm
Runtime typescript and ESM support for Node.js
Last release 5 months ago
05 May 2026
Release timing varies
gaps range from 8 days to 7 months
Most releases are documented
notes for 41 of the last 60 stable releases
5 versions withdrawn
withdrawn after publishing
6 years old
105 releases · first in 2020
One column per quarter.
Add explicit resource management ( using / await using ) support
using/await using) support (#422)tsconfigPaths (#427)jiti/static subpath (#430)tryNative fails (#413)ENAMETOOLONG when evaluating esm (#429)tsconfigPaths (#427)jiti/static export (#430)--coverage flag for node 18 (fe264b4)tryNative fails (#413)ENAMETOOLONG when evaluating esm (#429)interop: Only passthrough default if it is not a promise
terser-webpack-plugin (#407)This release fixes minor issues, migrates to Rspack for dist, and lazily imports the Babel transformer only when needed, which should noticeably impro
This release fixes minor issues, migrates to Rspack for dist, and lazily imports the Babel transformer only when needed, which should noticeably improve startup times.
2.03MB to 1.67MB150ms => 22ms (full transform: 180ms => 115ms)node: specifiers (#392)interop: Passthrough module if it is a promise
Use sha256 for cache entries in FIPS mode
sha256 for cache entries in FIPS mode (#375)rebuildFsCache ( JITI_REBUILD_FS_CACHE) (#379)require(<json>) in register mode (#374)compare changes (📦 bundled dependencies updated)
compare changes (📦 bundled dependencies updated)
Interop modules with primitive default export
Support generic type for jiti.import<T>
jiti.import<T> (#331).ts files with .js extension from js files (#337)Remove some unused exports with Knip
compare changes ### 🩹 Fixes - eval: Fallback in async mode
Conditional access to mod.default
mod.default (8c30a94)> To enhance compatibility, jiti >=2.1 enabled `interopdefault` using a new Proxy method. If you migrated to 2.0.0 earlier, this might have caused beh
[!IMPORTANT] To enhance compatibility, jiti
>=2.1enabledinteropdefaultusing a new Proxy method. If you migrated to2.0.0earlier, this might have caused behavior changes. In case of any issues during the upgrade, please report so we can investigate to solve them. 🙏🏼
jiti.import(id, {default: true}) (#323)in operator for primitive inputs (#321)jiti.import(id, {default: true}) (#323)in operator for primitive inputs (#321)compare changes ### 🩹 Fixes - Bump cache version
> To enhance compatibility, jiti >=2.1 enabled `interopdefault` using a new Proxy method. If you migrated to 2.0.0 earlier, this might have caused beh
[!IMPORTANT] To enhance compatibility, jiti
>=2.1enabledinteropdefaultusing a new Proxy method. If you migrated to2.0.0earlier, this might have caused behavior changes. In case of any issues during the upgrade, please report so we can investigate to solve them. 🙏🏼
interopDefault (#318)interopDefault (#318)compare changes ### 🌊 Types - Use local NodeModule type
types: Add standalone types for node require
> To enhance compatibility, jiti >=2.1 enabled `interopdefault` using a new Proxy method. If you migrated to 2.0.0 earlier, this might have caused beh
[!IMPORTANT] To enhance compatibility, jiti
>=2.1enabledinteropdefaultusing a new Proxy method. If you migrated to2.0.0earlier, this might have caused behavior changes. In case of any issues during the upgrade, please report so we can investigate to solve them. 🙏🏼
/register and /native subpath types for Node10 module resolution (#304)/register and /native subpath types for Node10 module resolution (#304)jiti v2 now natively supports ESM import and resolution with new API await jiti.import(id) and jiti.esmResolve(id). This allows top-level await and na
jiti v2 now natively supports ESM import and resolution with new API await jiti.import(id) and jiti.esmResolve(id). This allows top-level await and native+faster importing of ES-only modules with increased compatibility
You can now directly import .jsx/.tsx files with jiti! See examples with nano-js, preact, React and Vue. This feature is opt-in for now (using jsx: true or JITI_JSX=true). Jiti is considering a smarter lib detection for wider support before enabling JSX support by default.
jiti package exports are now in a dual (ESM/CJS) format for better importing of jiti in ESM contexts.
jiti/nativeAs native ESM and Typescript support is being increased across runtimes, a new export in jiti allows easing up the transition by giving the same API of jiti but instead only depending on runtime import.meta.resolve and dynamic import() support. This is possible by making an alias for jiti to jiti/native.
You can globally register jiti using Node.js global hooks (experimental).
CLI:
# Instead of `npx jiti index.ts`
node --import jiti/register index.ts
Programmatic:
import "jiti/register";
// or
await import("jiti/register");
You can inspect what jiti internals using debug option or JITI_DEBUG=1 environment variable. The output is now more readable and with colors to easily find slow imports.
jiti will also use node_modules/.cache/jiti directory instead of temp dir (if node_modules exists) to store caches for easier local inspections.
<img width="708" alt="image" src="https://github.com/user-attachments/assets/cf813cc3-546e-410a-a9cf-f713279a095c">
Upgrade jiti dependency to ^2.0.0 in package.json
Use new createJiti named export :
ESM:
--- import createJiti from "jiti"
+++ import { createJiti } from "jiti"
const jiti = createJiti(import.meta.url)
CommonJS:
--- const createJiti = require("jiti")
+++ const { createJiti } = require("jiti")
const jiti = createJiti(__filename)
Migrate from CommonJS to ESM API: (highly recommended!)
Importing modules:
--- const mood = jiti('mod')
+++ const mood = await jiti.import('mod')
Resolving modules:
--- const path = jiti.resolve('mod')
+++ const path = jiti.esmResolve('mod')
This release wasn't possible without valuable ecosystem feedback and contributors. With the trust of users with astonishing 60M+ monthly downloads, i hope jiti v2 can help speed up the ecosystem transition to ESM and Typescript.
await support (#239)jiti.esmResolve (#268)interopDefault using JITI_INTEROP_DEFAULT env (1c080a1)jiti/native subpath (#289) (#294) (#293)data: imports (#299)import.meta.resolve (#301)node_modules/.cache if exists (832f206)interopDefault in babel transform (485b4e9)interopDefault (f820a15).mts/.cts with .mjs/.cjs imports (a5aefad)parentURL is a dir (d224e84)URL instance mismatch (#298)Reflect.metadata for typescript decorators (#165)paths option to native require.resolve (50e4280)createJiti is optional (60a23e3)fsCache and moduleCache options (#263)importResolve to esmResolve (aac88e6)import/require in debug logs (934a5bb)experimentalBun option to tryNative (#295)jiti.esmResolve consistent with import.meta.resolve (#303)data: imports (non-native only) (#299)import.meta.resolve (#301)Reflect.metadata (#165)paths option to native require.resolve (50e4280)jiti.esmResolve consistent with import.meta.resolve (#303)JITI_ALIAS (a53715a)Improve jiti/native compatibility with node and deno
jiti/native (#293)experimentalBun to tryNative (#295)jiti/native (#293)experimentalBun to tryNative (#295)Allow try and other resolve options for import/esmResolve
try and other resolve options for import/esmResolve (#268)interopDefault using JITI_INTEROP_DEFAULT env (1c080a1)createRequire (69da3c5)node_modules/.cache if exists (832f206)interopDefault in babel transform (485b4e9)interopDefault (f820a15).mts/.cts with .mjs/.cjs imports (a5aefad)parentURL is a dir (d224e84)try and other resolve options for import/esmResolve (#268)interopDefault using JITI_INTEROP_DEFAULT env (1c080a1)createRequire (69da3c5)node_modules/.cache if exists (832f206)interopDefault in babel transform (485b4e9)interopDefault (f820a15).mts/.cts with .mjs/.cjs imports (a5aefad)importResolve to esmResolve` (aac88e6)Add experimental esm loader support
Use distinct cache paths for async mode
8 (99224ae)8 (99224ae)v1 to renovate branches (38c38d2)compare changes (📦 bundled dependencies updated)
compare changes (📦 bundled dependencies updated)
Use internal cached modules only if loaded
Avoid node: protocol for node 14 compatibility
Nothing published for this version
Update to mlly@v1.7.1 (9adbcb3) (context)
Rollback mlly dependency to 1.4.2 (hotfix for #237)
🌷 This release updates bundled non-major dependencies (compare changes)
🌷 This release updates bundled non-major dependencies (compare changes)
This release enables forward compatibility for jiti v2 (See roadmap)
This release enables forward compatibility for jiti v2 (See roadmap)
jiti.import function for async import (#170)jiti.import (#175)jiti.import function for async import (#170)jiti.import (#175)v1 branch (0200f63)v1 to renovate branches (2358645)Experimental native Bun support
compare changes ### 🩹 Fixes - Only replace import.meta.env (c6895d6) ### ❤️ Contributors - Pooya Parsa (@pi0)
Pass custom extensions to esm resolver
import.meta.env and import.meta.env?.prop (#159)Read cache from evalOptions (2c1765e, #147)
Handle nested circular dependencies
jiti.evalModule (#146)Allow resolving .ts files with .js extension
c ([mts extension too](https://github.com/unjs/jiti/commit/mts` extension too))Nothing published for this version
Nothing published for this version
Add support to emit decorator metadata
TMPDIR (#123)Prefer require condition first in esm resolve mode
Nothing published for this version
Nothing published for this version
support export namespace from syntax (resolves #84)
detect native esm using type: module
support inline sourceMaps for easier debugging
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →