Zerta

XMPP de código abierto

Zerta en Go.

Servidor XMPP en Go, build v0.1.9. Probado con la suite de conformidad en compliance.conversations.im. Apache 2.0. Para equipos que quieren federación, clientes móviles y control operativo sin adoptar una pila de ejecución exótica.

  • Suite de conformidad: compliance.conversations.im
  • Build v0.1.9
  • Apache 2.0
  • Binario Go único

Confianza

Hechos, no teatro de plataforma.

Zerta es un fork duro de Jackal y continúa como proyecto independiente bajo Apache 2.0. Esta página solo mantiene afirmaciones respaldadas por el repositorio.

v0.1.9

Probador de conformidad

Verificado con la suite en compliance.conversations.im, informe completo allí.

2.0

Licencia Apache

Una licencia open source permisiva antes de que el primer prototipo se convierta en una reunión de licencias.

Go

Pila operativa legible

Builds, depuración y despliegue encajan con el tooling habitual de SRE y Go.

SASL2

Autenticación moderna

SASL2, Bind2 y FAST para una autenticación de cliente actualizada.

Por qué Zerta

Para operadores que quieren leer la pila.

Zerta no compite con promesas de antigüedad o escala. La ventaja es tecnología controlable: Go, una licencia clara, monitorización familiar y backends de infraestructura a elegir.

Go en vez de un runtime especializado

Una base de código que puedes compilar, inspeccionar y depurar con el tooling estándar de Go.

Apache 2.0 en vez de fricción de licencias

Adecuado para extensiones, operación SaaS e integración de producto sin incertidumbre copyleft temprana.

Prometheus y pprof

Sin isla de dashboard propia. Métricas y perfiles fluyen hacia la pila que ya usan los equipos de operaciones.

Cinco backends de clúster

Redis, PostgreSQL, NATS, Raft o etcd: la arquitectura sigue tu infraestructura, no al revés.

Funciones

El alcance actual, agrupado por vista operativa.

La lista de funciones es deliberadamente técnica. Sin logos de clientes, sin cifras de escala, sin promesas de rendimiento sin medición.

Auth y seguridad

SASL2, Bind2, FAST, Channel Binding, OMEMO, listas de privacidad, Guardian y anti-spam.

Mensajería y sincronía

MAM, Message Carbons, Stream Management, CSI, mensajes offline y roster.

Colaboración

Multi-User Chat, salas persistentes, moderación, MUC RTBL, HTTP Upload, TURN/STUN y push.

Operaciones

PostgreSQL, MySQL, BoltDB, caché Redis, Admin API, zertactl, Prometheus, health checks y pprof.

Inicio rápido

Un binario. Una config. A funcionar.

El camino estándar es simple: clonar el repositorio, instalar el binario, configurar el YAML, arrancar el servidor. Docker y Helm también están disponibles en el proyecto.

git clone https://git.uuxo.net/UUXO/zerta.git
cd zerta
make install installctl
zerta --config=config.yaml

# Crear un usuario
zertactl user add username:password

# Docker
docker-compose -f dockerfiles/docker-compose.yml up

Documentación

De la instalación a la operación.

Una estructura de documentación alojada es el siguiente paso. Por ahora, los caminos más importantes llevan directamente al repositorio.

Instalación y operación

Build, systemd, nginx, TLS, monitorización, seguridad y clustering en la guía de administración.

Configuración

Referencia YAML completa para listeners, almacenamiento, auth, TLS, módulos y clustering.

Conformidad

Camino documentado hacia la XMPP 2024 Compliance Suite con el conjunto de módulos habilitado.

FAQ

Preguntas antes de decidir.

Respuestas cortas, cada una respaldada por el repositorio. Donde falta documentación, esta página lo indica.

Instalación

¿Qué necesito para un servidor Zerta en producción?

MySQL 8+ o PostgreSQL 12+ como base de datos, un certificado TLS válido (p. ej. Let's Encrypt) y nginx delante para la terminación TLS, WebSocket y BOSH. HTTP Upload (XEP-0363) y TURN/STUN (RFC 5766, XEP-0215) están integrados. La lista completa, incluida la cadena de build, está en la guía de administración bajo «Requirements».

HTTP Upload: módulo XEP-0363 integrado. Para HMAC, deduplicación o tu propio backend de almacenamiento, opcionalmente hmac-file-server.

¿Puedo probar Zerta sin una base de datos externa?

Sí. BoltDB está embebido y no necesita servidor de base de datos — pero solo para un único nodo, sin replicación ni clustering. Para producción, MySQL o PostgreSQL son los backends previstos. Zerta crea su esquema al arrancar, así que no hace falta importar nada manualmente.

Operación

¿Cómo ejecuto Zerta en varios nodos?

El clustering funciona mediante un almacén KV compartido (cluster.type: kv). Hay cinco backends implementados en el código: Redis, PostgreSQL, NATS, Raft y etcd. La guía de administración documenta actualmente cuatro en detalle — etcd existe pero aún no está documentado. BoltDB no soporta clustering.

¿Qué interfaces de monitorización hay disponibles?

El servidor HTTP integrado expone métricas Prometheus en /metrics (OpenMetrics habilitado) y perfilado Go en /debug/pprof/. Un dashboard de Grafana viene incluido en el repositorio bajo monitoring/. Las métricas de almacenamiento se habilitan vía storage.repository.type: measured. Aún no se ha publicado una sección de documentación dedicada a monitorización.

¿Cómo protejo el servidor contra fuerza bruta y spam?

Guardian limita los inicios de sesión fallidos por listener C2S (max_auth_failures), bloquea direcciones durante una duración configurable (ban_duration) y limita la tasa de nuevas conexiones (connect_rate_limit). Para mensajes existe el módulo antispam con límite de tasa por usuario, más muc_rtbl para listas de bloqueo en tiempo real en salas.

¿Hay guías de copia de seguridad, restauración y actualizaciones?

No. Estas guías de operador están planificadas pero no publicadas. Lo que sí está documentado hoy: Zerta ejecuta migraciones de esquema automáticamente al arrancar. La copia de seguridad y restauración dependen actualmente del tooling de la base de datos que uses, más la configuración y el directorio de subida. Quien ejecute Zerta en producción debe definir y probar ese procedimiento por su cuenta por ahora.

Protocolo

¿Qué significa el estado del probador de conformidad?

Probado con la suite en compliance.conversations.im, última ejecución el 2026-04-15 en 0ea1.net con el mismo resultado que uuxo.net. Actualmente ejecuta el build v0.1.9 en uuxo.net. El informe completo está en compliance.conversations.im, aquí no hay catálogo de XEP.

¿Qué me aportan SASL2, Bind2 y FAST?

SASL2 (XEP-0388) junto con Bind2 (XEP-0386) gestiona el login y el bind de recurso en un solo round trip, lo que reduce el número de round trips al establecer una conexión. FAST (XEP-0484) añade autenticación por token, complementada con channel binding (XEP-0440) y actualización de hash SCRAM (XEP-0480).

Los tokens FAST se emiten como HT-SHA-256-NONE y por tanto no están vinculados al canal. Trátalos como una credencial de acceso completa.

Migración

¿Puedo migrar de ejabberd o Prosody a Zerta?

No existe una guía de migración para servidores externos — está planificada pero no publicada. Zerta trae su propio esquema de base de datos y lo crea al arrancar; importar bases de datos existentes de ejabberd o Prosody no está cubierto por eso. El camino realista hoy es una instalación nueva con transferencia manual de tus usuarios y datos.

¿En qué se diferencia Zerta de Jackal?

Zerta es un fork de ortuman/jackal y se desarrolla como proyecto independiente bajo Apache 2.0. Focos actuales: conformidad XMPP 2024, autenticación moderna (SASL2/Bind2/FAST), clustering vía backends KV, además de Guardian y anti-spam.

El archivo de configuración, los binarios y el prefijo de entorno son propios de Zerta (zerta.yml, ZERTA_*). Por tanto, una configuración de Jackal no se puede reutilizar sin revisarla.

Repositorio

El código es la prueba.

Servidor, docs, configs de ejemplo, archivos Docker y scripts Helm viven en git.uuxo.net. El hosting gestionado está por separado en uuxo.net.

git.uuxo.net/UUXO/zerta