--- title: Snac created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, activitypub-fediverse, microblogging, c, minimal, fediverse, single-binary, no-javascript] confidence: high contested: false sources: [https://selfh.st/apps/?tag=activitypub-fediverse, https://codeberg.org/grunfink/snac2] --- # ⚡ Snac > **Le serveur ActivityPub le plus minimaliste du Fediverse** — un binaire C de quelques centaines de Ko, sans JavaScript, sans framework, qui fait juste le job. ## 📋 Informations Générales | Champ | Valeur | | :--- | :--- | | **Site web** | [codeberg.org/grunfink/snac2](https://codeberg.org/grunfink/snac2) | | **GitHub / Codeberg** | [grunfink/snac2](https://codeberg.org/grunfink/snac2) | | **Licence** | MIT | | **Langage** | C99 | | **Étoiles GitHub** | 104 ⭐ | | **Dernière MAJ** | 2026-06 | | **Catégorie** | [[cat-activitypub-fediverse\|ActivityPub / Fediverse]] | ## 📝 Description **Snac** (ou **snac2** dans sa version actuelle) est l'œuvre de **grunfink**, un développeur C chevronné. C'est un **serveur ActivityPub minimaliste écrit en C99 pur**, qui se veut l'antithèse de Mastodon et consorts : **un seul binaire**, **pas de framework**, **pas de JavaScript côté client**, **pas de base de données externe** (juste un fichier JSON par utilisateur), **consommation mémoire ridiculement faible** (souvent < 30 Mo de RSS). L'ambition est de fournir un **nœud Fediverse personnel** pour quelqu'un qui veut être présent sur le réseau sans pour autant administrer un Mastodon ou un Pleroma. Snac est mono-instance, mono-utilisateur (ou multi-comptes techniques sur la même instance), avec une **interface web volontairement dépouillée** qui sert du HTML brut — pas de SPA, pas de CDN, pas de tracking. Les posts sont des **statiques HTML** générés à la volée. Côté fédération, Snac est **remarquablement compatible** : il parle ActivityPub avec Mastodon, Pleroma, Akkoma, Misskey, Pixelfed, Bookwyrm, Peertube, Mobilizon, Mbin, et le reste du Fediverse. Les **messages privés**, **boosts**, **favoris**, **follows**, **listes**, **signets** sont gérés. L'auteur publie régulièrement des **extensions ActivityPub** adoptées petit à petit par d'autres serveurs (ex : support natif des `Hashtag`). Forces : **binaire unique, binaire static, ultra-léger, parfait pour un Raspberry Pi Zero 2**, code auditable (le C99 est ce qui se lit le mieux), licence MIT permissive. Faiblesses : pas de GUI d'administration (admin en CLI), pas d'upload d'images volumineux par défaut, pas de support S3, pas de cluster. ## 🚀 Installation ### Option recommandée : binaire natif compilé ```bash # Dépendances : gcc, make, libssl-dev, python3 (pour générer le cert auto-signé) git clone https://codeberg.org/grunfink/snac2.git cd snac2 make sudo make install ``` ### Lancement (derrière un reverse proxy TLS) ```bash # Créer un utilisateur Snac dédié sudo useradd -r -d /var/lib/snac -s /bin/false snac sudo -u snac snac init /var/lib/snac/vous.example.org # Lancer le serveur sudo -u snac snac httpd /var/lib/snac/vous.example.org 127.0.0.1 8001 ``` ### Reverse proxy Caddy ```caddyfile akkoma.example.org { reverse_proxy 127.0.0.1:8001 } ``` ### Option 2 : Docker (image communautaire) ```yaml # docker-compose.yml services: snac: image: grunfink/snac2:latest container_name: snac restart: unless-stopped volumes: - ./data:/var/lib/snac ports: - "8001:8001" command: snac httpd /var/lib/snac/vous.example.org 0.0.0.0 8001 ``` ## ⚙️ Configuration Initiale 1. **Initialiser l'instance** : `snac init /var/lib/snac/votre-domaine`. 2. **Créer le premier compte admin** : `snac adduser /var/lib/snac/votre-domaine pseudo`. 3. **Configurer un reverse proxy** : **obligatoire** — Snac n'inclut pas le TLS. Caddy/Nginx/Traefik avec Let's Encrypt. 4. **Activer la fédération** : tester en suivant un compte Mastodon distant, vérifier `/.well-known/webfinger`. 5. **Uploads média** : par défaut stockés dans `/var/lib/snac/data`, taille max configurable. 6. **Sauvegardes** : un simple `cp -r /var/lib/snac` suffit — c'est toute la base de données (1 fichier JSON par compte + les médias). ## 🔄 Alternatives ### Open Source - [[app-ktistec]] — Approche minimaliste en Crystal. - [[app-mitra]] — Microblog Fediverse en Rust. - [[app-pleroma]] — Le microblogging Fediverse en Elixir, plus complet. - [[app-akkoma]] — Fork de Pleroma. - [[app-mastodon]] — Le standard, en Ruby. ### Propriétaires (ce que cette app remplace) - **Twitter / X** — centralisé, traque publicitaire. - **Threads** (Meta) — non fédéré, lié à Instagram. - **Substack Notes** — centralisé, pas de fédération. ## 🔐 Sécurité - **Pas d'auth intégrée** : Snac n'a pas de mot de passe admin par défaut (accès via `snac` CLI en root). L'utilisateur web ne s'authentifie que par **cookies de session** générés après login. - **Cookies de session** : flags `Secure` et `HttpOnly` par défaut, expires au redémarrage si non renouvelés. - **HTTPS obligatoire** : derrière Caddy/Nginx, configurer HSTS strict. - **Validation ActivityPub** : Snac vérifie la signature HTTP des requêtes fédérées (requis par le protocole), bloque les instances malveillantes. - **CSRF** : protection native via tokens sur les formulaires. - **Pas de base de données** : le fichier JSON est lisible et auditable, mais **sauvegardez-le régulièrement** car une corruption = données perdues. - **Mises à jour** : l'auteur publie souvent, **suivre les commits** car le format JSON peut évoluer. ## 📚 Ressources - [Codeberg grunfink/snac2](https://codeberg.org/grunfink/snac2) - [Manuel Snac (en)](https://codeberg.org/grunfink/snac2/raw/HEAD/snac.1) - [Fediverse.blog — Snac guide](https://fediverse.blog/~/snac/) ## Pages Liées - [[cat-activitypub-fediverse]] — Catégorie parente - [[app-ktistec]] — Approche minimaliste en Crystal - [[app-mitra]] — Microblog Fediverse en Rust - [[recettes-docker-compose]] — Templates Docker