** ABOUT Apache Vysper and XMPP **

This project aims at delivering a server implementation of both the core and IM parts of the XMPP protocol 
(as specified in RFCs 3920 [1] + 3921 [2]).

"Vysper" is pronounced like in "whisper".

XMPP[3] is an open, secure and extensible instant messaging protocol which has evolved from Jabber.
It provides interoperability features for communication with other XMPP and non-XMPP servers.
It is used and supported by many IM applications, both client and server.

The protocol and its many extensions (called XEPs) are maintained by the XMPP Standards Foundation (XSF) [4].

In addition to the basic protocol and many small extensions, Vysper currently comes with working implementations for 
  Multi-User Chat (XEP-0045) [5]
and
  Publish-Subscribe (XEP-0060) [6] 

[1] http://www.ietf.org/rfc/rfc3920.txt
[2] http://www.ietf.org/rfc/rfc3921.txt
[3] http://en.wikipedia.org/wiki/XMPP
[4] http://www.xmpp.org/
[5] http://xmpp.org/extensions/xep-0045.html
[6] http://xmpp.org/extensions/xep-0060.html

** SOURCE CODE **

The most recent source code can be retrieved using SVN

  svn checkout http://svn.apache.org/repos/asf/mina/vysper/trunk

** BUILDING ** 

You need Apache Maven 2, Maven 2.2.1 or later is recommended. Run
  mvn install
and you should find a number of JAR files in different target/ folders.
The different build artifacts are compiled in dist/.

** RUNNING **

There are different ways to run Vysper

A ready-to-run setup is created by the build in 
  dist/target/appassembler/
Under  
  dist/target/appassembler/bin
you'll find start scripts for Unix/Mac and Windows.

This makes use of the Spring-based server runtime.
Main class is 
  org.apache.vysper.spring.ServerMain
and the bean configuration is located in 
  server/core/src/main/config/spring-config.xml

There is a non-Spring runtime, too:
  org.apache.vysper.spring.ServerMain
The source code shows how the different components are plugged together.

It can serve as a template for integrating Vysper in any other application.
The class
  org.apache.vysper.xmpp.server.XMPPServer
is built to make the server easily configurable and embeddable.
  
** CONFIGURATION **

Vysper uses SSL encryption per default.
For this purpose, an TLS certificate is provided.
It is highly recommended to create and use a self-generated certificate!

There is one preconfigured user (admin@vysper.org). The password for this
user is "CHOOSE A SECURE PASSWORD". Please change this password before starting!

Please note that the domain vysper.org is not running an XMPP server.
If you go with the default setup and don't configure your own domain name,
please note that you have to configure your Jabber clients to force the host name
(for example the IP or localhost, depending on how you run it).

** CONTRIBUTING **

You can contribute by creating a new JIRA issue entry (or working on an existing).
JIRA can be found at https://issues.apache.org/jira
You need an account there. 
The project name is "VYSPER".

For an overview of all VYSPER related issues, visit 
http://issues.apache.org/jira/browse/VYSPER

Any contribution is highly welcome. It can easily reviewed if it comes in form of a patch attached to a JIRA entry.  

Currently, all coding is done unit test driven. Well, at least it should be ;-)

Please find us on MINA'S developer mailing list dev@mina.apache.org. 

