11cb0ef41Sopenharmony_ci# To be or not to be in core 21cb0ef41Sopenharmony_ci 31cb0ef41Sopenharmony_ciThis document explains things to consider when deciding whether a component 41cb0ef41Sopenharmony_cishould be in core or not. 51cb0ef41Sopenharmony_ci 61cb0ef41Sopenharmony_ciA component may be included in core as a dependency, a module, or integrated 71cb0ef41Sopenharmony_ciinto the code base. The same arguments for including/not including in core 81cb0ef41Sopenharmony_cigenerally apply in all of these cases. 91cb0ef41Sopenharmony_ci 101cb0ef41Sopenharmony_ci## Strong arguments for including a component in core 111cb0ef41Sopenharmony_ci 121cb0ef41Sopenharmony_ci1. The component provides functionality that is standardized (such as a 131cb0ef41Sopenharmony_ci [Web API][]) and overlaps with existing functionality. 141cb0ef41Sopenharmony_ci2. The component can only be implemented in core. 151cb0ef41Sopenharmony_ci3. The component can only be implemented in a performant way in core. 161cb0ef41Sopenharmony_ci4. Developer experience is significantly improved if the component is in core. 171cb0ef41Sopenharmony_ci5. The component provides functionality that can be expected to solve at 181cb0ef41Sopenharmony_ci least one common use case Node.js users face. 191cb0ef41Sopenharmony_ci6. The component requires native bindings. Inclusion in core enables 201cb0ef41Sopenharmony_ci utility across operating systems and architectures without requiring 211cb0ef41Sopenharmony_ci users to have a native compilation toolchain. 221cb0ef41Sopenharmony_ci7. Part or all of the component will also be re-used or duplicated in core. 231cb0ef41Sopenharmony_ci 241cb0ef41Sopenharmony_ci## Strong arguments against including a component in core 251cb0ef41Sopenharmony_ci 261cb0ef41Sopenharmony_ci1. None of the arguments listed in the previous section apply. 271cb0ef41Sopenharmony_ci2. The component has a license that prohibits Node.js from including it in core 281cb0ef41Sopenharmony_ci without also changing its own license. 291cb0ef41Sopenharmony_ci3. There is already similar functionality in core and adding the component will 301cb0ef41Sopenharmony_ci provide a second API to do the same thing. 311cb0ef41Sopenharmony_ci4. A component (or/and the standard it is based on) is deprecated and there is 321cb0ef41Sopenharmony_ci a non-deprecated alternative. 331cb0ef41Sopenharmony_ci5. The component is evolving quickly and inclusion in core will require frequent 341cb0ef41Sopenharmony_ci API changes. 351cb0ef41Sopenharmony_ci 361cb0ef41Sopenharmony_ci## Benefits and challenges 371cb0ef41Sopenharmony_ci 381cb0ef41Sopenharmony_ciWhen it is unclear whether a component should be included in core, it might be 391cb0ef41Sopenharmony_cihelpful to consider these additional factors. 401cb0ef41Sopenharmony_ci 411cb0ef41Sopenharmony_ci### Benefits 421cb0ef41Sopenharmony_ci 431cb0ef41Sopenharmony_ci1. The component will receive more frequent testing with Node.js CI and CITGM. 441cb0ef41Sopenharmony_ci2. The component will be integrated into the LTS workflow. 451cb0ef41Sopenharmony_ci3. Documentation will be integrated with core. 461cb0ef41Sopenharmony_ci4. There is no dependency on npm. 471cb0ef41Sopenharmony_ci 481cb0ef41Sopenharmony_ci### Challenges 491cb0ef41Sopenharmony_ci 501cb0ef41Sopenharmony_ci1. Inclusion in core, rather than as an ecosystem module, is likely to reduce 511cb0ef41Sopenharmony_ci code merging velocity. The Node.js process for code review and merging is 521cb0ef41Sopenharmony_ci more time-consuming than that of most separate modules. 531cb0ef41Sopenharmony_ci2. By being bound to the Node.js release cycle, it is harder and slower to 541cb0ef41Sopenharmony_ci publish patches. 551cb0ef41Sopenharmony_ci3. Less flexibility for users. They can't update the component 561cb0ef41Sopenharmony_ci when they choose without also updating Node.js. 571cb0ef41Sopenharmony_ci 581cb0ef41Sopenharmony_ci[Web API]: https://developer.mozilla.org/en-US/docs/Web/API 59