Un año de Org Social, mi red social

Read in English

Ya hace un año creé Org Social. Una simple especificación de texto plano y un archivo .org servido por HTTP. Hoy toca hacer cuentas, ver cómo se ha movido el proyecto, qué ha funcionado y qué no. Y sobre todo, contar la historia de un año de desarrollo y comunidad.

Una vista de pájaro del año entero sería esta:

2025

  • Agosto: nace la especificación (12 ago). Portada de Hacker News y 150 estrellas en 24 horas. Primer cliente org-social.el (16 ago). Spec 1.1: la primera contribución externa elimina :REPLY_URL:.
  • Septiembre: nace el Relay. Llegan los grupos a la especificación.
  • Octubre: org-social.el v2.0 con la interfaz rediseñada (1 oct). Entra en MELPA (26 oct). Propuesta a la lista de Org Mode.
  • Noviembre: Relay v1.0 y nace host. Récord de 581 posts en un mes, posiblemente gracias a que el Relay indexó todas las cuentas. Spec 1.4: compartir posts (:INCLUDE:) y migración de dominio (:MIGRATION:).
  • Diciembre: Org Social supera a twtxt en actividad. Spec 1.5: posts solo para las personas mencionadas (:VISIBILITY:).

2026

  • Enero: la ID se muda a la cabecera (spec 1.6). Cambio muy importante que requirió sincronización entre todo el software del ecosistema.
  • Mayo: Org Social llega a la App Store (11 may). Spec 1.7 con la propiedad :BOT:.
  • Julio: Planet Emacslife adopta Org Social. El Relay estrena puentes a Mastodon y RSS. Se integran los Webmentions en la especificación.

Del estallido a la madurez

El otoño de 2025 fue el gran estallido.

La especificación empezó a moverse deprisa, y buena parte del mérito fue de las propuestas del exterior. En la versión 1.1 (el mismo 16 de agosto) quité la separación entre * Posts y el primer **, y eliminé la propiedad :REPLY_URL:. Ese cambio lo empujó @confusedalex: un desconocido que apareció, señaló que sobraba, y tenía razón. Nada valida más una idea que un extraño abriéndote un issue para mejorarla.

A partir de ahí, la especificación fue engordando con criterio:

  • 1.2: el avatar pasó a exigir mínimo 128x128 en JPG o PNG.
  • 1.3: llegaron :MOOD: (reacciones) y :GROUP: (grupos). Los grupos se añadieron el 20 de septiembre.
  • 1.4: :INCLUDE: para compartir posts de otros (el clásico boost) y :MIGRATION: para avisar de un cambio de dominio.
  • 1.5: :VISIBILITY: con valor mention, para posts que solo ven las personas mencionadas.

Y mientras la especificación crecía, también lo hacía el ecosistema. Org Social dejó de ser un archivo para convertirse en una constelación de programas.

Antes incluso de que existiera el Relay, el descubrimiento de gente era artesanal con un archivo registers.txt en el repositorio donde la gente se apuntaba a mano. Llegó a 17 usuarios activos.

El Relay nació el 5 de septiembre y alcanzó su v1.0 el 1 de noviembre. Es la pieza que indexa usuarios, menciones, respuestas, grupos e hilos por toda la red, para que un cliente pueda descubrir gente nueva y enterarse de que un desconocido te ha mencionado. Jubiló al registers.txt y aparecieron un montón de cuentas nuevas que estaban ahí pero no se veían.

El 26 de octubre, con la versión 2.3, org-social.el entró en MELPA. Ese es el momento en el que el cliente de Emacs se volvió estable de verdad.

El cliente de Emacs que tuve que reescribir entero

Llegar a ese cliente estable no fue gratis. Fue mi gran dolor de cabeza.

La primera versión de org-social.el la escribí en agosto, deprisa, para demostrar que la idea funcionaba. Un solo archivo que fue creciendo commit a commit: leer feeds, pintar el timeline, responder, encuestas. Funcionaba. Pero por dentro era una bola de nieve. La lógica y la interfaz estaban entrelazadas, todo vivía en el mismo sitio, y cada función nueva era una pelea. Cuando quise añadir hilos, grupos, notificaciones y tiempo real, choqué contra un muro: la arquitectura no daba más de sí.

Con todo lo aprendido lo reescribí. El 1 de octubre de 2025 anuncié la segunda versión, org-social.el v2.0, con la interfaz completamente rediseñada y "la mayor actualización hasta la fecha". Cambió más de 4.600 líneas de golpe. Partí el monolito en módulos: el parser por un lado, los feeds por otro, la interfaz en su propia carpeta ui/ dividida en buffers (timeline, hilo, perfil, grupos, búsqueda, descubrir, notificaciones), el Relay, el tiempo real, el validador, y más cosas. Y ahí tuve que aplicar varias estrategias de optimización para evitar bloqueos mientras Emacs procesaba feeds o subfeeds. La reescritura fue un parto largo y doloroso, pero mereció la pena.

Durante el proceso encontré un bug en el propio Org Mode.

Cada post de Org Social necesita un identificador único. La decisión original, tomada en los primeros días, fue usar timestamp ISO 8601 dentro del drawer de propiedades. Un post era así.

**
:PROPERTIES:
:ID: 2025-05-01T12:00:00+0100
:END:
Este es mi post.

¿Ves esa cabecera vacía, el ** seguido de nada? Pues no está vacía, debe llevar un espacio detrás; aunque la documentación de Org Mode no lo indica y es ambigua. Una cabecera de nivel dos vacía necesita ese espacio final para ser sintaxis válida. Sin el espacio, ** deja de ser una cabecera. El problema es que muchísima gente (yo incluido) tiene activado delete-trailing-whitespace al guardar, un comando de Emacs que borra los espacios sobrantes al final de cada línea. Es una buena práctica universal. Y silenciosamente te destrozaba todos los posts.

Lo reporté y aporté un parche, pero no fue aceptado por temas de retrocompatibilidad. Aunque la discusión fue muy interesante.

Me vi forzado a incluir una solución en la versión 1.6, el 4 de enero de 2026. Moví la ID a la cabecera.

** 2025-05-01T12:00:00+0100
Este es mi post.

Ahora el identificador va donde nada lo puede borrar.

En mayo de 2026 marqué el formato antiguo como legacy. Sigue siendo válido por compatibilidad, pero recomiendo el nuevo y documento la trampa del espacio para quien se la encuentre. Aproveché en esa versión para traer también :LOCATION:, :BIRTHDAY:, :LANGUAGE: y :PINNED:.

Durante estos meses escribí varios artículos alrededor del proyecto: Por qué Org Social es la alternativa ética al Fediverso, donde defiendo el proyecto sin esconder sus límites, y Tutorial rápido para tener un blog online a partir de Org mode gracias a Org Social, donde uso el ecosistema para publicar un blog sin servidor.

Con la especificación asentada y el cliente maduro, quedaba la asignatura pendiente de siempre: que empezar fuera fácil para cualquiera, también fuera de Emacs.

iOS y host: por fin una puerta de entrada fácil

El 18 de noviembre de 2025 nació host, el servicio de hosting para tu social.org con nick y URL pública automáticos; muy en sintonía con la filosofía de Tilde. No todo el mundo tiene un servidor donde subir un archivo, y esto lo resolvía de raíz. Además, abría la puerta a clientes nativos, ya que permitía sincronizar tu social.org desde cualquier dispositivo.

Para comunicarnos, la gran mayoría de las personas usamos mucho más el smartphone que el escritorio. Un cliente nativo de iOS rompía esa barrera.

El 11 de mayo de 2026 la app llegó a la App Store. Por primera vez podías llevar tu red social descentralizada en el bolsillo, con la interfaz que espera cualquiera que haya tocado un móvil: posts, respuestas, hilos, encuestas, grupos, posts programados y exportación de tu feed. Y todo ello sin analíticas, sin rastreo, sin telemetría, sin SDKs de terceros.

La combinación de host y la app de iOS hizo que Org Social fuera accesible.

El flujo pasó a ser tan sencillo como esto:

  1. Te registras en host desde el móvil. Por detrás el host te da nick y URL pública.
  2. Escribes en el cliente de iOS y guardas. El cliente sube tu social.org a host.

Transparente y sin fricciones.

Por supuesto, esto también es compatible con el cliente de Emacs, y es bidireccional: puedes escribir en Emacs y continuar en iOS, o viceversa.

El 21 de abril de 2026 publiqué un post cortísimo, "escribo desde iOS", desde una versión de pruebas de la app. Verlo aparecer en el timeline, salido de un iPhone y no de un buffer de Emacs, fue de esos momentos en los que un proyecto cruza una frontera.

En mayo la app recibió temas personalizables y notificaciones push, y con eso la di por terminada. Entró en modo mantenimiento. No todo software tiene que crecer para siempre.

Ese mismo mes llegó la versión 1.7 de la especificación con la propiedad :BOT:, para marcar los posts generados por bots sin ensuciar el timeline de nadie. Con ella, por ejemplo, puedes jugar una partida de ajedrez contra un bot desde Org Social.

Y el año trajo señales de madurez. El Relay estrenó puentes para seguir cuentas de Mastodon (ActivityPub) y feeds RSS/Atom desde cualquier cliente de Org Social, como si fueran usuarios más. Poco más tarde se integró Webmentions, para que al enlazar el artículo de alguien reciba un aviso.

Org Social empieza a hablar con el resto de la web, no solo consigo mismo.

Presente

Un año después, ¿en qué punto estamos?

La foto de la comunidad es la de un proyecto de nicho, sano y estable.

Los números:

Métrica Total
Cuentas registradas 267
Feeds indexados 236
Publicaciones 2.392
Seguimientos 1.274
Grupos activos 5

Se mantiene estable en torno a 19 cuentas activas al mes. No son millones ni lo serán. Es una comunidad pequeña que sigue ahí mes tras mes.

La especificación va por la 1.7, aunque tampoco creo que salga una nueva versión, al menos a corto plazo. Siento que ya está acabada.

El ecosistema oficial ya lo forman una docena de piezas:

  • org-social: la especificación, el documento madre.
  • org-social.el: el cliente de Emacs, hoy por la versión 2.14 y más allá.
  • relay: el servidor P2P que indexa la red.
  • host: hosting de tu social.org con nick automático.
  • OrgSocialKit / ios: librería y cliente nativo para iOS y macOS en Swift, disponible en la App Store.
  • live-preview y static-preview: tarjetas de previsualización tipo redes sociales para las URLs de los posts.
  • web-reading: un visor web del timeline, para quien no usa Emacs.
  • push: notificaciones push para la app de iOS.
  • rss-bridge: convierte cualquier feed RSS/Atom a formato Org Social, para seguir lo que quieras.
  • awesome: la lista curada de clientes, relays, librerías y herramientas.

Lo importante ya existe.

Futuro

Me encantaría un cliente para Android y otro para terminal. Ninguno de los dos es trivial ni imposible.

También encajaría ampliar host para que incluyese contenido multimedia, como imágenes y vídeos. Aún lo estoy pensando.

Lo que sí quiero es mejorar la financiación. Cada Relay es un nodo de la red: cuantos más haya, más robusta será. Y la cuenta de developer de Apple no se paga sola. Si te gusta el proyecto, plantéate hacer una donación.

Y si has llegado hasta aquí, podrías dejar un comentario en tu social.org siguiendo este tutorial.

¡Nos vemos en el timeline!

Ayúdame a seguir escribiendo

Cada café me da un empujón para escribir el siguiente artículo.

Comentarios

Todavía no hay ningún comentario.

Sigue leyendo