microsoft / microsoft/react-native-windows

Split up the Microsoft.ReactNative.dll into two DLLs: Core and UWP

Open
#4,540 7 comments 2 reactions 1 assignee View on GitHub

@vmoroz is already working on this.

Since Apr 9, 2020.

Area: Core DLL Code Cleanup enhancement Workstream: ES Compliance SFI
Dominant language
C++
Stars
17.3k
Forks
1.2k
Avg merge
1d 13h
Merged PRs (30d)
33

Description

Task: Split up the Microsoft.ReactNative.dll into two DLLs: Core and UWP

Summary

Introduce a new Microsoft.ReactNative.Uwp.dll that has all the UWP specific code. It includes the ReactApplication, native modules, ViewManagers and any other XAML-based code. The Microsoft.ReactNative.dll is kept as a relatively thin wrapper around the ReactNative code and exposes it through the ABI-safe API.

Motivation

There are several scenarios we would like to address:

  • Use Microsoft.ReactNative.dll for non-XAML based UI.
  • Use Microsoft.ReactNative.dll for UWP and Win32 applications.
  • Write internal and external NativeModules and TurboModules using the same ABI-safe API.

Basic examples

  • Generate TurboModules based on ReactNative spec files that have the same shape for internal and external code that use the same ABI-safe API.
  • Microsoft Office applications require to define its own UI ViewManages based on non-XAML components.

Open Questions

  • Where should we have the UI shadow tree: in Microsoft.ReactNative.dll or Microsoft.ReactNative.Uwp.dll? Ideally it should be in the common shared core Microsoft.ReactNative.dll.
  • Should the the new "Core DLL" Microsoft.ReactNative.dll support plugable JavaScript engines (Hermes, V8, Chakra) or it must wrap only one of them?

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.