Le stack tech de Discord en 2026
Stack temps-réel hybride Elixir + Rust + Python. Elixir/Erlang OTP porte le fanout messages ; Rust remplace progressivement Go et Elixir sur les chemins chauds ; Python reste sur l'API historique. Messages stockés dans ScyllaDB (migré depuis Cassandra en 2022), infra sur Google Cloud + Kubernetes.
🧱 Stack technique (sourcé public)
Gateway WebSocket + fanout des messages — cœur temps-réel qui pousse chaque message aux bons destinataires. Post viral 2017 sur la mise à l'échelle à 5M+ d'utilisateurs concurrents.
NIFs Rust intégrées dans les nœuds Elixir pour éviter les goulots BEAM sur le tri des membres — cité par Discord comme la clé pour tenir 11M+ d'utilisateurs concurrents sur un serveur unique.
Service 'Read States' (l'état lu/non-lu par utilisateur, milliards de req/jour) réécrit de Go vers Rust en 2020 — motif public : les GC pauses Go étaient inacceptables au 99e percentile.
Stack Python d'origine — API monolithique historique et services outillage internes. Offres backend Python toujours publiées régulièrement.
Reste utilisé pour certains services périphériques mais les chemins hot ont majoritairement basculé vers Rust ou Elixir depuis 2020.
Store principal des messages depuis la migration 2022 — trillions de messages migrés depuis Cassandra en visant des tail latencies P99 nettement plus basses.
Store historique des messages — objet du célèbre post 2017 'How Discord Stores Billions of Messages', remplacé par ScyllaDB en 2022 pour les problèmes de compaction et de garbage collection JVM.
Store d'origine des messages (2015) — abandonné très vite lorsqu'à ~100M messages les read-latencies sont devenues incohérentes (document dans le même post 2017).
Cache et bus de présence (statut en ligne / activité) — mentionné comme composant infra de longue date dans plusieurs posts.
Data warehouse et pipelines analytics — la plateforme data côté Discord est décrite publiquement, avec BigQuery comme colonne vertébrale du warehouse.
Voice/vidéo bâti sur WebRTC avec un Selective Forwarding Unit maison (streaming vers uniquement les destinataires actifs) — architecture décrite publiquement dans les posts voice/vidéo.
Application web principale bâtie sur React + Redux — mêmes composants partagés avec le client desktop Electron.
Client desktop packagé avec Electron — partage la majorité du code du client web (posts publics et offres Client Engineer le confirment).
Apps mobiles historiquement en React Native — Discord a publiquement documenté une réécriture progressive vers Swift (iOS) puis Kotlin (Android) pour améliorer les performances et le tempo de release.
Cloud principal — mentionné dans les posts d'infra temps-réel et de data platform, offres SRE citant GCP explicitement.
Orchestrateur des services — Discord opère un déploiement Kubernetes significatif décrit publiquement, notamment pour les services hors du plan de messages ScyllaDB.
Couche edge et load balancing interne — HAProxy en front, Envoy pour le service-mesh interne (mentionnés dans les offres platform et posts infra).
ML principalement pour Trust & Safety (détection contenus abusifs, spam) et recommandation — offres ML Engineer Python + PyTorch régulières.
🐙 Open-source notable
| Projet | Description | Stars |
|---|---|---|
| erlpack | Extension C/Python de sérialisation Erlang External Term Format utilisée par le gateway WebSocket de Discord — plus dense que JSON pour les événements gateway. | 1k+ |
| sortedcontainers-rs | Port Rust des sorted-containers Python — utilisé dans les NIFs Elixir qui trient les listes de membres de guilde. | ≈100 |
| lilliput | Wrapper Go/C++ (libavcodec, libjpeg, giflib) pour redimensionner images/GIFs — moteur derrière les avatars et embeds Discord. | 2k+ |
| gorepogen | Générateur de code CRUD pour Go — outillage interne open-sourcé. | ≈100 |
| jelly-bean-bot | Divers utilitaires publiés par l'orga github.com/discord — infra hackathons, tooling public, sample-code SDK Discord. | — |
🏛️ Culture ingénierie
Discord fait partie des entreprises les plus prolifiques en engineering blogging depuis 2017 — posts longs, chiffrés, avec vraie post-mortem style (le post 'Why we're switching from Go to Rust' cite les GC pauses Go au P99, celui sur ScyllaDB cite les compactions Cassandra JVM). Le pattern récurrent : partir d'un langage 'assez bon' (Go, Cassandra, MongoDB, React Native) puis migrer vers un choix plus optimisé (Rust, ScyllaDB, natif mobile) une fois la contrainte comprise. Culture 'small teams, big impact' revendiquée dans les offres publiques ; entreprise remote-first depuis la pandémie.
👋 Recrutement
Recrutement remote-first majoritairement US + certains pays européens (offres 'remote in select countries' publiées). Process typique : screening RH → home assignment ou live coding selon rôle → panels (design système, culture) → onsite virtuel. Offres détaillées par stack : Backend Engineer (Elixir / Rust / Python), Platform Engineer (Kubernetes / GCP), Client Engineer (React / Electron / Native), Data / ML Engineer (Python / BigQuery). Page d'offres publique : discord.com/careers.