JsChat is a chat system. It has an easy to learn JSON protocol, an ncurses client, a web app, and a server. You can try it right now on jschat.org.
JsChat is similar to IRC, but it’s a fundamentally simpler system.
The web app has lots of interesting features:
- IRC-like commands: /names, /name new_name (/nick works too), /clear, /lastlog
- It’s pretty tiny; it’s built with Sinatra and Prototype
- Auto-linking: pasting an image displays it inline, youtube and vimeo videos will appear as well
- Last messages are displayed on join: the last 100 messages are displayed, so you don’t feel lost when you join a room
- Tab completion!
Installation
You can install with rubygems:
gem install jschat
Then run jschat-server
and jschat-client
to try out the console client locally.
To try out the web client, run jschat-web
and visit http://localhost:4567.
Ruby Library Requirements
These gems are required by JsChat:
- eventmachine
- ncurses (for the client)
- json
Usage
- Run the server with ./server.rb
- Connect a client with ./client.rb
The web app must be run alongside the server. The web app must be started in production mode:
http/jschat.rb -e production
The web app currently has no database dependencies, it’s a wrapper that links cookies to JsChat server proxies. You can run it on port 80 by configuring Rack or an Apache proxy. I have Apache set up this way on jschat.org.
Configuration Files
These are the default locations of the configuration files. You can override them with --config=PATH
:
- Client:
~/.jschat/config.json
- Server:
/etc/jschat/config.json
The web app will use the same configuration file as the server so it can find out where the server is.
The file format is JSON, like this:
{ "port": 3001 }
Server Configuration Options
{
"port": integer,
"ip": "string: IP address to bind to",
"tmp_files": "string: path to tmp files (including PID file)"
}
Client Commands
- Change name or identify:
/nick name
- Join a room:
/join #room
- Join a room (alias):
/j #room
Protocol Design
The protocol is designed to be as close to executable JSON as possible, so clients and servers are simple to implement.
Look at client.rb JsChat::Protocol
to see what I mean.
Hey, this is like Campfire!
I love Campfire and I didn’t intend for JsChat to compete with it. JsChat is just a fun project, it doesn’t offer Campfire’s business-friendly interface, file hosting, transcripts and Basecamp integration.
Credits
JsChat was created by Alex Young for Helicoid. A growing group of friends are helping out:
- nickmartini
- gabrielg
- Simon Starr
- Kevin Ford
- sekrett
If you’d like to contribute, send alexyoung a message on GitHub.