Google Summer of Code 2009 – Project proposal

Subject ID

own idea


Implement the Publish-Subscribe support in Vysper XMPP server


Jan Jakub Roman


hosted on GSoC

"My app"

Project Description

I would like to add support to publish-subscribe protocol for Vysper project. Server currently have no support for this. Pubsub protocol is described in XEP-0060 and is part of XMPP standard. XMPP is widely known as Jabber(it is exactly subset of standard). My ultimate goal is to create a full implementation of features described in pubsub extension. This will be module of existing XMPP server.

Main benefit for the project will be support of new extension for popular XMPP standard. Vysper will become more complex tool. There is only a few server applications supporting pubsub protocol. This powerful and complex XMPP extension has great abilities of design new services. Those services will be accessible by the XMPP account e.g. users can reuse their Jabber account to subscribe news from some web.

Detailed Description

In past few days i done some research and get many information about my case. I get knowledge about possibilities provided by pubsub service and requirements for implementation of server. I have already clear overall approach about this module implementation and integration to existing server.

Protocol and features i would like to add.

  1. Existing code

There will not many changes in existing code it is very modular and well premeditated. My extension will have to use some of existing modules:

  1. The module

Main aim is to implement all features of publish subscribe XMPP protocol. It is defined in XEP-0060 document. This service is also called pubsub.

All communication server-server and user-server is done using XMPP protocol. It means that users can reuse their jabber accounts for using pubsub services. This provide idea of one account suitable for many services.

The protocol allow to create services where people spread records. Records are organized in nodes. Nodes can be recursive. Each node can be subscribed or published independent. For example you may subscribe all web(as a main node) or only one node (part) of it. There is possibility of creating services like ATOM or RSS but pubsub allow publisher to update once sent records and even delete them.

XEP-0060 Standard describes also some kind of access control. There are 5 level of authorization. My module should provide extension for authorizing mechanism to check users permission on current node. Each node has many configuration options as max capacity or privileges of publishers. That can be also defined what to do if there are no room in node. Of course, It is only a small piece of available options described in standard.

Existing Solutions

There are at least 2 existing solutions for server and one for client of pubsub. I going to use it for testing and debugging. Maybe it will be necessary to get knowledge about architecture of this solutions. They are open source so it will not be a problem.

  1. Tigasse - open source XMPP server which provide pubsub service as a extension.
  2. eJabberd - open source XMPP server with pubsub module
  3. Tkabber - open source pubsub client

Work Organization

First of all I will get good knowledge about necessary documentation. As i just realized they are at lest: RFC 3920, RFC3921, XEP-0060, XEP-0030 maybe also: XEP-0163. This knowledge let me create better schedule of work. So it will be next step. Unfortunately my classes at university ends 30st of June. Before this date I will treat GSoC as a half-time job. But I starts on 1st July I will full focused on working at Vysper and treat it as a full-time job or even more seriously.

Vague Schedule

Week number


minimum working hours per week

Description of work

-5th to 0

April 20 - May 23


I would expand my knowledge of necessary documents at least about: XEP-0060, XEP-0030, RFC3920, RFC3921. Maybe do some work in advance.


May 23 – May 29


I would like to finish: design classes schema, specify requirements and goals, distribute tasks to classes and write description each of them. Update schedule if necessary.

2nd - 5th

May 30 - June 26


Start coding ...

6th - 8th

June 27 - July 10


Interim Period. At this time I wish to finish implementation node management. Finish means all dependencies as access control, store engine etc...

9th - 12th

July 11 - August 7


finish implementation of 'subscribe'

13th and half of 14th

August 8 - August 16


Program ends. Make tests, fix bugs, edit and improve documentation.

Extra goals if there was any time left:

Additional Information:

Why I apply to Vysper

Why you should let me in.

soc2009-pubsub-proposal (last edited 2009-09-20 23:36:36 by localhost)