---
name: tigase
description: Tigase XMPP Server recipe for open-forge. High-performance, modular, flexible XMPP/Jabber server written in Java. Supports MUC, PubSub, MAM, MIX, Push, WebSocket, BOSH, clustering. Web installer. Source: https://github.com/tigase/tigase-server
---

# Tigase XMPP Server

Highly optimized, extremely modular and very flexible XMPP/Jabber server written in Java. In development since 2004. Supports full RFC 6120 (XMPP Core), RFC 6121 (XMPP IM), WebSockets (RFC 7395), BOSH/HTTP, server-to-server federation, and optional components: MUC (group chat), PubSub, MAM (message archive), MIX, Push Notifications, SOCKS5, HTTP API, LDAP, and clustering. GPL-3.0 licensed.

Upstream: <https://github.com/tigase/tigase-server> | Active repo: <https://tigase.dev> | Docs: <https://docs.tigase.net>

## Compatible combos

| Infra | Runtime | Notes |
|---|---|---|
| Linux / macOS / Windows | Java 17 (JDK LTS) + binary release | Recommended; web installer included |
| Any | MySQL 5.6+ / PostgreSQL / MariaDB | Database required |
| Any | Derby (embedded) | Development/testing only |
| Linux | systemd service | For production persistent deployment |

## Inputs to collect

| Phase | Prompt | Notes |
|---|---|---|
| preflight | Java 17 (OpenJDK) installed | Must be in JAVA_HOME |
| config | XMPP domain (e.g. xmpp.example.com) | Your server's domain |
| config | Admin JID + password | e.g. admin@xmpp.example.com |
| config | Database type: MySQL, PostgreSQL, or MariaDB | Derby for dev only |
| config | Database host, name, user, password | Provided to web installer |
| config (optional) | Features: MUC, PubSub, MAM, Push, etc. | Selected during web installer |

## Software-layer concerns

### Architecture

- Java application — runs as a standalone service
- Database — stores user accounts, rosters, message archive, etc.
- Config file: `etc/config.tdsl` — Tigase DSL format; generated by web installer

### Ports (default)

| Port | Protocol | Purpose |
|---|---|---|
| 5222 | TCP | XMPP client connections |
| 5269 | TCP | Server-to-server (S2S) federation |
| 5280 | HTTP | BOSH/HTTP client connections |
| 5290 | WebSocket | WebSocket client connections |
| 8080 | HTTP | Web installer / HTTP API |

### Key components (optional, enabled via web installer)

| Component | XEP | Description |
|---|---|---|
| MUC | XEP-0045 | Multi-User Chat (group rooms) |
| PubSub | XEP-0060/0163 | Publish-Subscribe |
| MAM | XEP-0313 | Message Archive Management |
| MIX | XEP-0369 | Mediated Information eXchange (modern group chat) |
| HTTP API | — | REST API for server management |
| Message Archiving | XEP-0136 | Message history |

## Install — Web installer (recommended)

```bash
# 1. Download the latest release
# https://github.com/tigase/tigase-server/releases/latest
# Download: tigase-server-<version>-dist-max.tar.gz

tar -xf tigase-server-8.4.1-dist-max.tar.gz
cd tigase-server-8.4.1

# 2. Set JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64

# 3. Start server (DO NOT run as root)
scripts/tigase.sh start etc/tigase.conf

# 4. Open web installer (default credentials: admin / tigase — valid ONCE)
# http://yourserver:8080/setup/

# 5. Step through: domain config, admin account, DB setup, feature selection
# The installer writes etc/config.tdsl and locks itself out on completion.
```

## Install — Manual (console mode)

See https://docs.tigase.net/en/latest/Tigase_Administration/Quick_Start_Guide/Intro.html for console/non-GUI installation.

## Running as systemd service

```bash
# Copy service file (if included in distribution)
sudo cp scripts/tigase.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now tigase
```

Or manually:
```ini
# /etc/systemd/system/tigase.service
[Unit]
Description=Tigase XMPP Server
After=network.target

[Service]
Type=forking
User=tigase
WorkingDirectory=/opt/tigase
ExecStart=/opt/tigase/scripts/tigase.sh start etc/tigase.conf
ExecStop=/opt/tigase/scripts/tigase.sh stop etc/tigase.conf
PIDFile=/opt/tigase/logs/tigase.pid
Restart=on-failure

[Install]
WantedBy=multi-user.target
```

## Upgrade procedure

```bash
# 1. Back up etc/config.tdsl and database
# 2. Download new release tarball
# 3. Extract, overwrite scripts/ and jars/ (preserve etc/ and data/)
# 4. Check release notes for any config.tdsl format changes
# 5. Restart: scripts/tigase.sh stop then start
```

Full upgrade guide: https://docs.tigase.net

## Gotchas

- Do NOT run as root — Tigase explicitly warns against this. Create a dedicated `tigase` user.
- Web installer credentials (admin/tigase) are one-time only — they're removed from `config.tdsl` after setup completes. After that, only accounts listed as `admins` in config can access setup.
- Java 17 LTS is required — newer JDK versions may work but are not guaranteed. Set `JAVA_HOME` correctly before starting.
- Firewall: open ports 5222 (client), 5269 (federation), and optionally 5280/5290 (BOSH/WebSocket) for external access.
- The GitHub repo (`tigase/tigase-server`) is a mirror — active development, issues, and PRs are at https://tigase.dev.
- Derby (embedded DB) is only for development — always configure MySQL, PostgreSQL, or MariaDB for production.

## Links

- Source (GitHub mirror): https://github.com/tigase/tigase-server
- Active development: https://tigase.dev
- Documentation: https://docs.tigase.net
- Quick Start Guide: https://docs.tigase.net/en/latest/Tigase_Administration/Quick_Start_Guide/Intro.html
- Releases: https://github.com/tigase/tigase-server/releases
