--- title: Sink created: 2026-06-08 updated: 2026-06-08 type: app tags: [catalogue, url-shortener, self-hosted] confidence: high contested: false sources: [https://selfh.st/apps/?tag=42, https://github.com/miantiao-me/Sink] --- # 🔗 Sink > **Sink** est un raccourcisseur d'URL Ă©crit en Rust, conçu pour la vitesse, le no-tracking et le dĂ©ploiement lĂ©ger — compatible Cloudflare Pages, Workers et Docker. ## 📋 Informations GĂ©nĂ©rales | MĂ©tadonnĂ©e | Valeur | | :--- | :--- | | **Site web** | https://sink.cool | | **GitHub** | https://github.com/miantiao-me/Sink | | **License** | AGPL-3.0 | | **Langage principal** | Rust | | **Étoiles GitHub** | 6 775 | | **DerniĂšre MAJ** | 2026-06-06 | | **CatĂ©gorie** | [[cat-url-shortener]] | ## 📝 Description Sink est un raccourcisseur d'URL moderne Ă©crit en Rust, initialement conçu pour ĂȘtre dĂ©ployĂ© sur **Cloudflare Workers** et **Cloudflare Pages** (KV + D1) pour des performances edge. Il fonctionne Ă©galement en mode **Node.js** classique derriĂšre un reverse proxy pour les utilisateurs qui prĂ©fĂšrent Docker et un VPS traditionnel. Le projet se distingue par sa philosophie **no-tracking** : pas de cookies, pas de fingerprint, pas d'IP stockĂ©e en clair. Les statistiques agrĂšgent les donnĂ©es par jour, pays et rĂ©fĂ©rent sans traquer individuellement les visiteurs, ce qui en fait un choix Ă©thique et RGPD-friendly par dĂ©faut. L'interface est rapide, sobre, et propose un dashboard minimaliste. CĂŽtĂ© fonctionnalitĂ©s : slugs personnalisĂ©s, links with expiration, protection par mot de passe, QR codes, support des domaines personnalisĂ©s (plusieurs possibles), export CSV des clics, et une **API REST** simple. Le dĂ©ploiement single-binary Node.js (10 MB) ou Worker Rust (cold start < 5ms) est particuliĂšrement adaptĂ© aux RPi et home-labs lĂ©gers. ## 🚀 Installation ### Docker Compose (recommandĂ©) ```yaml services: sink: image: ghcr.io/miantiao-me/sink:latest container_name: sink restart: unless-stopped networks: - web - internal environment: - NEXTAUTH_URL=https://go.example.com - NEXTAUTH_SECRET=${NEXTAUTH_SECRET} - DATABASE_URL=postgresql://sink:sinkpass@db:5432/sink - SUPPORT_URL= - DISABLE_REGISTRATION=false labels: - "traefik.enable=true" - "traefik.http.routers.sink.rule=Host(`go.example.com`)" - "traefik.http.routers.sink.tls.certresolver=letsencrypt" - "traefik.http.services.sink.loadbalancer.server.port=3000" depends_on: - db db: image: postgres:16-alpine restart: unless-stopped networks: - internal environment: - POSTGRES_USER=sink - POSTGRES_PASSWORD=sinkpass - POSTGRES_DB=sink volumes: - sink-db:/var/lib/postgresql/data networks: web: external: true internal: volumes: sink-db: ``` ### DĂ©ploiement Cloudflare (avancĂ©) > Sink supporte un mode Cloudflare Workers + D1 + KV idĂ©al pour un dĂ©ploiement edge. Le repo fournit un guide pas Ă  pas et un `wrangler.toml` d'exemple. Build local : `npx wrangler deploy`. ### Installation manuelle 1. `git clone https://github.com/miantiao-me/Sink.git` 2. PrĂ©requis : Node.js 20+, PostgreSQL 13+ (ou D1 pour Cloudflare). 3. Copier `.env.example` vers `.env` et configurer. 4. Lancer les migrations et `pnpm dev`. ## ⚙ Configuration - `NEXTAUTH_SECRET` : chaĂźne alĂ©atoire pour les sessions. - `DISABLE_REGISTRATION` : Ă  `true` pour usage single-admin. - Activer le rate-limiting (Cloudflare WAF ou Traefik middleware). - Configurer le `MAX_VISITS_PER_LINK` si l'instance est publique. - Brancher un SMTP (optionnel) pour la rĂ©cupĂ©ration de mot de passe. ## 🔄 Alternatives ### Open Source - [[app-chhoto-url]] — autre Rust minimaliste, ultra-lĂ©ger. - [[app-shlink]] — PHP mature, REST API, gĂ©oloc GeoLite2. - [[app-kutt]] — TypeScript moderne, UI soignĂ©e, custom domain. - [[app-dub]] — plateforme marketing complĂšte, plus riche. ### PropriĂ©taires (ce que cette app remplace) - **bit.ly** — leader freemium avec tracking agressif. - **short.io** — custom domain, freemium. - **cutt.ly** — analytics dĂ©taillĂ©es, freemium. - **ow.ly** (Hootsuite) — orientĂ© rĂ©seaux sociaux. ## 🔐 SĂ©curitĂ© - **No-tracking par dĂ©faut** : Sink ne logge pas les IP, alignĂ© RGPD. - **HTTPS strict** : service exposĂ©, ne jamais servir en HTTP. - **Rate limit** : le code supporte un middleware Ă  activer cĂŽtĂ© reverse proxy. - **Backups Postgres** : la base de liens doit ĂȘtre sauvegardĂ©e. - **Migrations Prisma** : exĂ©cuter `pnpm prisma migrate deploy` Ă  chaque mise Ă  jour. ## 📚 Ressources - Site officiel : https://sink.cool - Code source : https://github.com/miantiao-me/Sink - Documentation : https://github.com/miantiao-me/Sink#readme - DĂ©mo : https://sink.cool - Cloudflare guide : https://github.com/miantiao-me/Sink#deployment - CommunautĂ© : https://github.com/miantiao-me/Sink/discussions ## Pages LiĂ©es - [[cat-url-shortener|URL Shortener]] — CatĂ©gorie complĂšte - [[app-chhoto-url]] — Voisin Rust minimaliste - [[app-kutt]] — Alternative TypeScript - [[recettes-docker-compose]] — Templates Docker