Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sync 4.x with master #5529

Draft
wants to merge 198 commits into
base: 4.x
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 164 commits
Commits
Show all changes
198 commits
Select commit Hold shift + click to select a range
c221b85
build: [email protected]
dougwilson Jan 28, 2022
69997cb
examples: fix error handling in auth example
dougwilson Feb 2, 2022
a84e73b
tests: add test for hello-world example
dougwilson Feb 2, 2022
8b9757e
build: fix running linter in CI
dougwilson Feb 2, 2022
20047bb
examples: use strict mode
dougwilson Feb 2, 2022
215f484
tests: fix wording of req.accepts* test cases
dougwilson Feb 2, 2022
bd4fdfe
tests: remove global dependency on should
dougwilson Feb 2, 2022
141914e
tests: fix tests that did not bubble errors
dougwilson Feb 2, 2022
00ad5be
tests: add more tests for app.request & app.response
dougwilson Feb 2, 2022
da6cb0e
tests: add range tests to res.download
dougwilson Feb 2, 2022
744564f
tests: add test for multiple ips in "trust proxy"
dougwilson Feb 2, 2022
89bb531
docs: fix typo in res.download jsdoc
caioagiani Feb 4, 2022
2bc734a
deps: accepts@~1.3.8
dougwilson Feb 4, 2022
6fbc269
pref: remove unnecessary regexp for trust proxy
dougwilson Feb 4, 2022
9cbbc8a
deps: [email protected]
dougwilson Feb 4, 2022
1c7bbcc
build: [email protected]
dougwilson Feb 4, 2022
43cc56e
build: clean up gitignore
dougwilson Feb 4, 2022
9d09762
build: [email protected]
dougwilson Feb 5, 2022
2585f20
tests: fix test missing assertion
dougwilson Feb 5, 2022
7511d08
build: use [email protected] for Node.js < 4
dougwilson Feb 7, 2022
884657d
examples: remove bitwise syntax for includes check
thst71 Feb 6, 2022
12310c5
build: use nyc for test coverage
dougwilson Feb 8, 2022
82de4de
examples: fix path traversal in downloads example
KoyamaSohei Dec 13, 2019
a39e409
tests: prevent leaking changes to NODE_ENV
dougwilson Feb 8, 2022
a659137
tests: use strict mode
dougwilson Feb 9, 2022
e98f584
Revert "build: use [email protected] for Node.js < 4"
dougwilson Feb 14, 2022
a007863
deps: [email protected]
dougwilson Feb 16, 2022
6381bc6
deps: [email protected]
dougwilson Feb 16, 2022
f906371
build: update example dependencies
dougwilson Feb 16, 2022
3d7fce5
4.17.3
dougwilson Feb 17, 2022
8ee3420
tests: fix req.acceptsEncodings tests
dougwilson Feb 21, 2022
d8ed591
tests: fix req.acceptsLanguage tests
dougwilson Feb 21, 2022
7df0c84
tests: fix up app.locals tests
dougwilson Feb 22, 2022
9967ffb
tests: update res.append to verify separate header lines
dougwilson Feb 22, 2022
bc5ca05
tests: remove usage of should
dougwilson Feb 22, 2022
18f782b
tests: remove duplicate utils
dougwilson Feb 23, 2022
8da8f79
tests: fix callback in res.download test
dougwilson Feb 23, 2022
cf9f662
tests: fix position of res.sendfile(path, options) test
dougwilson Feb 24, 2022
d0e166c
docs: fix typo in private api jsdoc
apeltop Feb 28, 2022
ea66a9b
docs: update link to github actions ci
dougwilson Mar 1, 2022
4ed35b4
docs: switch badges to badgen
dougwilson Mar 1, 2022
07aa91f
docs: consolidate contributing in readme
dougwilson Mar 1, 2022
e8594c3
docs: add install size badge
styfle Aug 9, 2018
291993d
tests: expand res.sendFile options tests
dougwilson Mar 1, 2022
446046f
build: [email protected]
dougwilson Mar 1, 2022
490f1a1
lint: remove deprecated String.prototype.substr
CommanderRoot Mar 17, 2022
2a7417d
examples: fixup html
Hashen110 Mar 20, 2022
bf4c3ee
docs: fix incomplete JSDoc comment
Hashen110 Mar 20, 2022
947b6b7
lint: remove unnecessary continue statement in loop
Hashen110 Mar 20, 2022
eb4c930
build: support Node.js 15.x
kkalavantavanich Dec 5, 2021
8bf0720
build: support Node.js 16.x
kkalavantavanich Dec 5, 2021
87279c0
Support proper 205 responses using res.send
tkesgar May 20, 2021
c17fe05
Ignore Object.prototype values in settings through app.set/app.get
EvanHahn Feb 3, 2022
4847d0e
Deprecate string and non-integer arguments to res.status
jonchurch Mar 21, 2020
0def9bb
Add "root" option to res.download
mmito Mar 11, 2022
dd69eed
deps: [email protected]
dougwilson Mar 25, 2022
c924206
deps: [email protected]
dougwilson Mar 25, 2022
f739b16
deps: [email protected]
dougwilson Mar 25, 2022
03dc367
Allow options without filename in res.download
dougwilson Mar 25, 2022
10b9b50
examples: use updated res.download in example
dougwilson Mar 25, 2022
9482b82
Invoke default with same arguments as types in res.format
shesek Mar 13, 2018
1cc8169
deps: [email protected]
UlisesGascon Feb 5, 2020
5855339
Fix behavior of null/undefined as "maxAge" in res.cookie
cjbarth Apr 18, 2019
a107702
Use http-errors for res.format error
dougwilson Mar 28, 2022
32c558d
deps: [email protected]
dougwilson Apr 3, 2022
1df7576
deps: [email protected]
dougwilson Apr 3, 2022
980d881
deps: [email protected]
3imed-jaberi Jul 3, 2020
2e2d78c
deps: [email protected]
dougwilson Apr 3, 2022
04da4aa
build: use [email protected] for Node.js 6.x
dougwilson Apr 7, 2022
1b2e097
tests: fix typo in description
Hashen110 Apr 7, 2022
99175c3
docs: fix typo in casing of HTTP
ghousemohamed Mar 26, 2022
ecaf67c
docs: remove Node Security Project from security policy
netcode Apr 11, 2022
b91c7ff
examples: use http-errors to create errors
dougwilson Apr 11, 2022
8880dda
examples: add missing html label associations
Hashen110 Apr 7, 2022
92c5ce5
deps: [email protected]
dougwilson Apr 12, 2022
708ac4c
Fix handling very large stacks of sync middleware
dougwilson Apr 14, 2022
fd8e45c
tests: mark stack overflow as long running
grisu48 Apr 8, 2022
11a209e
build: support Node.js 17.x
dougwilson Apr 21, 2022
29ea1b2
build: use 64-bit Node.js in AppVeyor
dougwilson Apr 21, 2022
158a170
build: support Node.js 18.x
dougwilson Apr 21, 2022
0b330ef
bench: print latency and vary connections
denizy97 Apr 3, 2022
547fdd4
4.18.0
dougwilson Apr 25, 2022
a38fae1
build: [email protected]
dougwilson Apr 28, 2022
2df96e3
build: [email protected]
dougwilson Apr 28, 2022
e2482b7
build: [email protected]
dougwilson Apr 29, 2022
75e0c7a
bench: remove unused parameter
Hashen110 Apr 26, 2022
631ada0
Fix hanging on large stack of sync routes
dougwilson Apr 29, 2022
b02a95c
build: [email protected]
dougwilson Apr 29, 2022
d854c43
4.18.1
dougwilson Apr 29, 2022
a2dfc56
build: [email protected]
dougwilson May 20, 2022
745a63f
build: [email protected]
dougwilson May 20, 2022
ab2c70b
build: [email protected]
dougwilson May 20, 2022
7ec5dd2
Fix regression routing a large stack in a single route
dougwilson May 20, 2022
97f0a51
tests: verify all handlers called in stack tests
dougwilson May 20, 2022
2c47827
examples: remove unused function arguments in params
alxdrg May 20, 2022
8d98e86
build: [email protected]
dougwilson Aug 19, 2022
97131bc
build: [email protected]
dougwilson Aug 19, 2022
ecd7572
build: [email protected]
dougwilson Aug 19, 2022
644f646
build: [email protected]
dougwilson Aug 19, 2022
33e8dc3
docs: use Node.js name style
REALSTEVEIG Jun 11, 2022
340be0f
build: [email protected]
dougwilson Oct 6, 2022
689d175
deps: [email protected]
dougwilson Oct 6, 2022
24b3dc5
deps: [email protected]
dougwilson Oct 6, 2022
f56ce73
build: [email protected]
dougwilson Oct 6, 2022
bb7907b
build: [email protected]
dougwilson Oct 7, 2022
61f4049
docs: replace Freenode with Libera Chat
theabhinavdas Oct 7, 2022
8368dc1
4.18.2
dougwilson Oct 8, 2022
06b2b14
docs: update git clone to https protocol
vcsjones Oct 31, 2022
29e117e
build: [email protected]
abenhamdine Nov 1, 2022
723b677
build: [email protected]
abenhamdine Nov 1, 2022
442fd46
build: actions/checkout@v3
armujahid Oct 19, 2022
c6ee8d6
lint: remove unused function arguments in tests
raksbisht Feb 10, 2023
a1efd9d
lint: remove unused parameter from internal function
raksbisht Feb 8, 2023
6b4c4f5
docs: fix typos in JSDoc comments
raksbisht Feb 8, 2023
3c1d605
lint: remove unused parameters in examples
raksbisht Feb 3, 2023
f05b5d0
build: [email protected]
dougwilson Feb 22, 2023
546969d
build: [email protected]
dougwilson Feb 22, 2023
b9f7a97
build: use $GITHUB_OUTPUT for environment list
dougwilson Feb 22, 2023
506fbd6
docs: add missing JSDoc param for parseExtendedQueryString
raksbisht Feb 22, 2023
1e42a98
deps: [email protected]
dougwilson Feb 23, 2023
60b7c67
build: [email protected]
dougwilson Feb 23, 2023
8a76f39
build: [email protected]
dougwilson Feb 23, 2023
5ad9541
docs: fix typos in history
raksbisht Feb 23, 2023
9bc1742
build: support Node.js 19.x
abenhamdine Feb 23, 2023
74beeac
Fix routing requests without method
dougwilson Feb 23, 2023
0debedf
build: fix code coverage aggregate upload
dougwilson Feb 26, 2023
8c24fa8
tests: wait for server close in app.listen()
dougwilson Mar 14, 2023
f4e48bc
build: [email protected]
dougwilson Mar 14, 2023
b8b2eff
build: [email protected]
dougwilson Mar 14, 2023
f540c3b
build: [email protected]
dougwilson Mar 14, 2023
24e4a25
build: [email protected]
dougwilson Apr 7, 2023
3531987
lint: remove unused function arguments in Route tests
raksbisht Mar 4, 2023
91b6fb8
build: use [email protected] for Node.js < 10
dougwilson Apr 7, 2023
2a00da2
tests: use random port in listen test
rluvaton Apr 11, 2023
13df1de
build: [email protected]
dougwilson Aug 23, 2023
8d8bfaa
build: [email protected]
dougwilson Aug 23, 2023
02d1c39
build: [email protected]
dougwilson Aug 24, 2023
a229207
build: actions/checkout@v4
dougwilson Nov 2, 2023
c4fe7de
docs: update TC governance rules
wesleytodd Feb 16, 2024
59aae76
docs: add project captains to contribution
gireeshpunathil Mar 9, 2020
2a89eb5
tests: fix handling multiple callbacks
kristof-low Jul 27, 2023
3abea7f
examples: remove multipart example
riddlew May 18, 2023
e720c5a
docs: add documentation for benchmarks
UlisesGascon Nov 11, 2023
59af63a
build: [email protected]
UlisesGascon Feb 17, 2024
0e3ab6e
examples: improve view count in cookie-sessions
Dmitry-Kondar Jan 27, 2024
734b281
build: support Node.js 20.x
UlisesGascon Feb 2, 2024
fdeb1d3
build: support Node.js 20.x in appveyor
UlisesGascon Feb 2, 2024
c259c34
build: support Node.js 21.x
UlisesGascon Feb 2, 2024
b9fea12
build: support Node.js 21.x in appveyor
UlisesGascon Feb 2, 2024
23b44b3
build: support Node.js 21.6.2
UlisesGascon Feb 17, 2024
e3eca80
build: pin Node 21.x to minor
UlisesGascon Feb 20, 2024
b625132
build: pin Node 21.x to minor
UlisesGascon Feb 20, 2024
1b51eda
4.18.3
UlisesGascon Feb 26, 2024
06c6b88
docs: update release date
UlisesGascon Mar 10, 2024
414854b
docs: nominating @wesleytodd to be project captian
wesleytodd Feb 29, 2024
4ee853e
docs: loosen TC activity rules
wesleytodd Feb 28, 2024
69a4cf2
deps: [email protected]
rhodgkins Jan 11, 2024
567c9c6
Add note on how to update docs for new release (#5541)
crandmck Mar 16, 2024
0867302
Prevent open redirect allow list bypass due to encodeurl
FDrag0n Mar 15, 2024
084e365
4.19.0
wesleytodd Mar 20, 2024
11f2b1d
build: fix build due to inconsistent supertest behavior in older vers…
wesleytodd Mar 20, 2024
a1fa90f
fixed un-edited version in history.md for 4.19.0
wesleytodd Mar 20, 2024
a003cfa
Allow passing non-strings to res.location with new encoding handling …
wesleytodd Mar 20, 2024
4f0f6cc
4.19.1
wesleytodd Mar 20, 2024
0b74695
Improved fix for open redirect allow list bypass
wesleytodd Mar 21, 2024
b28db2c
4.19.2
wesleytodd Mar 25, 2024
94669f9
remove duplicate location test for data uri
wesleytodd Mar 25, 2024
51595d4
feat: document beta releases expectations
marco-ippolito Mar 26, 2024
88bd6d8
Update Release-Process.md
marco-ippolito Mar 26, 2024
4e3f95c
Update Security.md
marco-ippolito Mar 26, 2024
51a7636
refactor: reword to pre-releases
marco-ippolito Mar 26, 2024
6d98d2e
Update Release-Process.md
marco-ippolito Mar 26, 2024
36b8148
Update Security.md
marco-ippolito Mar 26, 2024
8b6d349
Update Security.md
marco-ippolito Mar 26, 2024
3ae704f
update ci push trigger only to some branches, ignore examples, .md
jonchurch Mar 26, 2024
4771ba2
crib fastify's ci concurrency logic
jonchurch Mar 26, 2024
d546f93
add develop to branches
jonchurch Mar 26, 2024
6da57c7
remove examples from the ignore
jonchurch Mar 26, 2024
2676a1f
docs: add reference to the Threat Model
UlisesGascon Apr 4, 2024
93cf646
docs: add blakeembrey as captain for encodeurl (#5579)
blakeembrey Apr 7, 2024
7f9e584
add jonchurch as repo captain on several packages
jonchurch Apr 8, 2024
815f799
docs: update reference to the threat model (#5590)
inigomarquinez Apr 10, 2024
6abec20
docs: update triage nomination policy (#5600)
UlisesGascon Apr 17, 2024
26e53f0
ci: add CodeQL (SAST) (#5433)
UlisesGascon Apr 17, 2024
d97d79e
docs: add UlisesGascon as triage initiative captain
UlisesGascon Apr 17, 2024
bf91946
deps: encodeurl@~2.0.0 (#5569)
blakeembrey May 4, 2024
8417c60
skip QUERY method test (#5628)
jonchurch May 4, 2024
b44191e
ignore ETAG query test as well, reuse skip util (#5639)
jonchurch May 4, 2024
4b9cd2f
add support Node.js@22 in the CI (#5627)
mertcanaltin May 4, 2024
700349f
doc: add table of contents, tc/triager lists to readme (#5619)
mertcanaltin May 8, 2024
897290b
List and sort all projects, add captains
blakeembrey May 10, 2024
a7d6d29
Add @UlisesGascon to mime repos
blakeembrey May 13, 2024
2803a2b
docs: add @UlisesGascon as captain for cookie-parser (#5666)
UlisesGascon May 22, 2024
689073d
✨ bring back query tests for node 21 (#5690)
ctcpip Jun 5, 2024
f42b160
[v4] Deprecate `res.clearCookie` accepting `options.maxAge` and `opti…
jonchurch Jun 7, 2024
61421a8
skip QUERY tests for Node 21 only, still not supported (#5695)
jonchurch Jun 9, 2024
6d08471
📝 update people, add ctcpip to TC (#5683)
ctcpip Jun 10, 2024
4cf7eed
remove minor version pinning from ci (#5722)
jonchurch Jun 26, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 82 additions & 24 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,51 +27,58 @@ jobs:
- Node.js 12.x
- Node.js 13.x
- Node.js 14.x
- Node.js 15.x
- Node.js 16.x
- Node.js 17.x
- Node.js 18.x
- Node.js 19.x
- Node.js 20.x
- Node.js 21.x

include:
- name: Node.js 0.10
node-version: "0.10"
npm-i: [email protected] [email protected]
npm-i: [email protected] [email protected] [email protected]

- name: Node.js 0.12
node-version: "0.12"
npm-i: [email protected] [email protected]
npm-i: [email protected] [email protected] [email protected]

- name: io.js 1.x
node-version: "1.8"
npm-i: [email protected] [email protected]
npm-i: [email protected] [email protected] [email protected]

- name: io.js 2.x
node-version: "2.5"
npm-i: [email protected] [email protected]
npm-i: [email protected] [email protected] [email protected]

- name: io.js 3.x
node-version: "3.3"
npm-i: [email protected] [email protected]
npm-i: [email protected] [email protected] [email protected]

- name: Node.js 4.x
node-version: "4.9"
npm-i: [email protected] [email protected]
npm-i: [email protected] [email protected] [email protected]

- name: Node.js 5.x
node-version: "5.12"
npm-i: [email protected] [email protected]
npm-i: [email protected] [email protected] [email protected]

- name: Node.js 6.x
node-version: "6.17"
npm-i: [email protected]
npm-i: [email protected] [email protected] [email protected]

- name: Node.js 7.x
node-version: "7.10"
npm-i: [email protected]
npm-i: [email protected] [email protected] [email protected]

- name: Node.js 8.x
node-version: "8.17"
npm-i: [email protected]
npm-i: [email protected] [email protected]

- name: Node.js 9.x
node-version: "9.11"
npm-i: [email protected]
npm-i: [email protected] [email protected]

- name: Node.js 10.x
node-version: "10.24"
Expand All @@ -83,15 +90,38 @@ jobs:

- name: Node.js 12.x
node-version: "12.22"
npm-i: [email protected]

- name: Node.js 13.x
node-version: "13.14"
npm-i: [email protected]

- name: Node.js 14.x
node-version: "14.18"
node-version: "14.20"

- name: Node.js 15.x
node-version: "15.14"

- name: Node.js 16.x
node-version: "16.20"

- name: Node.js 17.x
node-version: "17.9"

- name: Node.js 18.x
node-version: "18.19"

- name: Node.js 19.x
node-version: "19.9"

- name: Node.js 20.x
node-version: "20.11"

- name: Node.js 21.x
node-version: "21.6"

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4

- name: Install Node.js ${{ matrix.node-version }}
shell: bash -eo pipefail -l {0}
Expand All @@ -102,7 +132,11 @@ jobs:
- name: Configure npm
run: |
npm config set loglevel error
npm config set shrinkwrap false
if [[ "$(npm config get package-lock)" == "true" ]]; then
npm config set package-lock false
else
npm config set shrinkwrap false
fi

- name: Install npm module(s) ${{ matrix.npm-i }}
run: npm install --save-dev ${{ matrix.npm-i }}
Expand All @@ -115,8 +149,8 @@ jobs:
shell: bash
run: |
# eslint for linting
# - remove on Node.js < 10
if [[ "$(cut -d. -f1 <<< "${{ matrix.node-version }}")" -lt 10 ]]; then
# - remove on Node.js < 12
if [[ "$(cut -d. -f1 <<< "${{ matrix.node-version }}")" -lt 12 ]]; then
node -pe 'Object.keys(require("./package").devDependencies).join("\n")' | \
grep -E '^eslint(-|$)' | \
sort -r | \
Expand All @@ -133,28 +167,52 @@ jobs:
echo "node@$(node -v)"
echo "npm@$(npm -v)"
npm -s ls ||:
(npm -s ls --depth=0 ||:) | awk -F'[ @]' 'NR>1 && $2 { print $2 "=" $3 }' >> "$GITHUB_OUTPUT"

- name: Run tests
shell: bash
run: npm run test-ci
run: |
npm run test-ci
cp coverage/lcov.info "coverage/${{ matrix.name }}.lcov"

- name: Lint code
if: steps.list_env.outputs.eslint != ''
run: npm run lint

- name: Collect code coverage
uses: coverallsapp/github-action@master
run: |
mv ./coverage "./${{ matrix.name }}"
mkdir ./coverage
mv "./${{ matrix.name }}" "./coverage/${{ matrix.name }}"

- name: Upload code coverage
uses: actions/upload-artifact@v3
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
flag-name: run-${{ matrix.test_number }}
parallel: true
name: coverage
path: ./coverage
retention-days: 1

coverage:
needs: test
runs-on: ubuntu-latest
steps:
- name: Upload code coverage
- uses: actions/checkout@v4

- name: Install lcov
shell: bash
run: sudo apt-get -y install lcov

- name: Collect coverage reports
uses: actions/download-artifact@v3
with:
name: coverage
path: ./coverage

- name: Merge coverage reports
shell: bash
run: find ./coverage -name lcov.info -exec printf '-a %q\n' {} \; | xargs lcov -o ./coverage/lcov.info

- name: Upload coverage report
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.github_token }}
parallel-finished: true
github-token: ${{ secrets.GITHUB_TOKEN }}
20 changes: 4 additions & 16 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,27 +1,15 @@
# OS X
.DS_Store*
Icon?
._*

# Windows
Thumbs.db
ehthumbs.db
Desktop.ini

# Linux
.directory
*~


# npm
node_modules
package-lock.json
*.log
*.gz


# Coveralls
.nyc_output
coverage

# Benchmarking
benchmarks/graphs

# ignore additional files using core.excludesFile
# https://git-scm.com/docs/gitignore
4 changes: 2 additions & 2 deletions Charter.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ also easily visible to outsiders.

## Section 1: Scope

Express is a http web server framework with a simple and expressive API
Express is a HTTP web server framework with a simple and expressive API
which is highly aligned with Node.js core. We aim to be the best in
class for writing performant, spec compliant, and powerful web servers
in Node.js. As one of the oldest and most popular web frameworks in
Expand All @@ -24,7 +24,7 @@ Express is made of many modules spread between three GitHub Orgs:
libraries
- [pillarjs](http://github.com/pillarjs/): Components which make up
Express but can also be used for other web frameworks
- [jshttp](http://github.com/jshttp/): Low level http libraries
- [jshttp](http://github.com/jshttp/): Low level HTTP libraries

### 1.2: Out-of-Scope

Expand Down
75 changes: 69 additions & 6 deletions Contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ contributors can be involved in decision making.

* A **Contributor** is any individual creating or commenting on an issue or pull request.
* A **Committer** is a subset of contributors who have been given write access to the repository.
* A **Project Captain** is the lead maintainer of a repository.
* A **TC (Technical Committee)** is a group of committers representing the required technical
expertise to resolve rare disputes.
* A **Triager** is a subset of contributors who have been given triage access to the repository.
Expand Down Expand Up @@ -102,12 +103,74 @@ If a consensus cannot be reached that has no objections then a majority wins vot
is called. It is also expected that the majority of decisions made by the TC are via
a consensus seeking process and that voting is only used as a last-resort.

Resolution may involve returning the issue to committers with suggestions on how to
move forward towards a consensus. It is not expected that a meeting of the TC
Resolution may involve returning the issue to project captains with suggestions on
how to move forward towards a consensus. It is not expected that a meeting of the TC
will resolve all issues on its agenda during that meeting and may prefer to continue
the discussion happening among the committers.
the discussion happening among the project captains.

Members can be added to the TC at any time. Any committer can nominate another committer
Members can be added to the TC at any time. Any TC member can nominate another committer
to the TC and the TC uses its standard consensus seeking process to evaluate whether or
not to add this new member. Members who do not participate consistently at the level of
a majority of the other members are expected to resign.
not to add this new member. The TC will consist of a minimum of 3 active members and a
maximum of 10. If the TC should drop below 5 members the active TC members should nominate
someone new. If a TC member is stepping down, they are encouraged (but not required) to
nominate someone to take their place.

TC members will be added as admin's on the Github orgs, npm orgs, and other resources as
necessary to be effective in the role.

To remain "active" a TC member should have participation within the last 12 months and miss
no more than six consecutive TC meetings. Our goal is to increase participation, not punish
people for any lack of participation, this guideline should be only be used as such
(replace an inactive member with a new active one, for example). Members who do not meet this
are expected to step down. If A TC member does not step down, an issue can be opened in the
discussions repo to move them to inactive status. TC members who step down or are removed due
to inactivity will be moved into inactive status.

Inactive status members can become active members by self nomination if the TC is not already
larger than the maximum of 10. They will also be given preference if, while at max size, an
active member steps down.

## Project Captains

The Express TC can designate captains for individual projects/repos in the
organizations. These captains are responsible for being the primary
day-to-day maintainers of the repo on a technical and community front.
Repo captains are empowered with repo ownership and package publication rights.
When there are conflicts, especially on topics that effect the Express project
at large, captains are responsible to raise it up to the TC and drive
those conflicts to resolution. Captains are also responsible for making sure
community members follow the community guidelines, maintaining the repo
and the published package, as well as in providing user support.

Like TC members, Repo captains are a subset of committers.

To become a captain for a project the candidate is expected to participate in that
project for at least 6 months as a committer prior to the request. They should have
helped with code contributions as well as triaging issues. They are also required to
have 2FA enabled on both their GitHub and npm accounts. Any TC member or existing
captain on the repo can nominate another committer to the captain role, submit a PR to
this doc, under `Current Project Captains` section (maintaining the sort order) with
the project, their GitHub handle and npm username (if different). The PR will require
at least 2 approvals from TC members and 2 weeks hold time to allow for comment and/or
dissent. When the PR is merged, a TC member will add them to the proper GitHub/npm groups.

### Current Project Captains

- `expressjs/express`: @wesleytodd
- `expressjs/discussions`: @wesleytodd
- `expressjs/expressjs.com`: @crandmck
- `expressjs/body-parser`: @wesleytodd
- `expressjs/multer`: @LinusU
- `expressjs/cookie-parser`: @wesleytodd
- `expressjs/generator`: @wesleytodd
- `expressjs/statusboard`: @wesleytodd
- `pillarjs/path-to-regexp`: @blakeembrey
- `pillarjs/router`: @dougwilson, @wesleytodd
- `pillarjs/finalhandler`: @wesleytodd
- `pillarjs/request`: @wesleytodd
- `jshttp/http-errors`: @wesleytodd
- `jshttp/cookie`: @wesleytodd
- `jshttp/on-finished`: @wesleytodd
- `jshttp/forwarded`: @wesleytodd
- `jshttp/proxy-addr`: @wesleytodd

Loading
Loading