Tigase.org is the website of the Tigase XMPP/Jabber Server

If you are interested in the Tigase project and want to participate in any way you can request an account on the website and Jabber server in domain tigase.org. Please use the contact form to request the account and describe your planed involvement in the project. You can report bugs or request new features on the project tracker.

If you are looking for a free, XMPP account offered from the Tigase based service you should check the Tigase.im Website. This is the place where the last development version of the Tigase server is running. Check the website for more details.

For professional services and commercial Tigase products please refer to the company website: www.tigase.com

Our feeds: Blog RSS, Forums RSS, Comments RSS, Google+

Tigase server project tracker

I have added a project tracker for the Tigase XMPP Server. It is based on the Drupal Storm module.

The good thing is that it is very well integrated with the website. I am going to add trackers for other sub-projects as well (MUC, PubSub, etc...), they can use Drupal accounts, tickets can be moved between trackers and we have all the development related stuff in one place. I hope it works well.

Article type: 

Component implementation - Lesson 6 - Scripting Support

Scripting support is a basic API built-in to the Tigase server and automatically available to any component at no extra cost. This framework, however, can only access existing component variables which are inherited by your code from parent classes. It can not access any data or any structures you added in your component. A little effort is needed to expose some of your data to the scripting API.

This guide shows how to extend existing scripting API with your component specific data structures.

Integrating your component implementation with the scripting API is as simple as the code below:

private static final String BAD_WORDS_VAR = "badWords";
private static final String WHITE_LIST_VAR = "whiteList";
public void initBindings(Bindings binds) {
  binds.put(BAD_WORDS_VAR, badWords);
  binds.put(WHITE_LIST_VAR, whiteList);


Component implementation - Lesson 5 - Statistics

In most cases you want to gather some run-time statistics from your component to see how it works, detect possible performance issues or congestion problems. All the server statistics are exposed and are accessible via XMPP with ad-hoc commands, HTTP, JMX and some selected statistics are also available via SNMP. As a component developer you don't have to do anything to expose your statistic via any of above protocols, you just have to provide your statistics and the admin will be able to access them any way he wants.

This lesson will teach you how to add your own statistics and how to make sure that the statistics generation doesn't affect application performance.

Your component from the very beginning generates some statistics by classes it inherits. Let's add a few statistics to our spam filtering component:

public void getStatistics(StatisticsList list) {
  list.add(getName(), "Spam messages found", totalSpamCounter, Level.INFO);
  list.add(getName(), "All messages processed", messagesCounter, Level.FINER);
  if (list.checkLevel(Level.FINEST)) {
    // Some very expensive statistics generation code...


Component implementation - Lesson 4 - Service Discovery

You component still shows in the service discovery list as an element with "Undefined description". It doesn't also provide any interesting features or sub-nodes.

In this article I will show how, in a simple way, change the basic component information presented on the service discovery list, how to add some service disco features. As a bit more advanced feature the guide will teach you about adding/removing service discovery nodes at run-time and about updating existing elements.

Component description and category type can be changed by overwriting two following methods:

public String getDiscoDescription() {
  return "Spam filtering";
public String getDiscoCategoryType() {
  return "spam";