Kaiwa - A modern web client for Openfire

I have added Kaiwa XMPP web client to the Chat API plugin. I hope to extend it with the audio/video conferencing stuff from Openfire Meetings later on.

First time you use it (https://your_server:7443/apps), you will get a prompt to enter your Openfire username/password. It works best with the websocket plugin.


This plugin is broken with the latest Openfire 4.1.4 version as the websocket it depends on has a show stopping issue with External SASL authentication. Until we can source a solution, I suggest you use Openfire 4.1.3 and below.


nice, always innovating

1 Like

First off, let me say, thank you for the great work put into these projects by you and your colleagues! Openfire has made XMPP and open-source chats greatly more accessible.

I am very interested in the web-based client opportunities you’re doing here. As far as installing the ChatAPI plugin on my Openfire instance, is the plugin available already built; or will it need to be built? I have to admit, I’m a novice when it comes to building in Linux. I see the lib folder on the Github site repository for the ChatAPI. However, most plugins I’ve manually installed into Openfire use the pre-built .jar file, which is just copied into the plugins folder. Any folders required are created by Openfire’s automatic install. Is that available here for the ChatAPI? Or do I need, like I said before, to build it myself?

Thanks in advance, Dele!


1 Like

I have the same question from Kevin. How to install it ??

1 Like

Thank you for the very kind comments

The chatapi plugin is very much a work in progress because I am still working on it when I get spare moments.To try it out, either check out the source on github and build it yourself or download the plugin jar file from github here

For now, you will need the websocket plugin to use Kaiwa. Later on, I will be using REST+SSE instead of websockets. Also to see chat history, you will need the monitoring plugin and the bookmarks plugin to have your groupchat rooms listed.

+1 please. I would love to test this. Your documentation doesn’t give much away.

  1. Install chatapi plugin for openfire from here

  2. Install bookmarks, monitoring and websocket plugins for openfire from here

  3. Create a couple of MUC/Groupchat bookmarks, users, shared groups and roster items

  4. Open a web browser and go to https://your-server:7443/apps

  5. When prompted, supply the Openfire username/password for the user

For more info about the Kaiwa version, visit GitHub - ForNeVeR/Kaiwa: A modern XMPP Web client

Thanks so much for the help, Dele! If you can bear with me a little more … I have installed the four plugins you’ve described above. I’ve created two MUC bookmarks, I have several users, and a shared roster group. However, whenever I go to my.server.com:7443/apps, I get the following, below, provided by Jetty. Would you point me in the right direction of where to check in my configuration for errors? Thanks in advance!


Problem accessing /apps. Reason:

Not Found

Powered by Jetty://

Hi Kevin, really funny…I wanted to post the same HTTP ERROR here today! Hopefully Dele can help! :slight_smile:

Логины на кириллице не работают…

Try http instead of https: if you are using a self-signed cert with https:


This the screenshot from mine. I assume you restarted OF after installing the chatapi plugin.

This is after username and password login. I get a quick kaiwa connecting message then this




такая же ситуация. Пользователь с логином на латинице входит корректно, на кириллице нет.

here are some of the debug logs if that helps

2017.03.14 16:39:07 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Trying to find a user’s DN based on their username. sAMAccountName: xxxx.xxxxxxx, Base DN: dc=“xxxxx”,dc=“ie”…

2017.03.14 16:39:07 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Creating a DirContext in LdapManager.getContext()…

2017.03.14 16:39:07 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Created hashtable with context values, attempting to create context…

2017.03.14 16:39:07 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: … context created successfully, returning.

2017.03.14 16:39:07 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Starting LDAP search…

2017.03.14 16:39:07 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: … search finished

2017.03.14 16:39:07 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: In LdapManager.checkAuthentication(userDN, password), userDN is: CN=“xxxxxx xxxxxxx”,OU=“xxxxxxxx” Users",OU=“xxxxxxx”…

2017.03.14 16:39:07 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: Created context values, attempting to create context…

2017.03.14 16:39:07 org.jivesoftware.openfire.ldap.LdapManager - LdapManager: … context created successfully, returning.

2017.03.14 16:39:07 org.apache.jasper.servlet.JspServlet - JspEngine --> /index.jsp

2017.03.14 16:39:07 org.apache.jasper.servlet.JspServlet - ServletPath: /index.jsp

2017.03.14 16:39:07 org.apache.jasper.servlet.JspServlet - PathInfo: null

2017.03.14 16:39:07 org.apache.jasper.servlet.JspServlet - RealPath: /opt/openfire/plugins/chatapi/index.jsp

2017.03.14 16:39:07 org.apache.jasper.servlet.JspServlet - RequestURI: /apps/index.jsp

2017.03.14 16:39:07 org.apache.jasper.servlet.JspServlet - QueryString: null

well, it is working for me! I just put in the right ports - 7070 instead of 7443!

So Dele, will there be the possibility to make groups visible in Kaiwa? Right now I just see the online users on the left panel, but no groups!

Thanks for your help


Install bookmarks plugin and create some bookmarks for the muc chat rooms/groups you want listed

I had previously tried accessing it through the unencrypted http and port 7070. I do not, however, have a self-signed cert. I have one from Let’s Encrypt.

Let me give you a description of my setup and where things may be going wrong. I set up Openfire based on a previous ejabberd configuration. I had set a chat server up for me and some co-workers. At the time, I was staying simple and ran the server from home (off a Raspberry Pi, nonetheless). So I just picked a single-word domain. When I setup Openfire, I had already transitioned to using an Amazon EC2 Ubuntu instance because I’d had problems with my home router and the chat was way less than reliable. That single word chat domain (let’s call it simpledomain) came along for the ride over to Openfire, though I had started getting more sophisticated with all the services I’d been putting together for us at work. The chat server was now accessible from a .net TLD (let’s call it im.reliable.tld) — but to convert everyone over to another domain was something I just didn’t have time and chance to do when I setup Openfire. It’d involve doing a script or app that everyone could run to update their preferences. The majority of people I work with are not tech-savvy and asking them to change account settings in the client was not looking good. I’d have done it myself except a lot of these work out of their home office. I’m trying to get even more onboard with the collection of services I’ve been putting together. People are very finicky when it comes to actually using something, even if it’s useful … but I’m pretty sure I don’t have to tell you that.

So, could my issue be stemming from my simpledomain chat domain that I’m using? I remember seeing somewhere in a log or a settings (like BOSH) page where it was generating a URL using the simpledomain:1234/file.html format, which will not work. But I’m having to access it over the Internet with the im.reliable.tld:7443/apps format URL. Could there be an issue with this domain naming scheme versus how it’s serving up the pages? Are there any particular logs you’d have me look at?

Thanks so much for your time and effort, Dele!

I don’t have a ready answer The all.log is a good place to start. we need confirmation that Jetty started the web service associated with web context named “apps”

I apologize for not checking the log beforehand. It would appear that the chatapi plugin is not being loaded:

2017.03.19 14:35:38 ERROR [pool-26-thread-1]: org.jivesoftware.openfire.container.PluginManager - An exception occurred while loading plugin ‘chatapi’:

java.lang.UnsupportedClassVersionError: org/jivesoftware/openfire/plugin/rest/ChatApiPlugin : Unsupported major.minor version 52.0

at [lots of lines]

From my research, it would appear that I’m trying to run the ChatAPI plugin with a lower version of Java than it was compiled with. It would appear I have version 1.7.0_121 (which correlates to 52.0, I’m assuming). Do I need to upgrade my Java or is there a version of the plugin compiled to work with lower versions? Thanks!

I went ahead and upgraded to Java 1.8 and uninstalled 1.7. The /apps page now loads with the “Kaiwa Connecting” splash page, but then goes to the follow Jetty error page when trying to reach the next page, /apps/login.html :


Problem accessing /apps/login.html. Reason:

Not Found

Powered by Jetty://

And here are some lines from all.log that seem to be of some concern. I’ve replaced my IP with ##, my chat domain as simpledomain and my FQDN with im.server.tld:

2017.03.19 17:31:23 WARN [Server SR - 1561883986]: org.jivesoftware.openfire.net.SocketReader - Closing session due to incorrect hostname in stream header. Host: im.server.tld. Connection: org.jivesoftware.openfire.net.SocketConnection@72cd600f socket: Socket[addr=/##.##.###.##,port=45542,localport=5269] session: null

2017.03.19 17:31:23 WARN [Server SR - 1752581876]: org.jivesoftware.openfire.net.SocketReader - Closing session due to incorrect hostname in stream header. Host: im.server.tld. Connection: org.jivesoftware.openfire.net.SocketConnection@6300f065 socket: Socket[addr=/##.##.###.##,port=45543,localport=5269] session: null

2017.03.19 17:31:23 WARN [pool-29-thread-1]: org.jivesoftware.openfire.server.ServerDialback[Acting as Originating Server: Create Outgoing Session from: simpledomain to RS at: im.server.tld (port: 5269)] - Unable to create a new outgoing session

2017.03.19 17:31:23 WARN [pool-29-thread-1]: org.jivesoftware.openfire.session.LocalOutgoingServerSession[Create outgoing session for: simpledomain to im.server.tld] - Unable to create a new session: Dialback (as a fallback) failed.

2017.03.19 17:31:23 WARN [pool-29-thread-1]: org.jivesoftware.openfire.session.LocalOutgoingServerSession[Authenticate local domain: ‘simpledomain’ to remote domain: ‘im.server.tld’] - Unable to authenticate: Fail to create new session.