Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Node.js port of Multi-user SocialCalc
JavaScript LiveScript CSS HTML Makefile Nginx

* Implement #240 for sandstorm

(cherry picked from commit 8b85790)
latest commit aa932737c3
@audreyt authored
Failed to load latest commit information.
.dotcloud * Add .dotclout/config.
apache Also alias images and l10n folders
app-graphics Graphics for new shell ui, app market
bin * Add ethercalc binary wrapper.
images One more missing image
l10n * Include FramaCalc's French Localization.
misc * Do not start ethercalc until redis is successfully brought back on.
multi * Refine #212: Only cascade when removing from multi-foldr code.
nginx nginx.conf: make sure to add a slash at the end
src * Fix #223; in non-redis mode, allow multi-sheet delete.
static * 0.20150603.0
third-party * Initial commit for Stackato Sample App Contest.
.gitignore ignore vi swap files * Multi-sheet Excel XML import support:
Changes.txt * Initial commit for Stackato Sample App Contest.
Dockerfile * 0.20150420.0; switch node base image to allow gyp install
LEGAL.txt * Incorporated charting framework from OLPC Sugar into
LICENSE.txt * Initial commit for Stackato Sample App Contest.
Makefile * Upgrade to livescript 1.4.0
README.mkdn * Add to README
SocialCalcModule.js * 0.20150603.0
_start * Detect PK*
app.js * Upgrade to livescript 1.4.0
db.js * Fix #223; in non-redis mode, allow multi-sheet delete.
dotcloud.js * Upgrade to livescript 1.4.0
dotcloud.yml use node 0.8.x for dotcloud
exports.js * Implement setTimeout in terms of .nextTick.
formatnumber2.js * Sync up with infojunkie/socialcalc
formula1.js * Implement SUMIFS().
index.html * Implement #240 for sandstorm
main.js * Refine #212: Only cascade when removing from multi-foldr code.
manifest.appcache * 0.20150603.0
package.json * 0.20150603.1
player-broadcast.js * Upgrade to livescript 1.4.0
player-graph.js reset image prefix to sc_
player.js * Upgrade to livescript 1.4.0
privacy.png * Add ToS & Privacy Policy of
requirements.txt * Initial commit for Stackato Sample App Contest.
sc.js * Disable webworker-threads for Node.js>0.10 (and io.js)
server.js * First try at deploying to Joyent.
socialcalc-3.js Add col/row rezise bar to the header and fix resize col/row issue in …
socialcalcconstants.js Add col/row rezise bar to the header and fix resize col/row issue in …
socialcalcpopup.js * Sync up with infojunkie/socialcalc
socialcalcspreadsheetcontrol.js Allow shift+enter to search backwards
socialcalctableeditor.js Add col/row rezise bar to the header and fix resize col/row issue in …
socialcalcviewer.js * Sync up with infojunkie/socialcalc
stackato.yml * s/MeetingCalc/EtherCalc/g
start.html * Prettify the "Rename" label
supervisord.conf no longer exists
webpack.config.js * Build multi.js for production




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:

# Run a redis Docker using the official redis Docker image with persistant database in <host-directory>
sudo docker run --name redis -d -v <host-directory>:/data redis:latest redis-server --appendonly yes

# Run ethercalc on default port 8000
sudo docker run -d -p 8000:8000 --link redis:redis audreyt/ethercalc

# Run ethercalc on custom port 80
sudo docker run -d -p 80:8000 --link redis:redis audreyt/ethercalc


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

Runtime Flags

Listening Interface: --host / --port

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

By default EtherCalc listens at (all IPv4 interfaces).

Using SSL: --keyfile / --certfile

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

Prefers polling over Websocket: --polling

Useful when running behind a proxy without WebSocket support.

Enable Cross-Origin Resource Sharing: --cors

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

URL Prefix: --basepath /path/prefix

Useful when running under an URL rewriter.

Access Control: --key secret

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

Disable server-side WebWorkers: --vm

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.

Expires inactive spreadsheets: --expire 86400

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.


Common Public Attribution License (Socialtext Inc.)

  • socialcalcspreadsheetcontrol.js
  • socialcalctableeditor.js

Artistic License 2.0 (Socialtext Inc.)

  • formatnumber2.js
  • formula1.js
  • socialcalc-3.js
  • socialcalcconstants.js
  • socialcalcpopup.js

Artistic License 2.0 (Framasoft)

  • l10n/fr.json

MIT License (John Resig, The Dojo Foundation)

  • static/jquery.js

MIT License (HubSpot, Inc.)

  • static/vex-theme-flat-attack.css
  • static/vex.combined.min.js
  • static/vex.css

MIT License (Stuart Knightley, David Duponchel, Franz Buchinger, Ant'onio Afonso)

  • static/jszip.js

Apache License 2.0 (SheetJS)

  • static/shim.js
  • static/xlsx.js
  • static/xlsxworker.js
  • start.html (xlsx2socialcalc.js)

CC0 Public Domain (唐鳳)

  • src/*.ls

Mozilla Public License Version 2.0

  • images/sc_*.png
Something went wrong with that request. Please try again.