Skip to content

Commit

Permalink
doc: Add contribution philosophy doc
Browse files Browse the repository at this point in the history
  • Loading branch information
digitalinfinity authored and mhdawson committed May 13, 2019
1 parent 36863f0 commit a3b4d99
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 0 deletions.
66 changes: 66 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# **node-addon-api** Contribution Philosophy

The **node-addon-api** team loves contributions. There are many ways in which you can
contribute to **node-addon-api**:
- Source code fixes
- Additional tests
- Documentation improvements
- Joining the N-API working group and participating in meetings

## Source changes

**node-addon-api** is meant to be a thin convenience wrapper around N-API. With this
in mind, contributions of any new APIs that wrap around a core N-API API will
be considered for merge. However, changes that wrap existing **node-addon-api**
APIs are encouraged to instead be provided as an ecosystem module. The
**node-addon-api** team is happy to link to a curated set of modules that build on
top of **node-addon-api** if they have broad usefulness to the community and promote
a recommended idiom or pattern.

### Rationale

The N-API team considered a couple different approaches with regards to changes
extending **node-addon-api**
- Larger core module - Incorporate these helpers and patterns into **node-addon-api**
- Extras package - Create a new package (strawman name '**node-addon-api**-extras')
that contain utility classes and methods that help promote good patterns and
idioms while writing native addons with **node-addon-api**.
- Ecosystem - Encourage creation of a module ecosystem around **node-addon-api**
where folks can build on top of it.

#### Larger Core
This is probably our simplest option in terms of immediate action needed. It
would involve landing any open PRs against **node-addon-api**, and continuing to
encourage folks to make PRs for utility helpers against the same repository.

The downside of the approach is the following:
- Less coherency for our API set
- More maintenance burden on the N-API WG core team.

#### Extras Package
This involves us spinning up a new package which contains the utility classes
and methods. This has the benefit of having a separate module where helpers
which make it easier to implement certain patterns and idioms for native addons
easier.

The downside of this approach is the following:
- Potential for confusion - we'll need to provide clear documentation to help the
community understand where a particular contribution should be directed to (what
belongs in **node-addon-api** vs **node-addon-api-extras**)
- Need to define the level of support/API guarantees
- Unclear if the maintenance burden on the N-API WG is reduced or not

#### Ecosystem
This doesn't require a ton of up-front work from the N-API WG. Instead of
accepting utility PRs into **node-addon-api** or creating and maintaining a new
module, the WG will encourage the creation of an ecosystem of modules that
build on top of **node-addon-api**, and provide some level of advertising for these
modules (listing them out on the repository/wiki, using them in workshops/tutorials
etc).

The downside of this approach is the following:
- Potential for lack of visibility - evangelism and education is hard, and module
authors might not find right patterns and instead implement things themselves
- There might be greater friction for the N-API WG in evolving APIs since the
ecosystem would have taken dependencies on the API shape of **node-addon-api**

5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,11 @@ Take a look and get inspired by our **[test suite](https://github.com/nodejs/nod

<a name="resources"></a>

## **Contributing**

We love contributions from the community to **node-addon-api**.
See [CONTRIBUTING.md](CONTRIBUTING.md) for more details on our philosophy around extending this module.

### **More resource and info about native Addons**
- **[C++ Addons](https://nodejs.org/dist/latest/docs/api/addons.html)**
- **[N-API](https://nodejs.org/dist/latest/docs/api/n-api.html)**
Expand Down

0 comments on commit a3b4d99

Please sign in to comment.