- Ephemeral group and individual messaging--message ownership is shared among all message recipients
- Push notifications
- Login with just your phone number (confirmed with a text code)
- No usernames, all identities via phone numbers
- Choose and change your own nickname at any time
- Real-time updates via socket.io and RethinkDB changefeed
- Drag-and-drop file uploads with automatic image rotation fix
- Inline display of pictures, sounds and videos. Other files are downloadable.
- Built-in internet radio player (needs working stations)
First install:
- RethinkDB
- Node.js 4.0 or later
- git clone the repo and cd into the project
- Start an instance of Rethinkdb:
rethinkdb
This will start an instance of RethinkDB with datafiles in the working directory. Once running, go to http://localhost:8080 to access the RethinkDB admin tool. Leave Rethinkdb running in a terminal tab. - Install node modules:
npm i
This installs the node_modules for the project. - Build front end:
npm run watch
This continually builds the front end upon file change. Leave it running in a terminal tab too.npm run build
does a single build. These are defined in package.json. - Start the server.
node runner.js
This restarts the server each time you change a file. If you need to debug,node-debug server.js
ornode server.js
will run without restarting the server on file change.
This is the configuration file.
{
"blobs": "/opt/abyss/blobs",
"cluster": false,
"spdy": true,
"http2": false,
"https": true,
"httpredirect": false,
"wwwredirect": false,
"gcmapikey": "insertkeyhere",
"sendverificationcodes": false,
"rethinkdboptions": {
"servers": [
{ "host": "localhost", "port": 28015 }
],
"db": "test",
"discovery": true
},
"cookieKeys": [
"random stuff",
"more random stuff"
],
"jwtSecret": "another random string",
"slowstreams": false,
"verificationfrom": "[email protected]"
}
Run schema.js. It's safe to re-run this as it won't drop anything.
- From the command line,
node server.js
to run. - Run
node debug server.js
to debug. - Run
node-debug -p 8081 server.js
to use a web based debugger. First you'll need to have runnpm i -g node-inspector
to have 'node-debug' available.
Mozilla MDN The JavaScript reference.
NodeJS API NodeJS APIs.
Bluebird Promise API. Most Node modules use callback-based APIs for performance. Bluebird lets you easily convert them to Promise based APIs, which are much easier to use, and have better error handling and stacktraces, though they incur a small perf hit.
Lodash API Utility belt library. Useful for working with arrays and objects.
Koa minimalist web application framework
Mithril minimalist MVC frontend framework
MomentJS Date and time handling library
Tape Tape: minimalist, TAP producing test library.