rust-xmppd

A toy xmpp/jabber server written in rust

Stars
3

##Rust-xmppd

Tenative to implement a basic XMPP/Jabber server in Rust

Build instruction

for this you need cargo and the last nightly release of Rust once you got that simply hit

cargo build

and you're ready to go

Why yet an other XMPP server ?

First be reassured, I know ejabberd, openfire, prosody works pretty well I have been working for a company project on both openfire and prosody for now a year.

Here the motivation are the following:

  • Fun (I want to learn Rust it's enough by itself?)
  • Openfire is nice but does not support several domain (and probably never
    will
  • Openfire is over architectured and though seems well organized, the code
    seems pretty hermetic for people to dive into it
  • Openfire is in Java and I dont really appreciate the language itself
  • Prosody on the other hand is pretty well architectured but single threaded
  • Prosody does not seems to have any "custering" features planned yet
  • Prosody though Lua is pretty "fresh" and nice to work with, compile-time
    error and strong typing system are also great for "not so great"
    programmers

Aware of the advatanges and weak points, both in term of architecture and features the long term goal is to achieve

  • A server that support multi domains
  • multi threaded because we didnt bought all these CPUs for nothing
  • a plugin system with as much things as possible as external plugin
  • a tiny core
  • fancy stuff to make it scale (because your boss is not going to let
    you use this if you cant deploy in da cloud (tm) and scale it on
    one million node)
  • a rock solid code base in a rock solid language

##What is working yet

You should be able to configurate username and passwords in data/login.json login and exchanging messages should work for @localhost account using pidgin

presences are also somewhat exchanged

##How the data flow

TODO

##What is planned

In order of importance for me (which should more or less follow the order of implementation)

  • use an actual xml parser (rustyxml) to parse the XMPP stream ,currently
    we're doing old school string splitting which was good only for
    "check it works"
  • encapsulate the TCP stream into a XMPPServerStream object, the way
    rust-xmpp project do (TODO: add link to this project), but they do it
    for client side which is not adapted for server side

TODO