Replyo es una alternativa de código abierto a Disqus y otros sistemas de comentarios alojados en la nube. Construido con Rust y Axum para un rendimiento excepcional, ocupa apenas 8 MB de memoria en reposo y su widget solo pesa 9,6 KB comprimido. No hay rastreo, no hay anuncios, y tus datos son completamente tuyos.
¿Por qué Replyo?
- Ultra ligero: ~8 MB de memoria RAM, widget de 9,6 KB gzip.
- Sin rastreo: Sin publicidad ni compartición de datos con terceros.
- RGPD compliant: Autoalojado, con exportación de datos y eliminación de cuentas.
- Open source: GPL-3.0, sin vendor lock-in, exporta tus datos cuando quieras.
- Alto rendimiento: Axum sobre Tokio gestiona miles de conexiones concurrentes.
Funcionalidades de Comentarios
- Conversaciones en hilo hasta 3 niveles de profundidad.
- Markdown con renderizado HTML seguro (pulldown-cmark + ammonia).
- Paginación basada en cursor con scroll infinito.
- Ordenar por más reciente, más antiguo o mejor valorado.
- Editar y eliminar tus propios comentarios.
Moderación en 3 Niveles
- Nivel 1 — Motor de reglas: Palabras bloqueadas (Aho-Corasick), detección de profanidad, límites de enlaces.
- Nivel 2 — Toxicidad ML: Modelo BERT-tiny ONNX que analiza comentarios en ~5ms con umbral configurable.
- Nivel 3 — Revisión LLM: Clasificación opcional via Groq (llama-guard) o Google Gemini.
Multi-tenancy
- Un despliegue, sitios y tenants ilimitados.
- Roles de plataforma:
platform_adminytenant_owner. - Clave API por sitio con validación de dominio y CORS dinámico.
Stack Técnico
- Rust 1.83+ / Axum 0.8 / Tokio
- PostgreSQL 17 con SQLx
- Widget: Lit 3 Web Components
- Panel de administración: Askama + HTMX
- OAuth: GitHub, Google, Twitter/X, Discord
Instalación con Docker
git clone https://github.com/hyukudan/replyo.git
cd replyo
cp .env.example .env
# Configura al menos POSTGRES_PASSWORD, JWT_SECRET, ADMIN_EMAIL, ADMIN_PASSWORD
docker compose up -d
Incrustar el Widget
<replyo-comments
api="https://tu-servidor.com"
site="rk_tu_clave_de_sitio"
slug="/blog/mi-articulo"
theme="auto"
lang="es"
></replyo-comments>
<script src="https://tu-servidor.com/widget/loader.js" async></script>