!http://github.com/alexyoung/jschat/raw/8c11578439770962d86d6444d0c159cfb2affbcd/http/public/images/jschat.gif! 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":http://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":http://www.sinatrarb.com and "Prototype":http://prototypejs.org * 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! !http://dl.getdropbox.com/u/221414/blogs/jschat.png! h3. 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":http://localhost:4567. h3. Ruby Library Requirements These gems are required by JsChat: * eventmachine * ncurses (for the client) * json h3. 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":http://jschat.org. h3. 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 }
h3. Server Configuration Options
{
  "port": integer,
  "ip": "string: IP address to bind to",
  "tmp_files": "string: path to tmp files (including PID file)"
}
h3. Client Commands * Change name or identify: /nick name * Join a room: /join #room * Join a room (alias): /j #room h3. 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. h3. 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. h3. Credits JsChat was created by "Alex Young":http://alexyoung.org for "Helicoid":http://helicoid.net. A growing group of friends are helping out: * "nickmartini":http://github.com/nickmartini * "gabrielg":http://github.com/gabrielg * "Simon Starr":http://github.com/sstarr * Kevin Ford If you'd like to contribute, send "alexyoung":http://github.com/alexyoung a message on GitHub.