# Openfire ${project.version}

Openfire provides comprehensive group chat and instant messaging (IM) services using the XMPP protocol.

## Administrator Documentation

### Basic Server Administration

Guides that are applicable to most administrators of an Openfire instance. These cover the basics.

Installation Guide
  How to install Openfire.
Database Installation Guide
  How to setup your database for use with Openfire.
Upgrade Guide
  Instructions for upgrading an existing Openfire installation.
Recovery of an Admin Password
  Instructions to recover an administrative account for which the password has been lost.

### Advanced Server Administration

The following guides cover more specialized topics. These aren't necessarily applicable to every Openfire installation.

Network Configuration Guide
  Describes how to make Openfire accessible to its users.
TLS Guide
  A guide to setting up Openfire's TLS secure socket support.
Separating Administrative Users Guide
  A guide to setting up Openfire to work with different user stores for admins and non-administrative users.
Load Balancing Guide
  How to spread client and server connections over multiple instances of Openfire
Clustered Database Guide
  Instructions on using Openfire with a database that consists of more than one server.
Trunking (Gateway) Guide
  A guide to set up Openfire to mediate traffic that is exchanged between other XMPP domains

### Integration with External Data Sources

Openfire is written to facilitate integration with existing data sources, such as external user directories or custom database. The guides in this section describe how such integration can be achieved.

Active Directory and LDAP Integration Guide
  A guide to setting up Openfire to work with Active Directory or LDAP user stores.
Custom Database Integration Guide
  A guide to integrating Openfire authentication, user, and group data with a custom database.
Integrating with more than one External Data Source
  Describes how Openfire can be configured to not only one, but multiple External Data Source.

### In-depth Analysis

At times, problems occur for which the cause is not immediately apparent. The follow section contains various guides that can help diagnose issues.

Database Query Statistics Guide
  Describes how Openfire's database interaction can be analyzed to find inefficient database queries.

## Developer Documentation

### Generic Development Guides

Guides for developers that work with the Openfire source code.

Building the Source
  Instructions for downloading and compiling the Openfire source code.
Starting an auto-provisioned instance of Openfire (demoboot)
  Starting a running Openfire instance without running through the setup.
Openfire Source Code in Visual Studio Code
  A short tutorial on how to work with the Openfire source code in the Visual Studio Code IDE.
Plugin Developer Guide
  A guide to writing and installing plugins for Openfire.
Translator Guide
  Information for those interested in translating the admin console of Openfire into other languages.
Customization Guide
  Instructions on customization support within the build process for Openfire.
Internal Networking Guide
  Guide to help developers understand Openfire's internal networking.
Tips & tricks for working with Openfire
  Some collected tools, tips and useful links.

### Data Provider / IAM Implementation Guides

Guides for implementors of custom integration of external authentication, users and other entities.

Custom Authentication Provider Guide
  Describes how to integrate Openfire with an external authentication system.
Custom Group Provider Guide
  Describes how to integrate Openfire with an external system that provides Group definitions.
Custom User Provider Guide
  Describes how to integrate Openfire with an external system that provides User definitions
Pluggable Roster Support Guide
  A guide to integrating Openfire rosters with an alternate store.

### Guides for Client Developers

Openfire is an XMPP server. It can therefor be used by any application that implements this protocol. This section lists a number of minimal examples using various libraries (mostly third-party) that illustrate how they can be used to interact with Openfire. Note that there are many other libraries available than the ones listed here!

Smack: A Minimal Working Example (in Java)
  Shows how to use a client implemented with the Smack library (Java) to connect to Openfire.
Mellium: A Minimal Working Example (in Go)
  Shows how to use a client implemented with the Mellium library (Go) to connect to Openfire.
moxxmpp: A Minimal Working Example (in Dart)
  Shows how to use a client implemented with the moxxmpp library (Dart) to connect to Openfire.
StanzaJS: A Minimal Working Example (in Javascript/Typescript)
  Shows how to use a client implemented with the StanzaJS library (Javascript/Typescript) to connect to Openfire.
Strophe.js: A Minimal Working Example (in Javascript)
  Shows how to use a client implemented with the Strophe.js library (Javascript) to connect to Openfire.
Twisted Words: A Minimal Working Example (in Python)
  Shows how to use a client implemented with the Twisted Words library (Python) to connect to Openfire.
XmppDotNet: A Minimal Working Example (in C# / .NET)
  Shows how to use a client implemented with the XmppDotNet library (.NET) to connect to Openfire.
Whixp: A Minimal Working Example (in Dart)
  Shows how to use a client implemented with the Whixp library (Dart) to connect to Openfire.

### Reference Documentation

JavaDocs
  Openfire API documentation.
Protocol Support
  Provides details on the XMPP support and XEPs that Openfire implements.
Database Schema Guide
  A tour of the Openfire database schema for developers and database administrators.