5.9 KiB
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 |
| GitHub / Codeberg | grunfink/snac2 |
| Licence | MIT |
| Langage | C99 |
| Étoiles GitHub | 104 ⭐ |
| Dernière MAJ | 2026-06 |
| Catégorie | cat-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é
# 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)
# 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
akkoma.example.org {
reverse_proxy 127.0.0.1:8001
}
Option 2 : Docker (image communautaire)
# 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
- Initialiser l'instance :
snac init /var/lib/snac/votre-domaine. - Créer le premier compte admin :
snac adduser /var/lib/snac/votre-domaine pseudo. - Configurer un reverse proxy : obligatoire — Snac n'inclut pas le TLS. Caddy/Nginx/Traefik avec Let's Encrypt.
- Activer la fédération : tester en suivant un compte Mastodon distant, vérifier
/.well-known/webfinger. - Uploads média : par défaut stockés dans
/var/lib/snac/data, taille max configurable. - Sauvegardes : un simple
cp -r /var/lib/snacsuffit — 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
snacCLI en root). L'utilisateur web ne s'authentifie que par cookies de session générés après login. - Cookies de session : flags
SecureetHttpOnlypar 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
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