WhoBuilt

Hermes Roadmap

Jul 1, 2021· 12 min· 484 views·Watch on YouTube

An unnamed Callstack guest discusses the Hermes roadmap, React Native priorities, and Microsoft’s work on internationalization APIs in conversation with an unnamed host.

JavaScript support without performance regressions

Hermes aims to support more modern JavaScript features while avoiding performance regressions. The guest says features are generally launched only after they are shown not to slow performance or to improve it. Promise scheduling is another priority because React Native currently polyfills Promises with setImmediate, which schedules them like timers rather than microtasks, and improving this is needed for React Concurrent Mode.

Garbage collection and memory use

The team is working on garbage collector improvements to keep pauses short, which would help React Native’s New Architecture as it adds synchronous calls into JavaScript. Hermes Value32 would use 32-bit values with pointer compression instead of 64-bit tagged values. Small array optimization targets tuple-like arrays common in React Hooks, such as values returned by useState and useReducer, to avoid separate storage allocation.

Tooling and React Native integration

Hermes work also covers debugging, profiling, and source maps. An unstable Metro transform profile can already remove about half of Babel’s transforms to speed builds; the team is working to remove more transforms and stabilize the profile. The guest says React Native’s needs help focus Hermes development, alongside requests from the open-source community.

Intl support across platforms

The guest describes native Intl support as an important condition for broader Hermes adoption in React Native. Microsoft contributed Android support, while React Native Windows is adapting its implementation to use sanctioned Windows globalization APIs instead of ICU. macOS and iOS also need platform-specific approaches because ICU access is restricted; the guest could not confirm the current macOS effort after moving to Teams.

Community blockers and upcoming support

The guest says Proxy became the default in React Native 0.64, addressing a community request even though Facebook did not use the feature internally. Android Intl support was close to completion, with a plan to release it in React Native 0.65. Facebook uses FBT internally for internationalization, while the Intl API is being added for the wider community.

Takeaways

  • Measure performance before shipping new JavaScript features in a runtime.
  • Treat garbage collection pause time as an application responsiveness concern, especially when native architecture introduces synchronous JavaScript calls.
  • Profile React Native builds and remove Babel transforms that the JavaScript engine can handle directly.
  • Plan internationalization support around each platform’s approved APIs and runtime constraints.
  • Community adoption can depend on features that a project’s largest internal user does not need.

Mentioned in this talk

Search inside this talk

What was claimed 11

  • feature
    Hermes Agent: Plans to support more modern JavaScript features while avoiding performance regressions
    “it's definitely part of our plan to support more modern JavaScript features”
    YouTube
    Unverified1 source· Talk
  • feature
    Hermes Agent: Promise scheduling improvements are being worked on to enable React Concurrent Mode in React Native
    “We're working on improving this because it's required to enable React Concurrent Mode in React Native.”
    YouTube
    Unverified1 source· Talk
  • feature
    Hermes Agent: Significant garbage collector improvements are in progress, with a goal of reasonably short pause times
    “We're working on some significant improvements to our garbage collector.”
    YouTube
    Unverified1 source· Talk
  • feature
    Hermes Agent: Small array optimization stores small arrays inline without a storage allocation
    “We can specialize those small arrays to use inline storage without a storage allocation.”
    YouTube
    Unverified1 source· Talk
  • feature
    Hermes Agent: Hermes Value32 uses pointer compression for a 32-bit representation of JavaScript values
    “We're working on a 32-bit version with pointer compression.”
    YouTube
    Unverified1 source· Talk
  • integrates with
    Hermes Agent integrates with Metro
    “an unstable transform profile for Hermes in the Metro bundler”
    YouTube
    Unverified1 source· Talk
  • built
    Node-API support
    “Microsoft has contributed to Hermes.”
    YouTube
    Verified3 sources· Talk
  • uses
    The React Native Windows Intl implementation relies on ICU
    “React Native Windows currently has an implementation of the Intl APIs, but it relies on something called ICU.”
    YouTube
    Unverified1 source· Talk
Show all 11 facts

Related talks