ActivityPub

ActivityPub: el protocolo que mueve el fediverso

static

Presentación

ActivityPub

pero he estado en, casi, todas como jagedn.

Conoce a tu audiencia

  • > de 50 años

  • < de 40 años

  • usado java-mail 1.0

  • tienen cuenta en Instagram

Charla

  • Vamos a hablar de redes sociales

  • No vamos a hablar de AI, estás a tiempo de salir

  • Twitter 2006

  • Facebook 2004

  • Linkedin 2003

  • Geocities 1999

  • SixDegrees 1997

  • eMail, BSS …​ guess

Redes centralizadas

  • Qué tienen en común (para un programata)

    • Twitter

    • Facebook

    • Linkedin

    • Instagram

    • …​ ?

Redes libres

  • No, tampoco hablo de dApps ni Crypto

  • Bluesky

  • Threads

  • Mastodon, Pixelfed, Peertube, WriteFreely

  • Diaspora

  • GNU Social

Aplicaciones y protocolos

Gráfico sobre los protocolos compatibles en redes sociales libres.svg

(fuente Wikipedia)

Características

  • Libres (software libre y código abierto)

  • Distribuidas

  • Federadas

ActivityPub

  • JSON-LD y HTTP

  • Actor-Actividad-Objeto

  • Alicia-Creó-Una nota

  • Inbox, Outbox

  • Firmas HTTP

JSON-LD

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://social.jagedn.dev/usuarios/jorge/actividades/123",
  "type": "Create",
  "actor": "https://social.jagedn.dev/usuarios/jorge",
  "published": "2026-03-06T10:00:00Z",
  "to": ["https://www.w3.org/ns/activitystreams#Public"],
  "object": {
    "id": "https://social.jagedn.dev/usuarios/jorge/posts/456",
    "type": "Note",
    "content": "<p>¡Hola Fediverso! Estoy dando una charla sobre ActivityPub</p>",
    "attributedTo": "https://social.jagedn.dev/usuarios/jorge"
  }
}

Tipos de Objetos

  • Actor — Person, Organization, Application, Group …​

  • Activity — Like, Move, Undo, …​

  • Object — Note, Image, Video, Event, Telotraigo, Goal

HTTP Signatures

  • Alicia escribe un post. Su servidor genera el JSON.

  • El servidor de Alicia toma partes del mensaje (como la fecha, el host y el cuerpo) y los "sella" usando su Llave Privada.

  • El mensaje viaja con una cabecera Signature.

  • El servidor de Bob recibe el mensaje. Ve que viene de alicia@instancia.com, va a esa URL, descarga la Llave Pública de Alicia y comprueba si el "sello" coincide.

(no es tan fácil pq algunos programas firman con unos campos y otros no)

Flujo

  • Haces click en "publicar"

  • Se envía una "Note" al endpoint "Outbox"

  • Tu servidor le asigna un "id" y crea un "Create"

  • Tu servidor decide a quién entregarlo (p.e. has mencionado a alguien)

  • Tu servidor hace un POST en cada "Inbox" de cada servidor

  • Cada servidor valida la firma y notifica a cada user en su "Inbox"

Webfinger

Cómo sabe un servidor el inbox de un user?

Usa el standard Webfinger

https://ejemplo.com/.well-known/webfinger?resource=acct:alicia@ejemplo.com

SharedInbox

  • En lugar de 1.000 inbox usamos un sharedInbox

  • El servidor destino reparte a los destinatarios

Creando el proximo Mastodon

  • Api vs ActivityPub

  • Librerías y lenguajes

  • RSA y firmas llaves publica-privada

  • https://fedify.dev/ (Typescript) y FediGoals

Mi conclusión

ActivityPub es como el email en los 80 (no controlas el destino, no controlas cuándo llegará el mensaje, pero si sigues las reglas del protocolo tu aplicación puede hablar de repente con millones de personas)

Eres programata, si esto no te pone estás muerto (profesionalmente hablando)

Questions

?

Thanks