Files
2026-06-09 18:40:21 +02:00

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

  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

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

Pages Liées