Developer and Administrator Guide

DEVELOPER SECTION
Source code can be obtained from GitHub either via Zip download or by forking the repository - https://github.com/igniterealtime/Spark

In Spark’s source there are two guides for setting up IDE. One for Eclipse and one for IntelliJ. You can find them in /core/src/documentation.

There is also a wiki on how to setup Eclipse to work with GitHub fork - https://discourse.igniterealtime.org/t/working-with-spark-openfire-source-in-eclipse-github/

ADMINISTRATOR SECTION

Installation

Windows:
To install on Windows one can download one of the two installation packages. Bundled with JRE (recommended) and marked as “online”, which means it doesn’t include JRE and one has to install Java on their system manually for Spark to run. Spark is using Java 8 (it is not working with newer versions yet, it won’t also work with Java 7 and older versions. It is recommended to use latest Java 8 version).

Linux:
On Linux one can use either deb (Debian based) or rpm (Redhat, Fedora, CentOS) installer or a simple tar.gz archive for portable version. All these variants don’t have JRE included and one has to install Java on the system manually. Preferably Oracle’s version as there might be issues with OpenJDK.

2.8.3 RPM/DEB version can be run with /usr/share/spark/bin/startup.sh
2.9.0 RPM/DEB installs itself into /opt/spark

One can also create a link on the desktop pointing to startup.sh - Example

Note: on the latest Ubuntu version it was observed that the system removes Spark after doing regular system updates when it was installed via deb into /opt/spark (using Ubuntu Software app by double clicking the deb).

macOS:
There is a dmg installer available for download. One might have to disable Gatekeeper temporarily to be able to install Spark as it comes from an unknown for macOS source (not from Apple Store).

SSO and LDAP integration

There are a number of guides created by users in the forums. Below are some of the guides, which cover setting up Openfire and Spark with LDAP integration and Single Sing On:
How To: Video on setting up SSO/AD with Openfire

Settings and Client Deployment

There is no msi package for Spark (there was in the past, but it was problematic and was removed since; our current installer producing system is not making msi or nobody knows how to setup it to do this). So, there is no easy way to install Spark via group policy. But Spark’s installer supports silent installation, so one can use scripts to deploy it to workstations.

Additionally one may want to also deploy a preconfigured settings file. Most Spark settings are stored in spark.properties file in its profile folder (on Windows it is at C:\Users\username\AppData\Roaming\Spark).

Below are the links to community contributed guides:
Unattended Spark installation (via shutdown script GPO)
PDQ deploy of Spark (on Spiceworks)

Client Control

This plugin for Openfire server allows to control various aspects of Spark (mostly disabling settings and features). But keep in mind that Client Control has been updated in advance and some features might only work with not released yet Spark version. Make sure to check plugin’s changelog and see what Spark/Openfire versions are required for particular settings.

SSL settings

Spark doesn’t have SSL certificates management tool. There are only two related settings in Advanced menu on Logon screen: Accept all certificates, Disable certificate hostname verification. You have to enable first option, if you use certificates provided by Openfire, as they are self-signed and not universally trusted. This usually applies to internal installations in local LAN. Public servers should have proper trusted certificates installed. Second option should only be used for testing or if you need to connect to your server at any cost. If you have to enable this setting, it means that your server setup is wrong and certificate’s domain name doesn’t match the one user is signing in (happens when users use IP address to login instead of proper domain name).

Starting with Spark 2.9.0: there will be certificates management menu, which can be accessed from the Advanced menu (Certificates tab). There one will be able to enable self-signed or other types of certificates and add or delete certificates from user’s trust store. Additionally, when first time connecting to a server, a user will be presented with a dialog showing information about a certificate and allowing to add it to the trusted list). One can also check detailed information and see all the chain of certificates presented by the server and accept only some of them.

SUPPORTED STANDARDS
Spark supports features, which are currently part of XMPP Core (such as SASL, SSL/TLS, resources etc.). Below is the list of separate supported protocols.

  • XEP-0012 Last Activity
  • XEP-0016 Privacy Lists
  • XEP-0030 Service Discovery (limited to MUC service discovery)
  • XEP-0045 Multi-User Chat
  • XEP-0047 In-Band Bytestreams (an option to force IBB since 2.9.0)
  • XEP-0048 Bookmarks
  • XEP-0049 Private XML Storage
  • XEP-0052 File Transfer (function degraded since 2.8.0, especially between different subnets, IBB can be used as workaround)
  • XEP-0077 In-Band Registration
  • XEP-0083 Nested Roster Groups (Spark uses " :: " as a delimiter for virtual nesting)
  • XEP-0084 User Avatar
  • XEP-0085 Chat State Notifications
  • XEP-0092 Software Version
  • XEP-0100 Gateway Interaction
  • XEP-0126 Invisibility
  • XEP-0138 Stream Compression
  • XEP-0142 Workgroup Queues (Fastpath)
  • XEP-0144 Roster Item Exchange (presumably Shared Groups in Openfire are based on this XEP, or older XEP-0140 Shared Groups)
  • XEP-0153 vCard-Based Avatars
  • XEP-0172 User Nickname
  • XEP-0199 XMPP Ping
  • XEP-0203 Delayed Delivery
  • XEP-0224 Attention
  • XEP-0245 The /me Command
  • XEP-0280 Message Carbons (added since 2.9.0 - STILL WORK IN PROGRESS)
  • XEP-0363 HTTP File Upload (added since 2.9.0 as a bundled plugin)
  • XEP-0364 Current Off-the-Record Messaging Usage (could be removed in 2.9.0 because of lack of Maven artifacts)
  • XEP-0393 Message Styling (added since 2.9.0)