Skip to content

Conversation

@jonthysell
Copy link
Contributor

@jonthysell jonthysell commented Oct 31, 2023

Description

This PR makes Hermes the default JS engine for RNW going forward.

For now, this is still managed by setting the <UseHermes> MSBuild property. However, if the property is not explicitly set, the default value in JSEngine.props will now be true instead of false.

The property will remain exposed (and now set to true) in project's ExperimentalFeatures.props files. This will be done for new projects created with the npx react-native-windows-init command targeting versions with this change. (Use or omission of the --useHermes flag will no longer be recognized at project creation time). Hermes will also be the default for projects created with the new npx react-native init-windows CLI command.

Current users attempting to upgrade their existing projects with these tools will be given a warning if they were previously using the Chakra engine, and instructions to revert back to using Chakra if necessary. However, support for Chakra will be deprecated in the future, so best to migrate sooner rather than later.

In addition, this PR should also enable Hermes use when consuming the official (experimental) NuGet package binaries.

Finally, this PR updates our CI infrastructure to instead denote "Chakra" (rather than "Hermes") for builds and tests.

Type of Change

  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

Why

Hermes is the officially supported and maintained JS engine for React Native, and as time goes on, the cost of maintain Chakra (which hasn't been updated in years) only increases. The "new" architecture includes Hermes.

Resolves #6136
Resolves #11251

What

See above

Screenshots

N/A

Testing

Ran existing tests

Changelog

Should this change be included in the release notes: yes

Hermes is now the default JS engine for all new projects and will eventually be the only supported JS engine.

Microsoft Reviewers: Open in CodeFlow

This PR makes Hermes the default JS engine for RNW going forward.

For now, this is still managed by setting the `<UseHermes>` MSBuild property. However, if the property is not explicitly set, the default value in `JSEngine.props` will now be `true` instead of `false`.

The property will remain exposed (and now set to `true`) in project's `ExperimentalFeatures.props` files. This will be done for new projects created with the `npx react-native-windows-init` command targeting versions with this change. (Use or omission of the `--useHermes` flag will no longer be recognized at project creation time). Hermes will also be the default for projects created with the new `npx react-native init-windows` CLI command.

Current users attempting to *upgrade* their existing projects with these tools will be given a warning if they were previously using the Chakra engine, and instructions to revert back to using Chakra if necessary. However, support for Chakra will be deprecated in the future, so best to migrate sooner rather than later.

In addition, this PR should also enable Hermes use when consuming the official (experimental) NuGet package binaries.

Finally, this PR updates our CI infrastructure to instead denote "Chakra" (rather than "Hermes") for builds and tests.
@jonthysell jonthysell marked this pull request as ready for review November 8, 2023 21:49
@jonthysell jonthysell requested review from a team as code owners November 8, 2023 21:49
@jonthysell jonthysell merged commit fd68f05 into microsoft:main Nov 9, 2023
@jonthysell jonthysell deleted the hermesdefault branch November 9, 2023 19:59
jonthysell added a commit to jonthysell/react-native-windows that referenced this pull request Nov 9, 2023
This PR backports microsoft#12321 to 0.73.

This PR makes Hermes the default JS engine for RNW going forward.

For now, this is still managed by setting the `<UseHermes>` MSBuild property. However, if the property is not explicitly set, the default value in `JSEngine.props` will now be `true` instead of `false`.

The property will remain exposed (and now set to `true`) in project's `ExperimentalFeatures.props` files. This will be done for new projects created with the `npx react-native-windows-init` command targeting versions with this change. (Use or omission of the `--useHermes` flag will no longer be recognized at project creation time). Hermes will also be the default for projects created with the new `npx react-native init-windows` CLI command.

Current users attempting to *upgrade* their existing projects with these tools will be given a warning if they were previously using the Chakra engine, and instructions to revert back to using Chakra if necessary. However, support for Chakra will be deprecated in the future, so best to migrate sooner rather than later.

In addition, this PR should also enable Hermes use when consuming the official (experimental) NuGet package binaries.

Finally, this PR updates our CI infrastructure to instead denote "Chakra" (rather than "Hermes") for builds and tests.

- New feature (non-breaking change which adds functionality)
- Breaking change (fix or feature that would cause existing functionality to not work as expected)
- This change requires a documentation update

Hermes is the officially supported and maintained JS engine for React Native, and as time goes on, the cost of maintain Chakra (which hasn't been updated in years) only increases. The "new" architecture includes Hermes.

Resolves microsoft#11251

See above

N/A

Ran existing tests

Should this change be included in the release notes: yes

Hermes is now the default JS engine for all new projects and will eventually be the only supported JS engine.
jonthysell added a commit that referenced this pull request Nov 10, 2023
This PR backports #12321 to 0.73.

## Description

This PR makes Hermes the default JS engine for RNW going forward.

For now, this is still managed by setting the `<UseHermes>` MSBuild property. However, if the property is not explicitly set, the default value in `JSEngine.props` will now be `true` instead of `false`.

The property will remain exposed (and now set to `true`) in project's `ExperimentalFeatures.props` files. This will be done for new projects created with the `npx react-native-windows-init` command targeting versions with this change. (Use or omission of the `--useHermes` flag will no longer be recognized at project creation time). Hermes will also be the default for projects created with the new `npx react-native init-windows` CLI command.

Current users attempting to *upgrade* their existing projects with these tools will be given a warning if they were previously using the Chakra engine, and instructions to revert back to using Chakra if necessary. However, support for Chakra will be deprecated in the future, so best to migrate sooner rather than later.

In addition, this PR should also enable Hermes use when consuming the official (experimental) NuGet package binaries.

Finally, this PR updates our CI infrastructure to instead denote "Chakra" (rather than "Hermes") for builds and tests.

### Type of Change
- New feature (non-breaking change which adds functionality)
- Breaking change (fix or feature that would cause existing functionality to not work as expected)
- This change requires a documentation update

### Why
Hermes is the officially supported and maintained JS engine for React Native, and as time goes on, the cost of maintain Chakra (which hasn't been updated in years) only increases. The "new" architecture includes Hermes.

Resolves #11251 

### What
See above

## Screenshots
N/A

## Testing
Ran existing tests

## Changelog
Should this change be included in the release notes: yes

Hermes is now the default JS engine for all new projects and will eventually be the only supported JS engine.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Can't use hermes with the Microsoft.ReactNative NuGet packages Make Hermes the default JS engine

3 participants