Drop-in fiel
Los 13 endpoints del protocolo con la semántica exacta del original: filtrado de sesiones en dos etapas, series con huecos a cero y zonas horarias.
Self-hosted · AGPL-3.0
Sustituye al cloud propietario detrás de las estadísticas de Ghost 6: un binario Go, un fichero SQLite y el dashboard de siempre, leyendo de tu servidor.
Por qué GhostBird
Los 13 endpoints del protocolo con la semántica exacta del original: filtrado de sesiones en dos etapas, series con huecos a cero y zonas horarias.
La tabla equivalente a la vista materializada del original, mantenida al escribir cada evento. El panel responde rápido aunque el histórico crezca.
Las reglas de conteo no se inventan aquí: son las del servicio original, verificadas corriendo su propia suite de tests contra el mismo fixture.
Backups diarios verificados con rotación, healthz con sonda de escritura, retención configurable y /metrics en formato Prometheus.
Cómo funciona
Ghost 6 habla con Tinybird para pintar su panel de estadísticas: un cloud de código cerrado. Quien autoaloja se queda con el panel vacío, o manda los datos de sus lectores fuera. GhostBird ocupa ese sitio y responde el mismo protocolo.
No hay servicios intermedios que instalar: el collector está dentro del binario. El tracker sigue POSTeando, el dashboard sigue leyendo pipes y los JWT los sigue firmando Ghost. Solo que ahora todo vive en tu máquina.
{
"tinybird": {
"workspaceId": "ghostbird",
"adminToken": "<secreto compartido>", // el mismo que -admin-token
"tracker": {
"endpoint": "https://TU-SITIO/ghb/api/v1/page_hit"
},
"stats": {
"endpoint": "http://127.0.0.1:18181",
"endpointBrowser": "https://TU-SITIO/ghb"
}
}
}
Hueco para el contenido que decida el propietario: temas, casos y observaciones.
El panel de analytics que ya tienes, alimentado por tu servidor.
El compromiso
Licencia
No es open core: no hay funciones guardadas para un plan de pago, porque no hay plan de pago. Si modificas GhostBird y lo sirves en público, el AGPL pide compartir los cambios. Esa cláusula es el punto, no la letra pequeña.
Gobierno
Issues, parches y decisiones de rumbo a la vista. El proyecto sirve a sitios reales en producción desde el día uno, así que se mantiene, no se arrincona.
Privacidad
Sin telemetría, sin phone-home, sin estadísticas anónimas de uso. El binario no abre conexiones salientes más que las que configures, y por defecto ninguna.
Para quién
Tu pestaña de estadísticas vuelve a funcionar tal cual, con métricas que entienden miembros, posts y gift links.
Webs colectivas que no quieren mandar los datos de sus lectores a un cloud ajeno para tener un panel.
Mantienes Ghost para clientes sin sumar otra factura, otra cuenta o otro panel que aprender.
Cero conexiones salientes, un SQLite auditable y AGPL. Lo mínimo, bien hecho.
Dudas razonables
Sigue con ellos si te gustan. GhostBird no compite con un panel de análisis: te devuelve el que Ghost trae de fábrica. Además cuenta cosas que un contador genérico no modela: estado de miembro (free, paid, comped, gift), atribución por post y visitas desde gift links.
La suite de tests oficial del proveedor original, publicada bajo MIT y vendorizada en el repo, corre entera contra el mismo fixture: misma entrada, misma salida. Es compatibilidad de contrato, no una copia del producto. GhostBird es independiente y no está afiliado a Ghost Foundation ni a Tinybird.
Menos de 10 MB de RAM medidos en producción. Las consultas leen una tabla de sesiones agregada al escribir cada evento, así que el panel responde rápido aunque acumules millones de eventos. Un binario estático de unos 11 MB sin CGO.
Diarios, con VACUUM INTO y verificación quick_check, con rotación de 14 días. /healthz incluye una sonda de escritura que responde 503 si la base de datos deja de admitir escrituras, con el disco lleno incluido.
AGPL-3.0, para siempre. Sin tier de pago ni funciones cerradas. Si lo modificas y lo sirves en un servidor público, comparte los cambios.
Segundo hueco para el contenido que decida el propietario.
Instalación
El instalador crea un usuario dedicado, una unit de systemd endurecida y un token aleatorio que se muestra una sola vez. Después, dos URLs en la config de Ghost y a correr.
curl -fsSL https://raw.githubusercontent.com/gnacho/ghostbird/main/install.sh | sh
CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o ghostbird ./cmd/ghostbird
El one-liner necesita el repositorio público; las releases traen binarios linux amd64 y arm64 con checksums.