node package manager


Multi-User Spreadsheet Server


For global installation (may need root)

npm i -g ethercalc

For local non-root installation

npm i

Or install with our Docker image, which comes with support for webworker-threads:

# Install docker and docker-compose
sudo ./misc/

# Run ethercalc on port 80 ( http://localhost/ )
docker-compose up -d

Send email

Optional - Send email formulas requires OAuth2 & cron  e.g. =email(to, subject, body), =emailAt(time, to, subject, body)

OAuth2 - Set environment vars
1) Tutorial: follow the tutorial to get the 4 environment vars
2) Set 4 environment vars - see [src/] vars: user, clientId, clientSecret, refreshToken
Tested using gmail, have not tested with other providors

Cron - Required for emailAt formulas.
See *curl* in [.openshift/cron/minutely/timetrigger] for openshift version (openshift](
The curl checks the database for unsent emails and updates the database after sending.

Please see for the API Blueprint, or the online version at Apiary.

Specify a specific host and/or a different port for the service.

By default EtherCalc listens at (all IPv4 interfaces).

openssl genrsa -out ethercalc-key.pem 1024
openssl req -new -key ethercalc-key.pem -out certrequest.csr
openssl x509 -req -in certrequest.csr -signkey ethercalc-key.pem -out ethercalc-cert.pem
ethercalc --keyfile ethercalc-key.pem --certfile ethercalc-cert.pem

Useful when running behind a proxy without WebSocket support.

Useful when setting up EtherCalc as a public REST API server.

Useful when running under an URL rewriter. If running with a nginx reverse proxy, please add this section:

    location /zappa/socket/__local/ {
        rewrite (.*) /path/prefix$1;

Offers read-write vs. read-only modes. See issues #1 and #4 for details on setting this up.

Runs a single-thread background loop with vm.createContext instead of webworker-threads.

Useful for running custom functions in server side that requires full VM access.

Deletes a spreadsheet's content after N seconds of inactivity. Activities include accessing with REST API as well as Web UI, including moving the active cell cursor on an opened page.


  • socialcalcspreadsheetcontrol.js
  • socialcalctableeditor.js
  • formatnumber2.js
  • formula1.js
  • socialcalc-3.js
  • socialcalcconstants.js
  • socialcalcpopup.js
  • l10n/fr.json
  • static/jquery.js
  • static/vex-theme-flat-attack.css
  • static/vex.combined.min.js
  • static/vex.css
  • static/jszip.js
  • static/shim.js
  • static/xlsx.js
  • static/xlsxworker.js
  • start.html (xlsx2socialcalc.js)
  • src/*.ls
  • images/sc_*.png