EtherCalc
- Introduction:
- Language: LiveScript
- Runtime: Node.js (0.8+ preferred)
- Services: Redis (2.4+; fall-back to on-disk JSON storage if not present)
- Multi-server is supported only when running with Redis
- Note to Redis 2.2 users (e.g. on Ubuntu 12.04): Please disable the
timeout 300
setting in/etc/redis.conf
, or upgrade to Redis 2.4+ if possible at all. For more details, see #49.
- Browsers tested: Safari, Chrome, Firefox, IE.
- Integrated with content management systems:
- Overview:
- English: http://ethercalc.net/
- 中文版: http://ethercalc.tw/
Installation
For global installation (may need root)
npm i -g ethercalc
ethercalc
For local non-root installation
npm i
make
Or install with our Docker image, which comes with a built-in Redis server and webworker-threads support:
# Runs at port 6967
sudo docker run -d -p 6967:6967 -v /var/lib/redis:/redis:rw audreyt/ethercalc
# Runs at another port, for example 8080
sudo docker run -d -p 8080:6967 -v /var/lib/redis:/redis:rw audreyt/ethercalc
Note the use of -v
flag to store the Redis database in /var/lib/redis
on
the host server. In Docker versions 0.4.x, the flag was called -b
instead.
REST API
Note that POST endpoints accept only application/json
requests,
and will reject regular form posts.
GET /_/page
Fetch the page as a serialization in SocialCalc save format.
PUT /_/page
Replaces the page with a serialization in SocialCalc save format.
Also takes a CSV structure that contains the new spreadsheet's content.
POST /_
Takes a JSON structure with room
and snapshot
fields.
Replaces the page with a serialization in Socialtext save format.
If room
is not specified, returns a new page.
Also takes a CSV structure that contains the new spreadsheet's content.
POST /_/page
Takes a JSON structure with a command
field (either as a string
or an array of strings), or a plain-text command string.
Runs one or more commands specified in the command
field.
Also takes a CSV structure that contains fields to be appended to
the first column after the last row. If the row
query parameter
is given, insert and paste on the specified row instead.
GET /_/page/cells
Returns a JSON representation of all defined cells in the page.
GET /_/page/cells/A1
Returns a JSON representation of a single cell in the page.
GET /_/page/html
Returns a HTML rendering of the page. (GET /page.html also works.)
GET /_/page/csv
Returns a CSV rendering of the page. (GET /page.csv also works.)
Flags
--keyfile
/ --certfile
Using SSL: 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
--polling
Prefers polling over Websocket: Useful when running behind a proxy without WebSocket support.
--cors
Enable Cross-Origin Resource Sharing: Useful when setting up EtherCalc as a public REST API server.
--basepath /path/prefix
URL Prefix: Useful when running under an URL rewriter.
--key secret
Access Control: Offers read-write vs. read-only modes. See issues #1 and #4 for details on setting this up.
--vm
Disable server-side WebWorkers: 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.
--expire 86400
Expires inactive spreadsheets: 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.
Licensing
Common Public Attribution License (Socialtext Inc.)
- socialcalcspreadsheetcontrol.js
- socialcalctableeditor.js
- images/*
Artistic License 2.0 (Socialtext Inc.)
- formatnumber2.js
- formula1.js
- socialcalc-3.js
- socialcalcconstants.js
- socialcalcpopup.js
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