0
votes

There is a chat project I plan to develop and currently stuck while deciding, which XMPP server and client to use. Front-end will be implemented using Ionic 3+ framework (fixed requirement).

Main features:

  • private chat capability (1 on 1)
  • group chat capability (and ability to add users to existing chat)
  • online status visibility
  • offline message delivery (online user sends a message to offline user, and the offline user gets it after going online, etc)
  • full-time server-side chat history storage

I need to select:

  • a client library which is convenient to implement with Ionic 3+
  • a server which enables all the above requirements

Also, the chat messages should cross the network with at least some kind of encryption.

Currently, I have been playing with these server options:

  • eJabberd - most people recommend this option, but for me, a person, who is newbie at XMPP stuff, it looks like there will be quite a lot of hassle with configuration
  • openFire - easy to setup and use, but it uses Java VM, and some people argue, that it has problems with performance and memory management.

I also stumbled upon AstraChat - a commercial product, that looks similar to what I need - however, with fixed implementation of it's own public apps - no way to use it's code base.

As of front-end - I have only tried running the Ionic 1 tutorial locally using Strophe.js as the client in the front-end. Since I am developing the app with Ionic 3+ (TypeSript), it would be awesome to use some newer and TS compatible library - however, it is just a wish, not a requirement. :)

Maybe there are some better and more convenient non-XMPP implementations for this concept. Any thoughts are welcome!

1
For "at least some kind of encryption" just use HTTPS, that encrypts the data during transit. You can up that by adding client certificate pinning. But there will be a real security problem with storing messages on your server for offline chat. Group chat adds more security issues as does authentication the users one to another. For a secure system look at Signal by Open Whisper Systems, it is open source. But still the security aspect is demanding.zaph
@zaph, thank you for the suggestions!serpaulius

1 Answers

3
votes
  1. eJabbered is very complex decision for your application.
  2. openFire is also very complex and requires JVM

For your apllication I advise Prosody. It is simple and lightweight desicion.

https://en.wikipedia.org/wiki/Comparison_of_XMPP_server_software

But please think twice about using chat on XMPP protocol. This protocol is very difficult to learn and it has a variety of extensions(e. g. XEP) and you will be confused about documentation.

Alternative https://github.com/actorapp/actor-platform but documentation is obsolete.