Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

126 lines (88 sloc) 4.661 kB

Contribution Policy


Individuals making significant and valuable contributions are given commit-access to a project to contribute as they see fit. A project is more like an open wiki than a standard guarded open source project.


There are a few basic ground-rules for contributors:

  1. No --force pushes or modifying the Git history in any way.
  2. Non-master branches ought to be used for ongoing work.
  3. External API changes and significant modifications ought to be subject to an internal pull-request to solicit feedback from other contributors.
  4. Internal pull-requests to solicit feedback are encouraged for any other non-trivial contribution but left to the discretion of the contributor.
  5. Contributors should attempt to adhere to the prevailing code-style.


Declaring formal releases remains the prerogative of the project maintainer(s).

Changes to this arrangement

This is an experiment and feedback is welcome! This document may also be subject to pull-requests or changes by contributors where you believe you have something valuable to add or change.

This contribution policy is based on The level organization Open Open Source Policy.

Contributing to simple-statistics

Simple statistics is a statistics library that can be both used and read. It should help programmers learn statistics and statisticians learn programming. In order to achieve this goal, it must be simple and explanatory.


simple-statistics is written in a subset of JavaScript. Unused features include:



 * harmonic mean
 * a mean function typically used to find the average of rates
 * this is the reciprocal of the arithmetic mean of the reciprocals
 * of the input numbers
 * This runs on `O(n)`, linear time in respect to the array

simple-statistics tries to stay away from speaking only in the language of math: for instance, while JavaScript supports UTF8 characters like π, they are not used in the source:

  • UTF8 in JavaScript on pages without specific meta-tag or Content-Type encodings will fail
  • UTF8 can be hard to type, since users need to memorize key combinations or code points
  • Mathematical symbols have meanings that are often better communicated by words: in the form of code, we do not run out of space on the paper, and can afford to call a variable reciprocalSum instead of r.

Every function has a comment that ideally includes:

  • The English, long-form name of the method
  • What the method does
  • What purpose the method typically serves
  • A link to a longer description on Wikipedia, Mathematica, or another web-accessible, non-paywalled source
  • The efficiency of the function in terms of Big-O notation, if appropriate


simple-statistics has a testsuite located in test/. Each test file covers a specific topic and tries to test against known values:

  • Values produced by trusted statistics software like R or scipy
  • Common-sense results

Tests can be run in node.js and are run on every commit to GitHub by Travis-CI.

To run tests:

npm install
npm test


Simple statistics maintains API documentation with JSDoc syntax and the documentation.js generator. Consult the JSDoc and gettings started docs for hints for how to document each function, or read other documentation comments in src for inspiration.

Code Style

We use the Airbnb style for Javascript with only one difference:

4 space soft tabs always for Javascript, not 2.

No aligned =, no aligned arguments, spaces are either indents or the 1 space between expressions. No hard tabs.

  • All comparisons should be as strict and obvious as possible: prefer (foo === 0) to (!foo).
  • Straightforward code is more important than most optimizations.
Jump to Line
Something went wrong with that request. Please try again.