Skip to content

Reconsider ABI stability requirement for V8 updates in majors #1852

Open

Description

@RafaelGSS

Opening this to discuss whether we should stop treating ABI compatibility changes as blockers for V8 updates in major releases.

We’ve been hitting the same issue repeatedly. v26.0.0 was already delayed for V8 14.6, and that version became outdated almost immediately with Chrome 148 (V8 14.8) going stable.

From the TSC thread, the main pain point is that ABI stability adds pressure and slows down landing V8 updates. Removing that constraint would let updates land when they’re actually ready instead of forcing timing compromises.

There was also the suggestion to drop ABI stability guarantees in majors and push the ecosystem more toward N-API or FFI.

This is probably too late for v26, but could make sense starting in v27.

cc: @targos, who has handled most (if not all) V8 updates for quite a long time

Activity

  1. richardlau commented on Apr 28, 2026

    @richardlau
    Member

    There was also the suggestion to drop ABI stability guarantees in majors and push the ecosystem more toward N-API or FFI.

    FTR the suggestion to drop ABI stability was made separately from (my) suggestion that if we do that the policy shift should happen in a major. We do include the V8 headers in the Node.js header tarball for addons so it needs to be clearly communicated if we make the change.

  2. joyeecheung commented on Apr 28, 2026

    @joyeecheung
    Member

    In general I am in favor of decoupling ABI versioning with Node.js semantic versioning, though I don't think it's the same as "dropping ABI stability" - which implies we no longer version the ABI at all.

    To me it seems being able to bump a new ABI version in the lifetime of a Node.js major release at least before it goes LTS would be enough as a relief and is relatively low risk - most addon prebuild tools are already pre building based on ABI versions, not Node.js versions. But not having versions for breaking changes in the ABI would be too disruptive.

  3. aduh95 commented on Apr 28, 2026

    @aduh95
    Contributor

    Worth noting that, as of Node.js 27, we'll be releasing versions before 27.0.0 which might include semver-major changes, and possibly ABI-breaking changes – the intent being explicitely that we want to bump the V8 version before releasing 27.0.0.
    IIUC the proposal is to extend that to the "Current" phase? And LTS as well?

  4. mcollina commented on Apr 28, 2026

    @mcollina
    SponsorMember

    I think we should define where we stop.

    1. allow V8 majors in current
    2. allow v8 majors in LTS
    3. allow V8 majors in maintenance

    Personally, I'm very comfortable in having them in current, a bit less so in LTS, and as an "absolutely not" in maintenance.

  5. RafaelGSS commented on Apr 28, 2026

    @RafaelGSS
    MemberAuthor

    Worth noting that, as of Node.js 27, we'll be releasing versions before 27.0.0 which might include semver-major changes, and possibly ABI-breaking changes – the intent being explicitely that we want to bump the V8 version before releasing 27.0.0. IIUC the proposal is to extend that to the "Current" phase? And LTS as well?

    That's right. I guess we won't have to delay semver-majors release anymore during the Alpha version. Theoretically, V8 14.6 could be released from April 22th until Oct Xth, which should make the process much easier.

  6. mcollina commented on Apr 29, 2026

    @mcollina
    SponsorMember

    cc @nodejs/node-api wdyt? What's the state of n-api vs nan adoption right now?

  7. legendecas commented on May 1, 2026

    @legendecas
    Member

    Node-API is not affected by V8 ABI stability by design. So I think this does not impact the ABI stability guarantee provided by Node-API, and Node-API could be an alternative that could be a recommended way to build addons.

    Regarding the node-api vs nan adoption, I don't have a specific figure. But here is a rough comparison:

    Note that node-addon-api does not count for all node-api usages. Addons using node-api with other programming languages does not rely on node-addon-api (which is a C++ wrapper). There are also wrappers like https://github.com/napi-rs/napi-rs, and this is another reason that addons should use Node-API instead of the V8 api directly as the cross language binding could be more stable and easier to build.

  8. RafaelGSS commented on May 4, 2026

    @RafaelGSS
    MemberAuthor

    I guess we can close it and see if Node.js v27 Alpha will solve it. Otherwise, we re-open that.

  9. reopened this on May 4, 2026
  10. targos commented on May 4, 2026

    @targos
    Member

    The alpha will not solve it.

  11. RafaelGSS commented on May 4, 2026

    @RafaelGSS
    MemberAuthor

    Can you elaborate?

  12. targos commented on May 4, 2026

    @targos
    Member

    Because the alpha stage will replace odd-numbered versions. It won't change anything wrt. LTS versions, which will very quickly become outdated if we can't update V8 (there's a new version every 4 weeks).

  13. RafaelGSS commented on May 5, 2026

    @RafaelGSS
    MemberAuthor

    Because the alpha stage will replace odd-numbered versions. It won't change anything wrt.

    In my understanding, it will. We won't need to rush to land V8 15.x in April, for instance, it could be landed anytime until the stable version (released in October)

  14. 7 remaining items

  15. targos commented on May 6, 2026

    @targos
    Member

    This just moves the problem by six months...

  16. targos commented on May 6, 2026

    @targos
    Member

    but if 26 was in the new release cycle, it would be v26.0.0-alpha.0 now, and you would be able to land 14.8 anytime you want on that line until October and cut a v26.0.0-alpha.1

    Actually, I read https://nodejs.org/fr/blog/announcements/evolving-the-nodejs-release-schedule again, and that's not what it's saying.
    With the documented plan, we would be allowed to make major V8 updates in alpha between October and April. That's exactly the same window as before.

  17. joyeecheung commented on May 6, 2026

    @joyeecheung
    Member

    I think the discrepancy comes from

    1. At some point, a release will start to have new users
    2. At some point, we will have to stop trying to update the V8 version on that release
    3. We generally want to maximize the V8 version available to users within our constraints so they can get the newest and best stuff
    4. We prefer not to let LTS carry a very old V8 version.

    Currently 1 and 2 both happen in April. Combined with 4 this means we have to rush. If we can change it so that, for example, 2 happen in October (when it goes LTS), but 1 happens in April (when it goes stable but not yet LTS) we have a 6-month window to still update V8 to some extent, ideally in the latter part of that window the V8 version on that release goes into some sort of "maintenance mode", so that when it's close to October again, the V8 version on that release is considered "done" and we will focus on getting the new V8 version ready for the alpha release. And because it's alpha it's not that hard a deadline for breaking changes, so we have some breathing room. Even after the next April, because we are allowed to break the ABI during the stable phase, we still have breathing room likely well into September or something. This means LTS's V8 version will be closer to the V8 version that's stable when it goes LTS in the second October, while currently it's close to the version that's stable when it is released in April (and is where the rush comes from, if we don't manage to get the "latest in April" version in, the older version will need to be maintained for ~2 years).

  18. richardlau commented on May 12, 2026

    @richardlau
    Member

    We might also be limited by build toolchains. So far we have not bumped minimum C/C++ compiler levels during the lifetime of a Node.js release line (with the exception of a mid-life Xcode bump that was forced by Apple due to gatekeeper changes). Most of the compiler bumps have been driven by V8 -- I have no idea if this will be better/worse/the same now we have switched over to clang (but note upstream V8 have their own fork of clang/llvm that they use to build with, which is not the released versions of clang in e.g. Linux distros).

  19. RafaelGSS commented on May 18, 2026

    @RafaelGSS
    MemberAuthor

    So the proposed strategy would be allowing ABI-breaking changes during the 'Current' phase?

  20. joyeecheung commented on May 21, 2026

    @joyeecheung
    Member

    Another thing I noticed in nodejs/node#63475 that's worth including in the ABI stability is that V8 serialization format changes were historically considered semver-major. If our goal is to be able to upgrade V8 without bumping major (at least before LTS), it might be worth to include this part into ABI stability/versioning as well.

  21. joyeecheung commented on May 21, 2026

    @joyeecheung
    Member

    So the proposed strategy would be allowing ABI-breaking changes during the 'Current' phase?

    My 2cents in the context of the proposed new schedule: yes for alpha, maybe for stable, only exceptional (mostly for security) for LTS; or, to experiment, yes for alpha, only exceptional since stable.

  22. aduh95 commented on May 21, 2026

    @aduh95
    Contributor

    Does ABI unstability impact v8.serialize/v8.deserialize? If so, that could potentially affect the ecosystem more than the re-compilation of third-party addons (not saying it'd be a deal-breaker, but certainly worth documenting)

  23. legendecas commented on May 24, 2026

    @legendecas
    Member

    Does ABI unstability impact v8.serialize/v8.deserialize? If so, that could potentially affect the ecosystem more than the re-compilation of third-party addons (not saying it'd be a deal-breaker, but certainly worth documenting)

    Hmm, I think V8 provides a backward compatible guarantee on the format of v8.serialize/v8.deserialize, as in its own version mechanism.

    If this breaks, it should be a V8 bug. It is also documented in Node.js doc: https://nodejs.org/api/v8.html#serialization-api i.e. a newer V8 can read the output serialized by an older V8, but not vice-versa. So users should not use the output of a new Node.js version to feed into an older Node.js v8.deserialize.

  24. mcollina commented on May 27, 2026

    @mcollina
    SponsorMember

    Removing from the TSC meeting agend, @RafaelGSS re-add in case you need. There does not seem to be any blockers, just technical details to fill.

  25. RafaelGSS commented on May 28, 2026

    @RafaelGSS
    MemberAuthor

    Hi folks, so I guess we could start a small announcement to get involvement from the community. I thought something like:

    Starting with Node.js 27, Node.js may land V8 updates that require a native addon ABI version bump during the Alpha and Current phases. As usual, we will bump NODE_MODULE_VERSION and clearly document it in release notes, but instead of landing as semver-major, it will land as semver-minor.

    The native addon ABI is frozen when a release line enters LTS. After LTS promotion, ABI-breaking V8 updates are not permitted except for exceptional cases such as security fixes, and are not permitted in Maintenance releases.

    N-API should remain as the recommended interface for native addons that require ABI stability across Node.js versions.

    What do you think? @targos @joyeecheung @legendecas

  26. aduh95 commented on May 28, 2026

    @aduh95
    Contributor

    I suggest we move the discussion to a PR updating the docs

  27. RafaelGSS commented on Jun 29, 2026

    @RafaelGSS
    MemberAuthor

    Where is the best place to update the docs about that? I opened nodejs/node#64196, but I'm not convinced this is "clear" enough. I'm still learning towards a nodejs.org blog post about that.

  28. added a commit that references this issue on Jun 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions