--- 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](https://selfh.st/apps/?tag=web-analytics) ## 📋 Métadonnées | Métadonnée | Valeur | | :--- | :--- | | **Site web** | [rybbit.io](https://www.rybbit.io/) | | **GitHub** | [github.com/rybbit-io/rybbit](https://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é) ```yaml # 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 : ```bash docker compose up -d # Accéder à http://localhost:3000 et créer le premier admin ``` ### Option 2 : Installation manuelle (Node.js) ```bash 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** : ```html ``` - **Session replay** : désactivé par défaut (charge CPU), à activer par site. - **E-commerce** : événements `purchase`, `add_to_cart`, `checkout` supporté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 64` et 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_dump` quotidien (PostgreSQL), snapshots ClickHouse via `BACKUP 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). ## 📚 Ressources - [Site officiel](https://www.rybbit.io/) - [Documentation](https://www.rybbit.io/docs) - [GitHub rybbit-io/rybbit](https://github.com/rybbit-io/rybbit) - [Demo live](https://demo.rybbit.io) - [Roadmap](https://github.com/rybbit-io/rybbit/milestones) ## 🔗 Pages Liées - [[cat-web-analytics]] - [[recettes-docker-compose]] - [[app-umami]] - [[app-plausible]] - [[app-matomo]]