---
title: Vince
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, web-analytics, privacy, self-hosted, analytics, go, golang, sqlite, minimal, simple]
confidence: medium
contested: false
sources: [https://selfh.st/apps/?tag=web-analytics]
---

# 🐿️ Vince

> Analytics web **ultra-minimaliste** écrit en Go — un **binaire unique** avec **SQLite** par défaut, parfait pour les sites personnels et blogs statiques.
> Source : [selfh.st](https://selfh.st/apps/?tag=web-analytics)

## 📋 Métadonnées

| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | [vinceanalytics.com](https://vinceanalytics.com/) |
| **GitHub** | [github.com/vinceanalytics/vince](https://github.com/vinceanalytics/vince) |
| **License** | AGPL-3.0 |
| **Langage** | Go (single binary) / SQLite |
| **Étoiles** | 73 |
| **Dernière MAJ** | 2026-03 |
| **Catégorie** | [[cat-web-analytics]] |

## 📝 Description

**Vince** est un outil d'**analyse web minimaliste** écrit en Go qui rejoint la famille des analytics "à la GoatCounter" : **single binary**, **SQLite par défaut**, **zéro cookie**, **script ultra-léger** et **déploiement en 30 secondes**. La philosophie est claire : fournir l'**essentiel** des métriques web (visiteurs, pages vues, top referrers, top pages) **sans le superflu**, pour les sites qui n'ont pas besoin de funnels avancés ou de session replay.

Vince se distingue par une **stack technique minimaliste** : pas de Node.js à installer, pas de base de données séparée, pas de runtime tiers. Un **binaire Go unique** + un **fichier SQLite** = l'application complète. Le **script de tracking** est également minimal : une seule balise `<script>` qui envoie un hit à l'API.

Fonctionnalités principales : **tableau de bord par site**, **multi-sites** depuis une instance unique, **API REST** simple, **export CSV**, **géolocalisation** par IP (GeoLite2 optionnel), **détection de bots**, **rate limiting** natif, **totp 2FA** sur l'admin, **temps réel** limité (rafraîchissement à la demande), **tracking des événements** custom basique (`?event=...`).

Vince est **AGPL-3.0**, ce qui le distingue de [[app-goatcounter]] (EUPL). Le projet est plus **jeune et plus petit** que ses concurrents directs (Umami, Plausible, GoatCounter) en termes d'étoiles et de fonctionnalités, mais c'est un **choix solide** pour qui veut un **analytics sans dépendances lourdes** et **avec un binaire facile à auditer** (code en Go, lecture simple).

Idéal pour les **petits sites**, **blogues Hugo/Jekyll**, **portfolios**, **docs statiques** et **projets personnels** qui veulent un analytics **fidèle, simple et sans maintenance**.

## 🚀 Installation

### Option 1 : Docker Compose (recommandé)

```yaml
# docker-compose.yml
version: '3.8'

services:
  vince:
    image: ghcr.io/vinceanalytics/vince:latest
    container_name: vince
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      VINCE_BASE_URL: https://vince.example.com
      VINCE_LISTEN: "0.0.0.0:8080"
      VINCE_DB: /data/vince.db
      VINCE_GEOIP_DB: /data/geoip.mmdb
    volumes:
      - ./data:/data
    networks:
      - vince-net
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080/"]
      interval: 30s
      timeout: 5s
      retries: 3

networks:
  vince-net:
    driver: bridge
```

Lancement :

```bash
docker compose up -d
# Accéder à http://localhost:8080
# Créer le premier compte admin via l'UI ou la CLI :
docker compose exec vince vince admin add admin@example.com
```

### Option 2 : Installation manuelle (binaire Go)

```bash
# Télécharger depuis les releases GitHub
wget https://github.com/vinceanalytics/vince/releases/download/v0.2.0/vince-0.2.0-linux-amd64.tar.gz
tar xzf vince-0.2.0-linux-amd64.tar.gz
sudo mv vince /usr/local/bin/

# Créer un user et un dossier de données
sudo useradd -r -m -d /var/lib/vince -s /bin/bash vince
sudo -u vince mkdir -p /var/lib/vince/data

# Lancer (en dev)
sudo -u vince vince serve -listen 0.0.0.0:8080 -db /var/lib/vince/data/vince.db
```

Configuration **systemd** (`/etc/systemd/system/vince.service`) :

```ini
[Unit]
Description=Vince analytics
After=network.target

[Service]
User=vince
Group=vince
ExecStart=/usr/local/bin/vince serve \
  -listen 0.0.0.0:8080 \
  -db /var/lib/vince/data/vince.db \
  -base-url https://vince.example.com
Restart=on-failure
RestartSec=5
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target
```

```bash
sudo systemctl daemon-reload
sudo systemctl enable --now vince
```

## ⚙️ Configuration

- **VINCE_BASE_URL** : URL publique (utilisée pour CORS et liens partagés).
- **VINCE_LISTEN** : adresse d'écoute (par défaut `127.0.0.1:8080`).
- **VINCE_DB** : chemin du fichier SQLite (ou URL PostgreSQL).
- **VINCE_GEOIP_DB** : chemin optionnel vers **GeoLite2** (`.mmdb`) pour la géolocalisation IP.
- **Snippet de tracking** :

```html
<script async src="https://vince.example.com/v.js"
  data-host="vince.example.com"
  data-d="votre-site-key"></script>
```

- **CLI** : `vince admin` pour gérer les utilisateurs, `vince serve` pour démarrer, `vince version`.
- **Multi-sites** : configurer plusieurs `site-key` depuis l'admin.
- **Rate limiting** : `VINCE_RATE_LIMIT` (par défaut : 100 hits/IP/minute).
- **Authentification** : 2FA TOTP disponible sur le compte admin.
- **Export** : depuis l'UI, bouton "Export CSV" par site et période.

## 🔄 Alternatives

**Open source** :
- [[app-goatcounter]] — concurrent direct en Go, plus mature
- [[app-umami]] — plus complet, base PostgreSQL
- [[app-plausible]] — privacy-first, Elixir
- [[app-ackee]] — minimaliste Node.js
- [[app-matomo]] — analytics PHP complet
- [[app-open-web-analytics]] — PHP traditionnel
- [[app-rybbit]] — TypeScript moderne
- [[app-litlyx]] — TypeScript simple
- [[app-swetrix]] — TypeScript Plausible-like

**Propriétaire (SaaS)** :
- **Google Analytics 4** — leader, RGPD complexe
- **Plausible Cloud** — payant
- **Fathom Analytics** — simple
- **Simple Analytics** — design
- **Pirsch** — allemand RGPD
- **Umami Cloud** — service officiel
- **Counter.dev** — minimaliste freemium (philosophie proche de Vince)

## 🔒 Sécurité

- **Changer le mot de passe admin** créé lors du premier démarrage.
- Activer **2FA TOTP** sur le compte admin (Vince le supporte nativement).
- **HTTPS obligatoire** : Vince ne fait pas HTTPS natif, il faut un **reverse proxy** (Caddy, Traefik, Nginx) avec Let's Encrypt devant.
- **SQLite** : sécuriser le fichier `vince.db` (permissions `600` ou `640`, owner `vince:vince`).
- **Sauvegardes SQLite** : `sqlite3 vince.db ".backup '/var/backups/vince-$(date +%F).db'"` ou simple copie (avec `VACUUM INTO`).
- **Rate limiting** natif : surveiller les logs pour détecter des abus.
- **CORS** : configurer `VINCE_BASE_URL` strictement.
- Mettre à jour régulièrement — releases modérées (projet jeune).
- **fail2ban** sur l'API admin recommandé.
- **Ne pas exposer** le port 8080 sur Internet, binder sur 127.0.0.1 ou réseau interne Docker.
- GeoIP : si non utilisé, **ne pas charger** de base GeoLite2 (économie mémoire + surface réduite).

## 📚 Ressources

- [Site officiel](https://vinceanalytics.com/)
- [Documentation](https://vinceanalytics.com/docs)
- [GitHub vinceanalytics/vince](https://github.com/vinceanalytics/vince)
- [Démo live](https://demo.vinceanalytics.com)
- [API reference](https://vinceanalytics.com/docs/api)

## 🔗 Pages Liées

- [[cat-web-analytics]]
- [[recettes-docker-compose]]
- [[app-goatcounter]]
- [[app-umami]]
- [[app-plausible]]
