Skip to content

Commit ca6d40d

Browse files
committed
doc: add initial list of technical priorities
Co-authored-by: Jean Burellier <[email protected]> Signed-off-by: Michael Dawson <[email protected]>
1 parent 8037d17 commit ca6d40d

File tree

1 file changed

+121
-0
lines changed

1 file changed

+121
-0
lines changed

doc/guides/technical-priorities.md

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
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

Comments
 (0)