GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — module: support require()ing synchronous ESM graphs by joyeecheung · Pull Request #51977 · nodejs/node

Conversation

@joyeecheung

@joyeecheung joyeecheung commented Mar 5, 2024 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

Summary

This patch adds require() support for synchronous ESM graphs under
the flag --experimental-require-module

This is based on the the following design aspect of ESM:

  • The resolution can be synchronous (up to the host)
  • The evaluation of a synchronous graph (without top-level await) is
    also synchronous, and, by the time the module graph is instantiated
    (before evaluation starts), this is is already known.

If --experimental-require-module is enabled, and the ECMAScript
module being loaded by require() meets the following requirements:

  • Explicitly marked as an ES module with a "type": "module" field in
    the closest package.json or a .mjs extension.
  • Fully synchronous (contains no top-level await).

require() will load the requested module as an ES Module, and return
the module name space object. In this case it is similar to dynamic
import() but is run synchronously and returns the name space object
directly.

// point.mjs
export function distance(a, b) { return (b.x - a.x) ** 2 + (b.y - a.y) ** 2; }
class Point {
  constructor(x, y) { this.x = x; this.y = y; }
}
export default Point;
// main.js
const required = require('./point.mjs');
// [Module: null prototype] {
//   default: [class Point],
//   distance: [Function: distance]
// }
console.log(required);

(async () => {
  const imported = await import('./point.mjs');
  console.log(imported === required);  // true
})();

If the module being require()'d contains top-level await, or the module
graph it imports contains top-level await,
ERR_REQUIRE_ASYNC_MODULE will be thrown. In this case, users should
load the asynchronous module using import().

If --experimental-print-required-tla is enabled, instead of throwing
ERR_REQUIRE_ASYNC_MODULE before evaluation, Node.js will evaluate the
module, try to locate the top-level awaits, and print their location to
help users find them.

Background

There were some previous discussions about this idea back in 2019 (e.g. #49450). I I didn't go through all of them, but in 2024 I believe we can agree that not supporting require(esm) is creating enough pain for our users that we should really deprioritize the drawbacks of it. A non-perfect solution is still better than having nothing at all IMO.

There was a previous attempt in #30891 which tried to support TLA from the start and thus needed to run the event loop recursively, which would be unsafe and therefore it was closed (synchronous-only require(esm) was brought up in #30891 (comment) but the PR didn't end up going that way). I have the impression that there were some other attempts before, but non active AFAIK.

This PR tries to keep it simple - only load ESM synchronously when we know it's synchronous (which is part of the design of ESM and is supported by the V8 API), and if it contains TLA, we throw. That should at least address the majority of use cases of ESM (TLA in a module that's supposed to be import'ed is already not a great idea, they are more meant for entry points. If they are really needed, users can use import() to make that asynchronicity explicit).

When I was refactoring the module loader implementation and touching the V8 Module API to fix other issues, this idea appears to be natural to me (since ESM is really designed to have this synchronocity in mind) and does not actually need that much work in 2024 (er, with some refactorings that I already did for other issues at least..), so here is another attempt at it.

Motivation

The motivation for this is probably obvious, but I'll give my take again in case there are unfamiliar readers: CJS/ESM interop would always be done on a best-effort basis and they should not be mixed if avoidable, but today the majority of the popular packages out there in the registry are still CJS. There needs to be an escape hatch for simple cases while the transition happens.

With require(esm), when a dependency goes ESM-only, it is less likely to be a breaking change for users as long as it's a synchronous ESM (with no top-level await), which should be the case most of the time. This helps package authors transition to ESM without worrying about user experience, or having to release it as dual module which bloats the node_modules size even further and leads to identity problems due to the duplication.

The design of ESM already ensures that synchronous evaluation and therefore interop with CJS for a synchronous graph is possible (e.g. see tc39/proposal-top-level-await#61), and we won't be alone in restricting TLA for certain features(e.g. w3c/ServiceWorker#1407 service workers on the web also disallows TLA) it would be a shame not to make use of that. Ongoing proposal like import defer could also help addressing the lazy-loading needs without breaking the synchronous aspect of ESM.

TODOs

There are still some feature interactions that this implementation doesn't handle (e.g. --experimental-detect-module or --experimental-loader or --experimental-wasm-modules). Some edge cases involving cycles probably would have undefined behaviors. I don't think this needs to handle interactions with everything (especially other experimental features) perfectly to land as a first iteration of an experimental feature. We can continue iterating on it while it's experimental.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

mkosir, ianchanning, magicmark, pimterry, alexanderankin, Yihao-G, banyudu, dlebedynskyi, bricss, yesmeck, and 68 more reacted with thumbs up emoji AugustinMauroy reacted with thumbs down emoji ljharb, MomenNano, marco-ippolito, tchetwin, legendecas, Qard, MoLow, tonivj5, DanielRosenwasser, liuxingbaoyu, and 105 more reacted with hooray emoji robpalme, littledan, mkubilayk, joesepi, ljharb, atlowChemi, KhafraDev, jakebailey, SuperchupuDev, H4ad, and 121 more reacted with heart emoji joesepi, ljharb, atlowChemi, KhafraDev, H4ad, MomenNano, marco-ippolito, tchetwin, mcollina, Qard, and 54 more reacted with rocket emoji jakebailey, Qard, tonivj5, himself65, yossydev, xeho91, coldter, robertsLando, bricss, brainkim, and 9 more reacted with eyes emoji
All reactions
  • 👍 78 reactions
  • 👎 1 reaction
  • 🎉 115 reactions
  • ❤️ 131 reactions
  • 🚀 64 reactions
  • 👀 19 reactions
@nodejs-github-bot

nodejs-github-bot commented Mar 5, 2024

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/loaders
  • @nodejs/startup
  • @nodejs/test_runner
  • @nodejs/vm
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@nodejs-github-bot nodejs-github-bot added lib / src Issues and PRs involving general changes in the lib/ or src/ directories. needs-ci PRs that need a full CI run. labels Mar 5, 2024
@joyeecheung joyeecheung added the request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. label Mar 5, 2024
@GeoffreyBooth GeoffreyBooth added module Issues and PRs related to the module subsystem. esm Issues and PRs related to the ECMAScript Modules implementation. labels Mar 5, 2024
@RafaelGSS RafaelGSS added the notable-change PRs with changes that should be highlighted in changelogs. label Mar 5, 2024
@github-actions

github-actions Bot commented Mar 5, 2024

Copy link
Copy Markdown
Contributor

The notable-change PRs with changes that should be highlighted in changelogs. label has been added by @RafaelGSS.

Please suggest a text for the release notes if you'd like to include a more detailed summary, then proceed to update the PR description with the text or a link to the notable change suggested text comment. Otherwise, the commit will be placed in the Other Notable Changes section.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@RafaelGSS RafaelGSS added the semver-minor PRs that contain new features and should be released in the next minor version. label Mar 5, 2024
@github-actions github-actions Bot removed the request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. label Mar 5, 2024
@joyeecheung
joyeecheung force-pushed the require-esm branch 2 times, most recently from 5a27731 to 612b870 Compare March 5, 2024 18:39
@nodejs-github-bot

nodejs-github-bot commented Mar 5, 2024

Copy link
Copy Markdown
Collaborator

CI: https://ci.nodejs.org/job/node-test-pull-request/57598/

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@nodejs nodejs deleted a comment from nodejs-github-bot Mar 5, 2024
@GeoffreyBooth

GeoffreyBooth commented Mar 5, 2024

Copy link
Copy Markdown
Member

Before we get into the technical details, I just want to give a heartfelt THANK YOU to @joyeecheung for taking this on, and express my awe of her brilliance in figuring out how to achieve it. require of ESM has been something that we’ve been discussing off and on for years, with dreams of someday figuring out how to achieve it in a shippable way, so if this PR can result in that then we will all be very grateful; and this new functionality will be transformative for module authors, who will be able to write libraries with less worry around interoperability issues.

yvele, samumbach, and dpobel reacted with thumbs up emoji joyeecheung, anonrig, marco-ippolito, mcollina, MoLow, tonivj5, KhafraDev, DanielRosenwasser, littledan, legendecas, and 36 more reacted with heart emoji Hanawa02 and tchalvak reacted with rocket emoji
All reactions
  • 👍 3 reactions
  • ❤️ 46 reactions
  • 🚀 2 reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@GeoffreyBooth

GeoffreyBooth commented Mar 6, 2024

Copy link
Copy Markdown
Member
  • currently loader hooks are ignored in this path, because they already don’t affect require() anyway

I think the hooks do affect require, since #47999. I don’t think wiring them up to this needs to be a blocker for landing this PR, but if it’s not difficult perhaps we could either warn or error if hooks are registered when a require of an ES module occurs.

WASM support

import of Wasm is still experimental and there’s no timeframe for that changing (we were waiting on spec changes the last I recall) so I wouldn’t worry about this.

.cjs exclusion, directory resolution handling

What does this mean? Doing the extension searching for .cjs and/or .mjs in the filename? I wouldn’t worry about that for this PR; anyone doing require of a .cjs file needs to add the .cjs extension today, so it would be expected to need to continue to specify it; and likewise for .mjs.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@ShogunPanda

ShogunPanda commented Mar 6, 2024

Copy link
Copy Markdown
Contributor

I LOVE this idea. It will simplify so many things. Let's keep going with it.

TotallyInformation, lapo-luchini, sauzeyu, yvele, and tommoor reacted with thumbs up emoji
All reactions
  • 👍 5 reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@joyeecheung
joyeecheung force-pushed the require-esm branch 2 times, most recently from 515d02d to 1ab2592 Compare March 6, 2024 17:52
@joyeecheung joyeecheung added the request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. label Mar 6, 2024
@github-actions github-actions Bot removed the request-ci Add this label to start a Jenkins CI on a PR. Only starts once the PR has an approving review. label Mar 6, 2024
@nodejs-github-bot

nodejs-github-bot commented Mar 6, 2024

Copy link
Copy Markdown
Collaborator

CI: https://ci.nodejs.org/job/node-test-pull-request/57603/

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@joyeecheung

joyeecheung commented Mar 6, 2024 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member Author

I think the hooks do affect require, since #47999. I don’t think wiring them up to this needs to be a blocker for landing this PR, but if it’s not difficult perhaps we could either warn or error if hooks are registered when a require of an ES module occurs.

They only affect the require() in imported CJS modules, not the required ones. I think it's not a good idea to let the loader hooks affect require() the way it currently works - by spawning a separate thread to make it synchronous, it leads to similar concerns raised previously about supporting TLA in the fallback, then we are back to square one (and, unlike import syntax which is static and handled before module evaluation, require() is a regular function that can be called anywhere, so making it block on a new thread that can run any JS makes things even more complicated than TLA). Someone who thought this separate-thread behavior applies everywhere already raised this to me, I think we are lucky at least that the CJS require is unaffected and not beyond saving. For this PR, I think we can just ignore hooks when the fallback is enabled, and warn about it. (On a side note, I noticed that the require() added by #47999 is cutting corners e.g. not respecting policy...).

What does this mean? Doing the extension searching for .cjs and/or .mjs in the filename?

It means I don't know what happens when this happens, and there are not yet any test for it.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

GeoffreyBooth
GeoffreyBooth reviewed Mar 6, 2024
View reviewed changes
Comment thread doc/api/cli.md Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread src/node_contextify.cc Resolved

Uh oh!

There was an error while loading. Please reload this page.

@benjamingr

benjamingr commented Mar 6, 2024

Copy link
Copy Markdown
Member

Big +1 on the idea and I think bun shows this is feasible and users like it.

MoLow, robertsLando, ban17, aashutoshrathi, kspeers-r7, yvele, sauzeyu, marcusglowe, and ovflowd reacted with thumbs up emoji
All reactions
  • 👍 9 reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@joyeecheung
joyeecheung force-pushed the require-esm branch 2 times, most recently from b4c3f5c to 9905e2d Compare March 8, 2024 17:34
This was referenced Mar 8, 2024
src: use dedicated routine to compile function for builtin CJS loader #52016
Merged
Some modules labeled 'esm' are dual wooorm/npm-esm-vs-cjs#9
Closed
@joyeecheung
joyeecheung force-pushed the require-esm branch from 9905e2d to a235a15 Compare March 10, 2024 10:30
@joyeecheung joyeecheung mentioned this pull request Jun 18, 2024
[v20.x] backport require(esm) and related patches #53500
Closed
@joyeecheung

joyeecheung commented Jun 18, 2024

Copy link
Copy Markdown
Member Author

Opened #53500

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@marco-ippolito marco-ippolito added backport-open-v20.x and removed backport-requested-v20.x labels Jun 19, 2024
soophoo pushed a commit to soophoo/node that referenced this pull request Jun 20, 2024
@marco-ippolito @soophoo
2024-05-07, Version 20.13.0 'Iron' (LTS)
66ad117
Notable changes:

benchmark:
  * add AbortSignal.abort benchmarks (Raz Luvaton) nodejs#52408
buffer:
  * improve `base64` and `base64url` performance (Yagiz Nizipli) nodejs#52428
crypto:
  * deprecate implicitly shortened GCM tags (Tobias Nießen) nodejs#52345
deps:
  * (SEMVER-MINOR) update simdutf to 5.0.0 (Daniel Lemire) nodejs#52138
  * (SEMVER-MINOR) update undici to 6.3.0 (Node.js GitHub Bot) nodejs#51462
  * (SEMVER-MINOR) update undici to 6.2.1 (Node.js GitHub Bot) nodejs#51278
dns:
  * (SEMVER-MINOR) add order option and support ipv6first (Paolo Insogna) nodejs#52492
doc:
  * update release gpg keyserver (marco-ippolito) nodejs#52257
  * add release key for marco-ippolito (marco-ippolito) nodejs#52257
  * add UlisesGascon as a collaborator (Ulises Gascón) nodejs#51991
  * (SEMVER-MINOR) deprecate fs.Stats public constructor (Marco Ippolito) nodejs#51879
events,doc:
  * mark CustomEvent as stable (Daeyeon Jeong) nodejs#52618
fs:
  * add stacktrace to fs/promises (翠 / green) nodejs#49849
lib, url:
  * (SEMVER-MINOR) add a `windows` option to path parsing (Aviv Keller) nodejs#52509
net:
  * (SEMVER-MINOR) add CLI option for autoSelectFamilyAttemptTimeout (Paolo Insogna) nodejs#52474
report:
  * (SEMVER-MINOR) add `--report-exclude-network` option (Ethan Arrowood) nodejs#51645
src:
  * (SEMVER-MINOR) add `string_view` overload to snapshot FromBlob (Anna Henningsen) nodejs#52595
  * (SEMVER-MINOR) add C++ ProcessEmitWarningSync() (Joyee Cheung) nodejs#51977
  * (SEMVER-MINOR) add uv_get_available_memory to report and process (theanarkh) nodejs#52023
  * (SEMVER-MINOR) preload function for Environment (Cheng Zhao) nodejs#51539
stream:
  * (SEMVER-MINOR) support typed arrays (IlyasShabi) nodejs#51866
test_runner:
  * (SEMVER-MINOR) add suite() (Colin Ihrig) nodejs#52127
  * (SEMVER-MINOR) add `test:complete` event to reflect execution order (Moshe Atlow) nodejs#51909
util:
  * (SEMVER-MINOR) support array of formats in util.styleText (Marco Ippolito) nodejs#52040
v8:
  * (SEMVER-MINOR) implement v8.queryObjects() for memory leak regression testing (Joyee Cheung) nodejs#51927
watch:
  * mark as stable (Moshe Atlow) nodejs#52074

PR-URL: nodejs#52793
@mikegwhit

mikegwhit commented Jul 3, 2024

Copy link
Copy Markdown

i just want to add my thanks for this PR, looking forward or greatly hoping for this to mature past an experimental flag!!! i'm not on either team (ESM or CJS) but i am on the team of not (for political or ideological reasons) breaking backwards compatibility, so this is great!

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@eemeli eemeli mentioned this pull request Jul 4, 2024
feat: provide explicit ESM pkg entry points eemeli/yaml#560
Closed
joyeecheung added a commit to joyeecheung/node that referenced this pull request Jul 30, 2024
@joyeecheung
module: support require()ing synchronous ESM graphs
366db48
This patch adds `require()` support for synchronous ESM graphs under
the flag `--experimental-require-module`

This is based on the the following design aspect of ESM:

- The resolution can be synchronous (up to the host)
- The evaluation of a synchronous graph (without top-level await) is
  also synchronous, and, by the time the module graph is instantiated
  (before evaluation starts), this is is already known.

If `--experimental-require-module` is enabled, and the ECMAScript
module being loaded by `require()` meets the following requirements:

- Explicitly marked as an ES module with a `"type": "module"` field in
  the closest package.json or a `.mjs` extension.
- Fully synchronous (contains no top-level `await`).

`require()` will load the requested module as an ES Module, and return
the module name space object. In this case it is similar to dynamic
`import()` but is run synchronously and returns the name space object
directly.

```mjs
// point.mjs
export function distance(a, b) {
  return (b.x - a.x) ** 2 + (b.y - a.y) ** 2;
}
class Point {
  constructor(x, y) { this.x = x; this.y = y; }
}
export default Point;
```

```cjs
const required = require('./point.mjs');
// [Module: null prototype] {
//   default: [class Point],
//   distance: [Function: distance]
// }
console.log(required);

(async () => {
  const imported = await import('./point.mjs');
  console.log(imported === required);  // true
})();
```

If the module being `require()`'d contains top-level `await`, or the
module graph it `import`s contains top-level `await`,
[`ERR_REQUIRE_ASYNC_MODULE`][] will be thrown. In this case, users
should load the asynchronous module using `import()`.

If `--experimental-print-required-tla` is enabled, instead of throwing
`ERR_REQUIRE_ASYNC_MODULE` before evaluation, Node.js will evaluate the
module, try to locate the top-level awaits, and print their location to
help users fix them.

PR-URL: nodejs#51977
Reviewed-By: Chengzhong Wu <[email protected]>
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Guy Bedford <[email protected]>
Reviewed-By: Antoine du Hamel <[email protected]>
Reviewed-By: Geoffrey Booth <[email protected]>
marco-ippolito pushed a commit that referenced this pull request Aug 8, 2024
@joyeecheung @marco-ippolito
module: support require()ing synchronous ESM graphs
cad46af
This patch adds `require()` support for synchronous ESM graphs under
the flag `--experimental-require-module`

This is based on the the following design aspect of ESM:

- The resolution can be synchronous (up to the host)
- The evaluation of a synchronous graph (without top-level await) is
  also synchronous, and, by the time the module graph is instantiated
  (before evaluation starts), this is is already known.

If `--experimental-require-module` is enabled, and the ECMAScript
module being loaded by `require()` meets the following requirements:

- Explicitly marked as an ES module with a `"type": "module"` field in
  the closest package.json or a `.mjs` extension.
- Fully synchronous (contains no top-level `await`).

`require()` will load the requested module as an ES Module, and return
the module name space object. In this case it is similar to dynamic
`import()` but is run synchronously and returns the name space object
directly.

```mjs
// point.mjs
export function distance(a, b) {
  return (b.x - a.x) ** 2 + (b.y - a.y) ** 2;
}
class Point {
  constructor(x, y) { this.x = x; this.y = y; }
}
export default Point;
```

```cjs
const required = require('./point.mjs');
// [Module: null prototype] {
//   default: [class Point],
//   distance: [Function: distance]
// }
console.log(required);

(async () => {
  const imported = await import('./point.mjs');
  console.log(imported === required);  // true
})();
```

If the module being `require()`'d contains top-level `await`, or the
module graph it `import`s contains top-level `await`,
[`ERR_REQUIRE_ASYNC_MODULE`][] will be thrown. In this case, users
should load the asynchronous module using `import()`.

If `--experimental-print-required-tla` is enabled, instead of throwing
`ERR_REQUIRE_ASYNC_MODULE` before evaluation, Node.js will evaluate the
module, try to locate the top-level awaits, and print their location to
help users fix them.

PR-URL: #51977
Backport-PR-URL: #53500
Reviewed-By: Chengzhong Wu <[email protected]>
Reviewed-By: Matteo Collina <[email protected]>
Reviewed-By: Guy Bedford <[email protected]>
Reviewed-By: Antoine du Hamel <[email protected]>
Reviewed-By: Geoffrey Booth <[email protected]>
@marco-ippolito marco-ippolito mentioned this pull request Aug 19, 2024
v20.17.0 proposal #54447
Merged
@joyeecheung joyeecheung mentioned this pull request Sep 26, 2024
module: unflag --experimental-require-module #55085
Merged
@Filyus Filyus mentioned this pull request Oct 25, 2024
Docs: All the ways to import user modules from ES6 mmomtchev/pymport#296
Open
@aleclarson aleclarson mentioned this pull request Oct 25, 2024
feat: dual-publish ESM and CJS pg-nano/pg-parser#8
Closed
@ArtskydJ ArtskydJ mentioned this pull request Dec 19, 2024
--enable-source-maps does not work with stdin #46454
Closed
@maksadbek maksadbek mentioned this pull request Feb 3, 2025
fix: use --experimantal-require-module to support esm imports BrightSec/bright-cli#648
Closed
@rschristian rschristian mentioned this pull request Feb 20, 2025
chore: Fix mocha in Node v22+ preactjs/preact#4701
Merged
@aladdin-add aladdin-add mentioned this pull request Feb 23, 2025
bug report: eslint-plugin-no-autofix with ESM-only packages aladdin-add/eslint-plugin#104
Open
@mastondzn mastondzn mentioned this pull request Mar 5, 2025
v8 mastondzn/dank-twitch-irc#2
Merged
5 of 6 tasks
@gurgunday gurgunday mentioned this pull request Mar 11, 2025
feat: Add ESM build fastify/json-schema-ref-resolver#23
Open
4 tasks done
@joyeecheung joyeecheung mentioned this pull request Mar 14, 2025
doc: mark commonjs as legacy #57460
Closed
@Pitan1993 Pitan1993 mentioned this pull request Apr 20, 2025
#### Summary Pitan1993/NiceHashBot#4
Open
@himself65 himself65 mentioned this pull request Sep 11, 2025
Jest Test Failures After @noble/ciphers v2.0.0 Update better-auth/better-auth#4531
Closed
1 task done
@samumbach samumbach mentioned this pull request Oct 21, 2025
Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main defined in \node_modules\file-type\package.json sindresorhus/file-type#696
Closed
3 tasks done
@Lemonexe Lemonexe mentioned this pull request Nov 19, 2025
chore: bump deps blocked by ESM trezor/trezor-suite#23249
Merged
This was referenced Aug 11, 2026
feat!: ship c15t v3 as ESM-only c15t/c15t#1006
Merged
perf(live-donation-stream): batch Horizon events to reduce Socket.IO … Stellar-IndigoPay/Stellar-IndigoPay#748
Merged
@coderabbitai coderabbitai Bot mentioned this pull request Sep 22, 2026
Feature/add kwill infra idos-network/idos-sdk-js#1519
Merged
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@mcollina mcollina mcollina approved these changes
@GeoffreyBooth GeoffreyBooth GeoffreyBooth approved these changes
@guybedford guybedford guybedford approved these changes
@legendecas legendecas legendecas approved these changes
@aduh95 aduh95 aduh95 approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

author ready PRs with CI started, the required approvals, and no outstanding review comments. esm Issues and PRs related to the ECMAScript Modules implementation. lib / src Issues and PRs involving general changes in the lib/ or src/ directories. module Issues and PRs related to the module subsystem. needs-ci PRs that need a full CI run. notable-change PRs with changes that should be highlighted in changelogs. semver-minor PRs that contain new features and should be released in the next minor version.

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

20 participants

@joyeecheung @nodejs-github-bot @GeoffreyBooth @ShogunPanda @benjamingr @mcollina @legendecas @Jarred-Sumner @nicolo-ribaudo @anonrig @robertsLando @markstos @TotallyInformation @luckyyyyy @thedavidprice @mercmobily @jmpp @jakebailey @Avivbens @laverdet
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.