[[about]]
= About Tigase XMPP Server
:Author: Artur Hefczyc <artur.hefczyc@tigase.net>
:version: v2.0 August 2017. Reformatted for v8.0.0.

*Tigase XMPP Server* is an *Open Source and Free (AGPLv3)* Java based server. The goals behind its design and implementation of the server are:

. Make the server robust and reliable.
. Make the server a secure communication platform.
. Make a flexible server which can be applied to different use cases.
. Make an extensible server which takes full advantage of XMPP protocol extensibility.
. Make the server easy to setup and maintain.

== Robust and reliable

This means that the server can handle many concurrent requests/connections and can run for a long time reliably. The server is designed and implemented to handle millions of simultaneous connections.

It is not enough however to design and implement a high load server and hope it will run well. The main focus of the project is put in into testing. Tests are taken so seriously that a dedicated testing framework has been implemented. All server functions are considered as implemented only when they pass a rigorous testing cycle. The testing cycle consists of 3 fundamental tests:

. *Functional tests* - Checking whether the function works at all.
. *Performance tests* - Checking whether the function performs well enough.
. *Stability tests* - Checking whether the function behaves well in long term run. It must handle hundreds of requests a second in a several hour server run.

== Security

There are a few elements of the security related to XMPP servers: secure data transmissions which is met by the implementation of *SSL* or *TLS* protocol, secure user authorization which is met by the implementation of *DIGEST* or *SASL* user authorization and secure deployment which is met by component architecture.

*Secure deployment* Tigase software installation does not impact network security. Companies usually have their networks divided into 2 parts: *DMZ* which is partially open to the outside world and the *Private network* which is closed to the outside world.

If the XMPP server is to provide an effective way of communication between company employees regardless if they are in a secure company office or outside (perhaps at a customer site), it needs to accept both internal and external connections. So the natural location for the server deployment is the *DMZ*. However, this solution has some considerations: each company has normally established network users base and integrated authorization mechanisms. However, that information should be stored outside the DMZ to protect internal security, so how to maintain ease of installation and system security?

*Tigase server* offers a solution for such a case. With it's component structure, Tigase can be easily deployed on any number machines and from the user's point of view it is seen as a one logical XMPP server. In this case we can install a Session Manager module in the *private* network, and a Client Connection Manager with Server Connection Manager in the *DMZ*.

Session Manager connects to *DMZ* and receives all packets from external users. Thus is can securely realize users authorization based on company authorization mechanisms.

== Flexibility

There are many different XMPP server implementations. The most prevalent are:

- Used as a business communication platform in small and medium companies where the server is not under a heavy load. For such deployments security is a key feature.
- For huge community websites or internet portal servers is, on the other hand, usually under very heavy load and has to support thousands or millions of simultaneous connections. For such a deployment we need a different level of security as most of the service is open to the public.
- For very small community deployments or for small home networks the key factor is ease to deploy and maintain.

Architecture based on components provides the ability to run selected modules on separate machines so the server can be easily applied in any scenario.

For simple installation the server generates a config file which can be used straight away with very few modifications or none at all. For complex deployments though, you can tweak configurations to your needs and setup XMPP server on as many physical machines as you need.

== Extensibility

The world changes all the time as does user's needs. The XMPP protocol has been designed to be extensible to make it easy to add new features and apply it to those different user's needs. As a result, XMPP is a very effective platform not only for sending messages to other users, it can also be extended for sending instant notifications about events, a useful platform for on-line customer service, voice communication, and other cases where sending information instantly to other people is needed.

*Tigase server* has been designed to be extensible using a modular architecture. You can easily replace components which do not fulfill your requirements with others better fitting your needs. But that is not all, another factor of extensibility is how easy is to replace or add new extensions. A great deal of focus has been put into the server design API to make it easy for other software developers to create extensions and implement new features.

== Ease of Use

Complex computer networks consisting of many servers with different services are hard to maintain. This requires employing professional staff to operate and maintain the network.

Not all networks are so complex however, most small companies have just a few servers for their needs with services like e-mail and a HTTP server. They might want to add an XMPP server to the collection of their services and don't want to dedicate resources on setup and maintenance. For such users our default configuration is exactly what they need. If the operating system on the server is well configured, then Tigase should automatically pickup the correct hostname and be ready to operate immediately.

Tigase server is designed and implemented to allow dynamic reconfiguration during runtime so there is no need to restart the server each time you want to change configuration settings.

There are also interfaces and handlers available to make it easy to implement a web user interface for server monitoring and configuring.
