verse

XMPP client library for Lua

hg clone https://code.matthewwild.co.uk/verse

tip: 72d7b4241f89 (2026-09-24)

# Verse

Verse is an XMPP library for Lua. It allows you to connect to an XMPP server, as
either a client or a component. It also supports connecting over HTTP (BOSH).

Verse is built and tested with Lua 5.4. Lua 5.1 and LuaJIT are no longer
supported.

Verse shares some of its underlying code with the Prosody XMPP server. To avoid
duplication, the shared files are not part of the Verse project. By default the
generated verse.lua expects them to be available at runtime from an installed
Prosody. A standalone build embeds them instead (see Building).

## Features

  - Standard XMPP, including SRV and TLS support
  - Roster management
  - Service discovery
  - Stream management (XEP-0198)
  - MUC
  - Ad-hoc commands
  - Jingle (peer-to-peer TCP and file transfer)
  - File transfer proxies
  - Message receipts
  - Pubsub
  - Message archive management
  - PEP
  - Many more...

## Dependencies

Both builds of verse.lua need these C libraries at runtime:

  - LuaSocket
  - LuaExpat
  - luaunbound (DNS resolution)
  - LuaSec (optional, but required for TLS)

All are available via LuaRocks and most Linux distributions.

The default build additionally needs the libraries of an installed Prosody
(13.0 or later) on the Lua module path. The standalone build embeds Prosody's
Lua libraries and pure-Lua substitutes for its C modules. The substitutes do
not provide HMAC, so the standalone build authenticates with PLAIN rather than
SCRAM.

## Building

To generate verse.lua for use alongside an installed Prosody:

	./configure
	make

To generate a verse.lua that does not need an installed Prosody:

	./configure --standalone
	make

The configure script will take a guess at the best place to install verse.lua. To install:

	make install # (may require root, e.g. sudo)

If you fetched Verse from its source repository, some files will automatically be fetched
from Prosody's repository the first time you run 'make'. Official Verse releases already
include these files.

## Documentation

See doc/ for a number of example scripts.

Files

.dockerignore14 B
.hgignore35 B
.hgtags142 B
LICENSE1.0 KiB
Makefile606 B
README2.0 KiB
bosh.lua6.1 KiB
buildscripts/squish52.9 KiB
client.lua6.4 KiB
component.lua4.1 KiB
configure2.9 KiB
doc/example.lua1.3 KiB
doc/example_adhoc.lua1.5 KiB
doc/example_bosh.lua1.3 KiB
doc/example_carbons.lua1.2 KiB
doc/example_component.lua1.3 KiB
doc/example_jingle.lua1.7 KiB
doc/example_jingle_send.lua1.6 KiB
doc/example_pep.lua1.8 KiB
doc/example_pubsub.lua1.8 KiB
init.lua6.0 KiB
libs/adhoc.lib.lua2.7 KiB
libs/bit.lua9.9 KiB
libs/encodings.lua266 B
libs/hashes.lua1.4 KiB
libs/net.lua138 B
libs/table.lua395 B
libs/time.lua353 B
plugins/adhoc.lua3.3 KiB
plugins/archive.lua4.1 KiB
plugins/bind.lua1.0 KiB
plugins/blocking.lua1.5 KiB
plugins/browsing.lua774 B
plugins/carbons.lua1.7 KiB
plugins/compression.lua4.0 KiB
plugins/disco.lua9.6 KiB
plugins/groupchat.lua5.1 KiB
plugins/jingle.lua8.9 KiB
plugins/jingle_ft.lua2.0 KiB
plugins/jingle_ibb.lua5.4 KiB
plugins/jingle_s5b.lua7.6 KiB
plugins/keepalive.lua260 B
plugins/legacy.lua2.2 KiB
plugins/pep.lua1.1 KiB
plugins/ping.lua886 B
plugins/presence.lua966 B
plugins/private.lua919 B
plugins/proxy65.lua6.1 KiB
plugins/pubsub.lua8.5 KiB
plugins/receipts.lua447 B
plugins/register.lua1.2 KiB
plugins/roster.lua3.9 KiB
plugins/sasl.lua2.7 KiB
plugins/session.lua955 B
plugins/smacks.lua5.5 KiB
plugins/time.lua922 B
plugins/tls.lua1.3 KiB
plugins/uptime.lua1.2 KiB
plugins/vcard.lua1.1 KiB
plugins/vcard_update.lua2.4 KiB
plugins/version.lua1.7 KiB
squishy4.0 KiB
tests/Dockerfile738 B
tests/README.md1.3 KiB
tests/compose.yaml633 B
tests/harness.lua2.9 KiB
tests/integration/connect.lua2.7 KiB
tests/integration/disco.lua2.0 KiB
tests/integration/message.lua1.1 KiB
tests/integration/muc.lua1.7 KiB
tests/integration/private.lua660 B
tests/integration/pubsub.lua1.4 KiB
tests/integration/register.lua571 B
tests/integration/roster.lua1.8 KiB
tests/prosody/prosody.cfg.lua896 B
tests/prosody/start.sh186 B
tests/run.lua1.1 KiB
tests/run.sh320 B
util/dataforms.lua10.6 KiB
util/random.lua425 B
util/rsm.lua1.8 KiB
util/sasl/anonymous.lua143 B
util/sasl/oauthbearer.lua881 B
util/sasl/plain.lua230 B
util/sasl/scram.lua3.7 KiB
util/sha1.lua3.4 KiB
util/vcard.lua9.0 KiB