|
| 1 | +# Technical Priorities |
| 2 | + |
| 3 | +This list represents the current view of key technical priorities recognized |
| 4 | +by the project as important to ensure the ongoing success of Node.js. |
| 5 | +It is based on an understanding of the Node.js |
| 6 | +[constituencies](https://github.com/nodejs/next-10/blob/main/CONSTITUENCIES.md) |
| 7 | +and their [needs](https://github.com/nodejs/next-10/blob/main/CONSTITUENCY-NEEDS.md). |
| 8 | + |
| 9 | +The initial version was created based on the work of the |
| 10 | +[Next-10 team](https://github.com/nodejs/next-10) and the |
| 11 | +[mini-summit](https://github.com/nodejs/next-10/issues/76) |
| 12 | +on August 5th 2021. |
| 13 | + |
| 14 | +They will be updated on a regular basis and will be reviewed by the next-10 team |
| 15 | +and the TSC on a 6 month basis. |
| 16 | + |
| 17 | +## Modern HTTP |
| 18 | + |
| 19 | +Base HTTP support is a key component of modern cloud native applications |
| 20 | +and built-in support was part of what made Node.js a success in the first |
| 21 | +10 years. The current implementation is hard to support and a common |
| 22 | +source of vulnerabilities. It is important that we work towards an |
| 23 | +implementation which is easier to support and makes it easier to integrate |
| 24 | +the new http versions (HTTP3, quick) and to support efficient |
| 25 | +implementations of different versions concurrently. |
| 26 | + |
| 27 | +## Suitable types for end-users |
| 28 | + |
| 29 | +Using typings with JavaScript can allow a richer experience when using Visual |
| 30 | +code (or any other IDEs) environments, more complete documentation of APIs and |
| 31 | +the ability to identify and resolve errors earlier in the development process. |
| 32 | +These benefits are important to a large number of Node.js |
| 33 | +developers (maybe 50%). Further typing support may be important |
| 34 | +to enterprises that are considering expanding their preferred platforms to |
| 35 | +include Node.js. It is, therefore, important that the Node.js project work |
| 36 | +to ensure there are good typings available for the public Node.js APIs. |
| 37 | + |
| 38 | +## Documentation |
| 39 | + |
| 40 | +The current documentation is great for experienced developers or people |
| 41 | +who are aware of what they are looking for. On the other hand, for |
| 42 | +beginners this documentation can be quite hard to read and finding the |
| 43 | +desired information is difficult. It is important that we have documentation |
| 44 | +that is suitable for beginners in order to continue the rapid growth in use. |
| 45 | +This documentation should include more concrete examples and a learning |
| 46 | +path for newcomers. |
| 47 | + |
| 48 | +## Web Assembly |
| 49 | + |
| 50 | +The use of Web Assembly has been growing over the last few years. |
| 51 | +In order to ensure Node.js continues to be part of solutions where a |
| 52 | +subset of the solution needs the performance that Web Assembly can |
| 53 | +deliver it is important that Node.js provide good support for running |
| 54 | +Web Assembly components along with the JavaScript that makes up the rest |
| 55 | +of the solution. This includes implementations of “host” APIs like WASI. |
| 56 | + |
| 57 | +## ESM |
| 58 | + |
| 59 | +The CommonJS module system was one of the key components that led to the success |
| 60 | +of Node.js in its first 10 years. ESM is the standard that has been adopted as |
| 61 | +the equivalent in the broader JavaScript ecosystem and Node.js must continue to |
| 62 | +develop and improve its ESM implementation in order to stay relevant and ensure |
| 63 | +continued growth for the next 10 years. |
| 64 | + |
| 65 | +## Support for features from the latest ECMAScript spec |
| 66 | + |
| 67 | +JavaScript developers are a fast moving group and need/want support for new ES |
| 68 | +JavaScript features in a timely manner. It is important that Node.js continue |
| 69 | +to provide support for up to date ES versions in order to remain the runtime |
| 70 | +of choice and to ensure its continued growth for the next 10 years. |
| 71 | + |
| 72 | +## Observability |
| 73 | + |
| 74 | +The ability to investigate and resolve problems that occur in applications |
| 75 | +running in production is crucial for organizations. Tools that allow |
| 76 | +people to observe the current and past operation of the application are |
| 77 | +needed to support that need. It is therefore important that the Node.js |
| 78 | +project work towards well understood and defined processes for observing |
| 79 | +the behavior of Node.js applications as well as ensuring there are well |
| 80 | +supported tools to implement those processes (logging, metrics and tracing). |
| 81 | +This includes support within the Node.js runtime itself (for example |
| 82 | +generating headumps, performance metrics, etc.) as well as support for |
| 83 | +applications on top of the runtime. |
| 84 | + |
| 85 | +## Permissions/policies/security model |
| 86 | + |
| 87 | +Organizations will only choose technologies that allow them to sufficiently |
| 88 | +manage risk in their production deployments. In order for Node.js to |
| 89 | +continue its growth in product/enterprise deployments we need to ensure |
| 90 | +that we help them manage that risk. It is important that we have a well |
| 91 | +documented security model so that consumers understand what threats are/are |
| 92 | +not addressed by the Node.js runtime. We also need to provide |
| 93 | +functions/features which help them limit attack surfaces even if it does |
| 94 | +not result in 100% protection as this will still help organizations |
| 95 | +manage their overall risk level. |
| 96 | + |
| 97 | +## Better multithreaded support |
| 98 | + |
| 99 | +Today servers support multiple threads of concurrent execution. |
| 100 | +It is important that Node.js deployments be able to make full and efficient |
| 101 | +use of the available resources. The right answer is often to use |
| 102 | +technologies like containers to run multiple single threaded Node.js |
| 103 | +instances on the same server. However, there are important use cases |
| 104 | +where a single Node.js instance needs to make use of multiple threads |
| 105 | +in order to achieve a performant and efficient implementation. In addition, |
| 106 | +even when a Node.js instance only needs to consume a single thread to |
| 107 | +complete its work there can be issues. If that work is long running, |
| 108 | +blocking the event loop will interfere with other supporting work like |
| 109 | +metrics gathering and health checks. It is important that the project |
| 110 | +ensures good support for using multiple threads within Node.js |
| 111 | +in order to ensure the continued growth and success of Node.js. |
| 112 | + |
| 113 | +## Single Executable Applications |
| 114 | + |
| 115 | +Node.js often loses out to other runtimes/languages in cases where |
| 116 | +being able package up a single execuatble application simplifies |
| 117 | +distribution and management of what needs to be delivered. While there are |
| 118 | +components/approaches for doing this, they need to be better |
| 119 | +documented and evangelized so that this is not seen as a barrier |
| 120 | +for using Node.js in these situations. This is important to support |
| 121 | +the expansion of where/when Node.js is used in building solutions. |
0 commit comments