About Tigase XMPP Server
Prev | Chapter 2. Tigase XMPP Server Distribution Administration Guide | Next

## About Tigase XMPP Server

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

1. Make the server robust and reliable.
2. Make the server a secure communication platform.
3. Make a flexible server which can be applied to different use cases.
4. Make an extensible server which takes full advantage of XMPP protocol extensibility.
5. 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:

1. Functional tests - Checking whether the function works at all.
2. Performance tests - Checking whether the function performs well enough.
3. 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.

### XMPP Supported Extensions

Based on XEP-0387: XMPP Compliance Suites 2018

#### Core Compliance Suite

Table 2.1. Core Compliance Suite

Support | Specification | Name | Comment
✓ | RFC6120 | Extensible Messaging and Presence Protocol (XMPP): Core |
⍻ | RFC7622 | Extensible Messaging and Presence Protocol (XMPP): Address Format | We support previous version of the specification: RFC6122
✓ | RFC7590 | Use of Transport Layer Security (TLS) in the Extensible Messaging and Presence Protocol (XMPP) |
✓ | XEP-0368 | SRV records for XMPP over TLS | Requires adding DNS entries pointing to port 5223
✓ | XEP-0030 | Service Discovery |
✓ | XEP-0115 | Entity Capabilities |
✓ | XEP-0114 | Jabber Component Protocol |
✓ | XEP-0163 | Personal Eventing Protocol |

#### Web Compliance Suite

Table 2.2. Web Compliance Suite

Support | Specification | Name | Comment
✓ | RFC7395 | An Extensible Messaging and Presence Protocol (XMPP) Subprotocol for WebSocket |
✓ | XEP-0206 | XMPP Over BOSH |
✓ | XEP-0124 | Bidirectional-streams Over Synchronous HTTP (BOSH) |

#### IM Compliance Suite

Table 2.3. Web Compliance Suite

Support | Specification | Name | Comment
✓ | RFC6120 | Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence |
✓ | XEP-0084 | User Avatar |
✓ | XEP-0153 | vCard-Based Avatars |
✓ | XEP-0054 | vcard-temp |
✓ | XEP-0280 | Message Carbons |
✓ | XEP-0191 | Blocking Command |
✓ | XEP-0045 | Multi-User Chat |
✓ | XEP-0249 | Direct MUC Invitations |
✓ | XEP-0048 | Bookmarks |
✓ | XEP-0223 | Persistent Storage of Private Data via PubSub |
✓ | XEP-0049 | Private XML Storage |
✓ | XEP-0198 | Stream Management | Both `Session Resumption` and `Stanza Acknowledgements`
✓ | XEP-0313 | Message Archive Management |

#### Mobile Compliance Suite

Table 2.4. Web Compliance Suite

Support | Specification | Name | Comment
✓ | RFC7395 | An Extensible Messaging and Presence Protocol (XMPP) Subprotocol for WebSocket |
✓ | XEP-0198 | Stream Management | Both `Session Resumption` and `Stanza Acknowledgements`
✓ | XEP-0352 | Client State Indication |
✓ | XEP-0357 | Push Notifications |

#### Non-Compliance Suite Extensions

Table 2.5. Core Compliance Suite

Support | Specification | Name | Comment
✓ | XEP-0004 | Data Forms |
✓ | XEP-0008 | IQ-Based Avatars |
✓ | XEP-0012 | Last Activity |
✓ | XEP-0013 | Flexible Offline Message Retrieval |
✓ | XEP-0016 | Privacy Lists |
✓ | XEP-0020 | Feature Negotiation |
✓ | XEP-0022 | Message Events |
✓ | XEP-0047 | In-Band Bytestreams |
✓ | XEP-0050 | Ad-Hoc Commands |
✓ | XEP-0059 | Result Set Management |
✓ | XEP-0060 | Publish-Subscribe |
✓ | XEP-0065 | SOCKS5 Bytestreams |
✓ | XEP-0066 | Out of Band Data |
✓ | XEP-0068 | Field Standardization for Data Forms |
✓ | XEP-0071 | XHTML-IM |
✓ | XEP-0072 | SOAP Over XMPP |
✓ | XEP-0077 | In-Band Registration |
✓ | XEP-0078 | Non-SASL Authentication |
✓ | XEP-0079 | Advanced Message Processing |
✓ | XEP-0080 | User Location |
✓ | XEP-0082 | XMPP Date and Time Profiles |
✓ | XEP-0083 | Nested Roster Groups |
✓ | XEP-0085 | Chat State Notifications |
✓ | XEP-0086 | Error Condition Mappings |
✓ | XEP-0091 | Legacy Delayed Delivery |
✓ | XEP-0092 | Software Version |
✓ | XEP-0096 | File Transfer |
✓ | XEP-0100 | Gateway Interaction |
✓ | XEP-0106 | JID Escaping |
✓ | XEP-0107 | User Mood | Server support via `Personal Eventing Protocol (XEP-0163)`
✓ | XEP-0108 | User Activity | Server support via `Personal Eventing Protocol (XEP-0163)`
✓ | XEP-0118 | User Tune | Server support via `Personal Eventing Protocol (XEP-0163)`
✓ | XEP-0127 | Common Alerting Protocol (CAP) Over XMPP |
✓ | XEP-0128 | Service Discovery Extensions |
✓ | XEP-0131 | Stanza Headers and Internet Metadata (SHIM) |
✓ | XEP-0133 | Service Administration |
✓ | XEP-0136 | Message Archiving |
✓ | XEP-0141 | Data Forms Layout |
✓[a] | XEP-0142 | Workgroup Queues |
✓ | XEP-0144 | Roster Item Exchange |
✓ | XEP-0145 | Annotations |
✓ | XEP-0146 | Remote Controlling Clients |
✓ | XEP-0152 | Reachability Addresses |
✓ | XEP-0155 | Stanza Session Negotiation |
✓ | XEP-0156 | Discovering Alternative XMPP Connection Methods | Uses DNS records, so will work with Tigase XMPP Server
✓ | XEP-0157 | Contact Addresses for XMPP Services |
✓ | XEP-0160 | Best Practices for Handling Offline Messages |
✓ | XEP-0166 | Jingle |
✓ | XEP-0167 | Jingle RTP Sessions |
✓ | XEP-0170 | Recommended Order of Stream Feature Negotiation |
✓ | XEP-0171 | Language Translation |
✓ | XEP-0172 | User Nickname |
✓ | XEP-0174 | Serverless Messaging |
✓ | XEP-0175 | Best Practices for Use of SASL ANONYMOUS |
✓ | XEP-0176 | Jingle ICE-UDP Transport Method |
✓ | XEP-0177 | Jingle Raw UDP Transport Method |
✓ | XEP-0178 | Best Practices for Use of SASL EXTERNAL with Certificates |
✓ | XEP-0179 | Jingle IAX Transport Method |
✓ | XEP-0180 | Jingle Video via RTP |
✓ | XEP-0181 | Jingle DTMF |
✓ | XEP-0184 | Message Receipts |
✓ | XEP-0185 | Dialback Key Generation and Validation |
✓ | XEP-0190 | Best Practice for Closing Idle Streams |
✓ | XEP-0199 | XMPP Ping |
✓ | XEP-0201 | Best Practices for Message Threads |
✓ | XEP-0202 | Entity Time |
✓ | XEP-0203 | Delayed Delivery |
✓ | XEP-0205 | Best Practices to Discourage Denial of Service Attacks |
✓ | XEP-0209 | Metacontacts |
✓ | XEP-0220 | Server Dialback |
✓ | XEP-0224 | Attention |
✓ | XEP-0225 | Component Connections |
✓ | XEP-0226 | Message Stanza Profiles |
✓ | XEP-0231 | Bits of Binary |
✓ | XEP-0234 | Jingle File Transfer |
✓ | XEP-0245 | The /me Command |
✓ | XEP-0246 | End-to-End XML Streams |
✓ | XEP-0247 | Jingle XML Streams |
✓ | XEP-0250 | C2C Authentication Using TLS |
✓ | XEP-0251 | Jingle Session Transfer |
✓ | XEP-0260 | Jingle SOCKS5 Bytestreams Transport Method |
✓ | XEP-0261 | Jingle In-Band Bytestreams Transport |
✓ | XEP-0262 | Use of ZRTP in Jingle RTP Sessions |
✓ | XEP-0277 | Microblogging over XMPP |
✓ | XEP-0292 | vCard4 Over XMPP |
✓ | XEP-0301 | In-Band Real Time Text |
✓ | XEP-0305 | XMPP Quickstart |
✓ | XEP-0323 | Internet of Things - Sensor Data |
✓ | XEP-0324 | Internet of Things - Provisioning |
✓ | XEP-0325 | Internet of Things - Control |
✓ | XEP-0326 | Internet of Things - Concentrators |
✓ | XEP-0333 | Chat Markers |
✓ | XEP-0363 | HTTP File Upload |
✓ | XEP-0387 | XMPP Compliance Suites 2018 |
[a] Requires commercial license

#### Full, ordered list of supported RFCs and XEPs:

Support | Specification | Name | Comment
✓ | RFC6120 | Extensible Messaging and Presence Protocol (XMPP): Core |
✓ | RFC6120 | Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence |
⍻ | RFC7622 | Extensible Messaging and Presence Protocol (XMPP): Address Format | We support previous version of the specification: RFC6122
✓ | RFC7395 | An Extensible Messaging and Presence Protocol (XMPP) Subprotocol for WebSocket |
✓ | RFC7395 | An Extensible Messaging and Presence Protocol (XMPP) Subprotocol for WebSocket |
✓ | RFC7590 | Use of Transport Layer Security (TLS) in the Extensible Messaging and Presence Protocol (XMPP) |
✓ | XEP-0004 | Data Forms |
✓ | XEP-0008 | IQ-Based Avatars |
✓ | XEP-0012 | Last Activity |
✓ | XEP-0013 | Flexible Offline Message Retrieval |
✓ | XEP-0016 | Privacy Lists |
✓ | XEP-0020 | Feature Negotiation |
✓ | XEP-0022 | Message Events |
✓ | XEP-0030 | Service Discovery |
✓ | XEP-0045 | Multi-User Chat |
✓ | XEP-0047 | In-Band Bytestreams |
✓ | XEP-0048 | Bookmarks |
✓ | XEP-0049 | Private XML Storage |
✓ | XEP-0050 | Ad-Hoc Commands |
✓ | XEP-0054 | vcard-temp |
✓ | XEP-0059 | Result Set Management |
✓ | XEP-0060 | Publish-Subscribe |
✓ | XEP-0065 | SOCKS5 Bytestreams |
✓ | XEP-0066 | Out of Band Data |
✓ | XEP-0068 | Field Standardization for Data Forms |
✓ | XEP-0071 | XHTML-IM |
✓ | XEP-0072 | SOAP Over XMPP |
✓ | XEP-0077 | In-Band Registration |
✓ | XEP-0078 | Non-SASL Authentication |
✓ | XEP-0079 | Advanced Message Processing |
✓ | XEP-0080 | User Location |
✓ | XEP-0082 | XMPP Date and Time Profiles |
✓ | XEP-0083 | Nested Roster Groups |
✓ | XEP-0084 | User Avatar |
✓ | XEP-0085 | Chat State Notifications |
✓ | XEP-0086 | Error Condition Mappings |
✓ | XEP-0091 | Legacy Delayed Delivery |
✓ | XEP-0092 | Software Version |
✓ | XEP-0096 | File Transfer |
✓ | XEP-0100 | Gateway Interaction |
✓ | XEP-0106 | JID Escaping |
✓ | XEP-0107 | User Mood | Server support via `Personal Eventing Protocol (XEP-0163)`
✓ | XEP-0108 | User Activity | Server support via `Personal Eventing Protocol (XEP-0163)`
✓ | XEP-0114 | Jabber Component Protocol |
✓ | XEP-0115 | Entity Capabilities |
✓ | XEP-0118 | User Tune | Server support via `Personal Eventing Protocol (XEP-0163)`
✓ | XEP-0124 | Bidirectional-streams Over Synchronous HTTP (BOSH) |
✓ | XEP-0128 | Service Discovery Extensions |
✓ | XEP-0127 | Common Alerting Protocol (CAP) Over XMPP |
✓ | XEP-0131 | Stanza Headers and Internet Metadata (SHIM) |
✓ | XEP-0133 | Service Administration |
✓ | XEP-0136 | Message Archiving |
✓ | XEP-0141 | Data Forms Layout |
✓ | XEP-0142 | Workgroup Queues |
✓ | XEP-0144 | Roster Item Exchange |
✓ | XEP-0145 | Annotations |
✓ | XEP-0146 | Remote Controlling Clients |
✓ | XEP-0152 | Reachability Addresses |
✓ | XEP-0153 | vCard-Based Avatars |
✓ | XEP-0155 | Stanza Session Negotiation |
✓ | XEP-0156 | Discovering Alternative XMPP Connection Methods | Uses DNS records, so will work with Tigase XMPP Server
✓ | XEP-0157 | Contact Addresses for XMPP Services |
✓ | XEP-0160 | Best Practices for Handling Offline Messages |
✓ | XEP-0163 | Personal Eventing Protocol |
✓ | XEP-0166 | Jingle |
✓ | XEP-0167 | Jingle RTP Sessions |
✓ | XEP-0170 | Recommended Order of Stream Feature Negotiation |
✓ | XEP-0171 | Language Translation |
✓ | XEP-0172 | User Nickname |
✓ | XEP-0174 | Serverless Messaging |
✓ | XEP-0175 | Best Practices for Use of SASL ANONYMOUS |
✓ | XEP-0176 | Jingle ICE-UDP Transport Method |
✓ | XEP-0177 | Jingle Raw UDP Transport Method |
✓ | XEP-0178 | Best Practices for Use of SASL EXTERNAL with Certificates |
✓ | XEP-0179 | Jingle IAX Transport Method |
✓ | XEP-0180 | Jingle Video via RTP |
✓ | XEP-0181 | Jingle DTMF |
✓ | XEP-0184 | Message Receipts |
✓ | XEP-0185 | Dialback Key Generation and Validation |
✓ | XEP-0190 | Best Practice for Closing Idle Streams |
✓ | XEP-0191 | Blocking Command |
✓ | XEP-0198 | Stream Management | Both `Session Resumption` and `Stanza Acknowledgements`
✓ | XEP-0199 | XMPP Ping |
✓ | XEP-0201 | Best Practices for Message Threads |
✓ | XEP-0202 | Entity Time |
✓ | XEP-0203 | Delayed Delivery |
✓ | XEP-0205 | Best Practices to Discourage Denial of Service Attacks |
✓ | XEP-0206 | XMPP Over BOSH |
✓ | XEP-0209 | Metacontacts |
✓ | XEP-0220 | Server Dialback |
✓ | XEP-0223 | Persistent Storage of Private Data via PubSub |
✓ | XEP-0224 | Attention |
✓ | XEP-0225 | Component Connections |
✓ | XEP-0226 | Message Stanza Profiles |
✓ | XEP-0231 | Bits of Binary |
✓ | XEP-0234 | Jingle File Transfer |
✓ | XEP-0245 | The /me Command |
✓ | XEP-0246 | End-to-End XML Streams |
✓ | XEP-0247 | Jingle XML Streams |
✓ | XEP-0249 | Direct MUC Invitations |
✓ | XEP-0250 | C2C Authentication Using TLS |
✓ | XEP-0251 | Jingle Session Transfer |
✓ | XEP-0260 | Jingle SOCKS5 Bytestreams Transport Method |
✓ | XEP-0261 | Jingle In-Band Bytestreams Transport |
✓ | XEP-0262 | Use of ZRTP in Jingle RTP Sessions |
✓ | XEP-0277 | Microblogging over XMPP |
✓ | XEP-0280 | Message Carbons |
✓ | XEP-0292 | vCard4 Over XMPP |
✓ | XEP-0301 | In-Band Real Time Text |
✓ | XEP-0305 | XMPP Quickstart |
✓ | XEP-0313 | Message Archive Management |
✓ | XEP-0323 | Internet of Things - Sensor Data |
✓ | XEP-0324 | Internet of Things - Provisioning |
✓ | XEP-0325 | Internet of Things - Control |
✓ | XEP-0326 | Internet of Things - Concentrators |
✓ | XEP-0333 | Chat Markers |
✓ | XEP-0352 | Client State Indication |
✓[a] | XEP-0357 | Push Notifications |
✓ | XEP-0363 | HTTP File Upload |
✓ | XEP-0368 | SRV records for XMPP over TLS | Requires adding DNS entries pointing to port 5223
✓ | XEP-0387 | XMPP Compliance Suites 2018 |

### Tigase Custom Extensions

#### General features

Table 2.6. Monitoring

Support | Name | Comment
✓[a] | AuditLog | Ability functionality to log important events in a system (loggins, message exchanges, calls)
✓[a] | Anti Abuse | Fight stanza SPAM, DoS, brute-force attacks and other threats
✓ | Virtual domains | Ability to create and manage multiple virtual domains from a single instance and restart-less management
✓ | MUC subscribe for offline push | Option to register permanently to the room to receive push notifications about new messages.
✓ | Scripting API | Supports the Java Scripting API JSR-223
✓ | JMX monitoring | Advanced monitoring the server via JMX protocol with an API for connecting custom monitors and TCP/IP end-point for connecting general purpose JMX tools
✓ | HTTP monitoring | Basic monitoring via HTTP protocol
✓ | XMPP Monitoring | Pluggable, active monitoring via XMPP, retrieving detailed server statistics, receiving automatic notifications about possible problems discovered by the self-monitor mechanisms
✓ | SNMP Monitoring | Advanced server monitoring via SNMP.
✓ | Bosh Cache | Bosh Session Cache - a feature to quickly reload user data - roster, presences and messages history by the web client (for example after web page reload)
✓ | Clustering | Full clustering support for HA and LB with pluggabble clustering strategies for perfect optimising the cluster to the client’s system
✓[a] | Advanced Clustering Strategy | Dedicated, specialised clustering strategy for best possible performance
✓[a] | MUC Clustered | Support for clustering group chatrooms with various, pluggable strategies
✓[a] | PubSub Clustered | Support for clustering PubSub component with various, pluggable strategies
✓ | Mobile optimisations | Optimizations designed for Mobile Devices
✓ | OSGi | Support for running in OSGi environment, i.e. as embedded XMPP server in advanced application server
✓ | Dynamic rosters | Ability to create users' rosters entries on the fly based on data retrieved from any sources
✓ | Command line admin tools | Commandline utility to manage server
✓[a] | Unified Archive | An extension to XEP-0313 Message Archive Management, with greatly improved flexibility in terms of what can be archived.

#### Repositories/Databases

Table 2.7. Repositories/Databases

Support | Name | Comment
✓ | DB per domain | Ability to have multiple databases for specific domains.
✓ | PostgreSQL | Full support for PostgreSQL database with database schemas excluding dedicated DB schema for PubSub component
✓ | MySQL | Full support for MySQL database with database schemas, dedicated DB schema for PubSub component
✓ | SQL Server | Full support for MS SQL Server database with database schemas excluding dedicated DB schema for PubSub component, only in Tigase server version 3.x
✓ | Derby DB | Full support for built-in Derby database with database schemas excluding dedicated DB schema for PubSub component
✓ | JDBC | Support for all JDBC enabled databases, although the database schemas are available for some databases
✓ | Drupal Auth | Drupal authentication - the Tigase server can share user authentication database with Drupal CMS and authenticate users agains Drupal user database
✓ | Drupal Auth | Close integration with Drupal CMS, the Tigase can send notifications to subscribed users about new posts, comments and can also publish short news information via XMPP
✓ | LDAP-Auth | LDAP Authentication Connector Supported

Prev | Up | Next
Chapter 2. Tigase XMPP Server Distribution Administration Guide | Home | Licensing and Open Source