8.0 KiB
title: Rybbit created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, web-analytics, privacy, self-hosted, analytics, typescript, nextjs, postgresql, clickhouse, modern] confidence: high contested: false sources: [https://selfh.st/apps/?tag=web-analytics]
🚀 Rybbit
Plateforme d'analyse web moderne écrite en TypeScript/Next.js — concurrent récent et ambitieux d'Umami, avec un focus sur la session replay et l'e-commerce tracking. Source : selfh.st
📋 Métadonnées
| Métadonnée | Valeur |
|---|---|
| Site web | rybbit.io |
| GitHub | github.com/rybbit-io/rybbit |
| License | AGPL-3.0 |
| Langage | TypeScript / Next.js / ClickHouse / PostgreSQL |
| Étoiles | 667 |
| Dernière MAJ | 2026-05 |
| Catégorie | cat-web-analytics |
📝 Description
Rybbit est un projet d'analytics web open source lancé en 2024, qui s'est rapidement imposé comme l'un des concurrents les plus actifs d'Umami et Plausible. Sa stack moderne (Next.js 14, ClickHouse pour les événements haute volumétrie, PostgreSQL pour les métadonnées) lui permet de gérer des sites à fort trafic tout en proposant des fonctionnalités avancées que les autres outils privacy-first n'ont pas.
Différenciateurs clés : session replay (lecture vidéo des sessions anonymisées), heatmap de clics et scroll depth, tracking e-commerce enrichi (revenus, AOV, conversion par produit), funnels multi-étapes, cohortes et rétention, API complète, dashboards publics en lecture seule, multi-sites, multi-utilisateurs (avec organisations), live stats (rafraîchissement temps réel), intégrations natives (Slack, Discord, webhooks).
Rybbit est distribué sous AGPL-3.0, ce qui en fait une alternative commercialement utilisable tant qu'on auto-héberge (sans revendre le service en marque blanche). L'éditeur propose une offre cloud à venir. Le projet est en pleine expansion — c'est l'un des projets self-hosted analytics qui bouge le plus vite en 2025-2026.
L'interface est particulièrement soignée (Next.js App Router, animations, charts modernes), avec un mode sombre élégant et une navigation bien pensée. Les timezones sont gérées correctement, et l'export des données se fait en CSV ou via l'API.
🚀 Installation
Option 1 : Docker Compose (recommandé)
# docker-compose.yml
version: '3.8'
services:
rybbit:
image: ghcr.io/rybbit-io/rybbit:latest
container_name: rybbit
restart: unless-stopped
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://rybbit:***@postgres:5432/rybbit
CLICKHOUSE_URL: http://clickhouse:8123
REDIS_URL: redis://redis:6379
BETTER_AUTH_SECRET: changez-32-chars-min
NEXT_PUBLIC_BASE_URL: https://rybbit.example.com
depends_on:
postgres:
condition: service_healthy
clickhouse:
condition: service_healthy
redis:
condition: service_healthy
networks:
- rybbit-net
postgres:
image: postgres:16-alpine
container_name: rybbit-postgres
restart: unless-stopped
environment:
POSTGRES_DB: rybbit
POSTGRES_USER: rybbit
POSTGRES_PASSWORD: rybbit
volumes:
- ./postgres-data:/var/lib/postgresql/data
networks:
- rybbit-net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U rybbit"]
interval: 10s
timeout: 5s
retries: 5
clickhouse:
image: clickhouse/clickhouse-server:24-alpine
container_name: rybbit-clickhouse
restart: unless-stopped
environment:
CLICKHOUSE_DB: rybbit
CLICKHOUSE_USER: rybbit
CLICKHOUSE_PASSWORD: rybbit
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1
volumes:
- ./clickhouse-data:/var/lib/clickhouse
ulimits:
nofile:
soft: 262144
hard: 262144
networks:
- rybbit-net
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8123/ping"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
container_name: rybbit-redis
restart: unless-stopped
volumes:
- ./redis-data:/data
networks:
- rybbit-net
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
networks:
rybbit-net:
driver: bridge
Lancement :
docker compose up -d
# Accéder à http://localhost:3000 et créer le premier admin
Option 2 : Installation manuelle (Node.js)
git clone https://github.com/rybbit-io/rybbit.git
cd rybbit
pnpm install
# Configurer .env (DATABASE_URL, CLICKHOUSE_URL, REDIS_URL, BETTER_AUTH_SECRET)
pnpm db:migrate
pnpm build
pnpm start
Prérequis : Node.js 20+, pnpm 9+, PostgreSQL 16+, ClickHouse 24+, Redis 7+.
⚙️ Configuration
- BETTER_AUTH_SECRET : clé secrète JWT, 32+ caractères, obligatoire en production.
- DATABASE_URL : PostgreSQL pour les utilisateurs, orgs, metadata.
- CLICKHOUSE_URL : URL HTTP du serveur ClickHouse (défaut :
http://clickhouse:8123). - REDIS_URL : pour le rate limiting et la cache.
- NEXT_PUBLIC_BASE_URL : URL publique servie par l'app.
- ALLOWED_ORIGINS : liste CORS des sites autorisés à poster des events.
- Snippet de tracking :
<script async defer src="https://rybbit.example.com/api/script.js"
data-site-id="votre-site-id"></script>
- Session replay : désactivé par défaut (charge CPU), à activer par site.
- E-commerce : événements
purchase,add_to_cart,checkoutsupportés nativement. - Multi-org : les organisations permettent de regrouper plusieurs sites et utilisateurs.
🔄 Alternatives
Open source :
- app-umami — concurrent principal, plus mature
- app-plausible — privacy-first, script 1 Ko
- app-matomo — analytics PHP complet
- app-ackee — minimaliste Node.js
- app-goatcounter — Go ultra-léger
- app-open-web-analytics — PHP traditionnel
- app-litlyx — TypeScript simple
- app-swetrix — TypeScript Plausible-like
- app-vince — Go minimaliste
Propriétaire (SaaS) :
- Google Analytics 4 — leader, RGPD complexe
- PostHog — analytics + session replay managé
- Hotjar — heatmaps + replay
- Plausible Cloud — payant
- Matomo Cloud — version managée
- Mixpanel — product analytics
- Amplitude — product analytics enterprise
- Umami Cloud — service officiel
🔒 Sécurité
- BETTER_AUTH_SECRET : clé critique, à générer via
openssl rand -base64 64et stocker en secret manager. - HTTPS obligatoire : Traefik, Caddy ou Nginx avec certificats Let's Encrypt.
- ALLOWED_ORIGINS : configurer strictement les domaines autorisés, sans wildcard.
- ClickHouse : ne jamais exposer le port 8123/9000 sur Internet — bind sur réseau Docker interne uniquement.
- PostgreSQL : idem, exposition interne uniquement.
- Redis : bind interne, ou exiger un mot de passe (
requirepass). - Sauvegardes :
pg_dumpquotidien (PostgreSQL), snapshots ClickHouse viaBACKUP DATABASE. - Mettre à jour régulièrement — releases fréquentes, suivre les breaking changes (projet jeune).
- Rate limiting sur
/api/event: Rybbit dispose d'un rate limit Redis natif, surveiller les métriques. - Restreindre l'accès admin via IP allowlist ou VPN si possible.
- Activer 2FA sur le compte admin (TOTP).