Aller au contenu
casty web sur un ordinateur portable en thème sombre et sur un téléphone en thème clair

casty

Votre propre nœud de lecture Farcaster, et un client qui lit depuis ce nœud et écrit à travers lui. Trois commandes, pas de clé d'API, pas de gas.
Fenêtre de terminal
git clone https://github.com/castyfun/casty.git && cd casty
./scripts/0-provision.sh # (0) compute: a server with a 2 TB volume, or --host user@ip for your own
./scripts/1-node.sh # (1) a Snapchain read node: installed, synced, with a tunnel to it
./scripts/2-client.sh # (2) a client: casty, an app key for your account, your feed from your node

Trois commandes : (0) le calcul, (1) un nœud de lecture, (2) un client. ./scripts/deploy.sh lance les trois d’un coup, et Tout le parcours explique chaque étape et le protocole derrière.

Version verticale, 59 s

casty installe un nœud de lecture Snapchain, une copie complète de Farcaster, sur un hôte que vous contrôlez, et vous donne un client qui ne parle à rien d’autre : une commande de terminal et une page pour le navigateur et le téléphone. Votre fil, vos mentions et vos fils de discussion sont lus depuis votre nœud ; vos casts, réponses, likes, recasts et follows partent à travers lui. Aucune API hébergée ne se trouve entre vous et le réseau, donc il n’y a ni clé d’API à obtenir ni limite de débit à respecter.

Un serveur avec un volume de 2 To et un pare-feu chez Hetzner ou AWS, Snapchain dessus, le client sur votre machine, et la page sur l’hôte derrière HTTPS. Le nœud se synchronise pendant quelques heures.

Fenêtre de terminal
git clone https://github.com/castyfun/casty.git && cd casty
./scripts/deploy.sh --fid <your fid> --domain node.example.org

Vous avez déjà une machine Linux avec 2 To libres ? Ajoutez -- --host user@ip.

Pas de serveur : casty se connecte à n’importe quel nœud Snapchain, l’un des vôtres sur une autre machine ou un nœud public, et le retient. Prêt en une minute.

Fenêtre de terminal
git clone https://github.com/castyfun/casty.git && cd casty
./scripts/2-client.sh --node https://snap.farcaster.xyz:3381 --fid <your fid>

Puis ./bin/casty web et, dans « you », « add a key with your wallet ».

Collez un seul prompt dans Claude Code, Codex, Cursor ou un autre agent de programmation. Il lit llms.txt, vous demande laquelle des deux voies vous voulez, et ne vous demande jamais votre phrase de récupération.

Set up casty for me: https://github.com/castyfun/casty.
Read https://castyfun.github.io/casty/llms-full.txt first.
...

Les lectures viennent de votre nœud, donc le fil est aussi rapide que la machine sur laquelle il tourne. Les écritures sont signées sur votre machine avec une clé d’application que seul casty détient, et votre nœud les relaie aux validateurs. La clé est ajoutée avec un seul message signé, approuvé par votre portefeuille dans le navigateur : pas de transaction, pas de gas, pas de RPC Ethereum.

  • Trois scripts et une commande. 0-provision.sh loue le serveur ou vérifie le vôtre, 1-node.sh installe Snapchain et attend sa synchronisation, 2-client.sh installe casty et ajoute une clé. deploy.sh les exécute dans l’ordre et reprend là où une exécution s’est arrêtée.
  • Un client en terminal. casty feed, casty cast, casty like 2 : du texte brut pour vous, --json pour les scripts, des numéros qui passent d’une commande à la suivante.
  • Une page pour le navigateur et le téléphone. Le fil, les fils de discussion, les mentions, les profils et une zone de rédaction, en clair et en sombre, avec des raccourcis clavier sur un ordinateur portable et l’ajout à l’écran d’accueil sur un téléphone.
  • Votre nœud, de partout. casty serve met la page sur l’hôte du nœud derrière HTTPS, avec un index du fil qui répond immédiatement et des notifications push pour les mentions et les réponses.
  • Des clés que vous voyez. Chaque clé d’application de votre compte, ce qu’elle peut signer, quand elle expire, et la révocation depuis le terminal ou avec la clé elle-même.
  • Testé sans nœud. Un nœud Snapchain factice vérifie chaque signature, si bien que le client, les scripts et la page passent leurs vérifications hors ligne en CI.
$ casty feed --limit 3
1 @casty-test · 0s · via casty
Reading the feed from my own node. No API key, no rate limit.
2 @user-2000000002 · 22d · via app-alpha
@casty-test thanks for the pointer, it worked.
https://example.com/2000000002/3
3 @user-2000000011 · 22d · via app-beta
Reading the Snapchain docs on a train. A good way to spend an hour.
$ casty like 2
liked 2000000002:0x973d398ad75e1f25fa780085f3c22d30b01d2504
  • Un compte de test Farcaster : un fid avec au moins une storage unit, et un portefeuille qui détient l’adresse à laquelle il est enregistré, ou la phrase de récupération de cette adresse. casty utilise la phrase une seule fois, pour signer la demande de clé, et ne l’écrit jamais sur le disque.
  • Un hôte. Soit des identifiants pour Hetzner Cloud (HCLOUD_TOKEN et la CLI hcloud) ou AWS (la CLI AWS v2 et un profil ou une clé d’accès), soit un accès SSH à une machine que vous avez déjà et qui peut faire tourner Docker. Voir Un nœud à la maison pour ce dernier cas.
  • Une paire de clés SSH, par défaut ~/.ssh/id_ed25519 et ~/.ssh/id_ed25519.pub.
  • Sur votre machine : ssh, curl et jq. Node.js 22.12 ou plus récent uniquement pour compiler le client vous-même (2-client.sh --from-source). macOS et Linux fonctionnent ; sous Windows, lancez les scripts dans WSL2.

L’hôte du nœud a besoin de ce que demande Snapchain : 16 Go de RAM, 4 vCPU, 2 To de disque libre et une IP publique (getting started). Sur un hôte loué, l’étape 0 choisit le serveur et le volume, et l’étape 1 vérifie l’hôte avant d’installer quoi que ce soit.

L’étape 1 est la plus longue : à son premier démarrage, le nœud télécharge un instantané de plusieurs centaines de Go, puis rattrape les blocs produits depuis cet instantané. Comptez des heures. 1-node.sh attend et affiche le retard du nœud après chaque vérification. Ctrl-C ne met fin qu’à l’attente ; le nœud continue de se synchroniser, et ./scripts/1-node.sh status --wait reprend l’attente.

casty ne connaît pas les prix de votre fournisseur. Une vraie exécution de 0-provision.sh liste le serveur, le volume et le pare-feu qu’elle s’apprête à créer, indique qu’ils sont facturés jusqu’à ce que vous les supprimiez, et ne continue qu’une fois que vous avez retapé le nom du serveur. ./scripts/0-provision.sh --destroy supprime les trois.

Le dépôt fournit un nœud Snapchain factice qui sert la même API HTTP à partir de fixtures et vérifie les signatures de chaque message qui lui est soumis. Avec lui, tout le client fonctionne hors ligne :

Fenêtre de terminal
pnpm install --frozen-lockfile
pnpm demo

pnpm demo démarre le nœud factice sur un port libre, ajoute une clé d’application avec la phrase de test BIP-39 test test test test test test test test test test test junk, lit le fil avec et sans les casts d’une application, publie un cast, en like un, et supprime sa configuration temporaire à la fin. Les fids des fixtures commencent à 2000000001 et n’appartiennent à personne.

pnpm demo:web fait la même préparation, puis sert casty web, la page pour le navigateur et le téléphone, sur un port libre jusqu’à ce que vous appuyiez sur Ctrl-C.

Usage: deploy.sh [--domain <name> | --tailscale] [--read-only] [--fid <fid>] [--from-source]
[--env <file>] [--yes] [--dry-run] [-- <0-provision.sh options>]
Runs, in order: 0-provision.sh (unless --env's file already describes a host; with --domain,
again on that host to open 80 and 443), 1-node.sh (the node, the wait for its sync, the
tunnel), 2-client.sh (the client, an app key, the feed) and, with a front named, 1-node.sh
serve. Every step is safe to run again: the same command picks up where a run stopped.
--domain <name> serve the page on the host as https://<name> (Caddy; opens 80 and 443)
--tailscale serve it as the host's name on your tailnet instead
--read-only a page that reads only: no app key or passphrase leaves this machine
--fid <fid> no seed phrase: 2-client.sh --fid; add the key in ./bin/casty web with your
wallet, then run the same command again for the page on the host
--from-source build the client here with Node and pnpm instead of downloading it
--env <file> node.env to write or read (default: node.env)
--yes do not ask before creating anything
--dry-run print what provisioning and the node would run; the client is skipped
-- <options> passed to 0-provision.sh, e.g. -- --provider aws --region eu-west-1
Exit codes: 0 ok, 2 bad arguments, otherwise the code of the step that stopped.

Commencez par 0. Provisionner un hôte. Si vous voulez savoir ce que les scripts mettent en place avant de les exécuter, lisez Nœuds de lecture et validateurs et Adresse de custody et clés d’application. Sécurité liste chaque secret concerné et comment révoquer chacun d’eux.