tl;dr — clicca qui per provarlo: fai login con un nick, poi
/j grappasul server azzurra. Sei dentro.
Lo screenshot qui sopra è cicchetto — la PWA di grappa — che gira sul mio iPhone, sulla rete Azzurra vera, dentro #it-opers. Guarda bene cosa sta mostrando: io e vjt-claude che ci mettiamo d’accordo sulla scaletta di questo stesso post. Ecco l’aggiornamento in un’immagine. grappa ha smesso di essere un README e un pallino verde di CI. È la cosa da cui leggo IRC adesso, ogni giorno, dal divano.
Per chi arriva ora¶
Un bouncer e i suoi frontend, un repo:
- grappa — un bouncer IRC sempre acceso con una REST API. Resta connesso lui così non devi farlo tu; il telefono gli parla solo in HTTP.
- cicchetto — una PWA che sembra irssi e parla solo REST. Non parsa una riga di IRC. Te la installi sulla home come un’app.
- shottino — un client da terminale standalone (ncurses, C) sulla stessa superficie REST + WebSocket. Stesso bouncer, stessa sessione — per quando vuoi IRC di nuovo in un terminale invece che nel browser. Nemmeno lui parsa IRC; il protocollo resta sul server.
Il pitch completo, di aprile: IRC moderno — sempre acceso, usabile dal telefono — senza farlo smettere di essere IRC. Se quella frase ti dice qualcosa, il pubblico sei tu.
Per entrare basta un nick. La password serve solo agli utenti registrati — e la registrazione esiste solo se ti ospiti grappa per conto tuo. In ogni caso il lavoro vero lo fa il bouncer: resta connesso a IRC al posto tuo, che l’app sia aperta o no. Chiudi la scheda, torni più tardi, riapri — sei ancora dentro, e riprendi la conversazione da dove l’avevi lasciata. Lo scrollback viaggia con te, una finestra scorrevole che tiene il bouncer, così ricordarselo non è compito del telefono.
Cos’è cambiato: la gente lo usa davvero¶
L’altra volta l’MVP era “vicino”. È arrivato. Ora grappa gira in produzione per gli abitué di #it-opers — gente che non sono io, sui loro dispositivi:
- qualcuno l’ha collaudato da iPhone (“not bad”), qualcun altro da Firefox sul desktop
- io lo tengo aperto su telefono e laptop in contemporanea — stessa sessione, stesso scrollback, due schermi
- fa upload di file e immagini — anzi, la copertina di questo post è stata caricata attraverso grappa stesso e buttata in canale dal telefono
- lo scrollback sopravvive ai riavvii, il cambio canale è istantaneo
Non è finito. È usato. Sono due traguardi diversi, e questo è il secondo.
Due cose sotto il cofano¶
Solo la consistenza al tatto — la storia tecnica completa è nel post di aprile, che è quello da leggere se vuoi il perché:
- IRC viene terminato sul server. Il browser non vede mai il protocollo. cicchetto è ignorante di IRC da un capo all’altro; conosce solo risorse REST e un push di eventi su WebSocket.
- Un processo supervisionato per utente, sulla BEAM di Erlang. Se ti cade la connessione a monte è un problema solo tuo — la sessione di nessun altro se ne accorge. La scommessa Elixir-su-BEAM che ripaga esattamente come promesso.
- Lo stato di lettura vive sul server, non sul client. Il marker dei non-letti è un cursore di proprietà del server, così la stessa riga è “ultima letta” sia che apra dopo il telefono o il laptop.
Tre punti; dietro a ognuno c’è una pipeline di test e una decisione di design.
La parte onesta¶
Ancora pre-alpha. Il self-hosting funziona già oggi via Docker Compose, ma non è ancora comodo — verifica TLS, eviction dello scrollback, il proxy NickServ, le rifiniture mobile, la documentazione vera sono tutti aperti. Inciampo in bug ogni settimana e li apro come issue man mano. Quello che non fingerò: che sia finito. Quello che dico: il giro completo — IRC ↔ grappa ↔ cicchetto — è solido, e usarlo è davvero piacevole.
Vienilo a provare¶
Il repo è aperto come sempre: github.com/vjt/grappa-irc. Le issue sono benvenute — è soprattutto così che si trovano i bug. Apri grappa — la stessa PWA degli screenshot qui sopra — fai login, poi sul server azzurra ti basta /j grappa (il # è opzionale). Lì ci trovi vjt-claude — l’AI a cui ho passato il contesto del progetto — o me, quando ci sono. Ora scusami, vado a leggermi il resto di questo canale. Dal telefono.