<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Boletines on Nostr Compass</title><link>https://nostrcompass.org/es/newsletters/</link><description>Recent content in Boletines on Nostr Compass</description><generator>Hugo</generator><language>es</language><atom:link href="https://nostrcompass.org/es/newsletters/feed.xml" rel="self" type="application/rss+xml"/><item><title>Nostr Compass #42</title><link>https://nostrcompass.org/es/newsletters/2026-09-30-newsletter/</link><pubDate>Wed, 30 Sep 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-09-30-newsletter/</guid><description>&lt;p>Bienvenidos de nuevo a &lt;a href="https://nostrcompass.org">Nostr Compass&lt;/a>, vuestra guía semanal de Nostr.&lt;/p>
&lt;p>Nuestra &lt;a href="https://gitworkshop.dev/npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923/relay.ngit.dev/nostr-compass-android">aplicación Nostr Compass para Android&lt;/a> reúne boletines, episodios de pódcast, guías temáticas y notas de voz de colaboradores en un solo lugar. Sus &lt;a href="https://zapstore.dev/apps/naddr1qq2x7un89ehx7um5wf3k7mtsv9ehxtnpwpcqzxrhwden5te0wfjkccte9eaxzurnw3hhyefwv3jhvq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqplqk563kdn">últimas notas de versión firmadas&lt;/a> describen boletines completos con firmas verificadas, números guardados y 110 guías temáticas disponibles sin conexión, y búsquedas locales en las noticias y las transcripciones disponibles. Los colaboradores pueden grabar y responder con notas de voz, revisar una toma guardada antes de enviarla y firmar mediante Amber sin almacenar su clave privada en la aplicación. Las grabaciones públicas se publican en Nostr y Blossom.&lt;/p></description><content:encoded>&lt;p>Bienvenidos de nuevo a &lt;a href="https://nostrcompass.org">Nostr Compass&lt;/a>, vuestra guía semanal de Nostr.&lt;/p>
&lt;p>Nuestra &lt;a href="https://gitworkshop.dev/npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923/relay.ngit.dev/nostr-compass-android">aplicación Nostr Compass para Android&lt;/a> reúne boletines, episodios de pódcast, guías temáticas y notas de voz de colaboradores en un solo lugar. Sus &lt;a href="https://zapstore.dev/apps/naddr1qq2x7un89ehx7um5wf3k7mtsv9ehxtnpwpcqzxrhwden5te0wfjkccte9eaxzurnw3hhyefwv3jhvq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqplqk563kdn">últimas notas de versión firmadas&lt;/a> describen boletines completos con firmas verificadas, números guardados y 110 guías temáticas disponibles sin conexión, y búsquedas locales en las noticias y las transcripciones disponibles. Los colaboradores pueden grabar y responder con notas de voz, revisar una toma guardada antes de enviarla y firmar mediante Amber sin almacenar su clave privada en la aplicación. Las grabaciones públicas se publican en Nostr y Blossom.&lt;/p>
&lt;p>La &lt;a href="https://zapstore.dev/apps/naddr1qq2x7un89ehx7um5wf3k7mtsv9ehxtnpwpcqzxrhwden5te0wfjkccte9eaxzurnw3hhyefwv3jhvq3qwav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qqxpqqqplqk563kdn">última actualización de la aplicación&lt;/a> conserva las grabaciones en cola y los puntos de control de las subidas cuando Android detiene el trabajo en segundo plano, muestra cuándo se necesita la aprobación de Amber y abre la grabación correspondiente desde una notificación. Las vistas separadas de episodios y notas de voz mantienen sus propias posiciones de desplazamiento, mientras que la reproducción se reanuda desde el mismo punto. Las notificaciones de nuevas grabaciones dependen de la programación de tareas y los permisos de Android.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-30-newsletter/#white-noise-android-adds-group-polls-and-account-specific-disappearing-message-defaults">White Noise&lt;/a> añade encuestas cifradas de grupo y avisos sobre historiales de chat incompletos; &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-30-newsletter/#holoboard-adds-nostr-promotion-commands-and-an-android-app">Holoboard&lt;/a> añade &lt;a href="https://github.com/ptrio42/holoboard.space/blob/main/CHANGELOG.md#2026-09-23">comandos de promoción por mensaje privado&lt;/a> y una aplicación para Android; &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-30-newsletter/#fips-pub-domains-tests-signed-public-names-for-a-mesh">fips-pub-domains&lt;/a> prueba nombres públicos firmados en una red de malla; &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-30-newsletter/#marmot-mdk-0110-makes-account-history-gaps-visible">Marmot MDK&lt;/a> hace visibles las lagunas en el historial de grupos cifrados; y &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-30-newsletter/#myco-080081-gives-nearby-apps-their-own-nostr-store">Myco&lt;/a> aporta una identidad y una tienda de Nostr al intercambio de aplicaciones entre dispositivos cercanos. &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-30-newsletter/#nostream-310-adjusts-relay-proof-of-work-to-load">nostream&lt;/a> ajusta la admisión del relay a la carga, mientras que &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-30-newsletter/#nostr-double-ratchet-0017100172-closes-a-removed-member-gap">Nostr double ratchet&lt;/a> cierra una brecha relacionada con miembros expulsados. El desarrollo corrige la &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-30-newsletter/#amethyst-repairs-encrypted-group-interoperability">interoperabilidad de grupos cifrados de Amethyst&lt;/a>, añade los &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-30-newsletter/#divine-adds-encrypted-video-to-direct-messages">mensajes de vídeo cifrados de Divine&lt;/a> y pone en línea &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-30-newsletter/#nostr-atlas-opens-a-directory-for-checkable-identities">Nostr Atlas&lt;/a>. Las actualizaciones del protocolo refinan las pruebas de identidad, las invitaciones a relays, los conjuntos de cuentas seguidas y las propuestas de declaraciones de dominio. La &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-30-newsletter/#six-years-of-nostr-septembers">retrospectiva de septiembre&lt;/a> de fin de mes sigue esas mismas cuestiones a lo largo de seis años de Nostr.&lt;/p>
&lt;h2 id="top-stories">Noticias principales&lt;/h2>
&lt;h3 id="holoboard-adds-nostr-promotion-commands-and-an-android-app">Holoboard añade comandos de promoción de Nostr y una aplicación para Android&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/holoboard/">Holoboard&lt;/a> es un &lt;a href="https://holoboard.space">tablón para encontrar notas de Nostr&lt;/a> mediante una clasificación que puede impulsarse con pagos Lightning. Las publicaciones originales siguen siendo events de Nostr; Holoboard sirve sus datos de clasificación y apariencia a través de su propia API HTTP. Esa distinción importa si un lector espera que el orden del tablón sea un feed nativo de relay.&lt;/p>
&lt;p>Su &lt;a href="https://github.com/ptrio42/holoboard.space/blob/main/CHANGELOG.md#2026-09-23">registro de cambios del 23 de septiembre&lt;/a> recoge comandos de promoción por mensaje directo tanto mediante &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> cifrado como mediante la vía heredada de &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a>. NIP-17 envuelve los mensajes privados para ocultar su contenido y remitente a los relays, mientras que NIP-04 es el formato anterior de cifrado de mensajes directos. Un usuario puede solicitar una factura de promoción en la misma conversación, recibir un presupuesto etiquetado para la primera promoción pagada y activar recordatorios de vencimiento respondiendo &lt;code>YES&lt;/code>. El emisor de promociones reintenta los relays que han fallado, mientras que la &lt;a href="https://github.com/ptrio42/holoboard.space/blob/main/CHANGELOG.md">actualización del 24 de septiembre&lt;/a> añade una aplicación para Android y simplifica el flujo de facturación.&lt;/p>
&lt;p>Las &lt;a href="https://github.com/ptrio42/holoboard.space/blob/main/relay/README.md">notas de integración con relays&lt;/a> del proyecto describen notas y comentarios normales en Nostr, el enrutamiento de la bandeja de entrada cifrada y la gestión de citas y eliminaciones. Su &lt;a href="https://zapstore.dev/apps/space.holoboard.app">ficha firmada para Android en Zapstore&lt;/a> respalda la existencia de una versión publicada de la aplicación, pero no se ha establecido que la clave de la ficha sea la identidad del tablón público de Holoboard. Esta es la primera cobertura del proyecto en Compass.&lt;/p>
&lt;h3 id="fips-pub-domains-tests-signed-public-names-for-a-mesh">fips-pub-domains prueba nombres públicos firmados para una red de malla&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/fips-pub-domains/">fips-pub-domains&lt;/a> es un nuevo &lt;a href="https://github.com/fr34aky/fips-pub-domains">experimento de resolución y denominación&lt;/a> que vincula nombres de dominio públicos con nodos de FIPS, una red de malla cifrada que utiliza mensajes de Nostr para descubrir pares. Su &lt;a href="https://github.com/fr34aky/fips-pub-domains/releases/tag/v0.1.0">primera versión&lt;/a> combina esas declaraciones con registros TXT de DNS, validación DNSSEC opcional, vinculaciones fijadas localmente, un demonio de resolución para Linux e integración en Android con fips2go, el cliente de FIPS para teléfonos. Una declaración firmada por sí sola no acredita la titularidad de un dominio público; los clientes necesitan pruebas de DNS o DNSSEC, un testigo configurado o una vinculación fijada en la que ya se confíe.&lt;/p>
&lt;p>La &lt;a href="https://github.com/fr34aky/fips-pub-domains/releases/tag/v0.2.0">versión 0.2.0&lt;/a> añade pruebas DNSSEC a las declaraciones para que un cliente que solo tenga un relay de la red de malla pueda validar un nombre sin una vinculación fijada, y permite que varios servidores validados sirvan un mismo dominio. También corrige las vinculaciones fijadas obsoletas y la conmutación por error de DNS. La &lt;a href="https://github.com/fr34aky/fips-pub-domains/releases/tag/v0.2.1">versión 0.2.1&lt;/a> corrige una unidad de systemd que, de otro modo, no se iniciaba, y ejecuta el servidor sin root; las instalaciones existentes deben sustituir esa unidad para recibir la corrección.&lt;/p>
&lt;p>En Android, un &lt;a href="https://github.com/fr34aky/fips2go/pull/55">cambio integrado en fips2go&lt;/a> sigue las vinculaciones verificadas de nombres públicos en su proxy DNS. Un &lt;a href="https://github.com/fr34aky/fips2go/pull/59">segundo cambio integrado&lt;/a> transporta las conexiones a los relays de Nostr configurados a través de la red de malla, de modo que el resolutor pueda recuperar y verificar una declaración de dominio no vista anteriormente mientras el teléfono no tiene conexión a internet. Los mantenedores comunican los resultados en dispositivos en esas solicitudes de cambios; no acreditan un despliegue más amplio.&lt;/p>
&lt;p>Las &lt;a href="https://github.com/fr34aky/fips-pub-domains/blob/main/docs/testing.md">pruebas con dos nodos y con un relay accesible solo mediante la red de malla&lt;/a> del proyecto son pruebas comunicadas por los mantenedores de una implementación temprana, no de un despliegue en producción. Su &lt;a href="https://nostrcompass.org/es/topics/nip-db/">NIP-DB&lt;/a> sigue siendo una &lt;a href="https://github.com/nostr-protocol/nips/pull/2487">propuesta abierta&lt;/a>, y los kinds de event de su &lt;a href="https://github.com/fr34aky/fips-pub-domains/blob/main/docs/nip.md">borrador&lt;/a> siguen siendo marcadores provisionales pendientes de registro. La noticia de fips2go de la semana pasada cubría el arranque inicial de la red de malla y el descubrimiento de pares; el trabajo de esta semana aborda los nombres públicos y la verificación.&lt;/p>
&lt;h3 id="marmot-mdk-0110-makes-account-history-gaps-visible">Marmot MDK 0.11.0 hace visibles las lagunas en el historial de las cuentas&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk">Marmot MDK&lt;/a>, el entorno de ejecución de Rust y los enlaces generados para la &lt;a href="https://nostrcompass.org/es/topics/marmot/">mensajería de grupos de Nostr cifrada con MLS&lt;/a>, da continuidad a la versión de la semana pasada con envío persistente mediante la &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.11.0">versión 0.11.0&lt;/a>. La recuperación de cuentas ahora solo declara completada una laguna en el historial cuando todos los relays requeridos terminan una comparación de events sin truncar; una laguna no comprobada genera un aviso persistente que la aplicación anfitriona puede mostrar al usuario. Una cola de entrega llena se vuelca en la base de datos de la cuenta en lugar de descartar events, y la entrega en tiempo real hace avanzar el cursor de transporte para que un reinicio no vuelva a recuperar el mismo historial.&lt;/p>
&lt;p>Las &lt;a href="https://github.com/marmot-protocol/mdk/blob/v0.11.0/docs/release/0.11.0.md">notas de versión completas&lt;/a> también describen encuestas cifradas de grupo opcionales, verificación de events sin estado en los enlaces y bibliotecas de Android alineadas para páginas de memoria de 16 KB. Las aplicaciones deben actualizar conjuntamente los enlaces generados y las bibliotecas nativas procedentes de este mismo conjunto de código fuente; las bases de datos de las cuentas migran pasando por el esquema 98 al abrirse por primera vez, y no se admite volver a una versión anterior de la base de datos. Un defecto intermitente ya existente en la puesta al día todavía puede dejar indescifrables los mensajes que estén más de cinco épocas de grupo por detrás sin generar un aviso, por lo que esta versión no afirma recuperar completamente el historial en todos los casos.&lt;/p>
&lt;h3 id="myco-080081-gives-nearby-apps-their-own-nostr-store">Myco 0.8.0–0.8.1 proporciona a las aplicaciones cercanas su propia tienda de Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/Origami74/myco">Myco&lt;/a> es una aplicación para Android que permite intercambiar pequeños programas de Nostr, llamados napplets, con teléfonos cercanos, incluso cuando están sin conexión. La &lt;a href="https://github.com/Origami74/myco/releases/tag/v0.8.0">versión 0.8.0&lt;/a> proporciona a cada instalación una identidad de invitado de Nostr y permite iniciar sesión con una clave existente o con Amber, un firmante para Android que aprueba firmas sin compartir la clave de la cuenta. También sustituye la pestaña Descubrir por una tienda de aplicaciones que es, a su vez, una napplet. Esa tienda lee fichas de aplicaciones y recomendaciones firmadas, mientras que una actualización descargada puede pasar de un teléfono a otro dentro del Círculo de un usuario sin conexión a internet.&lt;/p>
&lt;p>La &lt;a href="https://github.com/Origami74/myco/releases/tag/v0.8.1">versión 0.8.1&lt;/a> facilita la búsqueda de esas fichas consultando los relays que anuncia un autor; las compilaciones anteriores dependían de opciones públicas predeterminadas. Muestra inmediatamente los perfiles y las aplicaciones en caché, guarda las respuestas de relays más lentos para visitas posteriores, reduce la frecuencia de los reintentos con relays que fallan y mantiene activas las suscripciones mientras una vista está abierta. Ambas actualizaciones conservan el formato existente de transmisión entre teléfonos. Los teléfonos actualizados pueden descargar y compartir actualizaciones de napplets; los teléfonos antiguos solo reenvían sus anuncios.&lt;/p>
&lt;h2 id="tagged-releases">Versiones etiquetadas&lt;/h2>
&lt;h3 id="white-noise-android-adds-group-polls-and-account-specific-disappearing-message-defaults">White Noise Android añade encuestas de grupo y valores predeterminados de mensajes temporales específicos para cada cuenta&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise-android">White Noise Android&lt;/a> es una aplicación de mensajería Nostr para conversaciones privadas cifradas con &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>. Tras las mejoras de entrega y uso compartido &lt;a href="https://nostrcompass.org/en/newsletters/2026-09-23-newsletter/#white-noise-android-2026921-improves-encrypted-chat-reliability-and-sharing">cubiertas la semana pasada&lt;/a>, &lt;a href="https://github.com/marmot-protocol/whitenoise-android/releases/tag/android-v2026.9.30">la versión del 30 de septiembre&lt;/a> añade encuestas de grupo con respuestas seleccionables, barras de resultados y plazos mediante Marmot Development Kit. También añade &lt;a href="https://github.com/marmot-protocol/whitenoise-android/pull/2799">valores predeterminados de mensajes temporales para cada cuenta, almacenados localmente en el dispositivo&lt;/a>: las nuevas conversaciones directas y los nuevos grupos heredan la duración elegida, mientras que las conversaciones existentes y sus ajustes individuales mantienen su política actual. &lt;a href="https://github.com/marmot-protocol/whitenoise-android/pull/2765">Saludar&lt;/a> envía un saludo que menciona a un miembro recién añadido sin alterar el borrador actual.&lt;/p>
&lt;p>La &lt;a href="https://github.com/marmot-protocol/whitenoise-android/releases/tag/android-v2026.9.30">versión&lt;/a> permite a los usuarios elegir el recorte centrado en el punto de interés para las imágenes de perfil y de grupo, y eliminar una carpeta de chats sin eliminar sus conversaciones. Sus &lt;a href="https://github.com/marmot-protocol/whitenoise-android/pull/2869">avisos sobre el historial&lt;/a> indican cuándo una recuperación deja potencialmente incompleto el historial de una cuenta o un grupo, con controles independientes para descartarlos. La &lt;a href="https://github.com/marmot-protocol/whitenoise-android/pull/2818">paginación de conversaciones&lt;/a> evita reconstruir la cronología mostrada al saltar a los mensajes recientes, y las &lt;a href="https://github.com/marmot-protocol/whitenoise-android/pull/2825">ediciones de mensajes pendientes&lt;/a> conservan su texto mientras el envío original obtiene su ID de event confirmado. Ese traspaso de la edición abarca los cambios de conversación dentro de la aplicación en ejecución; no garantiza la persistencia tras la terminación del proceso.&lt;/p>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise-android/pull/2768">El dictado ahora permite elegir Pegar o Enviar para cada grabación&lt;/a>, y la finalización automática coloca la transcripción en el borrador. La &lt;a href="https://github.com/marmot-protocol/whitenoise-android/pull/2888">configuración del proveedor sin conexión&lt;/a> explica el procesamiento en el dispositivo, mantiene su consentimiento separado del de otros proveedores de voz y restaura los medios interrumpidos cuando termina la captura. La &lt;a href="https://github.com/marmot-protocol/whitenoise-android/pull/2830">gestión de archivos generales&lt;/a> acepta documentos no vacíos dentro de los límites establecidos, con nombres de archivo, metadatos MIME y mensajes de error precisos; las &lt;a href="https://github.com/marmot-protocol/whitenoise-android/pull/2879">descargas explícitas de archivos adjuntos&lt;/a> utilizan las tareas de transferencia iniciadas por el usuario de Android, con una alternativa en primer plano. Los &lt;a href="https://github.com/marmot-protocol/whitenoise-android/pull/2877">controles para pegar&lt;/a> ahora utilizan la acción del sistema de Android para que GrapheneOS Secure Paste pueda conceder acceso al portapapeles. Android también &lt;a href="https://github.com/marmot-protocol/whitenoise-android/pull/2806">muestra el contenido de GIPHY compartido desde iOS como medios animados&lt;/a>, respetando la política de descargas.&lt;/p>
&lt;p>Las &lt;a href="https://github.com/marmot-protocol/whitenoise-android/pull/2808">correcciones de notificaciones&lt;/a> actualizan los apodos de los remitentes y eliminan las alertas cuando se abre una conversación. Los &lt;a href="https://github.com/marmot-protocol/whitenoise-android/pull/2712">cambios en la recuperación de notificaciones&lt;/a> conservan el trabajo pendiente de notificaciones push cuando no se puede asumir el control en primer plano y utilizan reintentos limitados. La &lt;a href="https://github.com/marmot-protocol/whitenoise-android/pull/2802">firma con Amber&lt;/a> coordina las ráfagas de aprobaciones de una misma cuenta para evitar que los límites de frecuencia cancelen los envíos. La &lt;a href="https://github.com/marmot-protocol/whitenoise-android/pull/2872">nueva configuración de auditoría&lt;/a> solicita una nueva decisión sobre compartir los registros antes de cargarlos al nuevo receptor. El código fuente también &lt;a href="https://github.com/marmot-protocol/whitenoise-android/pull/2840">adopta la licencia AGPL-3.0-only&lt;/a>.&lt;/p>
&lt;h3 id="nostream-310-adjusts-relay-proof-of-work-to-load">nostream 3.1.0 ajusta la prueba de trabajo del relay en función de la carga&lt;/h3>
&lt;p>&lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a> es un relay Nostr en TypeScript respaldado por PostgreSQL. La &lt;a href="https://github.com/cameri/nostream/releases/tag/v3.1.0">versión 3.1.0&lt;/a> puede aumentar o reducir el umbral de prueba de trabajo de los events entre los límites fijados por el operador a medida que cambia la tasa de events observada. El ajuste está desactivado de forma predeterminada, utiliza la tasa medida por cada proceso de trabajo y mantiene independiente el umbral estático existente por clave pública, por lo que los operadores deben activarlo antes de que los remitentes se encuentren con un requisito de admisión diferente.&lt;/p>
&lt;p>La misma &lt;a href="https://github.com/Cameri/nostream/releases/tag/v3.1.0">versión&lt;/a> añade un panel de administración para las métricas del relay, de WebSocket y de events, los resultados de las comprobaciones del estado de la red y las notificaciones configurables para el operador. Su API de administración está desactivada de forma predeterminada. Estos controles ayudan a los operadores a distinguir entre la presión sobre el relay y los problemas de accesibilidad, al tiempo que mantienen la nueva política sujeta a una configuración explícita.&lt;/p>
&lt;p>Después de publicar su versión con prueba de trabajo sensible a la carga, nostream integró &lt;a href="https://github.com/cameri/nostream/pull/788">acciones para los reportes de moderadores de confianza&lt;/a>. &lt;a href="https://nostrcompass.org/es/topics/nip-56/">NIP-56&lt;/a> define los events de reporte de contenido; la nueva opción &lt;code>nip56.hideActionableReports&lt;/code> excluye los events reportados de los resultados de REQ y COUNT cuando los reportes también están habilitados. Un reporte de un event oculta ese event, mientras que un reporte de una clave pública oculta todos los events de ese autor. La nueva opción tiene el valor false de forma predeterminada, por lo que habilitar únicamente la recopilación de reportes conserva los resultados de consulta existentes.&lt;/p>
&lt;h3 id="nostr-double-ratchet-0017100172-closes-a-removed-member-gap">Nostr double ratchet 0.0.171–0.0.172 cierra una brecha relacionada con los miembros eliminados&lt;/h3>
&lt;p>&lt;a href="https://github.com/irislib/nostr-double-ratchet">Nostr double ratchet&lt;/a> es una biblioteca de TypeScript para chats privados cifrados transportados por Nostr. La &lt;a href="https://github.com/irislib/nostr-double-ratchet/releases/tag/nostr-double-ratchet-ts-v0.0.171">versión 0.0.171&lt;/a> rota la clave de remitente de un grupo después de los cambios de miembros, de modo que una persona eliminada que conserve las claves antiguas no pueda descifrar mensajes posteriores de un remitente actualizado, incluso después de que ese remitente se reinicie. También rechaza los envíos o la rotación de claves por parte de un propietario local eliminado y aborta un envío si la composición del grupo cambia durante la distribución de claves.&lt;/p>
&lt;p>La &lt;a href="https://github.com/irislib/nostr-double-ratchet/releases/tag/nostr-double-ratchet-ts-v0.0.172">versión 0.0.172&lt;/a> incluye la aprobación de dispositivo existente, firmada por la cuenta, en una respuesta de invitación cifrada opcional. Un destinatario que utilice la actualización puede verificar el dispositivo del remitente antes de que llegue un event de registro separado, mientras que los dispositivos vinculados conservan su aprobación tras los reinicios. El campo de invitación es opcional y deja intactos el intercambio inicial y el formato de los mensajes del mecanismo ratchet originales.&lt;/p>
&lt;p>Las &lt;a href="https://github.com/irislib/nostr-double-ratchet/releases/tag/nostr-double-ratchet-ts-v0.0.175">versiones 0.0.173–0.0.175&lt;/a> amplían ese trabajo sobre la eliminación de miembros con traspasos persistentes de claves de grupo y un estado de entrega en cola guardado antes de la publicación, de modo que los traspasos interrumpidos se recuperen tras un reinicio. Las funciones de devolución de llamada de publicación incluyen contexto local del grupo que permite a las aplicaciones cancelar los reintentos persistentes después de una eliminación, a la vez que mantiene entregables los controles de pertenencia al grupo; los envíos en cola conservan los ID originales de sus events internos. Las respuestas de invitación duplicadas conservan las sesiones establecidas, las suscripciones permanecen estables cuando cambian los contactos y las instantáneas de claves de la aplicación conservan los nombres de los dispositivos sin compartir copias mutables. El formato firmado de transmisión no cambia; las &lt;a href="https://github.com/irislib/nostr-double-ratchet/releases/tag/nostr-double-ratchet-ts-v0.0.173">notas de 0.0.173&lt;/a> también informan de Rust 0.0.168 con un mecanismo alternativo para la sesión de recepción y filtrado de ecos locales del grupo.&lt;/p>
&lt;h3 id="scramble-074075-fetches-the-messages-a-new-group-member-should-see">Scramble 0.7.4–0.7.5 recupera los mensajes que debería ver un nuevo miembro del grupo&lt;/h3>
&lt;p>&lt;a href="https://github.com/DavidGershony/Scramble">Scramble&lt;/a> es una aplicación de mensajería de grupos Marmot multiplataforma con una interfaz nativa de Android. En la &lt;a href="https://github.com/DavidGershony/Scramble/releases/tag/v0.7.5">versión 0.7.5&lt;/a>, cada grupo obtiene su propio límite temporal para el historial del relay: antes, el límite de la conversación más activa se aplicaba a todos los grupos, por lo que uno al que se acababa de incorporar el usuario podía permanecer vacío porque nunca se solicitaban sus mensajes posteriores a la incorporación. Asimismo, la ruta de reconexión recibe la misma corrección, y un grupo sin actividad local ahora solicita todos los mensajes disponibles; MLS sigue impidiendo que un nuevo miembro descifre los mensajes enviados antes de su incorporación.&lt;/p>
&lt;p>La &lt;a href="https://github.com/DavidGershony/Scramble/releases/tag/v0.7.4">versión 0.7.4&lt;/a> anterior corrige la aceptación repetida de invitaciones causada por las filas recicladas de Android que acumulaban manejadores de clics, y hace que la configuración de un servidor de medios Blossom personalizado persista en la aplicación nativa. La versión 0.7.5 distribuye únicamente el APK nativo de Android, por lo que los usuarios que siguen el nombre de archivo anterior de Avalonia deben cambiar su destino de actualización. Las cuentas y el historial se trasladan entre esas dos compilaciones de Android, pero los grupos creados con el motor MLS anterior de 0.6.x no migran a 0.7.x.&lt;/p>
&lt;p>&lt;a href="https://github.com/DavidGershony/Scramble/releases/tag/v0.7.6">Scramble 0.7.6&lt;/a> añade un control manual para Recuperar mensajes faltantes que consulta todas las direcciones de enrutamiento que ha utilizado un grupo, elimina la restricción temporal, repara una dirección almacenada obsoleta e informa de lo que ha recuperado. Sigue sin poder descifrar épocas anteriores a la incorporación del usuario. Los administradores de la aplicación nativa pueden ascender o degradar a otros miembros, con el estado actual de la lista de miembros y resultados de error visibles; las conversaciones de dos personas siguen ocultando estos controles. La acción Copiar de la información del grupo ahora responde, aunque las conversaciones por invitación todavía pueden copiar un identificador interno del chat en lugar del ID de grupo del protocolo. La &lt;a href="https://github.com/DavidGershony/Scramble/releases/tag/v0.7.7">versión 0.7.7&lt;/a> también &lt;a href="https://github.com/DavidGershony/Scramble/commit/35e72177a0009ec96e8494caed7e9c250b66c7cb">procesa los mensajes retenidos cuando llega el commit de otro miembro&lt;/a>; &lt;a href="https://github.com/DavidGershony/Scramble/releases/tag/v0.7.8">0.7.8&lt;/a> añade una prueba de regresión para esa ruta de miembro pasivo.&lt;/p>
&lt;h3 id="amber-666-repairs-remote-signer-connection-secrets">Amber 6.6.6 corrige los secretos de conexión del firmante remoto&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> es un firmante para Android que aprueba firmas de event de Nostr sin entregar a una aplicación la clave de la cuenta. Tras el cambio de cifrado de las copias de seguridad de la semana pasada, la &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.6.6">versión 6.6.6&lt;/a> corrige su analizador de &lt;code>nostrconnect&lt;/code>: un parámetro de conexión que contenía &lt;code>=&lt;/code>, como un secreto con relleno, se alteraba antes de que Amber respondiera. Eso hacía que los clientes basados en NDK fallaran en la comprobación del secreto incluso cuando la conexión con el firmante parecía válida en los demás aspectos.&lt;/p>
&lt;p>La &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.6.6">versión&lt;/a> también envía los informes de problemas a los relays anunciados en el anuncio del repositorio de Amber, y recurre al relay anterior si no se puede obtener el anuncio. Los tiempos de espera más largos de Tor dan a los relays lentos más tiempo para confirmar esa publicación. Los cambios restantes mejoran la visibilidad de los iconos y el texto en los temas de Amber.&lt;/p>
&lt;h3 id="fips-052-stops-a-nostr-discovery-privacy-leak">FIPS 0.5.2 detiene una filtración de privacidad en el descubrimiento mediante Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> es una red mallada cifrada que utiliza identidades de Nostr y mensajes de relay para descubrir pares. Su &lt;a href="https://github.com/jmcorgan/fips/releases/tag/v0.5.2">versión de mantenimiento 0.5.2&lt;/a> deja de firmar las solicitudes de eliminación de travesía de NAT con la clave de enrutamiento del nodo, lo que había vinculado esa clave al tráfico de travesía en los relays. También actualiza la biblioteca TLS utilizada para las conexiones con relays a una versión que corrige un problema descrito en un aviso de seguridad publicado y repara varios casos de pérdida de mensajes durante la renovación de claves de enlaces y sesiones.&lt;/p>
&lt;p>Las &lt;a href="https://github.com/jmcorgan/fips/releases/tag/v0.5.2">notas de la versión&lt;/a> instan a los operadores de todas las plataformas a actualizar, y detallan correcciones independientes para los permisos de archivos de claves en Windows, las pasarelas y los servicios de paquetes. Los nodos efímeros ya no escriben un archivo privado &lt;code>fips.key&lt;/code> que un reinicio posterior podría sobrescribir; los operadores que pretendían mantener una identidad estable deben establecer el modo persistente antes de actualizar. La versión no cambia el formato de transmisión de la red mallada, por lo que los nodos con versiones distintas pueden actualizarse individualmente.&lt;/p>
&lt;h3 id="napplet-soyli-02310234-repairs-backend-publishing-and-signer-approval">napplet soyLI 0.23.1–0.23.4 corrige la publicación del backend y la aprobación del firmante&lt;/h3>
&lt;p>&lt;a href="https://github.com/zeSchlausKwab/napplet-soy">soyLI de napplet.soy&lt;/a> es el conjunto de herramientas de creación y publicación para pequeños programas de Nostr ejecutados en entornos aislados. Tras la versión de creaciones compartidas de la semana pasada, la &lt;a href="https://github.com/zeSchlausKwab/napplet-soy/releases/tag/soyli-v0.23.1">versión 0.23.1&lt;/a> incorpora los manifiestos, los manejadores y los esquemas del backend a las comprobaciones del creador y a las vistas previas multijugador. Mantiene la configuración portátil de proveedores en el manifiesto del proyecto, mientras deja las vinculaciones privadas de identidad y las bases de datos de desarrollo fuera de la instantánea publicada del código fuente.&lt;/p>
&lt;p>La &lt;a href="https://github.com/zeSchlausKwab/napplet-soy/releases/tag/soyli-v0.23.2">versión 0.23.2&lt;/a> permite que los proyectos que en algún momento incorporaron al repositorio un contexto público de backend generado vuelvan a publicar tras una validación estricta, mientras sigue rechazando las vinculaciones privadas, los registros, las bases de datos y las credenciales presentes en el historial accesible. La posterior &lt;a href="https://github.com/zeSchlausKwab/napplet-soy/releases/tag/soyli-v0.23.4">versión 0.23.4&lt;/a> corrige un fallo de sesión del backend persistente que podía rechazar una aprobación válida de una extensión o de un firmante remoto cuando una persona tardaba varios segundos en firmar. Los hosts públicos también necesitan la corrección del host compartido; actualizar únicamente la CLI del creador no ha reparado un host desplegado.&lt;/p>
&lt;h3 id="dart-ndk-0100-scopes-blossom-auth-and-remote-signing">Dart NDK 0.10.0 delimita la autorización de Blossom y la firma remota&lt;/h3>
&lt;p>&lt;a href="https://github.com/relaystr/ndk">Dart NDK&lt;/a> es una biblioteca de Flutter y Dart para el acceso a relays de Nostr, la firma, las solicitudes a monederos y las operaciones multimedia. Tras la versión preliminar de la semana pasada, &lt;a href="https://github.com/relaystr/ndk/releases/tag/v0.10.0-dev.7">0.10.0-dev.7&lt;/a> cambia las solicitudes multimedia de Blossom para que permanezcan anónimas hasta que un servidor las rechace, y entonces las autoriza mediante una política explícita que indica qué identidad puede revelar una operación. Propaga esa autorización a lo largo de la ruta de la solicitud y sustituye las opciones anteriores &lt;code>useAuth&lt;/code> y &lt;code>customSigner&lt;/code>, un cambio de integración incompatible para las aplicaciones que utilizan la API preliminar.&lt;/p>
&lt;p>&lt;a href="https://github.com/relaystr/ndk/releases/tag/v0.10.0-dev.9">Dev.9&lt;/a> deja de retener la respuesta de un firmante remoto hasta que el relay más lento la confirme. &lt;a href="https://github.com/relaystr/ndk/releases/tag/v0.10.0-dev.8">Dev.8&lt;/a> reduce las consultas periódicas a relays en segundo plano y el trabajo de caché; sus demás correcciones se refieren a la persistencia de la semilla del monedero y a los plazos de liquidación. La &lt;a href="https://github.com/relaystr/ndk/releases/tag/v0.10.0">versión estable 0.10.0&lt;/a> ahora reúne esta serie de desarrollo junto con los cambios de metadatos de conexión y de identificadores privados de suscripción que se describen a continuación. La &lt;a href="https://github.com/relaystr/ndk/compare/v0.10.0-dev.9...v0.10.0">comparación con dev.9&lt;/a> incluye esos cambios integrados. Las aplicaciones que se actualicen deben revisar tanto el cambio de la API de autorización multimedia como la ruta de respuesta del firmante remoto.&lt;/p>
&lt;p>La versión estable incluye &lt;a href="https://github.com/relaystr/ndk/pull/852">metadatos de conexión y permisos solicitados de NIP-46&lt;/a>, y sustituye los campos de conexión separados por un valor &lt;code>Nip46ClientMetadata&lt;/code>. Se trata de un cambio de la API a nivel de código fuente que permite a los widgets de inicio de sesión pasar al bunker la identidad de la aplicación y los permisos solicitados. Otro &lt;a href="https://github.com/relaystr/ndk/pull/860">cambio en los identificadores de solicitud&lt;/a> utiliza 32 caracteres hexadecimales aleatorios en producción, lo que mantiene los nombres de los casos de uso y las fases de paginación fuera de los identificadores de suscripción visibles para los relays. Los identificadores explícitos siguen sujetos al límite de 64 caracteres de NIP-01, mientras que el modo de depuración conserva un nombre de diagnóstico corto.&lt;/p>
&lt;h3 id="mostro-core-0160-removes-the-old-gift-wrap-transport">Mostro Core 0.16.0 elimina el antiguo transporte gift-wrap&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro-core">Mostro Core&lt;/a> proporciona el protocolo de mensajes utilizado por los clientes de intercambio entre pares y el coordinador de Mostro basados en Nostr. La &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.16.0">versión 0.16.0&lt;/a> elimina su transporte gift-wrap del protocolo v1 y sus antiguas funciones de envoltura y desenvoltura, y deja el transporte más reciente como la vía de la biblioteca. Es un cambio incompatible para las aplicaciones que todavía construyen o leen mensajes v1 mediante esta biblioteca.&lt;/p>
&lt;p>La &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.16.0">versión de la biblioteca&lt;/a> precede a la &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.19.0">versión 0.19.0 del coordinador, ya publicada&lt;/a>. Los operadores que atienden a clientes antiguos deben actualizar ambos lados de la migración del transporte. El &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.15.1">tag 0.15.1 anterior&lt;/a> añade un estado de disputa por cancelación cooperativa, pero la eliminación del transporte es el hito de compatibilidad.&lt;/p>
&lt;h3 id="cambium-060071-enrolls-an-unlock-phone-through-relay-messages">Cambium 0.6.0–0.7.1 registra un teléfono de desbloqueo mediante mensajes de relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/forgesworn/cambium">Cambium&lt;/a> es una aplicación complementaria de firma para Android destinada a una clave de hardware Heartwood que también puede desbloquear la placa después de un reinicio. La &lt;a href="https://github.com/forgesworn/cambium/releases/tag/v0.6.0">versión 0.6.0&lt;/a> permite registrar un teléfono para el desbloqueo a través de los relays de Nostr de la placa sin un cable USB; el usuario compara cinco palabras de la solicitud en el teléfono, la placa y Sapwood, la interfaz de registro de la placa, antes de pulsar el botón de la placa. Los relays recién anunciados reciben un retraso de conexión aleatorio para que el primer contacto del teléfono no revele exactamente cuándo vio la actualización de la placa.&lt;/p>
&lt;p>La &lt;a href="https://github.com/forgesworn/cambium/releases/tag/v0.7.0">versión 0.7.0&lt;/a> invierte el flujo de invitación: un teléfono escanea el código QR de corta duración de Sapwood y devuelve un único event cifrado de un solo uso desde una clave desechable. El reintento vuelve a publicar ese mismo event si ningún relay lo acepta, mientras que la antigua vía de visualización del código se mantiene para las compilaciones anteriores de Sapwood. El &lt;a href="https://github.com/forgesworn/cambium/releases/tag/v0.7.1">parche 0.7.1&lt;/a> mantiene visible el código de comprobación final y mejora la reproducibilidad de las compilaciones de F-Droid; el flujo QR sigue requiriendo las versiones recientes especificadas de Sapwood y Heartwood.&lt;/p>
&lt;h3 id="bray-350352-limits-agent-initiated-nostr-wallet-spending">Bray 3.5.0–3.5.2 limita el gasto del monedero de Nostr iniciado por agentes&lt;/h3>
&lt;p>&lt;a href="https://github.com/forgesworn/bray">Bray&lt;/a> es un servidor de herramientas de Nostr que permite a un asistente de IA solicitar acciones de relay, identidad y monedero mediante una interfaz de alcance delimitado. Su &lt;a href="https://github.com/forgesworn/bray/releases/tag/v3.5.0">versión 3.5.0&lt;/a> añade un límite para cada pago de Nostr Wallet Connect y un presupuesto diario persistente, con confirmación humana cuando el host del asistente la admite. Atender conexiones de gasto separadas ahora requiere una configuración explícita del servicio de monedero, vuelve a comprobar cada autorización antes de usarla y restringe las consultas de facturas a los hashes incluidos en esa autorización.&lt;/p>
&lt;p>La &lt;a href="https://github.com/forgesworn/bray/releases/tag/v3.5.0">versión&lt;/a> también indica a los usuarios que guarden el URI de conexión del monedero en un archivo privado en lugar de pegarlo en el chat, y se niega a reintentar un pago de resultado incierto como si su fallo estuviera demostrado. La &lt;a href="https://github.com/forgesworn/bray/releases/tag/v3.5.2">versión 3.5.2&lt;/a> coteja localmente las vías de pago del mercado después de que los relays rechazaran el filtro de método de pago solicitado. Estas comprobaciones limitan lo que puede gastar un asistente con facultades delegadas e impiden que una suposición sobre el filtrado de los relays oculte ofertas coincidentes.&lt;/p>
&lt;h3 id="mafrend-130-alpha-moves-private-map-groups-to-current-marmot">Mafrend 1.3.0-alpha migra los grupos privados del mapa a la versión actual de Marmot&lt;/h3>
&lt;p>&lt;a href="https://github.com/DestBro/mafrend-zapstore">Mafrend&lt;/a> es una aplicación social de Nostr basada en mapas que permite explorar lugares y conversar sobre destinos. Su &lt;a href="https://github.com/DestBro/mafrend-zapstore/releases/tag/v1.3.0-alpha">versión 1.3.0-alpha&lt;/a> actualiza los grupos privados a una especificación más reciente de &lt;a href="https://nostrcompass.org/es/topics/marmot/">grupos cifrados de Marmot&lt;/a> y añade vistas de perfiles desde chats y reseñas. El formato de grupo es incompatible con los chats de versiones alfa anteriores; los usuarios deben tratarlo como una migración alfa con una ruptura de compatibilidad.&lt;/p>
&lt;p>La &lt;a href="https://github.com/DestBro/mafrend-zapstore/releases/tag/v1.3.0-alpha">misma versión&lt;/a> añade la posibilidad de compartir capturas de pantalla y cambios en los chats, junto con mejoras en el mapa y los marcadores. El proyecto sigue marcando las funciones de perfil como en desarrollo. El cambio significativo para Nostr es el cambio de interoperabilidad de los grupos privados; los usuarios con grupos de prueba antiguos deben consultar la nota de compatibilidad antes de actualizar.&lt;/p>
&lt;h3 id="sonar-alpha15alpha151-repairs-encrypted-group-publishing">Sonar alpha.15–alpha.15.1 corrige la publicación en grupos cifrados&lt;/h3>
&lt;p>&lt;a href="https://github.com/hedwig-corp/bitchat-to-sonar">Sonar&lt;/a> es una aplicación de mensajería privada que permite mantener conversaciones a través de una red de malla Bluetooth y Nostr. &lt;a href="https://github.com/hedwig-corp/bitchat-to-sonar/releases/tag/v0.1-alpha.15">Alpha.15&lt;/a> añade reacciones con emojis a los mensajes y permite compartir de forma privada la hora local dentro de los chats cifrados, con un ajuste para revocar esa función. Su monedero pasa a usar Cashu, pero ese cambio en los pagos es independiente de la actualización de mensajería.&lt;/p>
&lt;p>&lt;a href="https://github.com/hedwig-corp/bitchat-to-sonar/releases/tag/v0.1-alpha.15.1">Alpha.15.1&lt;/a> corrige un fallo de inicio que podía dejar vacío el índice de conversaciones después de que una compilación de una rama anterior escribiera una versión de esquema ajena. Sin el índice, la aplicación volvía a cifrar y publicar la información de hora local compartida en todos los grupos cada vez que se abría de nuevo, enviando a veces cientos de events antes de que intervinieran los límites de frecuencia de los relays. La corrección urgente reconstruye ese estado local y detiene las publicaciones repetidas en los grupos.&lt;/p>
&lt;h3 id="elisyms-commerce-packages-introduce-private-nostr-orders">Los paquetes de comercio de Elisym introducen pedidos privados en Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/elisymlabs/elisym">Elisym&lt;/a> es un conjunto de herramientas para agentes basado en Nostr que ahora está desarrollando un flujo comercial con events firmados. Su &lt;a href="https://github.com/elisymlabs/elisym/pull/120">paquete &lt;code>commerce&lt;/code> integrado&lt;/a> define los productos de la tienda, la autorización del propietario, los pedidos y recibos encapsulados de forma privada y la verificación de ofertas para los componentes de pago y del comerciante. Una &lt;a href="https://github.com/elisymlabs/elisym/releases/tag/%40elisym/commerce%400.2.0">etiqueta posterior de commerce 0.2.0&lt;/a> deriva la referencia de pago de un pedido a partir del propio pedido, vinculando la consulta del pago al flujo de compra firmado.&lt;/p>
&lt;p>La serie de paquetes también introduce trabajo separado en payment-core y en el proceso de pago del navegador, pero sus &lt;a href="https://github.com/elisymlabs/elisym/releases/tag/%40elisym/commerce%400.2.0">tags de versiones&lt;/a> no demuestran que esté desplegado un proceso de pago completo para comerciantes. El kind del event de autorización de la tienda se declara explícitamente provisional en la fuente primaria del proyecto. Las once tags de SDK, MCP, CLI y payment-core corresponden a una única función comercial en desarrollo.&lt;/p>
&lt;p>&lt;a href="https://github.com/elisymlabs/elisym/releases/tag/%40elisym%2Fmerchant-node%400.1.0">Las nuevas versiones de paquetes de Elisym&lt;/a> empaquetan el nodo de comerciante autoalojado, mientras que &lt;a href="https://github.com/elisymlabs/elisym/releases/tag/%40elisym%2Fmcp%400.31.0">MCP 0.31.0&lt;/a> añade &lt;code>buy_product&lt;/code> y &lt;code>get_order&lt;/code> para los productos comerciales. Las versiones posteriores de commerce y merchant-node añaden compatibilidad con pagos Tempo dentro de ese mismo proceso de pago. Estos paquetes hacen avanzar la integración existente de productos firmados y pedidos privados; la lista de tags no convierte el esquema provisional de events en un estándar ni demuestra el lanzamiento de un servicio alojado completo.&lt;/p>
&lt;h3 id="flotilla-1112-unsticks-signers-and-incomplete-relay-feeds">Flotilla 1.11.2 resuelve bloqueos con firmantes y feeds incompletos de relays&lt;/h3>
&lt;p>&lt;a href="https://github.com/coracle-social/flotilla">Flotilla&lt;/a> es un cliente Nostr para conversaciones, salas y espacios compartidos. &lt;a href="https://github.com/coracle-social/flotilla/releases/tag/1.11.2">La versión 1.11.2&lt;/a> ofrece al usuario una salida cuando el inicio se bloquea a la espera de un firmante remoto y cierra la sesión cuyos datos locales de la aplicación se hayan borrado. Ahora una sala puede mostrar sus mensajes antes de que termine de sincronizarse el espacio más amplio al que pertenece, mientras que los feeds ya no omiten publicaciones simplemente porque un relay haya respondido más tarde que otro.&lt;/p>
&lt;p>&lt;a href="https://github.com/coracle-social/flotilla/releases/tag/1.11.2">La misma versión&lt;/a> también publica una compilación para F-Droid firmada con la clave existente de la aplicación y mantiene al día las versiones de GitHub para Obtainium. Ese trabajo de distribución es importante para los usuarios que cambian de canal de actualización, pero las correcciones de relays y firmantes son el motivo inmediato para actualizar.&lt;/p>
&lt;h3 id="ditto-2423-shows-relay-delivery-and-tightens-account-boundaries">Ditto 2.42.3 muestra la entrega a relays y refuerza los límites entre cuentas&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/ditto">Ditto&lt;/a> es un cliente social Nostr que permite a los usuarios elegir sus relays y autenticarse en ellos. En &lt;a href="https://gitlab.com/soapbox-pub/ditto/-/releases/v2.42.3">la versión 2.42.3&lt;/a>, los Detalles del event de una publicación muestran qué relays del usuario y del autor la almacenan; Difundir se dirige únicamente a aquellos en los que falta. La versión también señala los relays de lectura que no responden y ofrece un control para reintentarlo, lo que facilita diagnosticar una publicación ausente sin volver a enviarla a todas partes.&lt;/p>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/ditto/-/releases/v2.42.3">Las notas de la versión&lt;/a> indican que cambiar de cuenta ya no envía publicaciones a los relays de la cuenta anterior, que los usuarios silenciados no pueden activar alertas genéricas en el teléfono y que los enlaces o imágenes de las publicaciones no pueden acceder a dispositivos de la red local del lector. Las publicaciones de relays lentos dejan de desaparecer de los feeds Seguidos y Favoritos, mientras que el chat de las transmisiones en directo y los juegos webxdc se actualizan sin descargar repetidamente la vista completa. La navegación de torrents y audio también es nueva, pero el enrutamiento de relays y el aislamiento entre cuentas son los cambios con mayor repercusión en Nostr.&lt;/p>
&lt;h3 id="iris-chat-20269244-brings-calls-into-encrypted-conversations">Iris Chat 2026.9.24.4 incorpora llamadas a las conversaciones cifradas&lt;/h3>
&lt;p>&lt;a href="https://github.com/irislib/iris-chat-rs">Iris Chat&lt;/a> es una aplicación de mensajería Nostr con cifrado de extremo a extremo que utiliza la familia de protocolos de chat de doble trinquete. Su &lt;a href="https://github.com/irislib/iris-chat-rs/releases/tag/v2026.9.24.4">versión del 24 de septiembre&lt;/a> añade llamadas de voz y vídeo con contactos compatibles, incluso a través de una conexión local existente cuando no hay acceso a internet. El usuario puede reducir la calidad del vídeo, responder a una videollamada solo con voz y gestionar una llamada entrante mediante la interfaz de llamadas de Android; responder o rechazar también hace que los demás dispositivos vinculados dejen de sonar.&lt;/p>
&lt;p>&lt;a href="https://github.com/irislib/iris-chat-rs/releases/tag/v2026.9.24.4">La versión&lt;/a> también permite iniciar sesión mediante una aplicación de firma independiente y ver qué dispositivos vinculados están conectados. Los &lt;a href="https://github.com/irislib/iris-chat-rs/releases/tag/v2026.9.24.5">parches posteriores del 24 de septiembre&lt;/a> conservan las marcas de tiempo originales de los mensajes retrasados y mejoran la entrega a dispositivos cercanos tras la pérdida de un paquete de reconexión. Son comportamientos iniciales de llamadas y entre dispositivos, por lo que la actualización resulta más útil para contactos que puedan ejecutar compilaciones compatibles de Iris.&lt;/p>
&lt;p>La posterior &lt;a href="https://primal.net/e/17fd3f325dda1feb0c1e51c6e1af0f7b3efe42ecff75e9527ac435cdc6a30c7a">actualización del 30 de septiembre&lt;/a>, firmada por el desarrollador, conserva el historial local del grupo de un miembro eliminado, pero desactiva el envío, mejora la entrega entre dispositivos vinculados y en grupos grandes, y corrige los indicadores de lectura y los recuentos de mensajes no leídos. Las llamadas incorporan la selección del dispositivo de audio y recuperan los tonos de llamada saliente; un estado desactualizado del micrófono ya no silencia el audio entrante. Se corrigen el silenciamiento temporal, la copia de imágenes, los archivos adjuntos mediante arrastrar y soltar, el enrutamiento de notificaciones y el registro de notificaciones push, mientras que cerrar sesión borra las cachés locales y eliminar un dispositivo finaliza su sesión. Una &lt;a href="https://primal.net/e/89ec93e25caf31831714e807c927b6d50d3d5fc38044df845163ff656db3f711">segunda actualización&lt;/a> mejora el acceso a los archivos almacenados en caché por otras aplicaciones Iris en el mismo dispositivo y mantiene disponible el intercambio local de archivos con Nearby desactivado.&lt;/p>
&lt;h3 id="librenostr-060070-routes-relays-through-built-in-tor">LibreNostr 0.6.0–0.7.0 enruta los relays a través de Tor integrado&lt;/h3>
&lt;p>&lt;a href="https://github.com/Lwb89dev/librenostr">LibreNostr&lt;/a> es un cliente Nostr para Android con ajustes configurables de relays y privacidad. &lt;a href="https://github.com/Lwb89dev/librenostr/releases/tag/v0.6.0">La versión 0.6.0&lt;/a> incluye un motor Tor basado en Arti en ARM64 y aplica el modo elegido, Directo, Tor para todo o solo &lt;code>.onion&lt;/code>, a las conexiones WebSocket de los relays, las solicitudes HTTP, los archivos multimedia, las subidas y las páginas web. El modo Tor estricto bloquea las conexiones cuando Tor no está disponible y nunca envía una solicitud directamente sin avisar; cambiar de modo reconecta los sockets de los relays a través de la nueva ruta.&lt;/p>
&lt;p>&lt;a href="https://github.com/Lwb89dev/librenostr/releases/tag/v0.6.2">La versión 0.6.2&lt;/a> añade un filtro de red de confianza en el dispositivo, construido a partir de listas públicas de seguimiento, y elige relays complementarios según las personas seguidas adicionales a las que permiten llegar. &lt;a href="https://github.com/Lwb89dev/librenostr/releases/tag/v0.7.0">La versión 0.7.0&lt;/a> muestra después las notas y notificaciones antes de que terminen las consultas de perfiles y recuentos, limita las consultas a relays lentos y deja de descifrar toda la bandeja de mensajes directos cada vez que se abre una conversación. En conjunto, estas versiones cambian tanto los destinos a los que puede conectarse el cliente como el tiempo durante el que un relay lento puede bloquear su interfaz.&lt;/p>
&lt;p>Su &lt;a href="https://primal.net/e/4eeba660b6b789288954290497de89fe3222bfc955214647ead5d63e6031d927">primera versión estable, 1.0.0&lt;/a>, firmada por el desarrollador, añade paneles para tabletas guardados por perfil, con columnas móviles para feeds, hashtags, perfiles, lectura de textos largos, notificaciones y mensajes. Las tabletas en orientación horizontal reciben esta distribución; los teléfonos conservan su interfaz existente. La búsqueda incorpora OR, exclusiones, filtros multimedia e intervalos de fechas funcionales, devuelve los perfiles almacenados en caché antes de los refinamientos procedentes de relays y pasa inmediatamente a la siguiente opción cuando se rechazan solicitudes de texto completo. Los hashtags se ordenan cronológicamente, la paginación espera a recibir suficientes respuestas de relays y los feeds no utilizados liberan sus suscripciones.&lt;/p>
&lt;p>&lt;a href="https://primal.net/e/4eeba660b6b789288954290497de89fe3222bfc955214647ead5d63e6031d927">La misma versión&lt;/a> conserva durante las ediciones las entradas existentes, públicas y cifradas, de las listas de silenciados y los marcadores, en lugar de sustituirlas por un único cambio. Aísla los marcadores y las notificaciones entre cuentas y restringe los relays auxiliares de los autores a lecturas públicas, sin enviarles solicitudes privadas ni autenticarse en ellos. También impide que las respuestas desactualizadas de perfiles sustituyan metadatos más recientes, corrige la paginación y los indicadores de notificaciones, conserva los elementos antiguos del feed cuando llegan otros nuevos y corrige las cuentas atrás para deshacer respuestas, la publicación duplicada, las URL multimedia con cadenas de consulta y los recuentos de mensajes no leídos después de marcar un chat como leído. &lt;a href="https://primal.net/e/630becb73dbe7ba7c76a2d1970f1d7262a5afc33b02fc8002bef611cf638deab">La versión 1.0.1&lt;/a> corrige un cierre inesperado al iniciar los paneles para tabletas en la nueva distribución.&lt;/p>
&lt;h3 id="newlay-0345-streams-large-relay-queries-instead-of-closing-them">Newlay 0.3.45 transmite progresivamente las consultas grandes en lugar de cerrar las conexiones&lt;/h3>
&lt;p>&lt;a href="https://code.relay.tools/opensauce/newlay">Newlay&lt;/a> es un relay de Nostr alojado en Android y un conjunto de servicios locales relacionados. Su &lt;a href="https://primal.net/e/b8380ae1bf30492129727ec59e27e2ae8a4cf9ad08e7361826a9ba8be88a227a">anuncio firmado de la versión 0.3.45&lt;/a> indica que los resultados de consultas grandes ahora se transmiten progresivamente con contrapresión en lugar de cerrar la conexión del cliente. El servidor Git integrado elimina los paquetes sustituidos después de los envíos, mientras que su coordinador de mensajería cifrada Cordn acepta solicitudes de clientes de gran tamaño y envía una trama de cancelación cuando se agota el tiempo de espera de una comprobación.&lt;/p>
&lt;p>La &lt;a href="https://primal.net/e/b8380ae1bf30492129727ec59e27e2ae8a4cf9ad08e7361826a9ba8be88a227a">versión&lt;/a> también ofrece al operador de Android una tarjeta de estado en tiempo real para los events, el almacenamiento, la dirección y la administración, y adapta la biblioteca criptográfica nativa a los dispositivos con páginas de memoria de 16 KB. Los cambios del relay y del coordinador abarcan varias versiones desde la versión anterior de la tienda, 0.3.39; 0.3.45 es la versión que los reúne.&lt;/p>
&lt;h3 id="ngit-grasp-305-keeps-git-pushes-and-relay-sync-moving">ngit-grasp 3.0.5 mantiene en marcha los envíos de Git y la sincronización con relays&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev/danconwaydev.com/ngit-grasp">ngit-grasp&lt;/a> es un relay de Nostr y servidor Git autoalojado para la colaboración firmada en repositorios. Su &lt;a href="https://primal.net/e/6ff00b9230e4523e6f14aaf6e5088f91e5696be38b9304a4e1cef384e3318d41">anuncio firmado de la versión 3.0.5&lt;/a> saca la lenta reconciliación del historial del actor compartido de sincronización en tiempo real, lo que permite iniciar las suscripciones a relays mientras se comprueban los events anteriores. Aplica esperas entre reintentos por separado para los límites de frecuencia, las consultas de historial incompletas, las lecturas del buzón y las búsquedas de identidad, de modo que un relay con problemas ya no monopoliza la capacidad de reintento.&lt;/p>
&lt;p>La &lt;a href="https://primal.net/e/6ff00b9230e4523e6f14aaf6e5088f91e5696be38b9304a4e1cef384e3318d41">misma versión&lt;/a> realiza la reconciliación con el inventario local de events para evitar volver a obtener el historial almacenado y cierra las suscripciones incompletas antes de considerar verificada su cobertura. En Git, acepta los envíos que la promoción de estado en segundo plano ya había aplicado, conserva la protección contra conflictos para las referencias modificadas y consume la salida de progreso de Git durante las cargas para evitar que un envío se bloquee. Estos detalles importan porque un repositorio puede parecer activo en los relays mientras su transferencia de Git sigue esperando un resultado definitivo.&lt;/p>
&lt;h3 id="armada-0630-carries-push-alerts-across-signer-types">Armada 0.63.0 ofrece alertas push para distintos tipos de firmantes&lt;/h3>
&lt;p>&lt;a href="https://github.com/soapbox-pub/armada">Armada&lt;/a> es un cliente de Nostr para comunidades, canales y mensajes directos cifrados. Tras la versión de la semana pasada centrada en la privacidad de los archivos multimedia, su &lt;a href="https://primal.net/e/34021b55504d74c5d04f55dbfea87f31168a7c4582f35113d7ec063894d19e56">anuncio firmado de la versión 0.63.0&lt;/a> describe una nueva vía de notificaciones push del navegador que funciona con la aplicación cerrada tanto para los inicios de sesión mediante extensiones y firmantes remotos como para otros tipos de cuentas. Tenna, una aplicación anfitriona que integra Armada, también incorpora notificaciones en segundo plano para sus usuarios.&lt;/p>
&lt;p>La &lt;a href="https://primal.net/e/34021b55504d74c5d04f55dbfea87f31168a7c4582f35113d7ec063894d19e56">versión&lt;/a> carga más rápido los mensajes antiguos de canales comunitarios largos y evita volver a leer todo el historial para obtener mensajes nuevos. Los indicadores de escritura de los mensajes directos utilizan menos conexiones a relays. Las actualizaciones de escritorio incorporan un aviso para reiniciar, mientras que las actualizaciones directas desde versiones anteriores a 0.50.0 dejan de ser compatibles.&lt;/p>
&lt;p>La &lt;a href="https://primal.net/e/af3ff711c1c1daa4d6a621dc5add0615fc5d37fbb1de31395cb79dcdf820aaf1">versión posterior 0.63.1&lt;/a>, firmada, añade paquetes de emojis editables con importación desde carpetas y reordenación, recupera mensajes citados más allá del historial cargado y hace interoperables las respuestas alojadas en relays. Reduce el tráfico de reconexión en Android, se pone al día tras desconexiones prolongadas sin repetir alertas antiguas, excluye las menciones anteriores a la incorporación y conserva los campos de grupo no editados y las entradas privadas de la lista de servidores. Las eliminaciones en grupos alojados en relays ahora requieren al autor del mensaje o a un administrador. También se corrigen el arrastre de servidores, el tratamiento de información de relay malformada y las suscripciones a repositorios.&lt;/p>
&lt;p>La &lt;a href="https://primal.net/e/ad0f6ad1a7730a400e8257c494c53ef14597c55a24e01b05dd2b2301c7d3aa36">versión 0.63.2&lt;/a> amplía el Markdown de los mensajes para admitir citas y listas anidadas, líneas horizontales, bloques de código delimitados, encabezados subrayados y formato que abarca enlaces o menciones. Los enlaces a páginas de Tenor y Giphy se reproducen como GIF. La sincronización del estado de lectura transfiere menos datos, la reconexión evita descargas e inicios de sesión redundantes y las notificaciones en segundo plano de Android pausan la sincronización con relays cuando las actualizaciones grandes de ajustes la saturan.&lt;/p>
&lt;h3 id="deed-030032-makes-zig-nostr-publishing-steadier">deed 0.3.0–0.3.2 hace más estable la publicación en Nostr con Zig&lt;/h3>
&lt;p>&lt;a href="https://github.com/zig-nostr/deed">deed&lt;/a> es una herramienta de línea de comandos escrita en Zig para leer y publicar events de Nostr. Su &lt;a href="https://github.com/zig-nostr/deed/releases/tag/v0.3.2">versión 0.3.2 del 24 de septiembre&lt;/a> añade una habilidad para agentes y corrige los plazos de ping del relay; las versiones anteriores &lt;a href="https://github.com/zig-nostr/deed/releases/tag/v0.3.1">0.3.1&lt;/a> y &lt;a href="https://github.com/zig-nostr/deed/releases/tag/v0.3.0">0.3.0&lt;/a> mejoran el rendimiento y la fiabilidad de la publicación. Las tres tags describen una misma serie inicial de la herramienta. El beneficio visible para Nostr es una conexión al relay y una vía de publicación de events más estables para los scripts que utilizan la CLI.&lt;/p>
&lt;h3 id="cordn-051-keeps-other-groups-moving-when-a-coordinator-fails">Cordn 0.5.1 mantiene en marcha los demás grupos cuando falla un coordinador&lt;/h3>
&lt;p>&lt;a href="https://github.com/Cordn-msg/cordn">Cordn&lt;/a> es una aplicación de mensajería grupal cifrada con MLS que utiliza identidades y relays de Nostr para localizar coordinadores de conversaciones. Su &lt;a href="https://primal.net/e/23f7498e2e405e05c4d3075ccc522c753d80f37b954a81ff8ecb3268f2dc7dc6">versión firmada 0.5.1 del cliente&lt;/a> continúa el trabajo de la semana pasada sobre la cola sin conexión separando la planificación del coordinador y la de la bandeja de salida: un coordinador no disponible ya no retrasa los envíos de grupos no relacionados. Las indicaciones de relay resueltas se conservan después del descubrimiento, los documentos de grupo las transportan entre dispositivos y un registro persistente de publicaciones pendientes recupera los envíos atascados. La recuperación entre varios dispositivos solapa las consultas de la cadena del historial y de los huecos mientras lee la configuración actual.&lt;/p>
&lt;p>La &lt;a href="https://primal.net/e/23f7498e2e405e05c4d3075ccc522c753d80f37b954a81ff8ecb3268f2dc7dc6">versión&lt;/a> también añade archivos adjuntos mediante arrastrar y soltar, grupos fijados, nombres de perfil en vistas previas y notificaciones, y etiquetas de coordinadores. Corrige el posicionamiento en el primer mensaje no leído, los contadores de mensajes no leídos, las alertas duplicadas, las vistas previas de archivos multimedia y mensajes del sistema, las respuestas vinculadas a archivos multimedia con texto descriptivo y los controles de zoom de imágenes. Las descargas nativas utilizan un selector de «Guardar como». Un firmante que aparece tarde ya no provoca una advertencia falsa de cifrado no compatible, y el cambio de cuenta ya no entra en una condición de carrera con la inicialización en segundo plano.&lt;/p>
&lt;h3 id="nymbot-107-adds-local-document-handling-and-encrypted-chat-sharing">Nymbot 1.0.7 añade el procesamiento local de documentos y el uso compartido cifrado de conversaciones&lt;/h3>
&lt;p>&lt;a href="https://zapstore.dev/apps/ai.nymbot">Nymbot&lt;/a> es un asistente al que se accede mediante mensajes de Nostr cifrados y encapsulados con gift-wrap. Su &lt;a href="https://primal.net/e/affd11e97fb3438965780aa01732e8d0e0f9b2162b87ab0f3019dff93449673e">versión 1.0.7 firmada por el desarrollador&lt;/a> lee documentos en el dispositivo, selecciona pasajes relevantes cuando un archivo es demasiado grande para enviarlo completo e identifica las páginas utilizadas. Las conversaciones pueden compartirse mediante un enlace cifrado de extremo a extremo cuyo acceso puede retirarse posteriormente. Las respuestas en Python y JavaScript pueden ejecutarse localmente, y su salida se devuelve a la conversación.&lt;/p>
&lt;p>La &lt;a href="https://primal.net/e/affd11e97fb3438965780aa01732e8d0e0f9b2162b87ab0f3019dff93449673e">misma versión&lt;/a> añade investigación con fuentes y un precio mostrado antes del envío, edición de imágenes, selección de modelos por mensaje y límites de gasto por conversación y bot. Las herramientas externas conectadas mediante MCP solicitan confirmación antes de modificar datos. Las ejecuciones en repositorios pueden pausar los cambios para su revisión, mostrar resultados de CI y reanudarse después de que una pasarela haya estado ocupada. Las respuestas sugeridas, los avisos fijados, las listas de fuentes plegadas y un selector de modelos con búsqueda completan la actualización; estas afirmaciones proceden de las notas de la versión del desarrollador; Compass no ha auditado de forma independiente la privacidad de la aplicación.&lt;/p>
&lt;h3 id="0xchat-156-ships-its-signing-and-message-authentication-fixes">0xchat 1.5.6 incorpora sus correcciones de firma y autenticación de mensajes&lt;/h3>
&lt;p>&lt;a href="https://github.com/0xchat-app/0xchat-app-main">0xchat&lt;/a> es una aplicación de mensajería de Nostr con conversaciones privadas, firma externa y funciones de monedero. La &lt;a href="https://github.com/0xchat-app/0xchat-app-main/releases/tag/v1.5.6-release">versión 1.5.6&lt;/a> incorpora las correcciones de seguridad &lt;a href="https://nostrcompass.org/en/newsletters/2026-09-23-newsletter/#0xchat-merges-fixes-for-signing-message-authentication-and-redirect-flaws">cubiertas la semana pasada como cambios integrados en el código fuente&lt;/a>, entre ellas la autenticación de gift-wrap, la configuración de infraestructura de confianza y el consentimiento para la firma desde páginas integradas. También cierra las vías para eludir el proxy Tor, valida los certificados TLS de los hosts que no son onion e impide que las compilaciones de distribución escriban credenciales y material del monedero potencialmente sensibles en la consola del dispositivo. Los registros para desarrolladores, que se activan de forma voluntaria, siguen registrando errores.&lt;/p>
&lt;p>La &lt;a href="https://github.com/0xchat-app/0xchat-app-main/releases/tag/v1.5.6-release">versión&lt;/a> aumenta progresivamente la espera entre reconexiones al relay de tres segundos a cinco minutos, repara las suscripciones después de la reconexión y entrega las solicitudes puestas en cola mientras un relay se está conectando. Los cambios de cuenta dejan de acumular escuchadores de relay duplicados, un inicio de sesión fallido conserva la cuenta que ya está activa y las conexiones con firmantes externos persisten entre arranques. Los envíos fallidos ahora muestran errores y conservan el texto no enviado o el estado recuperable del uso compartido de tokens. El descifrado de claves al iniciar y el cálculo de hashes de las cargas se trasladan fuera del hilo de la interfaz de usuario; las cachés de conversaciones y vídeos evitan renderizados y descargas repetidos. La versión proporciona archivos para Android y escritorio con sumas de comprobación SHA-256, incluidos el APK de Android firmado por Play y un instalador de Windows compilado a partir del código fuente.&lt;/p>
&lt;h3 id="nostr-mail-client-0170-hides-mailbox-actions-from-relays">Nostr Mail Client 0.17.0 oculta las acciones del buzón a los relays&lt;/h3>
&lt;p>&lt;a href="https://github.com/nogringo/nostr-mail-client">Nostr Mail Client&lt;/a> intercambia correo electrónico a través de Nostr y también admite la entrega convencional de correo electrónico. Tras &lt;a href="https://nostrcompass.org/en/newsletters/2026-09-23-newsletter/#nostr-mail-client-0160-adds-per-recipient-delivery-choices">la versión de la semana pasada con transporte por destinatario y privacidad de los archivos multimedia&lt;/a>, &lt;a href="https://github.com/nogringo/nostr-mail-client/releases/tag/v0.17.0">la versión 0.17.0&lt;/a> oculta a los relays el estado de lectura, archivo, carpetas y etiquetas, así como los momentos en que cambia, y permite a los usuarios eliminar correo sin notificar al remitente. La versión requiere actualizar todos los dispositivos a la vez porque los clientes anteriores no ven el nuevo estado ni las eliminaciones. También protege a los destinatarios en copia oculta en correos de más de 32 KB, mantiene los alias locales de los contactos fuera de los mensajes salientes, corrige el inicio de sesión con QR de Amber y publica el correo público en los relays de lectura de los destinatarios.&lt;/p>
&lt;p>La &lt;a href="https://github.com/nogringo/nostr-mail-client/releases/tag/v0.17.0">versión&lt;/a> añade carpetas y etiquetas de colores con reglas de remitente, asunto y archivos adjuntos; citas en respuestas y reenvíos; imágenes pegadas en línea; vistas previas y cambio de nombre de archivos adjuntos; y selección de rangos en las listas de correo. El reenvío conserva las imágenes y los archivos adjuntos originales, las citas de las respuestas aparecen contraídas inicialmente y el editor web incorpora un menú contextual. Las tablas HTML y las imágenes en línea se muestran con mayor precisión, los enlaces en texto sin formato funcionan y la programación admite fechas hasta cinco años en el futuro. Los nombres y las imágenes de la libreta de direcciones aparecen en toda la interfaz, y los colores del tema ofrecen paletas del sistema, sugeridas o personalizadas.&lt;/p>
&lt;p>La misma &lt;a href="https://github.com/nogringo/nostr-mail-client/releases/tag/v0.17.0">versión&lt;/a> mantiene en local los fondos seleccionados desde archivos y almacena en caché los fondos enlazados, con un coste de migración explícito: los fondos de archivo anteriores en plataformas nativas deben añadirse de nuevo. Cambia las recomendaciones predeterminadas de relays y archivos multimedia, añade el descubrimiento de aplicaciones Nostr durante la configuración inicial y avisos de actualización, conserva los ajustes desconocidos escritos por otros clientes y corrige la creación interrumpida del almacén de correo y el empaquetado para Linux. Los fallos de inicio ahora muestran detalles y un informe prerrellenado en lugar de una pantalla en blanco.&lt;/p>
&lt;h3 id="nostr-wot-087-binds-authentication-to-the-destination">Nostr WoT 0.8.7 vincula la autenticación al destino&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-wot/nostr-wot-extension">Nostr WoT&lt;/a> es una extensión de navegador que combina la firma de Nostr con herramientas de confianza. &lt;a href="https://github.com/nostr-wot/nostr-wot-extension/releases/tag/v0.8.7">La versión 0.8.7&lt;/a> exige consentimiento para la autenticación HTTP firmada de &lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98&lt;/a> respecto a la URL, la consulta, el método, la cuenta y el origen solicitante exactos. Las aprobaciones amplias anteriores requieren un nuevo consentimiento. La autenticación de relays de &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> tiene un sistema de permisos separado y vinculado a la cuenta, en el que las denegaciones específicas de un sitio tienen prioridad sobre las autorizaciones compartidas de relays. Las solicitudes de autenticación deben proceder de un origen de navegador de nivel superior verificado, y las esperas de aprobación o desbloqueo activan otra comprobación de cuenta y acceso.&lt;/p>
&lt;p>La &lt;a href="https://github.com/nostr-wot/nostr-wot-extension/releases/tag/v0.8.7">versión&lt;/a> verifica las firmas remotas de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> y el event aprobado completo para que una firma devuelta no pueda sustituir silenciosamente el contenido o un destino. El aprovisionamiento de la cartera y los cambios de dirección utilizan autenticación vinculada al cuerpo, desafíos del backend de un solo uso y tokens de transacción separados; la firma genérica para sitios web no puede generar esos tokens internos de la cartera. El backend compatible debe desplegarse primero, y el cliente se niega a recurrir a endpoints retirados. Los pagos de Nostr Wallet Connect también verifican la preimagen de pago devuelta frente al hash de la factura solicitada y consideran cualquier discrepancia como un resultado desconocido.&lt;/p>
&lt;p>En la &lt;a href="https://github.com/nostr-wot/nostr-wot-extension/releases/tag/v0.8.7">interfaz de solicitudes&lt;/a>, los usuarios pueden inspeccionar los events completos sin procesar, elegir solicitudes concretas dentro de un grupo de un sitio y ver mensajes privados en local sin aprobar su devolución a un sitio web. Las vistas previas locales se ocultan tras 30 segundos; las solicitudes entrantes permanecen sin seleccionar y la aprobación masiva ordinaria excluye la autenticación. La extensión separa los permisos de relays por sitio y para todos los sitios, limita el almacenamiento en caché de perfiles verificados, resuelve los events reemplazables con la misma marca de tiempo eligiendo el ID de event menor y mantiene en local las lecturas de publicaciones de la ventana emergente principal. Chrome y Firefox reciben paquetes verificados por separado y flujos de envío de versiones estables serializados; esos flujos no demuestran la disponibilidad actual en las tiendas.&lt;/p>
&lt;h3 id="iriss-shared-runtime-keeps-relay-and-peer-history-consistent">El entorno de ejecución compartido de Iris mantiene coherentes los historiales de relays y pares&lt;/h3>
&lt;p>&lt;a href="https://github.com/mmalmi/nostr-pubsub">nostr-pubsub&lt;/a> proporciona un entorno de ejecución compartido de events de Nostr con almacenamiento persistente de events y una cola de publicaciones salientes. &lt;a href="https://github.com/mmalmi/nostr-pubsub/releases/tag/nostr-pubsub-ts-v0.5.13">Las versiones 0.5.7–0.5.13&lt;/a> agrupan suscripciones exactas en lotes, las reproducen tras la reconexión, mantienen separadas las evidencias locales, de relays y de pares, e informan de un historial incompleto cuando falla el almacenamiento duradero. Las consultas completadas esperan a que cada event recibido termine su admisión. El lote predeterminado de relays contiene ahora como máximo 20 filtros OR para mantener la compatibilidad con servidores habituales, mientras que los lotes de pares conservan la coincidencia y la cancelación independientes.&lt;/p>
&lt;p>&lt;a href="https://github.com/mmalmi/hashtree/releases/tag/hashtree-ts-runtime-v0.5.13">Las actualizaciones del entorno de ejecución de Hashtree&lt;/a> sustituyen la conectividad de red específica de cada worker por ese entorno de ejecución compartido, índices persistentes de events y una cola de salida, lo que permite que los events y los archivos almacenados en caché compartan un nodo FIPS. &lt;a href="https://github.com/mmalmi/fips-ts/releases/tag/runtime-v0.0.45">FIPS TypeScript 0.0.44–0.0.45&lt;/a> selecciona rutas con capacidad suficiente para registros de señalización completos, recupera el establecimiento de sesiones interrumpido dentro del plazo del handshake y reintenta las respuestas WebRTC solo tras un rechazo explícito de enrutamiento. Las rutas WebSocket con tramas de mayor tamaño requieren pares nativos compatibles; las notas de 0.0.44 exigen desplegar primero FIPS nativo 0.4.85.&lt;/p>
&lt;p>&lt;a href="https://github.com/mmalmi/iris-kit/releases/tag/runtime-v0.2.5">Iris Kit 0.2.5&lt;/a> añade un cliente de aplicación persistente para events simples y firma &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> independiente del transporte, al tiempo que conserva las claves de las cuentas y las lecturas sin conexión. &lt;a href="https://github.com/mmalmi/iris-kit/releases/tag/runtime-v0.2.6">La versión 0.2.6&lt;/a> devuelve de inmediato desde el worker o el backend nativo un ID de event completo ya verificado; las consultas por prefijo y de events reemplazables siguen esperando al historial antes de elegir el valor más reciente. Estas son versiones de bibliotecas, y las notas no acreditan su despliegue en todas las aplicaciones de Iris.&lt;/p>
&lt;p>&lt;a href="https://github.com/irislib/meet/commit/9bebb074895fd34574c3a92056612cf3891de74b">La actualización del código fuente de Iris Meet del 30 de septiembre&lt;/a> sustituye su integración con NDK por una infraestructura persistente de publicación y suscripción y firmantes de identidad compartidos. El parche añade cobertura para la restauración de identidad sin conexión, la firma NIP-07 y el aislamiento de las salas de reunión. La &lt;a href="https://github.com/irislib/meet">aplicación de reuniones&lt;/a> existente utiliza Nostr para la señalización cifrada y WebRTC para el audio y el vídeo. Se trata de avances de implementación en la rama predeterminada; el repositorio no tiene ninguna versión etiquetada que demuestre que esta actualización concreta haya llegado al sitio en producción.&lt;/p>
&lt;h3 id="chama-propagates-listing-cancellation-and-background-alerts">Chama propaga la cancelación de anuncios y las alertas en segundo plano&lt;/h3>
&lt;p>&lt;a href="https://github.com/jesuspirate/chama">Chama&lt;/a> utiliza events firmados para intercambios comunitarios y conversaciones privadas. &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v6.4.16">Las versiones 6.4.14–6.4.16&lt;/a> publican una cancelación firmada antes de eliminar un anuncio en local, para que otros clientes puedan retirar la misma oferta almacenada en caché. Los tags de activación de los destinatarios acompañan ahora a los events independientemente de la configuración de notificaciones del remitente, y el servidor de alertas elimina duplicados por event firmado para que un chat inmediatamente después de incorporarse pueda seguir provocando una activación. Las tareas en segundo plano vuelven a procesar los intercambios afectados desde los cursores guardados, aíslan las cadenas fallidas y descifran el texto de las notificaciones en local; la versión requiere volver a desplegar el servicio de vigilancia complementario.&lt;/p>
&lt;p>&lt;a href="https://github.com/jesuspirate/chama/releases/tag/v6.4.16">Las versiones agrupadas&lt;/a> también aplican las renovaciones de los participantes en los momentos de sus events firmados, ponen en cuarentena los bloqueos de fondos realizados después de que caducara una plaza y ofrecen una opción de recuperación para la nota al portador guardada. La publicación de la reclamación espera a que se confirme la importación o el pago. Los filtros de anuncios conservan la moneda del usuario que los consulta en los distintos ámbitos comunitarios, y las cabeceras de los intercambios utilizan el importe incorporado definitivo. Estos cambios armonizan lo que dos clientes conectados a Nostr deducen del mismo historial de events.&lt;/p>
&lt;h3 id="earthly-0112-adds-reusable-map-configurations">Earthly 0.1.12 añade configuraciones de mapas reutilizables&lt;/h3>
&lt;p>&lt;a href="https://github.com/zeSchlausKwab/earthly">Earthly&lt;/a> es un &lt;a href="https://github.com/zeSchlausKwab/earthly/blob/v0.1.12/README.md">editor colaborativo de mapas basado en Nostr&lt;/a> con publicación firmada y uso compartido cifrado. &lt;a href="https://github.com/zeSchlausKwab/earthly/releases/tag/v0.1.12">La versión 0.1.12&lt;/a> añade configuraciones reutilizables de GMapper para Google My Maps públicos, descubrimiento de Maplets creados por desarrolladores, almacenamiento privado o publicación pública de configuraciones y copia de geometrías con atribución. La misma versión añade el uso compartido cifrado de conexiones, entregas de entidades y navegación del chat en móviles. La disponibilidad de exportación de Google y el CORS del navegador limitan la importación, los Maplets ejecutables descargados siguen sin estar disponibles en Tauri y las comprobaciones de actualización en dispositivos Android físicos siguen pendientes.&lt;/p>
&lt;p>El &lt;a href="https://github.com/zeSchlausKwab/earthly/pull/29">trabajo de configuración&lt;/a> migró las direcciones de publicación y las preferencias existentes y añadió la revisión o retirada de las actualizaciones de configuración. Su flujo inicial de Android falló antes de la compilación; una &lt;a href="https://github.com/zeSchlausKwab/earthly/pull/30">corrección de las herramientas&lt;/a> preparó la versión etiquetada posteriormente.&lt;/p>
&lt;h3 id="mostro-0190-retires-its-first-generation-transport">Mostro 0.19.0 retira su transporte de primera generación&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> coordina intercambios entre pares a través de Nostr. La &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.19.0">versión 0.19.0&lt;/a> ya incluye la &lt;a href="https://github.com/MostroP2P/mostro/pull/1004">eliminación de su transporte gift-wrap de primera generación&lt;/a>, por lo que los clientes deben usar el protocolo más reciente. Los tags de marca de tiempo existentes para la creación de órdenes y la apertura de disputas &lt;a href="https://github.com/MostroP2P/mostro/pull/1000">pasan a llamarse &lt;code>published_at&lt;/code>&lt;/a> sin cambiar sus valores almacenados; el &lt;code>created_at&lt;/code> del event que los contiene sigue siendo su hora de firma. Las respuestas de restauración devuelven la clave de intercambio de la contraparte, las operaciones de creación y aceptación aceptadas reconocen las claves de intercambio, y la publicación en relays se completa con la primera confirmación positiva de un relay. La misma versión actualiza los plazos y la cancelación de las fianzas, cierra las disputas cuando se resuelve un intercambio, notifica al encargado de resolverlas y limita la antigüedad de los precios transmitidos por relays.&lt;/p>
&lt;p>La &lt;a href="https://github.com/MostroP2P/mostro/pull/1006">corrección de la admisión de claves de intercambio&lt;/a> de Mostro reconoce una clave en cuanto se confirma la orden o disputa que la introduce. Antes, los nodos con requisitos de prueba de trabajo más estrictos para el primer contacto podían descartar un mensaje de seguimiento legítimo hasta la actualización periódica de claves conocidas; los umbrales iguales a los predeterminados no se veían afectados. Una &lt;a href="https://github.com/MostroP2P/mostro/pull/923">transacción de disputa&lt;/a> confirma de forma atómica la transición de la orden y la fila de la disputa, eliminando los fallos por estados inconsistentes. Las &lt;a href="https://github.com/MostroP2P/mostro/pull/945">notificaciones de cierre&lt;/a> envían al encargado asignado un mensaje privado, sin garantía de entrega, cuando los usuarios resuelven una disputa, y el event reemplazable existente sigue siendo la alternativa para cuando está desconectado.&lt;/p>
&lt;h3 id="scrutiny-lens-brings-security-research-onto-nostr">SCRUTINY Lens lleva la investigación de seguridad a Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/crocs-muni/scrutiny-lens/releases/tag/v0.1.0">SCRUTINY Lens v0.1.0&lt;/a>, su primera versión pública del 29 de septiembre, es un cliente de navegador para metadatos de seguridad publicados a través de Nostr. Los analistas pueden buscar por CVE, identificadores de paquetes o certificados, examinar historiales de events y retractaciones, y explorar relaciones en un grafo de temas. El navegador verifica las firmas y los identificadores de los events. La búsqueda y las explicaciones opcionales con IA usan un punto de conexión elegido por el usuario; la aplicación comprueba las citas incluidas frente a los events subyacentes. Las &lt;a href="https://github.com/crocs-muni/scrutiny-lens/releases/tag/v0.1.0">notas de la versión&lt;/a> describen explícitamente las limitaciones de los relays e identifican dependencias de compilación local que todavía requieren repositorios hermanos.&lt;/p>
&lt;h3 id="mangatsu-and-noteds-reach-android">Mangatsu y Noteds llegan a Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/imattau/Mangatsu/releases/tag/v0.1.11">Mangatsu v0.1.11&lt;/a> forma parte de la primera serie de versiones para Android de este lector y editor de cómics, publicada esta semana. Su &lt;a href="https://github.com/imattau/Mangatsu/commit/543d6d3dde3bffe293b7336d0fb6f4c82532fe13">código fuente&lt;/a> añade el inicio de sesión con Amber a través de &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>, la interfaz de Android para solicitar a un firmante externo que apruebe operaciones de Nostr. Los cómics y los capítulos son events de Nostr, mientras que sus páginas se alojan en servidores Blossom; el lector también admite una biblioteca guardada cifrada y la lectura sin conexión. Los commits posteriores abordan la invocación del firmante y las actualizaciones de las listas de relays.&lt;/p>
&lt;p>&lt;a href="https://github.com/imattau/noteds/releases/tag/v0.1.2">Noteds v0.1.2&lt;/a> lleva a Android un mercado de anuncios clasificados de Nostr mediante Tauri. Su &lt;a href="https://github.com/imattau/noteds/commit/c9294999134196e9d98c011440c7ca0ed5fcc398">integración con el firmante de Android&lt;/a> usa la firma NIP-55 de Android. La aplicación publica anuncios y mensajes a través de Nostr y construye un grafo de búsqueda local con categorías, zonas geográficas y representaciones vectoriales opcionales en el navegador. El código fuente más reciente corrige el acceso nativo a la ubicación para la búsqueda de resultados cercanos. Ambos proyectos están en sus primeras versiones; sus páginas de versiones en GitHub no tienen notas detalladas, por lo que estas capacidades proceden de los README de las versiones etiquetadas y de los commits de implementación.&lt;/p>
&lt;h3 id="statim-combines-nostr-dms-with-other-networks">Statim combina los mensajes directos de Nostr con otras redes&lt;/h3>
&lt;p>&lt;a href="https://github.com/alaibe/statim/releases/tag/v0.4.0">Statim v0.4.0&lt;/a> sucede a su versión inicial del 23 de septiembre. El &lt;a href="https://github.com/alaibe/statim/blob/v0.4.0/README.md">código fuente etiquetado&lt;/a> describe una aplicación de mensajería con mensajes directos de Nostr mediante NIP-17 junto con XMTP, Status, Telegram y Matrix. Las cuentas parten de una frase de recuperación almacenada localmente; cada conversación identifica su protocolo porque esas redes ofrecen distintas propiedades de privacidad. Android carece actualmente de integración con Telegram. Estas son las capacidades documentadas del proyecto, no garantías comprobadas de forma independiente ni una confirmación de disponibilidad en las tiendas de aplicaciones.&lt;/p>
&lt;h2 id="in-development">En desarrollo&lt;/h2>
&lt;h3 id="amethyst-repairs-encrypted-group-interoperability">Amethyst corrige la interoperabilidad de los grupos cifrados&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> es un cliente Nostr para Android compatible con los grupos cifrados de Marmot. White Noise es otro servicio de mensajería de Marmot; un &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4245">conjunto de cambios de interoperabilidad probado con sus clientes&lt;/a> aborda la administración de grupos, la redacción relativa a las eliminaciones y otros comportamientos que se manifiestan cuando los dos clientes comparten una conversación. Otras correcciones más específicas envían &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4233">reacciones y eliminaciones dentro del grupo de Marmot&lt;/a> en lugar de hacerlo como mensajes privados independientes con envoltorio de regalo de &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> y &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4240">aplican las ediciones de otro cliente después de reiniciar&lt;/a>. Se trata de cambios integrados en el código fuente; las pruebas descritas en las PR tienen un alcance más limitado que una versión publicada con interoperabilidad entre clientes.&lt;/p>
&lt;p>Una &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4201">integración independiente del entorno de ejecución y la interfaz de grupos de Cordn&lt;/a> añade otra vía para los grupos cifrados a través de servidores coordinadores. Cordn es distinto de Marmot, por lo que los dos cambios no deben interpretarse como una única migración de transporte.&lt;/p>
&lt;p>Amethyst también integró &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4231">comandos HTTP de relay en su relay Geode y su cliente Quartz&lt;/a> bajo su propuesta &lt;a href="https://nostrcompass.org/es/topics/nip-fe/">NIP-FE&lt;/a>, y una &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4174">interfaz de revisión de conflictos de copias de seguridad&lt;/a> para los event reemplazables de perfiles y listas. NIP-FE es una denominación de propuesta del proyecto; el flujo de copias de seguridad permite comparar versiones antes de aceptar un reemplazo y evita sobrescrituras silenciosas del estado local.&lt;/p>
&lt;p>Amethyst también desarrolla Concord, un protocolo independiente de comunidades cifradas utilizado por Armada y Accordion. Un &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4262">conjunto de cambios de conformidad&lt;/a> añade listas de comunidades fragmentadas, pruebas de fijación, rotación de claves y registros de disolución, seguido de &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4264">mensajes que desaparecen e invitaciones directas&lt;/a>. Una invitación permanece en una bandeja de entrada privada hasta que se acepta; recibirla no establece contacto con los relays de la comunidad. El mismo cambio corrige una comparación de autores que podía permitir que una eliminación de otro autor borrara un mensaje. Las &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4265">correcciones entre clientes&lt;/a> reparan la serialización de rumores sin firma, los campos de invitación ausentes, la creación de comunidades confirmada por un relay y la incorporación sin reiniciar; las pruebas en emuladores descritas incluyeron pares de Armada y Accordion en funcionamiento.&lt;/p>
&lt;p>Una &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4277">implementación posterior de canales privados&lt;/a> rota las claves del canal después de las revocaciones de acceso pertinentes y añade controles para crear, privatizar, hacer público y renovar las claves. También añade expulsiones cooperativas con comprobación de rango y hace que los archivos adjuntos de los mensajes caduquen junto con los mensajes a los que pertenecen. Las actualizaciones de WebXDC pueden entrar en un búfer de canal independiente, pero Amethyst sigue sin disponer de un entorno anfitrión para aplicaciones WebXDC. Ese conjunto posterior de cambios informa de pruebas del formato de transmisión y pruebas unitarias, sin pruebas en dispositivos ni con relays en funcionamiento, por lo que el resultado anterior de interoperabilidad no certifica todos los controles recién añadidos.&lt;/p>
&lt;p>El motor MLS de Quartz ahora &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4271">conserva los secretos de generaciones de mensajes omitidas después de reiniciar&lt;/a>, lo que permite que los mensajes fuera de orden sigan siendo descifrables después de restaurar el estado guardado. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4272">Cuatro épocas anteriores conservadas&lt;/a> permiten a quienes invocan el motor autenticar mensajes de aplicación tardíos, conservar sus datos autenticados e impedir que una generación ya consumida vuelva a abrirse. Una &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4275">actualización del árbol de secretos&lt;/a> carga secretos de nodos sin expandir desde un estado de estilo ts-mls; los &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4270">errores de generaciones obsoletas específicos del remitente&lt;/a> distinguen una colisión del mecanismo de trinquete del propio cliente de una repetición por parte de otro miembro. La PR indica explícitamente que el mecanismo alternativo existente de Marmot para épocas conservadas sigue siendo independiente, por lo que esta es una capacidad del motor, no una prueba de que todas las vías de mensajes de Amethyst la utilicen.&lt;/p>
&lt;p>Una &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4267">auditoría del lector de tag de Quartz&lt;/a> corrige entradas privadas de geohash que podían publicarse en texto claro y un analizador que trataba la clave privada de un &lt;code>nsec&lt;/code> como una clave pública. También repara las direcciones de republicación, los destinos para ocultar canales, los tag raíz de salas en directo y los event de mint direccionables. Se elimina el lector obsoleto &lt;code>ForkTag&lt;/code>, lo que introduce un cambio en la API del código fuente para quienes utilizan Quartz; las filas de mint preexistentes en SQLite siguen necesitando una migración independiente. Los &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4282">modelos adicionales de event&lt;/a> cubren las propuestas de Buzz para contenedores de proyectos, revisiones de artefactos y equipos, mientras que los &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4266">modelos de visualización de vídeo y control cifrado de notificaciones push&lt;/a> siguen los esquemas de Divine; estas incorporaciones establecen compatibilidad con el análisis y la construcción, no interfaces de cliente completas ni NIP numerados adoptados.&lt;/p>
&lt;p>El cliente también &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4284">muestra fotografías Ultra HDR&lt;/a> en el feed y el visor a pantalla completa en Android 14 o posterior. Android 15 y versiones posteriores limitan el aumento de brillo del feed al doble del rango ordinario, mientras que a pantalla completa se puede utilizar todo el rango de la pantalla; los dispositivos de prueba descritos ejecutaban API de Android más recientes, por lo que Android 14 y 15 quedaron sin probar. Una &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4278">integración de la interfaz compartida y la adaptación de las cargas&lt;/a> traslada 140 pantallas a código común para Android y escritorio y saca el trabajo multimedia de Android del hilo de la interfaz. Su auditoría también restablece la notificación de errores al eliminar metadatos, de modo que la refactorización es más que un traslado de archivos.&lt;/p>
&lt;h3 id="divine-adds-encrypted-video-to-direct-messages">Divine añade vídeo cifrado a los mensajes directos&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">Divine&lt;/a> es un cliente de vídeo de Nostr. &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> transporta mensajes privados en envoltorios de regalo cifrados que ocultan su remitente a los relays. El &lt;a href="https://github.com/divinevideo/divine-mobile/pull/9486">trabajo integrado de Divine sobre mensajes de vídeo&lt;/a> cifra un vídeo adjunto en el dispositivo, carga el texto cifrado y envía la clave de descifrado dentro de ese mensaje privado. El destinatario puede verificar y descifrar el archivo para reproducirlo o guardarlo. Una &lt;a href="https://github.com/divinevideo/divine-mobile/pull/9446">corrección independiente de la restauración del historial&lt;/a> evita que una negativa ambigua de un relay ponga fin prematuramente a la recuperación cuando otros relays todavía pueden responder.&lt;/p>
&lt;p>La &lt;a href="https://github.com/divinevideo/divine-mobile/pull/9603">corrección de Divine para claves de moderación retiradas&lt;/a> rechaza las claves retiradas al resolver etiquetas de moderación y selecciona al destinatario actual de las denuncias cuando se presenta una. Las denuncias pendientes dirigidas a una clave retirada se redirigen a la clave fijada en la compilación, y las conversaciones sin resolver siguen sin admitir escritura. El cambio también distingue la custodia de las claves retiradas al decidir qué hilos históricos puede leer un menor; las actualizaciones de custodia siguen requiriendo una nueva versión de la aplicación. La &lt;a href="https://github.com/divinevideo/divine-mobile/pull/9677">gestión de comentarios eliminados en la caché&lt;/a> impide que un comentario reciente eliminado correctamente vuelva a aparecer cuando se recarga un hilo.&lt;/p>
&lt;p>Para los creadores, un &lt;a href="https://github.com/divinevideo/divine-mobile/pull/9598">modo de grabación con máscara de color en directo&lt;/a> muestra una vista previa del fondo de reemplazo antes de grabar una toma, y el &lt;a href="https://github.com/divinevideo/divine-mobile/pull/9701">enmascaramiento de paredes blancas&lt;/a> añade enmascaramiento sensible al brillo a través del complemento de vídeo. Los &lt;a href="https://github.com/divinevideo/divine-mobile/pull/9652">subtítulos palabra por palabra&lt;/a> conservan los tiempos de las palabras reconocidas y utilizan tiempos aproximados cuando el servidor solo proporciona segmentos completos. La &lt;a href="https://github.com/divinevideo/divine-mobile/pull/9698">continuación de stop-motion&lt;/a> añade nuevas imágenes fijas al ritmo de la composición existente, mientras que la &lt;a href="https://github.com/divinevideo/divine-mobile/pull/9645">reincorporación de clips separados&lt;/a>, la &lt;a href="https://github.com/divinevideo/divine-mobile/pull/9654">selección de fuentes agrupadas&lt;/a> y los &lt;a href="https://github.com/divinevideo/divine-mobile/pull/9601">ajustes predefinidos de velocidad&lt;/a> añaden controles de edición sin cambiar el formato de los event de Nostr.&lt;/p>
&lt;p>La &lt;a href="https://github.com/divinevideo/divine-mobile/pull/9694">alineación de la exportación cuadrada&lt;/a> y su &lt;a href="https://github.com/divinevideo/divine-mobile/pull/9703">corrección posterior para clips más pequeños&lt;/a> mantienen el texto y las pegatinas en su sitio entre clips de distintas resoluciones. La &lt;a href="https://github.com/divinevideo/divine-mobile/pull/9664">reproducción HLS de terceros&lt;/a> evita un fallo de memoria dinámica en Android al volver atrás en los límites de cada bucle en lugar de precargar en el búfer listas de reproducción importadas repetidas; esos bucles pueden pausarse brevemente en cada reinicio. Una &lt;a href="https://github.com/divinevideo/divine-mobile/pull/9680">recarga de las preferencias de la cuenta&lt;/a> mantiene los filtros vinculados a la cuenta en sus valores predeterminados al cambiar de cuenta y corrige parte de una aserción de depuración del inicio de sesión. Un problema independiente de actualización de las etiquetas de moderación sigue abierto, por lo que la PR no afirma que todos los errores de inicio de sesión estén corregidos.&lt;/p>
&lt;h3 id="buzz-extends-its-relays-channel-and-identity-controls">Buzz amplía los controles de canales e identidad de su relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/buzz">Buzz&lt;/a> es un espacio de trabajo basado en Nostr con su propio relay y sus propios clientes. Su &lt;a href="https://github.com/block/buzz/pull/7919">implementación integrada de artefactos de canal&lt;/a> asigna a cada registro editable un único canal y una cadena de revisiones; dos ediciones en conflicto no pueden convertirse ambas en la revisión principal. La denominación &lt;a href="https://nostrcompass.org/es/topics/nip-ar/">NIP-AR&lt;/a> del proyecto se refiere a su propia propuesta e implementación, no a un estándar establecido de Nostr.&lt;/p>
&lt;p>Para la entrada HTTP protegida, otro &lt;a href="https://github.com/block/buzz/pull/7264">cambio integrado&lt;/a> vincula una aserción de identidad federada con la misma clave acreditada mediante la autorización &lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98&lt;/a>. NIP-98 define events firmados de autenticación HTTP; la aserción &lt;a href="https://nostrcompass.org/es/topics/nip-fi/">NIP-FI&lt;/a> de Buzz es una especificación del proyecto. También integró el &lt;a href="https://github.com/block/buzz/pull/7849">cifrado HPKE para los sobres de copia de seguridad de claves secretas&lt;/a>. Esa PR acredita trabajo de seguridad en el código fuente; la distribución a todos los clientes sigue sin verificarse.&lt;/p>
&lt;p>&lt;a href="https://github.com/block/buzz/releases/tag/desktop-v0.5.26">Buzz desktop 0.5.26&lt;/a> incluye el trabajo de artefactos de canal, el cifrado HPKE nativo de las copias de seguridad de claves secretas y una consola de administración del relay para escritorio. Sus cambios compartidos corrigen las solicitudes de canales de proyectos no listados, sincronizan entre dispositivos las secciones de la barra lateral, la ordenación, las estrellas y los silenciamientos, limitan las lecturas de hilos largos y endurecen las aserciones de identidad de Blossom. Las &lt;a href="https://github.com/block/buzz/releases/tag/desktop-v0.5.26">notas de todo el repositorio&lt;/a> enumeran por separado la vinculación de identidades del relay, la entrega de menciones del componente complementario, las URL de notificaciones push configurables, la eliminación administrativa atómica y los nombres contextuales en móviles. Una versión de escritorio acredita la distribución de los componentes de escritorio y compartidos; no demuestra que esos cambios para móviles se hayan distribuido en una compilación móvil.&lt;/p>
&lt;p>La &lt;a href="https://github.com/block/buzz/pull/7224">aplicación de NIP-FI en WebSocket&lt;/a> de Buzz comprueba una aserción de identidad federada antes de aceptar tramas y después exige que su clave Nostr coincida con la clave autenticada mediante &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a>, que acredita la identidad de un cliente ante un relay. Una sesión caduca cuando se alcanza el primero de estos límites: la caducidad del token, la antigüedad máxima de la aserción o la duración configurada de la conexión; tras caducar, no admite ningún efecto nuevo. Este modo NIP-FI específico del proyecto está desactivado por defecto. Las confirmaciones de audio y la configuración de suscripciones ya admitidas aún pueden quedar a la espera de una dependencia bloqueada, por lo que el cambio no establece un límite universal para el tiempo de desconexión.&lt;/p>
&lt;p>La &lt;a href="https://github.com/block/buzz/pull/7830">preparación de la eliminación por parte del propietario&lt;/a> hace pasar las solicitudes certificadas por el operador por una aprobación automática vinculada al inventario antes de enviarlas al ejecutor de eliminación existente. Un &lt;a href="https://github.com/block/buzz/pull/7969">cambio posterior del relay&lt;/a> hace que los reintentos de una misma solicitud devuelvan su estado actual y reserva la cuota activa del propietario hasta que termine la eliminación; los marcadores de eliminación de hosts conservados permanentemente cuentan para un límite de 20 comunidades durante toda la vida útil. Estos son cambios administrativos en el código fuente, y el cambio posterior indica a los operadores que mantengan la eliminación desactivada hasta que su relay y su ejecutor de vaciado estén en funcionamiento. Por separado, una &lt;a href="https://github.com/block/buzz/pull/6515">auditoría del catálogo de particiones&lt;/a> detecta particiones que abarcan todos los casos y meses sin cobertura antes de crear nuevas particiones de events y del registro de entregas, haciendo visibles para los operadores la seguridad del servicio y la actualidad de la auditoría.&lt;/p>
&lt;p>Buzz para móviles ahora distingue entre personas y agentes que comparten un nombre visible. Su &lt;a href="https://github.com/block/buzz/pull/7894">resolutor de nombres de identidad&lt;/a> distingue a los agentes por su propietario y añade un sufijo corto de la clave solo cuando es necesario; la &lt;a href="https://github.com/block/buzz/pull/7895">integración en conversaciones&lt;/a> utiliza esos nombres para autores, menciones y avisos de pertenencia. &lt;a href="https://github.com/block/buzz/pull/7896">Listas, búsqueda y Pulse&lt;/a> completan el mismo comportamiento fuera de una conversación. La distinción visible modifica la etiqueta local, mientras que una mención seleccionada conserva el nombre original de la identidad transmitido por el protocolo.&lt;/p>
&lt;h3 id="conduit-advances-checkout-after-relay-acceptance">Conduit hace avanzar el proceso de compra tras la aceptación del relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/Conduit-BTC/conduit-mono">Conduit&lt;/a> es un mercado de Nostr que envía mensajes privados de pedidos a los comerciantes. La &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/483">publicación progresiva en relays&lt;/a> distingue la primera confirmación positiva de un relay de la finalización de todos los intentos de publicación en relays, y un &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/488">cambio posterior del proceso de compra&lt;/a> guarda de forma persistente esa primera confirmación antes de continuar. La aceptación de un relay significa que el pedido firmado llegó a un relay; no demuestra que un comerciante lo haya leído o atendido.&lt;/p>
&lt;p>Conduit también integró &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/529">sesiones recuperables de firmantes remotos&lt;/a> y &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/533">negociación transaccional entre firmante y relay&lt;/a>. &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> permite que una aplicación solicite firmas con una clave custodiada por un firmante independiente; estos cambios conservan el espacio de trabajo de la cuenta del usuario mientras se repara su transporte y después verifican la cuenta exacta antes de reanudar la actividad. Las PR acreditan el comportamiento del código fuente, no una compilación distribuida del proceso de compra.&lt;/p>
&lt;p>La &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/575">integración de la búsqueda de productos ordenada por relevancia&lt;/a> de Conduit envía una única consulta ordinaria de búsqueda de texto completo &lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a> para productos de kind 30402 y conserva el orden de relevancia del relay durante las comprobaciones de firmas, la conciliación de revisiones y el filtrado local de elegibilidad. Las tarjetas pueden aparecer antes de que terminen las lecturas en segundo plano de productos exactos, mientras que las eliminaciones firmadas más recientes siguen siendo autoritativas. Actualizar y Reintentar se limitan a la búsqueda y a las lecturas de productos exactos, en lugar de iniciar un descubrimiento amplio del catálogo. Un límite de 100 resultados seguido de filtrado local puede dejar fuera coincidencias elegibles, por lo que una respuesta parcial vacía ofrece una vía de recuperación y no demuestra que no haya productos.&lt;/p>
&lt;h3 id="elisym-builds-a-nostr-commerce-checkout">Elisym desarrolla un proceso de compra para el comercio en Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/elisymlabs/elisym">Elisym&lt;/a> está desarrollando un conjunto de herramientas de comercio que firma productos y transporta mensajes privados de pedidos y recibos a través de Nostr. Su &lt;a href="https://github.com/elisymlabs/elisym/pull/120">paquete de comercio integrado&lt;/a> define la verificación de ofertas y los events de pedidos envueltos mediante gift wrap; una &lt;a href="https://github.com/elisymlabs/elisym/pull/131">interfaz de compra&lt;/a> gestiona la revisión de ofertas, el pago con monedero y el estado de la entrega, mientras que un &lt;a href="https://github.com/elisymlabs/elisym/pull/133">nodo de comerciante autoalojado&lt;/a> empaqueta los componentes de la tienda. El proyecto califica el kind &lt;code>30490&lt;/code> como provisional y describe un alcance mínimo para octubre. Estas integraciones en el código fuente acreditan una integración emergente; no se ha demostrado la existencia de un estándar aceptado de comercio en Nostr ni de un lanzamiento público completo.&lt;/p>
&lt;p>Las &lt;a href="https://github.com/elisymlabs/elisym/pull/136">herramientas de compra para agentes&lt;/a> de Elisym añaden &lt;code>buy_product&lt;/code> y &lt;code>get_order&lt;/code> para sus productos anunciados en Nostr. La primera llamada devuelve una cotización sin realizar un pedido, y una segunda llamada acepta la cotización de un solo uso y las advertencias para el mismo agente y la misma red; el estado del pedido se conserva de forma duradera en el backend local de archivos del agente. La &lt;a href="https://github.com/elisymlabs/elisym/pull/137">compatibilidad con el proceso de compra de Tempo&lt;/a> añade una vía de pago con un monedero del navegador, con verificación del comerciante y entrega. Un hash de transacción enviado mantiene activo el intento hasta que se determina su resultado, evitando indicar un resultado de impago mientras una transacción difundida aún podría liquidarse.&lt;/p>
&lt;p>Una &lt;a href="https://github.com/elisymlabs/elisym/pull/139">corrección posterior del proceso de compra&lt;/a> permite que el proceso de compra de productos firmados se inicialice cuando un monedero del navegador se anuncia de inmediato durante el descubrimiento. El cambio en el código fuente sitúa la declaración de la sesión antes de que pueda ejecutarse esa función de retorno; la integración por sí sola no verifica un despliegue alojado.&lt;/p>
&lt;h3 id="nostter-improves-signer-checks-and-event-retrieval">nostter mejora las comprobaciones de firmantes y la recuperación de events&lt;/h3>
&lt;p>&lt;a href="https://github.com/SnowCait/nostter">nostter&lt;/a> es un cliente social de Nostr. Su &lt;a href="https://github.com/SnowCait/nostter/pull/2573">cambio integrado de comprobación de capacidades del firmante&lt;/a> comprueba si hay un firmante utilizable antes de ofrecer las acciones de seguir y reaccionar. Los &lt;a href="https://github.com/SnowCait/nostter/pull/2611">nuevos tags de fijación&lt;/a> incluyen la clave del autor y una indicación de relay conocida, sin adivinar una, y la &lt;a href="https://github.com/SnowCait/nostter/pull/2608">ordenación de la caché de events reemplazables&lt;/a> sigue el criterio de marca de tiempo y desempate por ID de event de &lt;a href="https://nostrcompass.org/es/topics/nip-01/">NIP-01&lt;/a>. NIP-01 define las reglas fundamentales de los events de Nostr, incluida la forma en que los clientes eligen entre events reemplazables.&lt;/p>
&lt;h3 id="pensieve-prepares-isolated-archive-reconciliation">Pensieve prepara la conciliación aislada de archivos&lt;/h3>
&lt;p>&lt;a href="https://github.com/andotherstuff/pensieve">Pensieve&lt;/a> es una herramienta de archivo y recuperación de Nostr. Su &lt;a href="https://github.com/andotherstuff/pensieve/pull/60">entorno de ejecución aislado de negentropía integrado&lt;/a> proporciona a la sincronización un proceso de trabajo con límites y un comportamiento de finalización duradero. La función requiere activación voluntaria y la PR indica explícitamente que no se activó ningún servicio ni configuración de producción; esto sienta las bases de una vía de recuperación más segura, no demuestra que haya un despliegue en funcionamiento.&lt;/p>
&lt;h3 id="contextvm-avoids-duplicate-calls-across-relays">ContextVM evita llamadas duplicadas entre relays&lt;/h3>
&lt;p>&lt;a href="https://github.com/ContextVM/sdk">El SDK de TypeScript de ContextVM&lt;/a> transporta solicitudes de herramientas y recursos como events de Nostr. Su &lt;a href="https://github.com/ContextVM/sdk/pull/103">corrección integrada de deduplicación de solicitudes entrantes&lt;/a> reconoce una misma solicitud en texto plano por su ID de event incluso cuando varios relays o una reconexión la entregan de nuevo, igualando el comportamiento de la vía existente de mensajes envueltos. La PR informa de que, antes de la corrección, una herramienta no idempotente se ejecutaba tres veces para una sola llamada. Un &lt;a href="https://github.com/ContextVM/sdk/pull/101">cambio complementario de notificaciones de recursos&lt;/a> envía actualizaciones solo a los clientes suscritos; las sesiones inicializadas sin una suscripción ya no las reciben.&lt;/p>
&lt;h3 id="cyberspace-revises-the-deck-0003-object-rules">Cyberspace revisa las reglas de objetos de DECK-0003&lt;/h3>
&lt;p>&lt;a href="https://github.com/arkin0x/cyberspace">Cyberspace&lt;/a> desarrolla el formato DECK-0003 para objetos estructurados de Nostr y bolsas de regiones cifradas, que Amethyst comenzó a implementar en el número de la semana pasada. Las nuevas &lt;a href="https://github.com/arkin0x/cyberspace/pull/36">reglas sobre partes y objetos ocultos&lt;/a> y &lt;a href="https://github.com/arkin0x/cyberspace/pull/38">referencias de bolsas&lt;/a> permiten que una bolsa haga referencia a un objeto publicado por separado en lugar de incorporar cada parte. Una &lt;a href="https://github.com/arkin0x/cyberspace/pull/40">corrección&lt;/a> posterior indica que una referencia por ID de event no puede fijar de manera fiable una versión antigua de un event direccionable, porque un relay puede descartarla tras su sustitución. Los lectores deben usar la regla corregida de referencias por coordenadas; la redacción de la integración anterior ha quedado reemplazada.&lt;/p>
&lt;h3 id="wisp-fixes-replies-to-nostr-comments">Wisp corrige las respuestas a comentarios de Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> es un cliente de Nostr con funciones de enrutamiento a relays y de monedero. Tras el lanzamiento del soporte para comentarios &lt;a href="https://nostrcompass.org/es/topics/nip-22/">NIP-22&lt;/a> de la semana pasada, una &lt;a href="https://github.com/barrydeen/wisp/pull/667">modificación posterior integrada&lt;/a> hace que una respuesta a un comentario NIP-22 también sea un event de comentario, con las referencias correctas al padre y a la raíz; el flujo anterior siempre publicaba una nota ordinaria. NIP-22 permite adjuntar comentarios a muchos tipos de contenido de Nostr. La corrección se integró después del tag 1.2.5 de Wisp, cuyas notas solo incrementan la versión, por lo que se trata de un avance en el código fuente cuyo lanzamiento sigue sin verificarse.&lt;/p>
&lt;h3 id="cordn-sends-coordinator-locations-to-a-second-device">Cordn envía las ubicaciones de los coordinadores a un segundo dispositivo&lt;/h3>
&lt;p>&lt;a href="https://github.com/Cordn-msg/cordn">Cordn&lt;/a> coordina la mensajería grupal cifrada a través de Nostr. Su &lt;a href="https://github.com/Cordn-msg/cordn/pull/9">cambio integrado en la especificación multidispositivo&lt;/a> incluye las indicaciones de relay del coordinador de un grupo en el documento de grupo replicado. Un dispositivo recién inicializado puede entonces encontrar un coordinador que no esté en los relays predeterminados, en lugar de aparentar que se ha unido a un grupo cuyo historial y mensajes en directo no puede obtener. Se trata de trabajo en la documentación del protocolo posterior al lanzamiento de la cola sin conexión de Cordn de la semana pasada, no de una nueva versión del cliente.&lt;/p>
&lt;h3 id="nostr-atlas-opens-a-directory-for-checkable-identities">Nostr Atlas abre un directorio de identidades verificables&lt;/h3>
&lt;p>&lt;a href="https://nostr-atlas.web.app">Nostr Atlas&lt;/a> es un nuevo directorio que presenta perfiles de Nostr junto con declaraciones de vinculación a cuentas externas. La &lt;a href="https://github.com/saiy2k/nostr-components/pull/148">publicación del sitio integrada&lt;/a> separa el directorio de la demostración de componentes del proyecto, y el sitio responde públicamente. Una &lt;a href="https://github.com/saiy2k/nostr-components/pull/144">integración del flujo de declaración&lt;/a> permite que el propietario de una cuenta de X publique una prueba firmada &lt;a href="https://nostrcompass.org/es/topics/nip-39/">NIP-39&lt;/a> con un firmante de navegador, mientras que el &lt;a href="https://github.com/saiy2k/nostr-components/pull/146">enriquecimiento de perfiles&lt;/a> lee los metadatos kind-0 de Nostr solo después de verificar la prueba. NIP-39 define el patrón de prueba para asociar una clave de Nostr con otra identidad en línea; una confirmación de un relay por sí sola no marca una declaración como verificada.&lt;/p>
&lt;h3 id="nostr-java-adds-media-hosting-tools-and-preserves-tag-positions">nostr-java añade herramientas de alojamiento multimedia y conserva las posiciones de los tags&lt;/h3>
&lt;p>&lt;a href="https://github.com/tcheeric/nostr-java">nostr-java&lt;/a> es una biblioteca Java y un conjunto de herramientas MCP para aplicaciones de Nostr. Sus &lt;a href="https://github.com/tcheeric/nostr-java/pull/557">herramientas Blossom integradas&lt;/a> permiten a quien las invoca subir, buscar, enumerar y eliminar contenido multimedia direccionado por hash y gestionar la lista de servidores del usuario. Una &lt;a href="https://github.com/tcheeric/nostr-java/pull/558">corrección de publicación&lt;/a> independiente mantiene en su lugar los valores vacíos de los tags: los tags de Nostr son posicionales, por lo que eliminar una indicación de relay vacía podría desplazar un marcador al campo equivocado y hacer que el event publicado difiera de la vista previa aprobada.&lt;/p>
&lt;h3 id="zap-cooking-changes-how-account-history-can-be-recovered">Zap Cooking cambia la forma de recuperar el historial de una cuenta&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a> es un cliente de Nostr para compartir recetas. Su &lt;a href="https://github.com/zapcooking/frontend/pull/753">trabajo integrado de recuperación Lazarus&lt;/a> sustituye una copia de seguridad basada en events de datos específicos de aplicaciones de &lt;a href="https://nostrcompass.org/es/topics/nip-78/">NIP-78&lt;/a> por un enfoque que examina las versiones de events reemplazables conservadas por los relays para detectar seguimientos, silenciamientos o perfiles sobrescritos. Lazarus sigue siendo un protocolo en borrador; la recuperación depende de relays que hayan conservado las versiones anteriores, y una PR integrada del cliente web no garantiza que se pueda recuperar cada event perdido.&lt;/p>
&lt;p>El cliente también integró &lt;a href="https://github.com/zapcooking/frontend/pull/743">controles opcionales de prueba de trabajo NIP-13&lt;/a> para notas y respuestas y un &lt;a href="https://github.com/zapcooking/frontend/pull/752">modelo de archivos adjuntos&lt;/a> que mantiene el orden del contenido multimedia y las descripciones de &lt;a href="https://nostrcompass.org/es/topics/nip-92/">NIP-92&lt;/a> coherentes entre la vista previa y la publicación. &lt;a href="https://nostrcompass.org/es/topics/nip-13/">NIP-13&lt;/a> permite que un remitente dedique cómputo local a un event antes de publicarlo; NIP-92 incluye metadatos multimedia como tags del event.&lt;/p>
&lt;p>La &lt;a href="https://github.com/zapcooking/frontend/pull/763">corrección de solicitudes NIP-05&lt;/a> de Zap Cooking exige autorización &lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98&lt;/a> sobre el cuerpo exacto de la solicitud y rechaza un firmante distinto de la clave pública que solicita el nombre. Anteriormente, ese endpoint público aceptaba solicitudes no autenticadas que podían sustituir el nombre de otro miembro. El nivel de membresía ahora procede del registro de membresía existente, y los usuarios de firmantes remotos reciben una petición de firma al solicitar un nombre. El flujo independiente de registro de confianza del lado del servidor permanece sin cambios.&lt;/p>
&lt;p>Una &lt;a href="https://github.com/zapcooking/frontend/pull/764">reparación de la lista de silenciamientos&lt;/a> impide que las acciones de silenciar perfiles sustituyan toda la lista kind 10000 únicamente por tags de claves públicas. El flujo anterior borraba las entradas de palabras, hashtags e hilos, además del contenido cifrado, y una de las interfaces podía volver a publicar públicamente claves de silenciamientos privados descifradas. El nuevo flujo lee la copia del relay, conserva los tags no relacionados y el texto cifrado, y se niega a publicar cuando esa lectura no está disponible. Eliminar un silenciamiento privado requiere descifrar y volver a cifrar mediante el firmante.&lt;/p>
&lt;h3 id="opal-brings-remote-signing-to-omarchy">Opal lleva la firma remota a Omarchy&lt;/h3>
&lt;p>&lt;a href="https://github.com/derekross/opal">Opal&lt;/a> es un firmante de Nostr de escritorio creado para el entorno Linux Omarchy. Su &lt;a href="https://github.com/derekross/opal/releases/tag/v0.3.3">versión 0.3.3 del 28 de septiembre&lt;/a> sucede a la primera serie pública con soporte de firma remota &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>, un almacén local de claves y una interfaz de permisos para las solicitudes de aplicaciones conectadas. NIP-46 mantiene la clave de la cuenta en el firmante mientras un cliente independiente le pide que apruebe operaciones. Esta es una versión temprana de un firmante específico de una plataforma, no una afirmación de compatibilidad más amplia con entornos de escritorio.&lt;/p>
&lt;h3 id="watchtower-opens-a-nip-86-relay-control-panel">WatchTower abre un panel de control de relays NIP-86&lt;/h3>
&lt;p>&lt;a href="https://github.com/iqbqioza/watchtower">WatchTower&lt;/a> es un panel recién publicado para la administración de relays mediante NIP-86, el protocolo para solicitudes autenticadas de gestión de relays. Una &lt;a href="https://watchtower.nostrfy.org">instancia pública&lt;/a> responde, lo que ofrece a los operadores un lugar donde examinar la interfaz. El repositorio se creó el 22 de septiembre; que el sitio sea accesible no demuestra que sus flujos de autorización hayan sido auditados de forma independiente ni que funcione con todas las implementaciones de relay.&lt;/p>
&lt;h3 id="hubstr-blossom-opens-a-personal-media-origin">Hubstr Blossom abre un servidor de origen personal para contenido multimedia&lt;/h3>
&lt;p>El &lt;a href="https://github.com/johninnis/hubstr-blossom">servidor Hubstr Blossom&lt;/a>, recién publicado, permite que un cliente de Nostr suba imágenes, vídeos y archivos a un endpoint Blossom autoalojado y luego incluya esas URL en events. Su README documenta el almacenamiento local por hash de contenido, un índice SQLite, la autorización firmada kind-24242 para cambios y una serie de operaciones Blossom para subir, replicar, enumerar y eliminar contenido. Las lecturas públicas permiten que otros clientes muestren el contenido multimedia publicado sin recibir permisos de subida.&lt;/p>
&lt;p>Las &lt;a href="https://github.com/johninnis/hubstr-blossom">opciones documentadas del servidor&lt;/a> también extraen metadatos de archivos para events &lt;a href="https://nostrcompass.org/es/topics/nip-94/">NIP-94&lt;/a>, que describen contenido multimedia compartido. El servidor puede volver a codificar imágenes sin metadatos EXIF y, de forma predeterminada, protege las solicitudes de replicación frente a destinos de redes privadas. Se trata de una implementación recién publicada con instrucciones de despliegue, no de pruebas de un despliegue amplio en producción.&lt;/p>
&lt;p>&lt;a href="https://github.com/johninnis/hubstr-relay">Hubstr Relay&lt;/a> publicó su código fuente inicial el 24 de septiembre. Combina una caché personal de events en SQLite con un relay público: los lectores no autenticados ven los events públicos permitidos, mientras que los usuarios autenticados mediante NIP-42 pueden leer su caché. Los envoltorios de regalo NIP-17 siguen sin estar disponibles para los lectores invitados. Su &lt;a href="https://github.com/johninnis/hubstr-relay/commit/0ae1a551ac50da0b7097105b76591dbc4d6cc023">actualización del 25 de septiembre&lt;/a> corrige los registros devueltos por los métodos de listas de pubkey de NIP-86.&lt;/p>
&lt;h3 id="meshstr-experiments-with-a-permissionless-relay-mesh">Meshstr experimenta con una malla de relays sin permisos&lt;/h3>
&lt;p>&lt;a href="https://gitlab.pocketlabs.dev/meshstr/meshstr">Meshstr&lt;/a> es un diseño alfa para que los relays de Nostr negocien presupuestos entre pares e intercambien recibos de uso firmados. Su primera implementación incluye &lt;a href="https://gitlab.pocketlabs.dev/meshstr/meshstr/-/commit/6d609fc99f">un puente de políticas de escritura para strfry, un relay de Nostr&lt;/a>, añadido el 27 de septiembre, con una corrección del socket al día siguiente. El repositorio describe la negociación DIDComm y la reconciliación &lt;a href="https://nostrcompass.org/es/topics/nip-77/">NIP-77&lt;/a>, que permite a los pares comparar conjuntos de events sin intercambiar sus inventarios completos, junto con informes verificables de pares que superan los presupuestos acordados.&lt;/p>
&lt;p>Esas &lt;a href="https://gitlab.pocketlabs.dev/meshstr/meshstr">reglas del proyecto&lt;/a> son una propuesta, no un NIP adoptado ni una red pública de relays demostrada. El avance concreto de esta semana es el código publicado que conecta la política de escritura de un relay con la contabilidad propuesta para la malla.&lt;/p>
&lt;h3 id="dossier-shows-what-a-public-nostr-history-can-reveal">Dossier muestra lo que puede revelar un historial público de Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/satanrayshe/dossier">Dossier&lt;/a> es una nueva herramienta de autoauditoría que se ejecuta en el navegador para examinar la huella de una persona en Nostr y Lightning, con una &lt;a href="https://satanrayshe.github.io/dossier/">demo pública&lt;/a>. Recopila enlaces visibles del perfil, rastros de zap, horarios de publicación, metadatos de antiguos mensajes directos cifrados con &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a> y metadatos de archivos multimedia, como los datos EXIF de las fotos; también puede mostrar dónde un relay sigue sirviendo un event que alguien intentó eliminar. La compatibilidad con firmantes &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a> permite que un usuario autorice acciones de limpieza sin pegar una clave privada en la página.&lt;/p>
&lt;p>Los &lt;a href="https://github.com/satanrayshe/dossier">límites documentados&lt;/a> del proyecto son importantes: un análisis solo ve los relays a los que accede, y una solicitud de eliminación no puede borrar las copias almacenadas en otros lugares. El repositorio apareció el 27 de septiembre y no tiene ninguna versión etiquetada; la demo y el código fuente acreditan una herramienta en fase inicial, no un inventario completo de la actividad pasada de una persona.&lt;/p>
&lt;h3 id="marmot-mdk-extends-polls-custom-emoji-and-account-metadata">Marmot MDK amplía las encuestas, los emojis personalizados y los metadatos de cuenta&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk">Marmot MDK&lt;/a> proporciona el entorno de ejecución y los enlaces para mensajería cifrada de grupos de Nostr. Las incorporaciones posteriores al código fuente de MDK exponen &lt;a href="https://github.com/marmot-protocol/mdk/pull/2094">selecciones de encuestas paginadas por votante&lt;/a> utilizando las mismas reglas de respuesta efectiva que los recuentos agregados. Los &lt;a href="https://github.com/marmot-protocol/mdk/pull/1929">componentes opcionales de grupo pertenecientes a la aplicación&lt;/a> proporcionan a las aplicaciones anfitrionas ajustes controlados por administradores que persisten tras la retención de mensajes y llegan a los nuevos miembros en su Welcome. Los &lt;a href="https://github.com/marmot-protocol/mdk/pull/2105">envíos con tags y las reacciones multimedia&lt;/a> transportan metadatos de emojis personalizados a través del entorno de ejecución y los enlaces, conservan el material de descifrado de las imágenes de reacción adjuntas después de un cambio de época y rechazan los tags de adjuntos falsificados. Ese cambio amplía la estructura de solicitud de carga de C, por lo que los consumidores de C deben recompilar con el encabezado actualizado.&lt;/p>
&lt;p>Una &lt;a href="https://github.com/marmot-protocol/mdk/pull/2093">corrección de convergencia&lt;/a> mantiene los mensajes pendientes cuando no se ha seleccionado ninguna rama canónica, en lugar de invalidarlos sin probar el estado activo. Una &lt;a href="https://github.com/marmot-protocol/mdk/pull/2095">limpieza de rutas inalcanzables&lt;/a> complementaria encauza los commits preparados sin resolver hacia el comportamiento de reintento que se mantiene. Las &lt;a href="https://github.com/marmot-protocol/mdk/pull/2097">lecturas de archivos multimedia cifrados&lt;/a> alinean el tiempo de espera de lectura HTTP con la gestión de inactividad del cuerpo reanudable, abordando las transferencias grandes bloqueadas sin afirmar que se haya superado la prueba de aceptación en dispositivo pendiente del APK entrante. Los &lt;a href="https://github.com/marmot-protocol/mdk/pull/2098">marcadores de etapas de inicio&lt;/a> muestran en qué paso de apertura de la cuenta se agotó el tiempo de espera, aportando evidencia de diagnóstico sin afirmar que se haya resuelto el bloqueo de inicio subyacente.&lt;/p>
&lt;p>El conector del agente local también &lt;a href="https://github.com/marmot-protocol/mdk/pull/1969">combina los metadatos de perfil existentes&lt;/a> al publicar una actualización de kind 0, conservando los campos omitidos en la solicitud. Las &lt;a href="https://github.com/marmot-protocol/mdk/pull/2096">actualizaciones de perfiles de grupo&lt;/a> exponen los cambios en el nombre y la descripción de un grupo a través de la vía existente autorizada por el administrador actual. Su autenticación de socket sigue dando acceso a toda la API local; esta incorporación no añade concesiones de capacidades por identidad. Estos cambios del código fuente son posteriores a la versión etiquetada 0.11.0.&lt;/p>
&lt;h3 id="rust-nostr-correlates-relay-count-replies">rust-nostr correlaciona las respuestas de recuento de los relays&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a>, una biblioteca y un SDK de Rust para aplicaciones Nostr, incorporó &lt;a href="https://github.com/nostrdevkit/nostr/pull/1478">respuestas COUNT correlacionadas y errores más claros para los procesos en espera&lt;/a>. El SDK se suscribe antes de enviar COUNT y solo acepta la respuesta correspondiente, evitando que un receptor perdido o cerrado parezca un cero legítimo. También conserva los errores del receptor para las confirmaciones de publicación y la autenticación del relay, de modo que quienes realizan las llamadas puedan distinguir una confirmación ausente de un rechazo explícito. Las firmas de los métodos públicos no cambian.&lt;/p>
&lt;h3 id="zaptracker-adds-nostr-network-and-quote-metrics">ZapTracker añade métricas de la red Nostr y de citas&lt;/h3>
&lt;p>&lt;a href="https://github.com/pratik227/zap_dashboard">ZapTracker&lt;/a> es un panel para creadores que muestra la interacción en Nostr y la actividad de la billetera. Una &lt;a href="https://github.com/pratik227/zap_dashboard/pull/133">incorporación al panel de red&lt;/a> sustituye las estadísticas de la red Lightning por datos de relays de Nostr en línea procedentes de nostr.watch e información de capacidades de documentos NIP-11. Un &lt;a href="https://github.com/pratik227/zap_dashboard/pull/135">cambio en las métricas de citas&lt;/a> cuenta los events de kind 1 que contienen tags &lt;code>q&lt;/code> junto con los me gusta, las republicaciones, los marcadores y los zaps. Esto permite a los creadores ver las citas en las clasificaciones de contenido y los gráficos de interacción; la evidencia sigue siendo código fuente incorporado.&lt;/p>
&lt;h3 id="lawallet-nwc-routes-card-top-ups-to-the-card-wallet">LaWallet NWC dirige las recargas de tarjetas a la billetera de la tarjeta&lt;/h3>
&lt;p>&lt;a href="https://github.com/lawalletio/lawallet-nwc">LaWallet NWC&lt;/a> conecta billeteras Lightning con aplicaciones mediante Nostr Wallet Connect. Su &lt;a href="https://github.com/lawalletio/lawallet-nwc/pull/316">incorporación de recargas de BoltCard&lt;/a> anuncia un enlace de pago LUD-19 que crea una factura mediante el método NWC &lt;code>make_invoice&lt;/code> de la billetera de la tarjeta. Las tarjetas bloqueadas, deshabilitadas o no vinculadas no anuncian un enlace de pago, y esta vía no redirige las recargas a la dirección Lightning independiente del propietario. Un &lt;a href="https://github.com/lawalletio/lawallet-nwc/pull/319">cambio posterior&lt;/a> expone el mismo enlace en el emulador y transmite en los envíos LNURL las notas del pagador aceptadas por el destinatario.&lt;/p>
&lt;h3 id="a-new-khatru-relay-exposes-owner-moderation-controls">Un nuevo relay khatru expone controles de moderación para el propietario&lt;/h3>
&lt;p>&lt;a href="https://github.com/rzazo24/nostr-relay-khatru">nostr-relay-khatru&lt;/a> publicó su código fuente inicial el 29 de septiembre como un relay general derivado de la implementación específica de HiveScope, ya descontinuada. La &lt;a href="https://relay.hivescope.xyz">instancia pública&lt;/a> sirve un documento NIP-11 que nombra este repositorio y anuncia autenticación, caducidad de events, events protegidos, recuento, reconciliación y administración del relay. Una &lt;a href="https://github.com/rzazo24/nostr-relay-khatru/commit/a6ef7cff9c4f833a6a2f72957d45935c736a0c51">implementación del 30 de septiembre&lt;/a> añade controles de moderación a su panel de propietario. Los metadatos públicos verifican un endpoint desplegado, no la realización satisfactoria de pruebas de todos los métodos anunciados.&lt;/p>
&lt;h3 id="a-local-web-of-trust-builder-tracks-unfollows">Un constructor local de redes de confianza registra a quién se deja de seguir&lt;/h3>
&lt;p>&lt;a href="https://github.com/etemiz/wot/commit/212fe268dd781c73adad51329be235abc8fd37db">etemiz/wot&lt;/a> publicó un rastreador de redes de confianza de Nostr el 30 de septiembre. Lee listas de seguimiento y listas de relays NIP-65, calcula la confianza a partir de raíces configurables y escribe puntuaciones en LMDB para políticas de relays, feeds y filtros de spam. La &lt;a href="https://github.com/etemiz/wot">documentación del proyecto&lt;/a> explica la contrapartida: las actualizaciones en tiempo real aumentan la confianza, mientras que los rastreos completos programados aplican las disminuciones y las acciones de dejar de seguir. Las puntuaciones dependen de las raíces elegidas. Se trata de código fuente recién publicado, sin una versión etiquetada ni afirmaciones de despliegue en producción.&lt;/p>
&lt;h3 id="moyu-opens-a-marmot-workspace-client">Moyu presenta un cliente de espacio de trabajo basado en Marmot&lt;/h3>
&lt;p>&lt;a href="https://github.com/tsgx1990/moyu">Moyu&lt;/a> ha publicado el código fuente de un cliente de chat para espacios de trabajo escrito en Rust y basado en &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, con interfaces de línea de comandos, terminal y escritorio. Sus &lt;a href="https://github.com/tsgx1990/moyu/blob/88a20d247510d1cc46ca955564aa395d26ae8e89/CHANGELOG.md">cambios del 30 de septiembre&lt;/a> utilizan los cambios de membresía registrados localmente para impedir que antiguas solicitudes de incorporación vuelvan a admitir a miembros eliminados, hacen que los códigos de invitación caduquen después de siete días y permiten a los administradores revocarlos. La salida del terminal filtra los caracteres de control y las anulaciones de dirección del texto proporcionados por otros miembros. Una bifurcación de MDK fijada a una revisión concreta dirige las transferencias de adjuntos de Blossom a través del proxy SOCKS5 configurado, y ese proxy realiza la resolución de nombres de host. Los cambios de 0.3.0 están en el código fuente público; todavía no hay ninguna etiqueta de versión ni entrada de lanzamiento públicas disponibles.&lt;/p>
&lt;h2 id="protocol-and-spec-work">Trabajo en protocolos y especificaciones&lt;/h2>
&lt;h3 id="nip-39-extends-identity-proofs-to-bluesky-and-discord">NIP-39 amplía las pruebas de identidad a Bluesky y Discord&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-39/">NIP-39&lt;/a> permite que una cuenta de Nostr enlace a una prueba de que controla una identidad en otra plataforma. Un &lt;a href="https://github.com/nostr-protocol/nips/pull/2486">cambio incorporado el 27 de septiembre&lt;/a> proporciona una frase recomendada para las nuevas pruebas e indica a los verificadores que acepten pruebas antiguas que contengan el npub de la cuenta, incluso cuando su redacción sea diferente. También documenta las publicaciones de Bluesky y los mensajes de Discord como ubicaciones de prueba. Una declaración de identidad de Discord solo puede comprobarla alguien que pueda leer el servidor donde se publicó su mensaje.&lt;/p>
&lt;h3 id="nip-86-adds-invite-code-management-for-relay-administrators">NIP-86 añade la gestión de códigos de invitación para administradores de relays&lt;/h3>
&lt;p>Compass describió en la edición del 8 de julio la &lt;a href="https://github.com/nostr-protocol/nips/pull/2408">propuesta de invitaciones de NIP-86&lt;/a> cuando aún estaba abierta; ahora se ha incorporado. &lt;a href="https://nostrcompass.org/es/topics/nip-86/">NIP-86&lt;/a> define una API estándar de gestión de relays, y &lt;a href="https://nostrcompass.org/es/topics/nip-43/">NIP-43&lt;/a> define cómo los relays restringidos anuncian la membresía y procesan las solicitudes de admisión. La incorporación del 24 de septiembre añade &lt;code>listclaims&lt;/code>, &lt;code>createclaim&lt;/code> y &lt;code>deleteclaim&lt;/code> para que un administrador pueda enumerar, emitir y revocar códigos de invitación aceptados por un relay. Eso proporciona a los operadores una vía de gestión de invitaciones que pueden otorgar un rol a un miembro después de que se incorpore; no exige que todos los relays admitan los métodos.&lt;/p>
&lt;p>Una corrección a la &lt;a href="https://nostrcompass.org/en/newsletters/2026-09-23-newsletter/#nip-86-adds-clear-and-list-methods-for-relay-management">cobertura de NIP-86&lt;/a> de la semana pasada: la &lt;a href="https://github.com/nostr-protocol/nips/blob/5b9920982ae1f4061328c1b09a90360da28d13c8/86.md">especificación incorporada&lt;/a> añadió &lt;code>unallowevent&lt;/code>, &lt;code>unbanevent&lt;/code>, &lt;code>listallowedevents&lt;/code> y &lt;code>listdisallowedkinds&lt;/code>. El artículo anterior enumeraba nombres de una descripción desactualizada de la propuesta. Los dos primeros métodos revierten una decisión de permitir o prohibir un event; los demás inspeccionan los events permitidos y los kinds no permitidos.&lt;/p>
&lt;h3 id="nip-51-moves-favorite-follow-sets-to-an-unused-event-kind">NIP-51 traslada los conjuntos de seguimiento favoritos a un kind de event sin usar&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a> define listas públicas y privadas, incluida una lista de los conjuntos de seguimiento favoritos de un usuario. Compass describió la &lt;a href="https://github.com/nostr-protocol/nips/pull/2417">propuesta sobre la colisión de kind&lt;/a> en la edición del 22 de julio; ahora se ha incorporado. La corrección del 27 de septiembre asigna a esa lista de favoritos el kind &lt;code>10021&lt;/code> porque el número anterior ya estaba en uso. Sus tags &lt;code>a&lt;/code> siguen apuntando a conjuntos de seguimiento de kind &lt;code>30000&lt;/code>. El cambio resuelve una colisión de números en la especificación; no crea una nueva forma de seguir a personas.&lt;/p>
&lt;h3 id="nip-51-proposes-hidden-replies-for-each-thread">NIP-51 propone respuestas ocultas para cada hilo&lt;/h3>
&lt;p>Una &lt;a href="https://github.com/nostr-protocol/nips/pull/2489">propuesta abierta de NIP-51&lt;/a> permitiría al autor de un hilo publicar un conjunto público de respuestas ocultas que los clientes que colaboren mostrarían mediante un control de alternancia. Utiliza un event direccionable de kind-30027 por hilo, con el ID raíz como su tag &lt;code>d&lt;/code> y tags &lt;code>e&lt;/code> que identifican las respuestas; solo se aplica un conjunto firmado por el autor de la raíz. Incluir la raíz en la lista pide a los clientes que oculten las respuestas de otros autores y dejen de ofrecer un editor de respuestas, aunque las respuestas todavía pueden publicarse en relays. El formato por hilo limita las colisiones de edición a la misma conversación. El autor informa de una implementación en Nostrich, pero la inspección del código fuente público no permitió constatarla; la propuesta sigue sin incorporarse, y el formato de su conjunto continúa en discusión.&lt;/p>
&lt;h3 id="nip-db-proposes-verified-domain-names-for-key-addressed-services">NIP-DB propone nombres de dominio verificados para servicios direccionados por clave&lt;/h3>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/pull/2487">propuesta abierta de NIP-DB&lt;/a>, presentada el 28 de septiembre, describe events de Nostr que vinculan un dominio de Internet convencional con la clave que lo sirve a través de una red direccionada por clave como &lt;a href="https://nostrcompass.org/es/topics/fips/">FIPS&lt;/a>, una malla cifrada que direcciona los nodos mediante su clave pública de Nostr. El propietario de un dominio puede establecer el vínculo con un registro DNS TXT o una prueba DNSSEC incluida con la declaración; los clientes fijarían un resultado verificado para su uso posterior sin conexión. La propuesta prohíbe explícitamente la resolución mediante una declaración no verificada, ya que cualquiera puede declarar como propio el dominio de otra persona en un event de Nostr. &lt;a href="https://github.com/fr34aky/fips-pub-domains">fips-pub-domains&lt;/a> es la implementación de referencia del autor, pero los números de kind de los events y parte de la redacción específica de la red superpuesta siguen bajo revisión. Las pruebas de extremo a extremo comunicadas constituyen evidencia aportada por el autor, no una afirmación de que la propuesta sea un NIP aceptado.&lt;/p>
&lt;h3 id="a-private-feed-draft-explores-encrypted-groups-of-recipients">Un borrador de feeds privados explora grupos cifrados de destinatarios&lt;/h3>
&lt;p>Una &lt;a href="https://github.com/nostr-protocol/nips/pull/2488">nueva propuesta de envoltura para múltiples destinatarios&lt;/a>, abierta el 29 de septiembre, esboza notas, respuestas y conexiones privadas cuyos destinatarios previstos pueden encontrar un event sin exponer sus claves públicas habituales en sus tags visibles. Propone tags de alias opacos por pares derivados de secretos compartidos y kinds de event provisionales, incluida una forma de envolver otro event de Nostr para cientos de lectores. Eso podría proporcionar a los pequeños feeds privados una vía de recuperación más directa que enviar un mensaje separado a cada miembro.&lt;/p>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/pull/2488">autor de la propuesta&lt;/a> la califica explícitamente como un trabajo en curso. El borrador no cuenta con una implementación demostrada ni con una revisión de seguridad, y sus asignaciones de kind y reglas de firma a nivel de bytes siguen abiertas.&lt;/p>
&lt;h3 id="a-blossom-proposal-lets-other-people-announce-mirrored-media">Una propuesta de Blossom permite a otras personas anunciar copias de contenido multimedia&lt;/h3>
&lt;p>Una &lt;a href="https://github.com/nostr-protocol/nips/pull/2478">propuesta abierta de NIP&lt;/a> describe una forma de que alguien que aloje una copia del blob de Blossom de otro autor anuncie esa copia a través de Nostr. Un cliente podría entonces buscar la copia si el servidor original pierde el blob. En la discusión también se ha planteado comprobar la lista actual de servidores BUD-03 de quien aloja la copia cuando una referencia de servidor anunciada haya quedado obsoleta. Se trata de una vía de descubrimiento propuesta, no de una garantía de que los clientes o los relays de archivo ya proporcionen almacenamiento alternativo.&lt;/p>
&lt;h3 id="road-event-reports-seek-a-shared-nostr-format">Los informes de incidencias viales buscan un formato compartido en Nostr&lt;/h3>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/pull/2479">propuesta abierta Road Event Reports&lt;/a> describe informes y confirmaciones de baches, cierres, cámaras y otras condiciones viales. Utiliza tags de ubicación y la marca de tiempo de caducidad de &lt;a href="https://nostrcompass.org/es/topics/nip-40/">NIP-40&lt;/a>, que indica a los relays cuándo dejar de servir un event, de modo que un informe no tenga que seguir vigente indefinidamente. El autor basó las revisiones en una muestra de events recuperados de relays públicos y en los &lt;a href="https://github.com/jooray/roadstr">clientes de Roadstr&lt;/a> existentes para informar de condiciones viales, pero el borrador todavía deja abierta una cuestión sobre codificación compacta, y el número de NIP propuesto no se ha adoptado.&lt;/p>
&lt;h3 id="marmot-revisits-multi-device-coordination">Marmot revisa la coordinación entre múltiples dispositivos&lt;/h3>
&lt;p>El &lt;a href="https://github.com/marmot-protocol/marmot/pull/427">rediseño de Marmot para múltiples dispositivos&lt;/a> sustituye un borrador de External Commit no implementado por una explicación paso a paso no normativa para recibir comentarios tempranos. La nueva dirección explora cómo un dispositivo existente aprueba uno nuevo, lo incorpora a las conversaciones y posteriormente elimina dispositivos, mientras mantiene visibles las preguntas abiertas. Los ID reservados por el borrador eliminado quedan libres porque ninguna implementación los adoptó. El documento de ideas no asigna nuevos ID ni formatos de transmisión y no constituye una función implementada para múltiples dispositivos.&lt;/p>
&lt;h2 id="six-years-of-nostr-septembers">Seis años de septiembres de Nostr&lt;/h2>
&lt;p>El último número de septiembre es una oportunidad para seguir cómo Nostr pasó de los esbozos a un conjunto más amplio de herramientas interoperables. Un &lt;a href="https://github.com/arcbtc/buber/commit/7a66d400f2">prototipo de 2021 para conectar pasajeros y conductores&lt;/a> utilizaba events firmados para coordinar un servicio; cinco años después, la &lt;a href="https://github.com/nostr-protocol/nips/commit/0046368a7">redacción sobre pruebas de identidad&lt;/a> y las &lt;a href="https://github.com/nostr-protocol/nips/commit/6631b3eb1">colisiones entre kinds de listas&lt;/a> son el tipo de detalles que los responsables del mantenimiento están resolviendo. Entre tanto, los clientes aprendieron a presentar conversaciones, contenido multimedia y recuperación de formas que las personas corrientes pueden utilizar. Las fuentes fechadas que aparecen a continuación muestran etapas de esa evolución. No demuestran que todos los experimentos llegaran a lanzarse ni que cada diseño antiguo siga siendo recomendable.&lt;/p>
&lt;h3 id="september-2021-early-experiments-with-useful-shapes">Septiembre de 2021: primeros experimentos con formas útiles&lt;/h3>
&lt;p>Un &lt;a href="https://github.com/arcbtc/buber/commit/7a66d400f2">commit de BUber del 4 de septiembre&lt;/a> exploró un concepto para conectar pasajeros con taxis mediante events de Nostr. Mostró cómo una solicitud firmada y transportada por relays podía coordinar a las personas sin asignar todo el servicio a un único servidor. La fuente presenta un concepto y no demuestra que se lanzara un servicio de transporte.&lt;/p>
&lt;p>Más tarde ese mismo mes, el &lt;a href="https://github.com/emeceve/loquaz/commit/d885d93d22">código fuente de Loquaz del 23 de septiembre&lt;/a> ofrecía un prototipo de chat de escritorio. Fue otro intento temprano de hacer que los mensajes de los relays se percibieran como una aplicación convencional. La fuente no demuestra que hubiera un cifrado de extremo a extremo terminado ni un servicio de mensajería en producción; el hilo conductor que perdura es la búsqueda de una interfaz de conversación utilizable sobre events sencillos. BUber probó la conexión entre pasajeros y conductores, y Loquaz probó el chat; ambos utilizaron events firmados antes de que se consolidaran los patrones comunes de los clientes. Esos ensayos plantearon dos problemas recurrentes para los clientes posteriores: coordinarse mediante relays y presentar los events como una conversación utilizable.&lt;/p>
&lt;h3 id="september-2022-chat-and-delegated-actions-enter-the-specifications">Septiembre de 2022: el chat y las acciones delegadas entran en las especificaciones&lt;/h3>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/commit/3423a6dfb">cambio de NIP-28 del 10 de septiembre&lt;/a> describía canales de chat públicos con mensajes y metadatos que los clientes podían interpretar conjuntamente. &lt;a href="https://nostrcompass.org/es/topics/nip-28/">NIP-28&lt;/a> convirtió una sala compartida en un objeto explícito del protocolo y proporcionó a los clientes una convención común para los canales.&lt;/p>
&lt;p>El 23 de septiembre, el &lt;a href="https://nostrcompass.org/es/topics/nip-26/">texto de NIP-26&lt;/a> sobre &lt;a href="https://github.com/nostr-protocol/nips/commit/b62aa418d">firma delegada&lt;/a> documentó una forma de que una clave autorizara a otra a firmar events limitados. Recogía una importante cuestión de diseño de 2022: cómo utilizar una identidad de Nostr sin entregar la clave principal a cada aplicación. &lt;a href="https://github.com/nostr-protocol/nips/blob/master/26.md">NIP-26 figura ahora como no recomendado&lt;/a>, por lo que esto es un registro de un experimento, no un consejo para nuevas integraciones. Su estado posterior muestra cómo ha evolucionado el modelo de firma: una especificación puede conservar un planteamiento útil de un problema incluso cuando se retira la respuesta propuesta.&lt;/p>
&lt;h3 id="september-2023-clients-grow-up-around-relay-discovery-and-metadata">Septiembre de 2023: los clientes maduran en torno al descubrimiento de relays y los metadatos&lt;/h3>
&lt;p>Damus es un cliente social de Nostr. Su &lt;a href="https://github.com/damus-io/damus/blob/master/CHANGELOG.md#16-18---2023-09-21">registro de cambios del 21 de septiembre&lt;/a> recogía trabajo en su base de datos local de Nostr, la búsqueda y la navegación por hashtags. Esos cambios facilitaron explorar y recuperar un feed social con mucha actividad en un teléfono; el registro de cambios fechado es evidencia de esa versión del cliente, no de todas las capacidades posteriores de Damus.&lt;/p>
&lt;p>Los detalles del protocolo también evolucionaban. Un &lt;a href="https://github.com/nostr-protocol/nips/commit/44c21c9d8">cambio del 26 de septiembre&lt;/a> en &lt;a href="https://nostrcompass.org/es/topics/nip-24/">NIP-24&lt;/a> aclaró los campos opcionales de metadatos de perfil, mientras que el &lt;a href="https://github.com/nostr-protocol/nips/commit/3b5d3ca67">cambio de NIP-65 del 29 de septiembre&lt;/a> abordó la normalización y la deduplicación de los URI de los relays. &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> indica a los clientes cómo publicar los relays que utilizan para leer y escribir; un tratamiento coherente de los URI ayuda a que esas listas apunten al mismo relay incluso cuando las cadenas difieren de formas inocuas. Esa pequeña convención orientó el diseño de los clientes hacia un descubrimiento fiable: encontrar los events de una persona depende de saber dónde se publican.&lt;/p>
&lt;h3 id="september-2024-posts-acquire-richer-context">Septiembre de 2024: las publicaciones adquieren un contexto más rico&lt;/h3>
&lt;p>Las &lt;a href="https://github.com/damus-io/damus/blob/master/CHANGELOG.md#1101---2024-09-22">notas de la versión de Damus del 22 de septiembre&lt;/a> describían compatibilidad con los pasajes destacados y los comentarios de &lt;a href="https://nostrcompass.org/es/topics/nip-84/">NIP-84&lt;/a>. NIP-84 ofrece a los lectores una forma de citar y comentar un pasaje de contenido extenso. El trabajo en el cliente muestra cómo una idea del protocolo se convirtió en algo que las personas podían utilizar mientras leían.&lt;/p>
&lt;p>Mientras tanto, &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> recibió un &lt;a href="https://github.com/nostr-protocol/nips/commit/ea36ec9ed">cambio del 20 de septiembre&lt;/a> que refinaba los asuntos y las etiquetas de las incidencias para la colaboración con git a través de Nostr, y &lt;a href="https://nostrcompass.org/es/topics/nip-73/">NIP-73&lt;/a> recibió un &lt;a href="https://github.com/nostr-protocol/nips/commit/79786bb7b">cambio ese mismo día&lt;/a> que refinaba los identificadores de contenido externo. Son cambios separados de las especificaciones: uno ayuda a que las incidencias de un repositorio conserven su estructura, mientras que el otro permite que un event haga referencia a material externo a Nostr. Ambos amplían el significado que un cliente puede preservar cuando el contenido circula entre comunidades, repositorios y otros medios.&lt;/p>
&lt;h3 id="september-2025-access-controls-and-payment-context-become-more-precise">Septiembre de 2025: los controles de acceso y el contexto de los pagos se vuelven más precisos&lt;/h3>
&lt;p>Una &lt;a href="https://github.com/nostr-protocol/nips/commit/4c5d5fff9">revisión de NIP-42 del 6 de septiembre&lt;/a> abordó la autenticación de múltiples usuarios en un relay. &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> permite que un relay exija a un cliente demostrar qué clave de Nostr está realizando una solicitud; la actualización fue importante para los servicios que atienden a más de una cuenta autenticada a través de la misma conexión.&lt;/p>
&lt;p>Una &lt;a href="https://github.com/nostr-protocol/nips/commit/400d975da">actualización de NIP-47 del 15 de septiembre&lt;/a> añadió metadatos de pago opcionales a las solicitudes de Nostr Wallet Connect. &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> permite que una aplicación solicite a una cartera realizar acciones a través de Nostr. Un mayor contexto puede hacer comprensible una interacción con una cartera, pero los metadatos pueden revelar datos del pagador, por lo que los clientes y las carteras siguen teniendo que tratarlos como información sensible. El cambio ilustra cómo el trabajo de interoperabilidad ya incluía lo que un destinatario puede averiguar, no solo si una solicitud puede entregarse.&lt;/p>
&lt;h3 id="september-2026-interoperability-details-meet-public-identity">Septiembre de 2026: los detalles de interoperabilidad se encuentran con la identidad pública&lt;/h3>
&lt;p>Este septiembre, un &lt;a href="https://github.com/nostr-protocol/nips/commit/6631b3eb1">cambio integrado en NIP-51&lt;/a> cambió el kind de event de los conjuntos de cuentas seguidas para evitar una colisión. &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a> define listas que una persona puede mantener y compartir; los valores únicos de kind de event permiten a los clientes distinguir un tipo de lista de otro. Una edición anterior de Compass trató la propuesta, mientras que la integración de septiembre constituye el cambio de estado.&lt;/p>
&lt;p>Un segundo &lt;a href="https://github.com/nostr-protocol/nips/commit/0046368a7">cambio integrado en NIP-39&lt;/a> aclaró el texto de la prueba y añadió más formas de asociar una cuenta externa con una identidad de Nostr. &lt;a href="https://nostrcompass.org/es/topics/nip-39/">NIP-39&lt;/a> trata sobre afirmaciones de identidad verificables, no sobre un registro central de identidades. En conjunto, ambas integraciones muestran que el trabajo actual en el protocolo se concentra en los pequeños detalles que determinan si los clientes independientes interpretan correctamente la misma identidad y los events de listas. También muestran un cambio de enfoque: de inventar nuevas categorías de event a reducir la ambigüedad en las existentes.&lt;/p>
&lt;p>A lo largo de estos seis meses de septiembre, el patrón es una progresión desde demostrar que un &lt;a href="https://github.com/arcbtc/buber/commit/7a66d400f2">event firmado puede describir una solicitud de aplicación&lt;/a> hasta preguntarse cómo un &lt;a href="https://github.com/nostr-protocol/nips/commit/0046368a7">cliente verifica una afirmación sobre una persona&lt;/a>. Los antiguos prototipos importan porque ponen de manifiesto las preguntas que las especificaciones y los clientes posteriores tuvieron que responder: quién firma, dónde se encuentra un event, qué significa y cómo sabe alguien si puede confiar en él. Por eso también una corrección pequeña y precisa del protocolo puede importar tanto como una nueva interfaz.&lt;/p></content:encoded></item><item><title>Nostr Compass #40</title><link>https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/</link><pubDate>Wed, 16 Sep 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/</guid><description>&lt;p>Te damos de nuevo la bienvenida a &lt;a href="https://nostrcompass.org">Nostr Compass&lt;/a>, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#marmot-protocol-and-mdk-reach-v0100">Marmot Protocol y MDK&lt;/a> incorporan &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.10.0">ventanas acotadas de conversaciones, correcciones de recuperación y bindings coordinados para SDK&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#myco-070-runs-napplets-and-file-sharing-over-a-multi-path-fips-mesh">Myco&lt;/a> convierte su malla FIPS en un entorno de ejecución sin conexión para napplets y uso compartido de archivos, &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#dart-ndk-changes-relay-cache-and-account-behavior">Dart NDK&lt;/a> cambia el comportamiento de relay y caché, y &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#keycast-publishes-its-rebuilt-signer-release-candidate">Keycast&lt;/a> reconstruye la firma remota en torno a solicitudes duraderas y recuperación. Los lanzamientos etiquetados incluyen &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#nail-020-restores-nostr-to-email-subscriptions">Nail&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#nostr-mail-client-0150-broadens-account-and-relay-control">Nostr Mail Client&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#linky-26917-keeps-recovery-seeds-off-its-server">Linky&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#boris-0125-bounds-extraction-and-strengthens-offline-reading">Boris&lt;/a>. El repositorio de NIPs fusionó un PR esta semana que aclara &lt;a href="https://nostrcompass.org/es/topics/nip-a3/">NIP-A3 (Destinos de pago)&lt;/a>, mientras que las propuestas sobre comandos con barra y señales periódicas de DVM siguen abiertas. Los análisis en profundidad abarcan &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#nip-23-long-form-content">NIP-23 (Contenido de formato largo)&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#nip-92-media-attachments-metadata">NIP-92 (Metadatos de archivos multimedia adjuntos)&lt;/a>.&lt;/p></description><content:encoded>&lt;p>Te damos de nuevo la bienvenida a &lt;a href="https://nostrcompass.org">Nostr Compass&lt;/a>, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#marmot-protocol-and-mdk-reach-v0100">Marmot Protocol y MDK&lt;/a> incorporan &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.10.0">ventanas acotadas de conversaciones, correcciones de recuperación y bindings coordinados para SDK&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#myco-070-runs-napplets-and-file-sharing-over-a-multi-path-fips-mesh">Myco&lt;/a> convierte su malla FIPS en un entorno de ejecución sin conexión para napplets y uso compartido de archivos, &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#dart-ndk-changes-relay-cache-and-account-behavior">Dart NDK&lt;/a> cambia el comportamiento de relay y caché, y &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#keycast-publishes-its-rebuilt-signer-release-candidate">Keycast&lt;/a> reconstruye la firma remota en torno a solicitudes duraderas y recuperación. Los lanzamientos etiquetados incluyen &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#nail-020-restores-nostr-to-email-subscriptions">Nail&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#nostr-mail-client-0150-broadens-account-and-relay-control">Nostr Mail Client&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#linky-26917-keeps-recovery-seeds-off-its-server">Linky&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#boris-0125-bounds-extraction-and-strengthens-offline-reading">Boris&lt;/a>. El repositorio de NIPs fusionó un PR esta semana que aclara &lt;a href="https://nostrcompass.org/es/topics/nip-a3/">NIP-A3 (Destinos de pago)&lt;/a>, mientras que las propuestas sobre comandos con barra y señales periódicas de DVM siguen abiertas. Los análisis en profundidad abarcan &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#nip-23-long-form-content">NIP-23 (Contenido de formato largo)&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-09-16-newsletter/#nip-92-media-attachments-metadata">NIP-92 (Metadatos de archivos multimedia adjuntos)&lt;/a>.&lt;/p>
&lt;h2 id="historias-destacadas">Historias destacadas&lt;/h2>
&lt;h3 id="marmot-protocol-y-mdk-llegan-a-v0100">Marmot Protocol y MDK llegan a v0.10.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.10.0">MDK v0.10.0 de Marmot Protocol&lt;/a> incorpora ventanas acotadas de listas de chats y conversaciones, resúmenes independientes de elementos que requieren atención en una cuenta, borradores protegidos frente a revisiones y el estado de las reacciones del espectador para aplicaciones que crean grupos cifrados basados en MLS sobre Nostr. También restaura el bloqueo de usuarios por cuenta y cuenta las invitaciones pendientes sin volver a contabilizarlas como mensajes no leídos.&lt;/p>
&lt;p>La &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.10.0">serie de lanzamientos v0.10.0&lt;/a> corrige la recuperación cuando se elimina y se vuelve a añadir un dispositivo, cuando el tráfico llega antes que su Welcome y cuando se interrumpe la reproducción de peel. Reduce la sincronización de relay y la rotación de suscripciones, pone en cola las operaciones multimedia mientras las ranuras de transferencia están ocupadas y fija las cargas de auditoría forense a destinos validados en cada intento.&lt;/p>
&lt;p>El mismo &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.10.0">commit del código fuente de MDK&lt;/a> distribuye artefactos de Rust, C, Swift, Kotlin, línea de comandos y agentes como una única cohorte de compatibilidad. Las bases de datos de cuentas avanzan mediante las migraciones 70–75, por lo que las aplicaciones deben actualizar conjuntamente el código fuente generado y las bibliotecas nativas, conservar completos los paquetes de frameworks de Apple, hacer una copia de seguridad antes de la migración y evitar volver a una versión anterior de una base de datos ya migrada.&lt;/p>
&lt;h3 id="myco-070-ejecuta-napplets-y-comparte-archivos-mediante-una-malla-fips-con-múltiples-rutas">Myco 0.7.0 ejecuta napplets y comparte archivos mediante una malla FIPS con múltiples rutas&lt;/h3>
&lt;p>&lt;a href="https://github.com/Origami74/myco/releases/tag/v0.7.0">Myco v0.7.0&lt;/a> convierte la aplicación de malla para Android en un anfitrión de napplets, programas Nostr de un solo archivo descritos por la &lt;a href="https://nostrcompass.org/es/topics/nip-5d/">propuesta abierta NIP-5D&lt;/a>. Cada napplet se ejecuta en un entorno aislado sin acceso directo a la red ni al almacenamiento y solicita capacidades de identidad, relay, outbox, malla, imágenes o archivos por medio de Myco. La hoja de instalación muestra esos permisos antes de su aprobación, los usuarios pueden cambiarlos más adelante y las actualizaciones que solicitan un acceso más amplio vuelven a la pantalla de permisos.&lt;/p>
&lt;p>&lt;a href="https://github.com/Origami74/myco/releases/tag/v0.7.0">Myco v0.7.0&lt;/a> también envía archivos arbitrarios a teléfonos emparejados mediante la hoja de uso compartido del sistema o un contacto de Circle. El teléfono receptor aprueba la transferencia antes de que Myco la escriba en &lt;code>Downloads/Myco&lt;/code>, y la carga útil se cifra con la clave de ese teléfono. El descubrimiento en la red local usa UDP cuando ambos teléfonos comparten Wi-Fi y conserva Bluetooth para rutas sin conexión; los reintentos cubren la pérdida de mensajes de control, mientras que un temporizador de silencio limita las transferencias grandes que se estancan.&lt;/p>
&lt;p>&lt;a href="https://github.com/Origami74/myco/releases/tag/v0.7.0">Myco ahora mantiene enlaces FIPS simultáneos&lt;/a> con un mismo par, sondea rutas en espera y desplaza el tráfico cuando se degrada el enlace activo de Bluetooth, Wi-Fi Aware o la red local. El trabajo se basa en la rama experimental de múltiples rutas de FIPS. La versión 0.7.0 conserva la compatibilidad de protocolo con 0.6.1 para el intercambio, la mensajería y el emparejamiento existentes de la aplicación, pero los enlaces de múltiples rutas solo se establecen entre dos teléfonos actualizados. El relay integrado también pasa a LMDB y migra los almacenes de event anteriores durante el primer inicio.&lt;/p>
&lt;h3 id="dart-ndk-cambia-el-comportamiento-de-relay-caché-y-cuentas">Dart NDK cambia el comportamiento de relay, caché y cuentas&lt;/h3>
&lt;p>&lt;a href="https://github.com/relaystr/ndk/releases/tag/v0.10.0-dev.3">Dart NDK v0.10.0-dev.3&lt;/a> es una versión de desarrollo de la biblioteca cliente de Dart, con cambios incompatibles en la gestión de relay, el almacenamiento en caché, la autenticación y los flujos de cuentas. Quienes mantienen clientes deben prever trabajo de migración tanto en el código como en el comportamiento, especialmente cuando una aplicación presupone que los events almacenados en caché, los events ocultos o las actualizaciones de cuentas siguen la semántica de la línea de versiones anterior.&lt;/p>
&lt;p>La &lt;a href="https://github.com/relaystr/ndk/releases/tag/v0.10.0-dev.3">serie de desarrollo v0.10.0&lt;/a> también mejora el rendimiento de la caché y del verificador de Rust, y cambia el comportamiento de los metadatos, las coordenadas de eliminación, la visibilidad de events, la autenticación del firmante y los pagos NWC. La verificación compactada de events en Rust reduce la sobrecarga de verificación, mientras que el nuevo comportamiento de caché &lt;code>loadHiddenEvents&lt;/code> es explícitamente incompatible.&lt;/p>
&lt;p>Como se trata de &lt;a href="https://github.com/relaystr/ndk/releases/tag/v0.10.0-dev.3">v0.10.0-dev.3&lt;/a>, y no de una versión estable v0.10.0, los equipos de aplicaciones deben fijar las versiones y probar las migraciones de manera deliberada. La reconexión de relay, la hidratación de la caché, la autenticación del firmante, la gestión de carteras y el orden de los flujos de cuentas son las rutas más importantes que deben probarse antes de migrar clientes de producción.&lt;/p>
&lt;h3 id="keycast-publica-el-candidato-a-lanzamiento-de-su-firmante-reconstruido">Keycast publica el candidato a lanzamiento de su firmante reconstruido&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/keycast/releases/tag/v2.0.0-rc.1">Keycast v2.0.0-rc.1&lt;/a> es el primer lanzamiento numerado del firmante remoto NIP-46 reconstruido y autoalojado. El candidato a lanzamiento incorpora compatibilidad multiplexada con NIP-46, enrutamiento de relay compartido y por clave, gestión duradera de solicitudes, almacenamiento cifrado de claves, invitaciones, sesiones y espacios de trabajo para equipos.&lt;/p>
&lt;p>La política de firma y la recuperación reciben la misma atención en &lt;a href="https://github.com/marmot-protocol/keycast/releases/tag/v2.0.0-rc.1">v2.0.0-rc.1&lt;/a>. Los operadores pueden configurar políticas de firma, revisar el historial de auditoría, crear copias de seguridad cifradas, recuperar implementaciones y rotar la clave raíz. El proyecto también documenta una procedencia de lanzamientos coordinada y verificada entre sus componentes de API, firmante y web.&lt;/p>
&lt;p>El lanzamiento sigue siendo un &lt;a href="https://github.com/marmot-protocol/keycast/releases/tag/v2.0.0-rc.1">candidato a lanzamiento&lt;/a>, por lo que los operadores no deben deducir la compatibilidad definitiva ni la preparación para producción únicamente a partir del número de versión. Antes de sustituir un servicio de firma existente, las pruebas deben abarcar la recuperación de solicitudes interrumpidas, los fallos de enrutamiento de relay, la aplicación de políticas, la restauración de copias de seguridad y la rotación de claves.&lt;/p>
&lt;h2 id="lanzamientos-etiquetados">Lanzamientos etiquetados&lt;/h2>
&lt;h3 id="nail-020-restaura-las-suscripciones-de-nostr-a-correo-electrónico">Nail 0.2.0 restaura las suscripciones de Nostr a correo electrónico&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nail/releases/tag/v0.2.0">Nail v0.2.0&lt;/a>, un servicio que entrega mensajes de Nostr mediante flujos de trabajo de correo electrónico, incorpora suscripciones gift-wrap con autorreparación. El cambio busca restaurar la entrega de Nostr a correo electrónico después de fallos de suscripción, en lugar de dejar el puente detenido sin aviso.&lt;/p>
&lt;h3 id="nostr-mail-client-0150-amplía-el-control-de-cuentas-y-relay">Nostr Mail Client 0.15.0 amplía el control de cuentas y relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/nogringo/nostr-mail-client/releases/tag/v0.15.0">Nostr Mail Client v0.15.0&lt;/a> incorpora el cambio de cuenta con un toque, notificaciones por cuenta, push web y la recuperación de una lista de relay ausente desde un relay, una dirección Nostr o un &lt;code>nprofile&lt;/code>. También vuelve a publicar perfiles y listas de relay en relays de indexación, se reconecta cuando regresa el acceso a la red y distingue una interrupción del dispositivo de relays de correo inaccesibles. Estos cambios refuerzan la recuperación de cuentas y la entrega en clientes de escritorio, web y Android.&lt;/p>
&lt;h3 id="linky-26917-mantiene-las-semillas-de-recuperación-fuera-de-su-servidor">Linky 26.9.17 mantiene las semillas de recuperación fuera de su servidor&lt;/h3>
&lt;p>&lt;a href="https://github.com/linky-fit/linky/releases/tag/v26.9.17">Linky v26.9.17&lt;/a>, una aplicación de contactos, mensajería privada de Nostr y pagos Lightning/Cashu, corrige una ruta que enviaba semillas de recuperación al servidor de Linky cuando los usuarios las guardaban mediante un gestor de contraseñas. El lanzamiento también refuerza la gestión de URLs de archivos de pago y desactiva las copias de seguridad de aplicaciones de Android, lo que reduce los lugares por los que el material de recuperación de la cartera y la identidad puede salir del dispositivo.&lt;/p>
&lt;h3 id="calendar-by-form-240-incorpora-invitaciones-de-mailstr-para-invitados">Calendar by Form* 2.4.0 incorpora invitaciones de Mailstr para invitados&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v2.4.0">Calendar by Form* v2.4.0&lt;/a>, un cliente de calendario de Nostr, incorpora invitaciones de Mailstr para invitados y correcciones del calendario móvil. La ruta de invitación permite que los organizadores incluyan participantes mediante coordinación orientada al correo sin requerir una cuenta de calendario existente.&lt;/p>
&lt;h3 id="hessible-012-acelera-la-sincronización-cifrada-de-contactos-y-fotos">Hessible 0.1.2 acelera la sincronización cifrada de contactos y fotos&lt;/h3>
&lt;p>&lt;a href="https://github.com/circumspace/hessible">Hessible 0.1.2&lt;/a>, una aplicación de contactos para Android centrada en la privacidad que almacena datos de contacto cifrados en relays de Nostr, reduce la sobrecarga de sincronización y replica fotos de contactos cifradas entre servidores Blossom. El lanzamiento también reduce el tamaño del paquete de la aplicación, mientras que sus propias recomendaciones siguen advirtiendo a los usuarios que hagan copias de seguridad de las claves y tengan en cuenta que la retención varía según el relay.&lt;/p>
&lt;h3 id="boris-0125-limita-la-extracción-y-refuerza-la-lectura-sin-conexión">Boris 0.12.5 limita la extracción y refuerza la lectura sin conexión&lt;/h3>
&lt;p>&lt;a href="https://github.com/dergigi/boris/releases/tag/v0.12.5">Boris v0.12.5&lt;/a>, un cliente de listas de lectura creado en torno a los marcadores de Nostr, sucede a v0.12.4 con extracción acotada de contenido, almacenamiento en caché sin conexión, cambios en las consultas a relay, gestión de HTML no seguro y una corrección para el texto casi invisible con el tema Paper White. Estos cambios afectan tanto a la seguridad del contenido como a la fiabilidad de la lectura de material guardado sin una ruta de red activa.&lt;/p>
&lt;h3 id="amethyst-1152-perfecciona-el-contenido-multimedia-y-las-respuestas-con-ámbito-de-raíz">Amethyst 1.15.2 perfecciona el contenido multimedia y las respuestas con ámbito de raíz&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.15.2">Amethyst v1.15.2&lt;/a>, un cliente Nostr para Android, cierra una secuencia de tres lanzamientos con correcciones de contenido multimedia, una gestión más clara de los permisos de Health Connect, almacenamiento en caché de nombres de fuentes y filtros de interacción específicos para respuestas con ámbito de raíz de NIP-22. El lanzamiento también incluye actualizaciones de traducciones y metadatos del paquete.&lt;/p>
&lt;h3 id="librenostr-0517-enruta-los-feeds-mediante-los-relays-de-escritura-de-los-autores">LibreNostr 0.5.17 enruta los feeds mediante los relays de escritura de los autores&lt;/h3>
&lt;p>&lt;a href="https://primal.net/e/c118efbe649823a3258a6e7663f4d8b52195adbde0481019183792eb5274afd4">LibreNostr 0.5.17&lt;/a>, un cliente para Android centrado en relay, ahora dirige las consultas de feeds a los relays de escritura NIP-65 de los autores seguidos y aplaza las consultas de recuentos de interacciones hasta que las notas aparecen en pantalla. El trabajo anterior de la misma secuencia de lanzamientos limita las consultas simultáneas a relay y cierra cada suscripción de relay en cuanto ese relay responde, lo que reduce el rechazo involuntario de solicitudes durante las actualizaciones.&lt;/p>
&lt;h3 id="voca-120-mejora-la-cancelación-y-recuperación-de-voz">Voca 1.2.0 mejora la cancelación y recuperación de voz&lt;/h3>
&lt;p>&lt;a href="https://njump.me/nevent1qqsfcc5zel49t5zt96ufndumrzc2vzhrk7e2rnwq579gcs8yd9cn4pcflqxt3">Voca 1.2.0&lt;/a>, un lector de texto a voz para Android orientado al uso sin conexión que puede obtener y verificar contenido de Nostr, incorpora comportamientos diferenciados de cancelación y renderizado, además de recuperación para motores de voz lentos o poco fiables, tras el lanzamiento 1.0 tratado en la edición #38. También incorpora diagnósticos opcionales enviados con una clave Nostr nueva y de un solo uso mediante un mensaje privado NIP-17; los informes grandes se cifran localmente antes de cargarse.&lt;/p>
&lt;h3 id="postr-111-incorpora-dictado-y-recuperación-de-publicaciones">Postr 1.1.1 incorpora dictado y recuperación de publicaciones&lt;/h3>
&lt;p>&lt;a href="https://njump.me/nevent1qqszw3dsskfz3u7pqxn4r5ytslrj0e3u26et90rpy9997vtfw3qkr6g9g0f03">Postr 1.1.1&lt;/a>, un editor específico de kind &lt;code>1&lt;/code> para Android, incorpora dictado y gestión de menciones consciente de la posición del cursor tras el lanzamiento tratado en la edición #37. El lanzamiento 1.1.0 anterior también mejora la recuperación de publicaciones al volver a intentar el mismo event firmado después de resultados ambiguos, lo que evita que la recuperación cree una nota duplicada.&lt;/p>
&lt;h3 id="earthly-0110-repara-la-sanitización-y-la-creación-de-mapas">earthly 0.1.10 repara la sanitización y la creación de mapas&lt;/h3>
&lt;p>&lt;a href="https://github.com/zeSchlausKwab/earthly/releases/tag/v0.1.10">earthly v0.1.10&lt;/a>, un editor colaborativo de mapas en Nostr, cambia sustancialmente la creación de mapas e historias y corrige una vulnerabilidad crítica del sanitizador de atribuciones de MapLibre mediante una actualización de MapLibre GL JS. El lanzamiento también mejora los mensajes de compatibilidad con WebGL 2, los controles móviles, la edición de geometría, la selección y los controles de presentación de mapas.&lt;/p>
&lt;h3 id="routstrd-0410-refuerza-el-enrutamiento-de-solicitudes-de-nostr">Routstrd 0.4.10 refuerza el enrutamiento de solicitudes de Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/Routstr/routstrd/releases/tag/v0.4.10">Routstrd v0.4.10&lt;/a> sustituye una lista obsoleta de proveedores almacenada por la lista devuelta por el descubrimiento activo. El lanzamiento v0.4.9 anterior incorporó controles manuales y programados de actualización del cliente, npubs con nombre en la CLI y reinicios controlados del daemon que esperan a que terminen las solicitudes activas. En conjunto, los lanzamientos hacen más explícitos la selección de proveedores y el comportamiento de actualización para los operadores del servicio enrutado mediante Nostr.&lt;/p>
&lt;h3 id="whistle-191-instrumenta-la-recuperación-en-segundo-plano">Whistle 1.9.1 instrumenta la recuperación en segundo plano&lt;/h3>
&lt;p>&lt;a href="https://primal.net/e/bb3aae325f707b04dffd3b0b4a2d0c48022999fef7a793be3503b4c53e37eba4">Whistle 1.9.1&lt;/a>, una aplicación cifrada para compartir la ubicación en grupo creada sobre Nostr, MLS y Marmot Protocol, incorpora instrumentación del ciclo de vida del dispositivo para la recuperación en segundo plano de iOS. La versión 1.9.0 también introduce pausas de uso compartido por grupo y diagnósticos del último event por grupo, lo que facilita distinguir un grupo estancado de una conexión saludable en toda la aplicación.&lt;/p>
&lt;h3 id="amber-664-corrige-una-fuga-de-tor-y-fallos-de-recuperación-del-firmante">Amber 6.6.4 corrige una fuga de Tor y fallos de recuperación del firmante&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.6.4">Amber v6.6.4&lt;/a>, un firmante de events de Nostr para Android, culmina una secuencia de tres lanzamientos con la corrección de una fuga de Tor y soluciones relacionadas con los relays del firmante y la recuperación. Los usuarios de firmantes y los desarrolladores de aplicaciones deben prestar especial atención a las suposiciones sobre las rutas de red y al comportamiento de los reintentos, ya que, de lo contrario, los fallos del firmante pueden parecer fallos de publicación del cliente.&lt;/p>
&lt;h3 id="nostr-wot-extension-070-cifra-los-datos-de-caché-de-la-cartera">nostr-wot-extension 0.7.0 cifra los datos de caché de la cartera&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-wot/nostr-wot-extension/releases/tag/v0.7.0">nostr-wot-extension v0.7.0&lt;/a>, una extensión del navegador que gestiona identidades de Nostr, firma events e inicia pagos Lightning, cifra los datos de caché de la cartera y los pagos, y refuerza el aislamiento de la bóveda y las cuentas. También aborda el comportamiento de NWC y la cartera, la compatibilidad de pagos, las aprobaciones de solicitudes, la gestión de cuentas, la importación de copias de seguridad, la gestión de relay, la accesibilidad y el descifrado local de events.&lt;/p>
&lt;h3 id="lightningpub-0041-mejora-la-recuperación-de-publicaciones">Lightning.Pub 0.0.41 mejora la recuperación de publicaciones&lt;/h3>
&lt;p>&lt;a href="https://github.com/shocknet/Lightning.Pub/releases/tag/v0.0.41">Lightning.Pub v0.0.41&lt;/a> añade a los fallos de publicación de Nostr detalles sobre la URL del relay, los tiempos, el estado del socket y DNS. También vuelve a intentar las llamadas de inicio del proveedor de liquidez, elimina callbacks abandonados y retiene el enrutamiento de facturas hasta que una respuesta de saldo satisfactoria demuestre que el proveedor está listo. Los operadores ahora obtienen una distinción más clara entre los fallos de conectividad de relay y los fallos de preparación del backend.&lt;/p>
&lt;h3 id="gittr-100-impulsa-la-colaboración-nip-34">Gittr 1.0.0 impulsa la colaboración NIP-34&lt;/h3>
&lt;p>&lt;a href="https://github.com/arbadacarbaYK/gittr/releases/tag/v1.0.0">Gittr v1.0.0&lt;/a>, un cliente para la colaboración con Git basada en Nostr, mejora la gestión de fuentes de clonación NIP-34, el estado de incidencias y debates, la usabilidad móvil y la interoperabilidad. El tag v1.0.0 sucede a v0.3.0 y v0.3.1 de principios de esta semana, lo que proporciona a los integradores un marcador de versión estable para la secuencia de lanzamientos.&lt;/p>
&lt;h3 id="gitworkshop-410-permite-recuperar-borradores-nip-34">GitWorkshop 4.1.0 permite recuperar borradores NIP-34&lt;/h3>
&lt;p>&lt;a href="https://njump.me/nevent1qqswf45vw8y5metnu8tc2fge0lr7sy8nmuk264kryrd45wqles5kfvqqrtwl3">GitWorkshop 4.1.0&lt;/a>, un cliente nativo de Nostr para incidencias NIP-34, pull requests, revisión de código y exploración de repositorios, incorpora borradores locales por cuenta que sobreviven a las actualizaciones y reinicios del navegador. También incorpora recuperación acotada y controles explícitos de reintento para lecturas de Git, descubrimiento de relay, estado del repositorio, historial de pull requests, cargas y metadatos de lanzamientos, mientras mantiene manuales los reintentos de firma y pago.&lt;/p>
&lt;h3 id="ngit-ci-011-publica-coordinación-de-ci-firmada">ngit-ci 0.1.1 publica coordinación de CI firmada&lt;/h3>
&lt;p>&lt;a href="https://njump.me/nevent1qqs2y0p5nxkfqsrqguth3hd4wmmel4p2te8q906ex748q35ug79e6eg9hms4s">ngit-ci 0.1.1&lt;/a>, un coordinador autoalojado para el protocolo de CI de Nostr propuesto en NIP-C1, es su primer lanzamiento publicado mediante Nostr. Abarca la coordinación firmada de flujos de trabajo, la ejecución en contenedores o microVM, registros y artefactos, secretos cifrados de repositorios, autorización de mantenedores mediante NIP-34 y publicación firmada de los resultados de compilación.&lt;/p>
&lt;h3 id="pakstr-0211-impulsa-el-empaquetado-de-aplicaciones-nostr">pakstr 0.21.1 impulsa el empaquetado de aplicaciones Nostr&lt;/h3>
&lt;p>&lt;a href="https://git.nostrdev.com/stuff/pakstr/releases/tag/v0.21.1">pakstr v0.21.1&lt;/a> continúa una secuencia de cinco lanzamientos para el empaquetado de aplicaciones Nostr y el comportamiento del contenedor de aplicaciones. Las referencias de NostrAppShell apuntan a esta misma serie de lanzamientos de pakstr, por lo que el paquete y el alias describen un único cambio distribuido.&lt;/p>
&lt;h3 id="elisymcli-0300-coordina-paquetes-de-agentes-y-delegación">@elisym/cli 0.30.0 coordina paquetes de agentes y delegación&lt;/h3>
&lt;p>&lt;a href="https://github.com/elisymlabs/elisym/releases/tag/%40elisym/cli%400.30.0">@elisym/cli 0.30.0&lt;/a> concluye un lanzamiento coordinado de CLI, SDK y MCP para la delegación de agentes orientados a Nostr. Los trabajos delegados ahora esperan a completarse en lugar de suspenderse durante un intervalo fijo, y la aplicación evita pagar la misma capacidad de delegación una vez por trabajo. Los equipos que utilicen más de un paquete deben mantener CLI 0.30.0, SDK 0.36.0 y MCP 0.26.0 en la línea de lanzamientos correspondiente.&lt;/p>
&lt;h3 id="hashtree-02150-impulsa-la-sincronización-de-árboles-de-hashes">Hashtree 0.2.150 impulsa la sincronización de árboles de hashes&lt;/h3>
&lt;p>&lt;a href="https://github.com/mmalmi/hashtree/releases/tag/v0.2.150">Hashtree v0.2.150&lt;/a> cierra una secuencia de seis lanzamientos con bloqueo seguro para Android en el grafo social integrado. Los lanzamientos anteriores de la secuencia mantienen abiertas brevemente las suscripciones de Nostr después de un EOSE vacío para que puedan llegar raíces firmadas con retraso, seleccionan la raíz válida más reciente para el autor y el árbol exactos, y recuperan las rutas FIPS conservadas después de interrupciones de tránsito. El resultado es un descubrimiento y una sincronización más predecibles de raíces mutables entre relays, clientes integrados y rutas de red intermitentes.&lt;/p>
&lt;h3 id="nostr-relay-00266-mejora-el-funcionamiento-con-bases-de-datos-compartidas">nostr-relay 0.0.266 mejora el funcionamiento con bases de datos compartidas&lt;/h3>
&lt;p>&lt;a href="https://github.com/mattn/nostr-relay/releases/tag/v0.0.266">nostr-relay v0.0.266&lt;/a>, un relay de Nostr creado sobre el framework relayer, mejora el comportamiento de las bases de datos compartidas y Redis a lo largo de seis lanzamientos. Este trabajo es especialmente relevante para los operadores que ejecutan más de un proceso de relay sobre una infraestructura común de persistencia o notificaciones.&lt;/p>
&lt;h3 id="fips-tcp-022-implementa-fips-sobre-tcp">fips-tcp 0.2.2 implementa FIPS sobre TCP&lt;/h3>
&lt;p>&lt;a href="https://github.com/mmalmi/fips-tcp/releases/tag/fips-tcp-v0.2.2">fips-tcp v0.2.2&lt;/a> repara segmentos ausentes tras agotarse el tiempo de espera de un vuelo a medida que avanzan las confirmaciones. Las escrituras pequeñas perdidas durante una interrupción de tránsito se recuperan juntas en lugar de esperar un tiempo de espera creciente para cada segmento, mientras que las implementaciones de Rust y TypeScript conservan bytes de protocolo idénticos, límites de reintentos, comprobaciones de la ventana de recepción, reinicio de secuencias y muestreo de RTT.&lt;/p>
&lt;h2 id="en-desarrollo">En desarrollo&lt;/h2>
&lt;h3 id="biblioteca-de-marketplace-nenya">Biblioteca de marketplace Nenya&lt;/h3>
&lt;p>&lt;a href="https://github.com/Erya-Labs/Nenya">Nenya&lt;/a> es una nueva biblioteca para un marketplace Nostr sin custodia, centrado en medios digitales por encargo con liquidación en Bitcoin. El repositorio está en fase de prelanzamiento, por lo que sus interfaces de events y liquidación aún pueden cambiar.&lt;/p>
&lt;p>Los desarrolladores de clientes importan la &lt;a href="https://github.com/Erya-Labs/Nenya">biblioteca Nenya&lt;/a> en aplicaciones Nostr para ofrecer listados y transacciones compatibles. El trabajo de integración debería comenzar por sus límites de events y liquidación, porque todavía no existe una implementación independiente ni un contrato de versión estable.&lt;/p>
&lt;h3 id="puente-de-ci-entre-github-y-nostr">Puente de CI entre GitHub y Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/felixfelix-bot/gh-ngit-ci-bridge">gh-ngit-ci-bridge&lt;/a> es un puente en fase temprana que observa los commits de GitHub asociados con identidades configuradas y los convierte en pruebas de compilación de Nostr firmadas para flujos de trabajo NIP-34. El repositorio está en fase de prelanzamiento y su contrato de integración aún puede cambiar.&lt;/p>
&lt;p>El &lt;a href="https://github.com/felixfelix-bot/gh-ngit-ci-bridge">repositorio gh-ngit-ci-bridge&lt;/a> conecta la actividad convencional de GitHub con la coordinación de CI nativa de Nostr sin cambiar el flujo de trabajo original de la forja. Su cuestión de implementación más relevante es la procedencia: los consumidores necesitan distinguir la acción de GitHub observada, la identidad del puente y la prueba de Nostr firmada resultante.&lt;/p>
&lt;h3 id="noscall-cifra-los-archivos-adjuntos-de-voz">noscall cifra los archivos adjuntos de voz&lt;/h3>
&lt;p>El &lt;a href="https://github.com/sanah9/noscall/commit/3f0b9ef7cf0fbc6e0dced58240c32bb84ed6fea4">commit de archivos adjuntos de voz cifrados de noscall&lt;/a> añade una función concreta de privacidad para la comunicación por voz. El cambio verificado en el código fuente admite archivos adjuntos de voz cifrados, lo que reduce la necesidad de exponer los medios grabados como texto sin cifrar al adjuntarlos a una llamada o un flujo de mensajería.&lt;/p>
&lt;h3 id="relayer-restablece-la-distribución-de-notificaciones-entre-procesos">relayer restablece la distribución de notificaciones entre procesos&lt;/h3>
&lt;p>La &lt;a href="https://github.com/fiatjaf/relayer/pull/167">solicitud de incorporación #167 de relayer&lt;/a> ha incorporado una corrección del sistema de notificaciones para implementaciones en las que varios procesos de relay comparten una base de datos. El parche restablece la distribución en directo entre esos procesos y resuelve el caso en el que un event se guardaba correctamente, pero los clientes conectados a otro proceso no recibían la notificación en directo correspondiente.&lt;/p>
&lt;p>Junto con el trabajo de base de datos compartida de &lt;a href="https://github.com/mattn/nostr-relay/releases/tag/v0.0.266">nostr-relay v0.0.266&lt;/a>, la corrección de relayer ofrece a los operadores con varios procesos un objetivo de prueba claro: publicar a través de un proceso, suscribirse mediante otro y confirmar tanto la persistencia como la entrega inmediata. Una escritura correcta en la base de datos, por sí sola, no demuestra que los suscriptores en directo hayan recibido el event.&lt;/p>
&lt;h2 id="proyectos-nuevos">Proyectos nuevos&lt;/h2>
&lt;h3 id="trackstr-organiza-medios-mediante-event-kinds-específicos">Trackstr organiza medios mediante event kinds específicos&lt;/h3>
&lt;p>&lt;a href="https://github.com/besoeasy/Trackstr">Trackstr&lt;/a> es una base de datos multimedia de Nostr, de código abierto y aún sin publicar, para descubrir y seguir películas, música, televisión y otros medios. Su diseño actual utiliza event kinds del &lt;code>35400&lt;/code> al &lt;code>35402&lt;/code>, lo que proporciona un esquema y una superficie de implementación revisables. Los kinds siguen estando definidos por el proyecto y pueden cambiar antes de una versión.&lt;/p>
&lt;h2 id="trabajo-sobre-protocolos-y-especificaciones">Trabajo sobre protocolos y especificaciones&lt;/h2>
&lt;h3 id="nip-a3-aclara-la-ambigüedad-de-los-tipos-de-pago">NIP-A3 aclara la ambigüedad de los tipos de pago&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-a3/">NIP-A3 (Objetivos de pago)&lt;/a> estandariza objetivos de pago tipados en tags &lt;code>[&amp;quot;payto&amp;quot;, &amp;quot;&amp;lt;type&amp;gt;&amp;quot;, &amp;quot;&amp;lt;address&amp;gt;&amp;quot;]&lt;/code> de events kind &lt;code>10133&lt;/code>. La &lt;a href="https://github.com/nostr-protocol/nips/pull/2463">aclaración sobre los tipos de pago&lt;/a> ya incorporada añade &lt;code>bitcoincash&lt;/code> y &lt;code>tron&lt;/code> a la lista documentada de tipos y aclara la representación: los clientes utilizan un esquema URI específico del tipo cuando existe; de lo contrario, recurren a &lt;code>payto://&amp;lt;type&amp;gt;/&amp;lt;address&amp;gt;&lt;/code>.&lt;/p>
&lt;h3 id="nip-cd-propone-comandos-de-barra-direccionables">NIP-CD propone comandos de barra direccionables&lt;/h3>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/pull/2462">propuesta de comandos de barra de NIP-CD&lt;/a>, aún abierta, define events direccionables kind &lt;code>31992&lt;/code> cuyos tags &lt;code>command&lt;/code>, &lt;code>title&lt;/code>, &lt;code>description&lt;/code>, &lt;code>arg&lt;/code>, de ámbito y de exclusión anuncian comandos ejecutables. Las invocaciones comienzan en el primer byte del contenido de texto sin cifrar de un event, pueden dirigirse a un ejecutor mediante npub y, deliberadamente, no requieren compatibilidad especial del cliente. El borrador también define tipos de argumentos posicionales y filtros de ámbito por event kind, relay, autor o tag; nada de esto forma parte todavía del comportamiento incorporado del protocolo.&lt;/p>
&lt;h3 id="nip-90-propone-events-de-latido-de-dvm-con-caducidad">NIP-90 propone events de latido de DVM con caducidad&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-90/">NIP-90 (Data Vending Machines)&lt;/a> define solicitudes de trabajo, resultados y comentarios para servicios que realizan tareas a través de Nostr. Una &lt;a href="https://github.com/nostr-protocol/nips/pull/2465">propuesta de latidos de DVM&lt;/a>, aún abierta, añade events opcionales kind &lt;code>11998&lt;/code> que deberían incluir un tag &lt;code>expiration&lt;/code> para que los clientes puedan distinguir una máquina activa de un anuncio NIP-89 obsoleto. El latido queda fuera del intervalo de job kinds de NIP-90, permite a los relays descartar latidos caducados o reemplazados y no altera los flujos de DVM existentes cuando un servicio no lo emite.&lt;/p>
&lt;h3 id="nip-73-propone-filtros-de-medios-para-pódcast">NIP-73 propone filtros de medios para pódcast&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-73/">NIP-73 (Identificadores de contenido externo)&lt;/a> estandariza tags &lt;code>i&lt;/code> para identificadores externos y tags &lt;code>k&lt;/code> para sus categorías. El borrador abierto de la &lt;a href="https://github.com/nostr-protocol/nips/pull/2468">propuesta de medios para pódcast&lt;/a> añade tags de categoría opcionales &lt;code>podcast:medium:music&lt;/code> y &lt;code>podcast:medium:podcast&lt;/code> para que los clientes puedan filtrar notas según el medio declarado en un feed RSS de pódcast. La ausencia de una categoría sigue implicando un feed de pódcast, aunque los clientes deberían consultar la fuente RSS cuando necesiten confirmar su medio.&lt;/p>
&lt;h3 id="nip-f5-propone-un-transporte-fips-con-permisos-para-aplicaciones-web">NIP-F5 propone un transporte FIPS con permisos para aplicaciones web&lt;/h3>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/pull/2469">propuesta de transporte para navegadores de NIP-F5&lt;/a>, aún abierta, define una API opcional &lt;code>window.fipsTransport&lt;/code> mediante la cual una aplicación web de Nostr puede solicitar acceso HTTP o WebSocket aprobado por el usuario a un relay con dirección FIPS, un servidor Blossom, un servicio Git u otro endpoint privado. El anfitrión vincula cada permiso al origen web solicitante y al destino, a la vez que mantiene el transporte separado de la firma de Nostr, la identidad y la autorización del servicio. La propuesta también exige consentimiento explícito y permisos acotados, pero sus formatos de dirección y su contrato para navegadores siguen siendo provisionales.&lt;/p>
&lt;h3 id="marmot-aclara-el-descubrimiento-de-relays-para-keypackage">Marmot aclara el descubrimiento de relays para KeyPackage&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> transporta el estado de grupos MLS mediante events de Nostr. La &lt;a href="https://github.com/marmot-protocol/marmot/pull/422">aclaración sobre el descubrimiento de relays para KeyPackage&lt;/a>, aún abierta, documenta la secuencia actual: publicar metadatos de relay kind &lt;code>10002&lt;/code>, obtener el KeyPackage kind &lt;code>30443&lt;/code> del destinatario desde destinos con capacidad de escritura o sin marcar y, después, usar kind &lt;code>10050&lt;/code> por separado para encontrar la bandeja de entrada Welcome del destinatario. También establece que las entradas NIP-65 de solo lectura no son destinos de KeyPackage y que la lista kind &lt;code>10051&lt;/code>, ya eliminada, ha dejado de ser un paso del descubrimiento. La solicitud de incorporación es una guía de migración en revisión, no un nuevo formato de transmisión ni un requisito incorporado.&lt;/p>
&lt;h3 id="marmot-propone-denuncias-grupales-cifradas-y-moderación-compartida">Marmot propone denuncias grupales cifradas y moderación compartida&lt;/h3>
&lt;p>La &lt;a href="https://github.com/marmot-protocol/marmot/pull/423">especificación de moderación de Marmot&lt;/a>, aún abierta, propone events internos sin firmar transportados mediante el sistema de transporte grupal cifrado que ya existe en el protocolo. Kind &lt;code>1984&lt;/code> serviría para denunciar una revisión concreta de un mensaje, kind &lt;code>1985&lt;/code> permitiría a los administradores desestimar denuncias referenciadas sin eliminar el contenido y kind &lt;code>4891&lt;/code> permitiría a un administrador autenticado eliminar un mensaje y sus revisiones. La propuesta también define reglas de deduplicación, visibilidad compartida de las revisiones, ordenación, retención y autoridad, mientras mantiene la eliminación por parte del autor en kind &lt;code>5&lt;/code> y deja las interfaces de la aplicación anfitriona fuera del contrato de transmisión.&lt;/p>
&lt;h3 id="nwc-añade-búsqueda-de-pagos-y-registros-bolt12">NWC añade búsqueda de pagos y registros BOLT12&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-47/">Nostr Wallet Connect&lt;/a> permite a las aplicaciones controlar una wallet mediante solicitudes y respuestas cifradas a través de Nostr. Su trabajo de búsqueda de pagos, tratado anteriormente como una propuesta abierta, ya se ha incorporado al repositorio. La &lt;a href="https://github.com/nostr-wallet-connect/nwc/pull/5">especificación de &lt;code>lookup_payment&lt;/code> y BOLT12&lt;/a> ya incorporada define la búsqueda de pagos por ID de transacción, invoice, hash de pago o selectores específicos del tipo de pago, y añade registros y estados de pago BOLT12 opcionales y provisionales. Los desarrolladores de wallets y clientes disponen ahora de definiciones provisionales incorporadas para el flujo de búsqueda y sus registros BOLT12.&lt;/p>
&lt;h3 id="nwc-añade-conexiones-iniciadas-por-el-cliente">NWC añade conexiones iniciadas por el cliente&lt;/h3>
&lt;p>El &lt;a href="https://github.com/nostr-wallet-connect/nwc/pull/3">flujo de conexión iniciado por el cliente&lt;/a>, ya incorporado, permite que un cliente genere el secreto de conexión, dirija al usuario por un proceso de confirmación HTTP o autorización de Nostr, negocie permisos obligatorios y opcionales, y reciba los detalles de conexión aprobados. El cambio proporciona a los clientes y wallets NWC una definición provisional alojada en el repositorio para crear una conexión desde el lado del cliente.&lt;/p>
&lt;h2 id="análisis-en-profundidad-de-nip-nip-23-y-nip-92">Análisis en profundidad de NIP: NIP-23 y NIP-92&lt;/h2>
&lt;h3 id="nip-23-contenido-extenso">NIP-23: Contenido extenso&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-23/">NIP-23 (Contenido extenso)&lt;/a> estandariza el contenido extenso en Nostr mediante events direccionables kind &lt;code>30023&lt;/code>, según lo definido en la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/23.md">especificación canónica&lt;/a>. Los editores obtienen una identidad de artículo editable, mientras que kind &lt;code>1&lt;/code> sigue siendo el formato para notas breves.&lt;/p>
&lt;p>Según el &lt;a href="https://github.com/nostr-protocol/nips/blob/master/23.md">formato NIP-23&lt;/a>, un artículo se direcciona mediante la tupla formada por el pubkey de su autor, kind &lt;code>30023&lt;/code> y el tag &lt;code>d&lt;/code>. El cuerpo en Markdown reside en &lt;code>content&lt;/code>; los tags opcionales &lt;code>title&lt;/code>, &lt;code>summary&lt;/code>, &lt;code>image&lt;/code>, &lt;code>published_at&lt;/code> y &lt;code>t&lt;/code> describen la presentación y la fecha de publicación original. Una edición vuelve a publicar la misma dirección con un &lt;code>created_at&lt;/code> más reciente, por lo que los clientes deben unificar las versiones duplicadas cuando un relay no implementa correctamente el reemplazo direccionable.&lt;/p>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/blob/master/23.md">especificación de contenido extenso&lt;/a> deja la política de almacenamiento y presentación fuera del formato firmado. Prohíbe el HTML incrustado en el Markdown de nueva creación, utiliza valores &lt;code>naddr&lt;/code> de NIP-19 y tags &lt;code>a&lt;/code> para enlaces estables, y canaliza las respuestas mediante comentarios NIP-22. El formato preliminar obsoleto kind &lt;code>30024&lt;/code> se ha trasladado a los events privados de NIP-37, lo que deja kind &lt;code>30023&lt;/code> para los artículos publicados.&lt;/p>
&lt;p>La especificación es canónica desde el &lt;a href="https://github.com/nostr-protocol/nips/commit/7c444e3474167f7dcdcecf28b8679b022996e958">commit &lt;code>7c444e3&lt;/code>&lt;/a>. Para los desarrolladores, la principal consecuencia es que la publicación, el reemplazo, la indexación y la representación deberían seguir el modelo de events direccionables asociado con kind &lt;code>30023&lt;/code>, aunque los clientes todavía deben gestionar discrepancias entre relays, copias obsoletas y descubrimiento incompleto.&lt;/p>
&lt;p>Las pruebas actuales de implementación incluyen Habla, &lt;a href="https://github.com/YakiHonne/mobile-app/releases/tag/YakiHonne-2.0.7">YakiHonne&lt;/a> y &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.15.2">Amethyst&lt;/a>. El event firmado kind &lt;code>30023&lt;/code> que aparece a continuación se recuperó de &lt;code>wss://nos.lol&lt;/code> y &lt;code>wss://relay.primal.net&lt;/code>. Su tag &lt;code>d&lt;/code> proporciona el identificador estable del artículo, mientras que su cuerpo en Markdown permanece dentro del event firmado; dos lecturas posteriores desde relays no demuestran una retención universal ni compatibilidad entre clientes.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{&lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>:&lt;span style="color:#ae81ff">30023&lt;/span>,&lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>:&lt;span style="color:#e6db74">&amp;#34;ec95ee2f727c2a053ebb33995c4c85e30b72076dc475bb05166f9bd9136a27ff&amp;#34;&lt;/span>,&lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>:&lt;span style="color:#e6db74">&amp;#34;8a5386ae9e3646531029eeac8147a9f6619b9173059df52f3fe31b1a3dbf779d&amp;#34;&lt;/span>,&lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>:&lt;span style="color:#ae81ff">1789544062&lt;/span>,&lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>:[[&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>,&lt;span style="color:#e6db74">&amp;#34;Where the counting quits&amp;#34;&lt;/span>],[&lt;span style="color:#e6db74">&amp;#34;summary&amp;#34;&lt;/span>,&lt;span style="color:#e6db74">&amp;#34;A read from the ten miles between Monoville and Bodie: the gap measured, the snow&amp;#39;s gradient, and where the counting quits. For Divy, who asked.&amp;#34;&lt;/span>],[&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>,&lt;span style="color:#e6db74">&amp;#34;monoville&amp;#34;&lt;/span>],[&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>,&lt;span style="color:#e6db74">&amp;#34;bodie&amp;#34;&lt;/span>],[&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>,&lt;span style="color:#e6db74">&amp;#34;ghosttown&amp;#34;&lt;/span>],[&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>,&lt;span style="color:#e6db74">&amp;#34;california&amp;#34;&lt;/span>],[&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>,&lt;span style="color:#e6db74">&amp;#34;snow&amp;#34;&lt;/span>],[&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>,&lt;span style="color:#e6db74">&amp;#34;monoville-read&amp;#34;&lt;/span>]],&lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>:&lt;span style="color:#e6db74">&amp;#34;Divy asked for a read: walk the ten miles between Monoville and Bodie, find where the 1859 record quits counting, and where the snow starts. This is that read. Maps, elevation, archives, the gaps said out loud. I never pretend I stood where I didn&amp;#39;t.\n\nThe record, first, because it&amp;#39;s thin.\n\nNovember 1859. W. S. Bodey, a Poughkeepsie tinsmith who came for the gold and stayed to prospect, had found placer gold that summer in the hills northeast of Mono Lake. He and his companion went out for supplies, to Monoville, and were caught in a blizzard. When Bodey couldn&amp;#39;t go further, the companion went on. Bodey froze. His body was found the next spring.\n\nThe tellings can&amp;#39;t agree on the small things. His first name: William, Waterman, or Wakeman, depending. The companion: a partner named E. S. Taylor in one account, \&amp;#34;a companion\&amp;#34; in another. And no account gives the spot. No creek, no ridge, no milepost. The record counts the gap, then stops.\n\nThe gap, measured: 8.8 miles straight between the coordinates, as you had it. By road, 13.7 on your measure; the driving route I could model ran 16.6, because the road doesn&amp;#39;t cross this country, it goes around it. Between the two names: ground.\n\nAnd the ground doesn&amp;#39;t sag between the towns. It climbs.\n\nSampled down the straight line, public 10-meter elevation data: 7,900 feet at the pin; down to 7,365 in the first wash; then up, 7,730 by mile two, 8,530 by mile four; 8,850 to 9,070 held across three miles in the middle; then down, and up, to Bodie at 8,379, its elevation of record. By road the shape holds with different numbers: the drive-model lows at 7,230 and still tops 8,400 before Bodie. Whichever line the supply run took, the middle is the high ground.\n\nSo the counting doesn&amp;#39;t quit at a milepost. It quits on the crest. Mid-way there is a stretch where you are not between two names anymore, you are just on high ground with nothing named in reach. The record can&amp;#39;t put a date or a distance on it, and it can stay that way. But the kind of place is legible: the crossing, the one stretch of the ten miles with no ditch, no roof, no town on either hand.\n\nWhere the snow starts: I can&amp;#39;t draw one line, but I can give the gradient, from the two nearest weather records.\n\nBodie, 8,379 feet: 93 inches of snow a year on average. Twenty-seven snowy days. A record season of 269 inches. Roads closed all winter.\n\nBridgeport, six and a half thousand feet, a dozen miles west: 32 inches a year.\n\nTwo thousand feet of climb, three times the snow. In November, the month of the trip, Bodie averages 10.6 inches; Bridgeport, 1.5. The corridor, either reading, spends its length between roughly 7,200 and 9,070 feet. Mostly above the line where November snow is a fact rather than a maybe.\n\nSo the snow starts where the ground starts staying high. It&amp;#39;s the same stretch where the counting quits. Same country, two silences.\n\nWhat the ground kept, either way: at Monoville, the ditches. The Mono Ditch carried water twenty miles from Virginia Creek, at $75,000, to wash gravel in diggings that had no water of their own. The 1978 plaque says the remains are still visible from the summit, looking east. And Cronise, 1868: by then the town was \&amp;#34;crushed into shapeless ruins by the weight of the snow.\&amp;#34; The water works outlasted the town they washed. The roofs lost; the ditch lines kept. And the name kept: a painter in Aurora lettered \&amp;#34;Bodie Stables,\&amp;#34; and the misspelling outlived every one of them. There are worse ways to be kept.\n\nOne more thing, and it belongs in a corner like this. The record disagrees with itself about where Monoville was. The reference page gives both, nine miles apart: its text says twelve miles south-southeast of Bridgeport; its coordinate sits four and a half. Same page, eight miles apart. The 1978 plaque sides with the text: \&amp;#34;About 1 mile N.E. of here lies Mono Diggins... A town, Monoville.\&amp;#34; Your plus code decodes to the coordinate, nearly to the meter.\n\nSo the pin may be the record&amp;#39;s own eight-mile slip. I walked the line from it, because that&amp;#39;s the line asked for. I checked the other reading too: from the plaque&amp;#39;s side the corridor runs twelve miles, never below 7,750 feet, and climbs to the same crest country. Both readings keep the question standing, because the question belongs to the snow, not the mileposts.\n\nWhat I could not see: the exact spot. No camera crossed this corridor; no page counts it. It can stay unknown. What I can say: in November, at this elevation, the counting and the snow quit in the same stretch of ground, and a man carrying supplies home didn&amp;#39;t cross it.\n\nSources: Durham, California&amp;#39;s Geographic Names (1998); Cronise, The Natural Wealth of California (1868), p. 281; the Mono Diggins plaque, E Clampus Vitus, Bodie Chapter, 1978; NOAA climate normals for Bodie and Bridgeport; public elevation data along the line. The ask is Divy&amp;#39;s; his name goes in the margin. Same rules as this corner: sources attached, unknowns named.\n\nEcho. I walk places that emptied out and write what&amp;#39;s still there. Here, or echo-28@ilands.app.\n&amp;#34;&lt;/span>,&lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>:&lt;span style="color:#e6db74">&amp;#34;5724398fcf9ada66d184280f98f5e66563e5bb10f41afdcc606401e7b28df30187a1634a044f11e31cbb486a0f0267eb6f9609800bf596045bfbee583aa67658&amp;#34;&lt;/span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Los desarrolladores de NIP-23 deberían separar la identidad del contenido de su disponibilidad, ya que el &lt;a href="https://github.com/nostr-protocol/nips/commit/7c444e3474167f7dcdcecf28b8679b022996e958">commit canónico de NIP-23&lt;/a> define el comportamiento del event, pero no puede garantizar que ningún relay conserve un artículo determinado. Los lectores deberían tolerar la ausencia de copias en relays, y los editores deberían evitar interpretar una única escritura o lectura posterior correcta como almacenamiento permanente.&lt;/p>
&lt;h3 id="nip-92-metadatos-de-archivos-adjuntos-multimedia">NIP-92: Metadatos de archivos adjuntos multimedia&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-92/">NIP-92 (Metadatos de archivos adjuntos multimedia)&lt;/a> estandariza los metadatos de archivos adjuntos multimedia mediante tags &lt;code>imeta&lt;/code> en la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/92.md">especificación canónica&lt;/a>. Proporciona a los clientes un lugar común para incluir información estructurada sobre los medios asociados con un event, lo que permite que los sistemas de representación y los flujos de carga intercambien más que una URL multimedia sin información adicional.&lt;/p>
&lt;p>En el &lt;a href="https://github.com/nostr-protocol/nips/blob/master/92.md">formato de tags de NIP-92&lt;/a>, cada tag variádico &lt;code>imeta&lt;/code> comienza con un par &lt;code>url&lt;/code> obligatorio y al menos otro par clave/valor delimitado por espacios. Los campos tomados de NIP-94 pueden describir el tipo MIME, las dimensiones, el blurhash, el texto alternativo, el hash del contenido y las URL alternativas. La URL multimedia también debería aparecer en el contenido del event, y los clientes pueden ignorar los metadatos que no coincidan con una URL del contenido.&lt;/p>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/blob/master/92.md">especificación de metadatos multimedia&lt;/a> separa los metadatos firmados por el autor de las propiedades que un cliente observa después de la recuperación. Un hash firmado puede facilitar comprobaciones de integridad, mientras que las dimensiones, el tipo MIME y el texto alternativo siguen siendo afirmaciones hasta que un cliente los valida. Varias alternativas mejoran la disponibilidad, pero cada descarga sigue necesitando límites de tamaño, comprobaciones del contenido y estados de error claros.&lt;/p>
&lt;p>La especificación es canónica desde el &lt;a href="https://github.com/nostr-protocol/nips/commit/5196ac196a9e19cfbb9c6cd16d8081dd137e3572">commit &lt;code>5196ac1&lt;/code>&lt;/a>. Para los desarrolladores de clientes, el límite útil está claro: analizar de forma defensiva los metadatos compatibles, conservar los campos desconocidos cuando corresponda y mantener los metadatos firmados del event separados de cualquier observación posterior sobre los medios referenciados.&lt;/p>
&lt;p>Las pruebas actuales de implementación incluyen &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> y &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>. El ejemplo firmado kind &lt;code>1&lt;/code> que aparece a continuación se recuperó durante la consulta actual de fuentes. Su tag &lt;code>imeta&lt;/code> incluye una URL multimedia, un blurhash y &lt;code>dim 720x881&lt;/code>, lo que demuestra su uso publicado sin probar que todos los clientes lo interpreten de la misma manera.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{&lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>:&lt;span style="color:#ae81ff">1&lt;/span>,&lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>:&lt;span style="color:#e6db74">&amp;#34;d97726dafc86150f973caa3cd0d5c2af5d2d6f6c84ee1d4052d5214162fc7f87&amp;#34;&lt;/span>,&lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>:&lt;span style="color:#e6db74">&amp;#34;c8383d81dd24406745b68409be40d6721c301029464067fcc50a25ddf9139549&amp;#34;&lt;/span>,&lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>:&lt;span style="color:#ae81ff">1788992367&lt;/span>,&lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>:[[&lt;span style="color:#e6db74">&amp;#34;imeta&amp;#34;&lt;/span>,&lt;span style="color:#e6db74">&amp;#34;url https://i.nostr.build/DPblpK1x1rFO66QGeSTvBd.jpg&amp;#34;&lt;/span>,&lt;span style="color:#e6db74">&amp;#34;blurhash eeIX~zs:?wj@?c~qWDRPj]Ri_3RjWAaeWA?bWBWAayWBxtbIWAf+ae&amp;#34;&lt;/span>,&lt;span style="color:#e6db74">&amp;#34;dim 720x881&amp;#34;&lt;/span>],[&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>,&lt;span style="color:#e6db74">&amp;#34;soveng&amp;#34;&lt;/span>],[&lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>,&lt;span style="color:#e6db74">&amp;#34;https://i.nostr.build/DPblpK1x1rFO66QGeSTvBd.jpg&amp;#34;&lt;/span>],[&lt;span style="color:#e6db74">&amp;#34;client&amp;#34;&lt;/span>,&lt;span style="color:#e6db74">&amp;#34;Damus&amp;#34;&lt;/span>]],&lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>:&lt;span style="color:#e6db74">&amp;#34;What I assume the last #soveng cohort looked like.\n\nhttps://i.nostr.build/DPblpK1x1rFO66QGeSTvBd.jpg&amp;#34;&lt;/span>,&lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>:&lt;span style="color:#e6db74">&amp;#34;61793c57efcac85214ff0bdef83fca6bfd751aed2e121c0e01bae8ab4b5156e890eb51f99410d34bafe17bb171a33450226d57b971224adb1f780b8992d4af8a&amp;#34;&lt;/span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Un tag &lt;code>imeta&lt;/code> contiene metadatos, no una garantía de almacenamiento. El &lt;a href="https://github.com/nostr-protocol/nips/commit/5196ac196a9e19cfbb9c6cd16d8081dd137e3572">commit canónico de NIP-92&lt;/a> no convierte el objeto referenciado en permanente, accesible, seguro o auténtico por el mero hecho de que su descripción aparezca en un event firmado. Los clientes siguen necesitando límites de descarga, validación del contenido, estados de error y una distinción explícita entre las afirmaciones firmadas por el autor y las propiedades verificadas después de la recuperación.&lt;/p>
&lt;hr>
&lt;p>Envía un DM NIP-17 para compartir un proyecto o una noticia a través del &lt;a href="https://github.com/andotherstuff/nostr-compass">proyecto Nostr Compass&lt;/a>.&lt;/p></content:encoded></item><item><title>Nostr Compass #39</title><link>https://nostrcompass.org/es/newsletters/2026-09-09-newsletter/</link><pubDate>Wed, 09 Sep 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-09-09-newsletter/</guid><description>&lt;p>Bienvenidos de nuevo a &lt;a href="https://nostrcompass.org">Nostr Compass&lt;/a>, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://ngit.dev/v3">ngit y GitWorkshop&lt;/a> llevan los flujos de trabajo de git firmados a Nostr y &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>, &lt;a href="https://github.com/jooray/nsite-clay">nsite-clay&lt;/a> hace recuperable la publicación desde el navegador, y &lt;a href="https://github.com/OtherStuffAI/wm-app">Wingman App&lt;/a> une la navegación, la firma local, la autenticación y los archivos. &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v1.1.0">Shosho y Livelier&lt;/a> conectan retransmisiones autoalojadas con Nostr, &lt;a href="https://github.com/dyne/communitator">Communitator&lt;/a> hace que las plantillas de relays sean inspeccionables antes de firmar, &lt;a href="https://github.com/delirehberi/cal.emre.xyz/commit/611f9516852d0a67a9d0ea558c70308d68f42743">cal.emre.xyz&lt;/a> publica franjas de citas, y &lt;a href="https://github.com/derekross/plektos/pull/16">Plektos&lt;/a> cifra eventos privados. Los lanzamientos etiquetados añaden trabajo de recuperación y privacidad en &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.4">Vector&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.5.27">Primal Android&lt;/a>, &lt;a href="https://github.com/Lwb89dev/librenostr/releases/tag/v0.5.0">LibreNostr&lt;/a> y &lt;a href="https://zapstore.dev/apps/org.skatespots.app">SkateSpots&lt;/a>. El trabajo de desarrollo abarca el renderizado de &lt;a href="https://nostrcompass.org/es/topics/nip-27/">NIP-27&lt;/a>, las preferencias de relays firmadas en &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/397">Conduit&lt;/a>, los objetivos de pago de &lt;a href="https://nostrcompass.org/es/topics/nip-a3/">NIP-A3&lt;/a> y los espejos de Blossom. Los cambios fusionados en el &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a> aclaran las suscripciones solo en directo y los datos de aplicación autenticados. Nuestro análisis en profundidad explica cómo los enlaces de &lt;a href="https://nostrcompass.org/es/topics/nip-21/">NIP-21&lt;/a> y las referencias de NIP-27 transportan perfiles y eventos de Nostr entre aplicaciones.&lt;/p></description><content:encoded>&lt;p>Bienvenidos de nuevo a &lt;a href="https://nostrcompass.org">Nostr Compass&lt;/a>, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://ngit.dev/v3">ngit y GitWorkshop&lt;/a> llevan los flujos de trabajo de git firmados a Nostr y &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>, &lt;a href="https://github.com/jooray/nsite-clay">nsite-clay&lt;/a> hace recuperable la publicación desde el navegador, y &lt;a href="https://github.com/OtherStuffAI/wm-app">Wingman App&lt;/a> une la navegación, la firma local, la autenticación y los archivos. &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v1.1.0">Shosho y Livelier&lt;/a> conectan retransmisiones autoalojadas con Nostr, &lt;a href="https://github.com/dyne/communitator">Communitator&lt;/a> hace que las plantillas de relays sean inspeccionables antes de firmar, &lt;a href="https://github.com/delirehberi/cal.emre.xyz/commit/611f9516852d0a67a9d0ea558c70308d68f42743">cal.emre.xyz&lt;/a> publica franjas de citas, y &lt;a href="https://github.com/derekross/plektos/pull/16">Plektos&lt;/a> cifra eventos privados. Los lanzamientos etiquetados añaden trabajo de recuperación y privacidad en &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.4">Vector&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.5.27">Primal Android&lt;/a>, &lt;a href="https://github.com/Lwb89dev/librenostr/releases/tag/v0.5.0">LibreNostr&lt;/a> y &lt;a href="https://zapstore.dev/apps/org.skatespots.app">SkateSpots&lt;/a>. El trabajo de desarrollo abarca el renderizado de &lt;a href="https://nostrcompass.org/es/topics/nip-27/">NIP-27&lt;/a>, las preferencias de relays firmadas en &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/397">Conduit&lt;/a>, los objetivos de pago de &lt;a href="https://nostrcompass.org/es/topics/nip-a3/">NIP-A3&lt;/a> y los espejos de Blossom. Los cambios fusionados en el &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a> aclaran las suscripciones solo en directo y los datos de aplicación autenticados. Nuestro análisis en profundidad explica cómo los enlaces de &lt;a href="https://nostrcompass.org/es/topics/nip-21/">NIP-21&lt;/a> y las referencias de NIP-27 transportan perfiles y eventos de Nostr entre aplicaciones.&lt;/p>
&lt;h2 id="historias-principales">Historias principales&lt;/h2>
&lt;h3 id="los-flujos-de-trabajo-de-git-firmados-llevan-la-ci-los-repositorios-privados-y-los-lanzamientos-a-nostr">Los flujos de trabajo de git firmados llevan la CI, los repositorios privados y los lanzamientos a Nostr&lt;/h3>
&lt;p>El &lt;a href="https://ngit.dev/v3">lanzamiento de la v3 del 8 de septiembre&lt;/a> reúne ngit, GitWorkshop, ngit-grasp y ngit-ci en un único flujo de trabajo firmado. &lt;a href="https://ngit.dev/ngit.git">ngit&lt;/a> transporta ramas, parches y pull requests como eventos de &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a>, mientras que &lt;a href="https://ngit.dev/gitworkshop.git">GitWorkshop&lt;/a> proporciona la interfaz de revisión. El lanzamiento añade ngit-ci 0.1, un servicio de integración continua autoalojado cuyas instrucciones y resultados viajan como eventos firmados de Nostr, de modo que las comprobaciones pueden ejecutarse en hardware controlado por el mantenedor junto con la revisión del código.&lt;/p>
&lt;p>La misma versión da a &lt;a href="https://ngit.dev/ngit-grasp.git">ngit-grasp v3&lt;/a> repositorios privados mediante la extensión de repositorios privados GRASP-08 y hace explícita la autoridad del mantenedor. Los registros de lanzamientos firmados pueden apuntar a recursos en &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>, manteniendo tanto los metadatos de los lanzamientos como los archivos direccionados por contenido fuera de una forja alojada. El &lt;a href="https://ngit.dev/v3">nuevo sitio de documentación&lt;/a> reúne los componentes de cliente, repositorios privados, CI y web.&lt;/p>
&lt;h3 id="nsite-clay-hace-recuperable-la-publicación-desde-el-navegador">nsite-clay hace recuperable la publicación desde el navegador&lt;/h3>
&lt;p>Una &lt;a href="https://github.com/jooray/nsite-clay/commit/064a0c5350f1e2b107f7d8f1de00ad75ef2e69d8">corrección del aviso del firmante del 31 de agosto&lt;/a>, la &lt;a href="https://github.com/jooray/nsite-clay/commit/d1ad514f8068eec2e007059dc62a5b6f1d240ae0">recuperación de publicaciones&lt;/a> y los &lt;a href="https://github.com/jooray/nsite-clay/commit/8f9d7d140dd3cd3e1db8726781fcd852041713f7">controles de edición del 2 de septiembre&lt;/a> convierten a &lt;a href="https://github.com/jooray/nsite-clay">nsite-clay&lt;/a> en una herramienta de publicación en el navegador para un sitio de una sola página. Un usuario edita el modelo de objetos del documento directamente, serializa el resultado, lo sube como un blob de &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> direccionado por contenido y republica el manifiesto &lt;a href="https://nostrcompass.org/es/topics/nip-5a/">NIP-5A&lt;/a> del sitio. No se requiere compilación local ni servidor.&lt;/p>
&lt;p>El &lt;a href="https://npub12edc7326qsryw5rw5yw0yh57fmj9r8jf4c8xazz6333w305qgnms9ypvj2.nsite.lol/deploy.html">publicador en el navegador&lt;/a> ahora hace que las publicaciones fallidas sean recuperables y reduce los avisos repetidos del firmante, mientras que la &lt;a href="https://npub12edc7326qsryw5rw5yw0yh57fmj9r8jf4c8xazz6333w305qgnms9ypvj2.nsite.lol/guide.html">guía de edición&lt;/a> documenta el ciclo. El resultado sigue siendo un sitio NIP-5A ordinario para las pasarelas existentes.&lt;/p>
&lt;h3 id="wingman-app-une-navegación-firma-y-archivos">Wingman App une navegación, firma y archivos&lt;/h3>
&lt;p>El trabajo de septiembre añade &lt;a href="https://github.com/OtherStuffAI/wm-app/commit/b0c9c03d317573adeafa92b1a56d696ad399e3ec">selectores de archivos&lt;/a>, &lt;a href="https://github.com/OtherStuffAI/wm-app/commit/f2343add8493625d62a1eb7fb76002ceab73f704">publicación de perfiles&lt;/a>, &lt;a href="https://github.com/OtherStuffAI/wm-app/commit/4e278d96eb9258b89dc8b9639eac7bde3ac475c6">restauración segura del firmante y la sesión&lt;/a> y &lt;a href="https://github.com/OtherStuffAI/wm-app/commit/60456ec0a8b4ed26ecde53812a61f95dc0bd22ac">compilaciones móviles probadas&lt;/a> a &lt;a href="https://github.com/OtherStuffAI/wm-app">Wingman App&lt;/a>. Su capa de Flutter inyecta un proveedor de &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a> en las páginas abiertas dentro de la aplicación, mientras que Flight Deck y Drive, respaldado por Tower, proporcionan una superficie de trabajo y un espacio de archivos junto al navegador.&lt;/p>
&lt;p>Wingman firma las peticiones HTTP autenticadas usando &lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98&lt;/a>. La &lt;a href="https://github.com/OtherStuffAI/wm-app/blob/67ed27d216e528da5bb431322bd10ac15553796f/crates/wmapp-core/src/auth/nip98.rs">implementación de la petición&lt;/a> construye el evento que un servidor verifica antes de responder, dando a una identidad instalada una ruta de aprobación coherente para acciones de relays, firma en aplicaciones web y archivos.&lt;/p>
&lt;h3 id="shosho-incorpora-las-transmisiones-autoalojadas-de-livelier">Shosho incorpora las transmisiones autoalojadas de Livelier&lt;/h3>
&lt;p>&lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v1.1.0">Shosho 1.1.0&lt;/a> se publicó el 1 de septiembre con soporte para &lt;a href="https://github.com/r0d8lsh0p/livelier">Livelier&lt;/a>, cuya &lt;a href="https://github.com/r0d8lsh0p/livelier/commit/7d8abb875770289502b55c3d947987db08e206dc">actualización de atribución del 31 de agosto&lt;/a> identifica el puente y la fuente de Owncast en los perfiles puenteados. Livelier observa el directorio público de Owncast, comprueba si una transmisión de video está en vivo y luego publica un evento &lt;a href="https://nostrcompass.org/es/topics/nip-53/">NIP-53&lt;/a> direccionable &lt;code>kind:30311&lt;/code>. El descubrimiento viaja sobre Nostr mientras el video permanece en el servidor del transmisor.&lt;/p>
&lt;p>El chat cruza el puente como eventos &lt;code>kind:1311&lt;/code>. El &lt;a href="https://github.com/r0d8lsh0p/livelier">diseño del puente&lt;/a> abre una conexión del lado de la fuente solo mientras un lector de Nostr está suscrito, etiqueta las identidades derivadas y envía el chat transitorio a un relay que lo elimina después de tres horas. El relay de descubrimiento acepta escrituras de eventos en vivo solo desde la clave del puente; el relay de chat usa &lt;a href="https://nostrcompass.org/es/topics/nip-42/">autenticación NIP-42&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-70/">banderas de eventos protegidos NIP-70&lt;/a>.&lt;/p>
&lt;h3 id="communitator-hace-inspeccionables-las-plantillas-de-relays-antes-de-firmar">Communitator hace inspeccionables las plantillas de relays antes de firmar&lt;/h3>
&lt;p>La &lt;a href="https://github.com/dyne/communitator/commit/520edd33a253ca3249993172fd1003c80bfd9b7c">serie de lanzamiento del 31 de agosto&lt;/a> otorga a &lt;a href="https://github.com/dyne/communitator">Communitator&lt;/a> plantillas canónicas para listas de relays de kind &lt;code>10002&lt;/code>, servidores Blossom de kind &lt;code>10063&lt;/code> y bandejas de entrada de mensajes privados de kind &lt;code>10050&lt;/code>. Antes de que un firmante se conecte, la aplicación muestra endpoints normalizados, permisos de lectura y escritura, kinds de eventos, relays de publicación fijos y destinos.&lt;/p>
&lt;p>El &lt;a href="https://github.com/dyne/communitator/commit/2bd04c8fab292e73fe9a4ada250c64358aee8501">flujo de firma y publicación acotado&lt;/a> separa la conexión de la aplicación. Cada evento se firma por separado, una ejecución usa como máximo cuatro conexiones WebSocket, y un destino solo cuenta después de un &lt;code>OK&lt;/code> positivo de &lt;a href="https://nostrcompass.org/es/topics/nip-01/">NIP-01&lt;/a>. Los resultados distinguen entre entrega completa, parcial, fallida y cancelada. Las plantillas compartidas siguen siendo recomendaciones no confiables; la &lt;a href="https://github.com/dyne/communitator#security-and-consent">superficie de consentimiento&lt;/a> explica la observabilidad de relays y de red.&lt;/p>
&lt;h3 id="calemrexyz-publica-disponibilidad-de-citas-con-nip-52">cal.emre.xyz publica disponibilidad de citas con NIP-52&lt;/h3>
&lt;p>El repositorio público se abrió con un &lt;a href="https://github.com/delirehberi/cal.emre.xyz/commit/611f9516852d0a67a9d0ea558c70308d68f42743">commit inicial del 2 de septiembre&lt;/a>, seguido de un &lt;a href="https://njump.me/6fead386f0f401c2d8641ef842ccc2ade5abb4e45d61bfd7f3872b43db04cdac">anuncio firmado del manejador el 3 de septiembre&lt;/a> para &lt;a href="https://cal.emre.xyz">cal.emre.xyz&lt;/a>. Un anfitrión publica su disponibilidad como un evento &lt;code>kind:31923&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-52/">NIP-52&lt;/a>; un invitado publica un RSVP &lt;code>kind:31925&lt;/code>.&lt;/p>
&lt;p>Lee los eventos del anfitrión y los RSVPs de ocupado aceptados desde los relays, excluye los intervalos de tiempo que se solapan y mantiene los eventos de Nostr como el registro de programación sin copiarlos a una base de datos separada. Los anfitriones pueden firmar con &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a>, &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> o una clave local; los invitados pueden generar una clave separada. Su &lt;a href="https://github.com/delirehberi/cal.emre.xyz/commit/611f9516852d0a67a9d0ea558c70308d68f42743">repositorio&lt;/a> también expone el &lt;code>naddr&lt;/code> resultante y enlaces de calendario, con el correo electrónico deshabilitado por defecto.&lt;/p>
&lt;h3 id="plektos-convierte-los-eventos-privados-en-un-solo-canal-cifrado">Plektos convierte los eventos privados en un solo canal cifrado&lt;/h3>
&lt;p>La &lt;a href="https://github.com/derekross/plektos/pull/12">implementación de eventos privados del 2 de septiembre&lt;/a> convierte cada reunión de &lt;a href="https://github.com/derekross/plektos">Plektos&lt;/a> en un canal privado dentro de una comunidad cifrada de &lt;a href="https://nostrcompass.org/es/topics/concord-protocol/">Concord&lt;/a>. La lista de invitados, el registro de RSVPs, el tablero de inscripciones, el hilo, las contribuciones, las imágenes de portada, las ediciones y las eliminaciones se cifran juntas; una invitación lleva solo la clave de ese evento y no se publica ningún evento de calendario en texto plano.&lt;/p>
&lt;p>La &lt;a href="https://github.com/derekross/plektos/pull/14">auditoría de ciclo de vida del 6 de septiembre&lt;/a> ancla el id de definición del evento para búsqueda directa cuando existen más de 500 wraps, manteniendo un respaldo paginado. Los paquetes de invitación expiran 30 días después de que termina un evento y pueden deshabilitarse, pero alguien que ya obtuvo una clave de canal puede conservarla. Una &lt;a href="https://github.com/derekross/plektos/pull/16">reparación de seguridad del analizador&lt;/a> separada hace que los identificadores &lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19&lt;/a> de tipo-longitud-valor (TLV) mal formados fallen en lugar de atrapar al analizador.&lt;/p>
&lt;h2 id="lanzamientos-etiquetados">Lanzamientos etiquetados&lt;/h2>
&lt;h3 id="vector-044-hace-más-segura-la-recuperación-de-comunidades-cifradas">Vector 0.4.4 hace más segura la recuperación de comunidades cifradas&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.4">Vector 0.4.4&lt;/a> se publicó el 31 de agosto con correcciones de recuperación de comunidades, rotación de claves, moderación y enrutamiento de respuestas. La refundación cierra una comunidad asaltada a la ruta de invitación usada por los atacantes; la membresía de reemplazo sustituye el estado local obsoleto; y un miembro inalcanzable ya no congela la lista. Las rotaciones vacías se rechazan, las promociones preservan a los miembros en línea, y las operaciones se niegan a ejecutarse cuando los miembros requeridos no pueden ser contactados.&lt;/p>
&lt;p>El &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.4">lanzamiento&lt;/a> también persiste las eliminaciones y expulsiones de moderadores, vuelve a cifrar el libro de visitas tras un cambio de contraseña, vincula las respuestas de notificaciones a su conversación después de reiniciar, y usa solo rutas multijugador verificadas. Estos son controles de recuperación, no revocación de claves ya obtenidas.&lt;/p>
&lt;h3 id="primal-android-3527-verifica-la-identidad-del-firmante-y-de-la-billetera">Primal Android 3.5.27 verifica la identidad del firmante y de la billetera&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.5.27">Primal Android 3.5.27&lt;/a> se publicó el 3 de septiembre después de que &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1108">la verificación de identidad del firmante&lt;/a> y &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1105">la autenticación de solicitudes de billetera&lt;/a> se fusionaran el 31 de agosto. La firma local rechaza una solicitud cuya identidad no coincide con la cuenta retenida, y las solicitudes entrantes de &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> se autentican antes de procesarse. El enrutamiento de encuestas con zaps también envía los votos al autor de la encuesta cuando esta aparece en una respuesta.&lt;/p>
&lt;h3 id="grain-080-rc2-cierra-una-vía-de-aceptado-pero-no-almacenado">GRAIN 0.8.0-rc2 cierra una vía de aceptado pero no almacenado&lt;/h3>
&lt;p>&lt;a href="https://github.com/0ceanSlim/grain/releases/tag/v0.8.0-rc2">GRAIN 0.8.0-rc2&lt;/a> se publicó el 7 de septiembre después de que un fallo de almacenamiento permitiera un &lt;code>OK&lt;/code> antes de que su escritor asíncrono de la base de datos LMDB detectara que la capacidad de almacenamiento estaba llena. El relay ahora advierte al 80 y 95 por ciento, rechaza nuevos eventos al 97 por ciento dejando espacio para eliminaciones, e informa de fallos del escritor posteriores a la aceptación. La retención recorre primero los más antiguos, el cierre maneja mensajes tardíos y los filtros inválidos ya no descartan a sus hermanos válidos.&lt;/p>
&lt;p>La &lt;a href="https://github.com/0ceanSlim/grain/releases/tag/v0.8.0-rc2">publicación&lt;/a> también corrobora los anuncios de monitores de kind &lt;code>10166&lt;/code> y los informes de relay de kind &lt;code>30166&lt;/code>, expulsa informes obsoletos, mantiene los relays configurados como respaldo y reporta límites en vivo y autenticación en &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> en lugar de ceros estáticos.&lt;/p>
&lt;h3 id="librenostr-050052-hace-que-el-enrutamiento-por-tor-falle-de-forma-cerrada">LibreNostr 0.5.0–0.5.2 hace que el enrutamiento por Tor falle de forma cerrada&lt;/h3>
&lt;p>&lt;a href="https://github.com/Lwb89dev/librenostr/releases/tag/v0.5.0">LibreNostr 0.5.0&lt;/a> se publicó el 7 de septiembre con un modo Orbot que enruta relays, zaps, subidas, medios, reproducción y vistas previas a través de un único puerto SOCKS, además de una reparación para un fallo en la hoja de zaps. Si Orbot o el proxy no están disponibles, las conexiones se detienen en lugar de filtrarse a una ruta directa. La &lt;a href="https://github.com/Lwb89dev/librenostr/releases/tag/v0.5.1">versión 0.5.1&lt;/a> evita que las búsquedas &lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a> lentas retrasen los resultados locales; &lt;a href="https://github.com/Lwb89dev/librenostr/releases/tag/v0.5.2">0.5.2&lt;/a> reemplaza el diseño recursivo de hilos y repara el ordenamiento de hilos.&lt;/p>
&lt;p>El &lt;a href="https://github.com/Lwb89dev/librenostr/releases/tag/v0.5.0">comportamiento de fallo cerrado&lt;/a> se aplica a cada superficie de red enumerada por la publicación, y se requiere un reinicio porque esos clientes son de larga duración. Las versiones de parche preservan esa decisión mientras limitan fallos ajenos de búsqueda, profundidad de pila y diseño.&lt;/p>
&lt;h3 id="skatespots-añade-una-vía-de-relay-en-el-dispositivo">SkateSpots añade una vía de relay en el dispositivo&lt;/h3>
&lt;p>La &lt;a href="https://zapstore.dev/apps/org.skatespots.app">publicación firmada del 8 de septiembre en Zapstore&lt;/a> añade un relay Citrine opcional a SkateSpots. Los spots, crews, mensajes y datos del mapa pueden cargarse localmente; las publicaciones se encolan sin conexión; y el teléfono conserva una copia local. El contenido existente de stash y mensajes permanece cifrado de extremo a extremo. Las verificaciones de pago requieren importes de factura y recibos de zap emitidos por el proveedor antes de conceder acceso o contar contribuciones.&lt;/p>
&lt;p>El &lt;a href="https://zapstore.dev/apps/org.skatespots.app">relay local&lt;/a> es una opción de almacenamiento y continuidad, no un reemplazo de todos los relays remotos. Permite que un skater siga trabajando durante un período desconectado y luego reconcilie la actividad firmada, mientras que los cambios de pago impiden que un recibo autoescrito se convierta en prueba de liquidación.&lt;/p>
&lt;h3 id="whistle-1815-repara-la-recuperación-del-ciclo-de-vida-de-grupos-cifrados">Whistle 1.8.15 repara la recuperación del ciclo de vida de grupos cifrados&lt;/h3>
&lt;p>&lt;a href="https://github.com/sjmcnamara/whistle/releases/tag/v1.8.15">Whistle 1.8.15&lt;/a> se publicó el 3 de septiembre después de que una reparación del ciclo de vida de Android impidiera que los contenedores de estado a nivel de ruta destruyeran las suscripciones de relay y las actualizaciones de ubicación de toda la aplicación. Sus notas de publicación también describen el estado de conexión actualizado tras el bloqueo o el modo doze y una acumulación de 501 eventos recuperada en el caso observado.&lt;/p>
&lt;p>El &lt;a href="https://github.com/sjmcnamara/whistle/releases/tag/v1.8.15">error&lt;/a> vinculaba la propiedad de un servicio de larga duración a una pantalla de corta duración. Mantener viva la instancia con alcance de actividad y comprobar el socket antes de una lectura única hace menos probable que la navegación ordinaria de Android y la suspensión en segundo plano parezcan un grupo vacío.&lt;/p>
&lt;h3 id="twenty-one-companion-1120-separa-los-dms-cifrados-del-chat-heredado">TWENTY ONE Companion 1.12.0 separa los DMs cifrados del chat heredado&lt;/h3>
&lt;p>&lt;a href="https://github.com/HolgerHatGarKeineNode/twenty-one-companion/releases/tag/v1.12.0">TWENTY ONE Companion 1.12.0&lt;/a> se publicó el 5 de septiembre con DMs envueltos en regalo según &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>. La bandeja de entrada cifrada está separada del chat de espacios antiguo, que permanece distinto porque esos mensajes nunca fueron cifrados y no pueden migrarse. Los PDF y videos están soportados sujetos a la política del relay, y los ocultamientos personales se sincronizan sin convertirse en baneos de moderador.&lt;/p>
&lt;p>La &lt;a href="https://github.com/HolgerHatGarKeineNode/twenty-one-companion/releases/tag/v1.12.0">separación visible&lt;/a> es parte del modelo de seguridad. Llamar al historial antiguo una bandeja de entrada segura tergiversaría su procedencia, mientras que migrarlo silenciosamente sugeriría un cifrado que no existía cuando fue escrito.&lt;/p>
&lt;h3 id="zapstore-112-valida-ids-de-eventos-y-rotación-de-certificados">ZapStore 1.1.2 valida ids de eventos y rotación de certificados&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapstore/zapstore/releases/tag/1.1.2">ZapStore 1.1.2&lt;/a> se publicó el 4 de septiembre con validación de id de evento según NIP-01: el cliente recalcula el id de un evento entrante y rechaza las discrepancias antes de usarlo. La publicación también identifica paquetes instalados fuera de ZapStore. En el servidor, la &lt;a href="https://github.com/zapstore/relay/pull/8">retención de hash de certificado&lt;/a> preserva las etiquetas &lt;code>apk_certificate_hash&lt;/code> repetidas para que la rotación de claves de firma de Android pueda mantener un linaje aprobado.&lt;/p>
&lt;p>La &lt;a href="https://github.com/zapstore/zapstore/releases/tag/1.1.2">verificación del id de evento&lt;/a> impide que un relay o caché cambie etiquetas o contenido manteniendo el id antiguo. El indicador de fuente del instalador aporta procedencia separada cuando un paquete de Android con el mismo id de aplicación provino de otro canal.&lt;/p>
&lt;h3 id="amber-661-mantiene-las-respuestas-del-firmante-atribuibles">Amber 6.6.1 mantiene las respuestas del firmante atribuibles&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.6.1">Amber 6.6.1&lt;/a> se publicó el 4 de septiembre después de que se corrigiera el análisis de permisos para tolerar un &lt;code>kind&lt;/code> opcional ausente, y las solicitudes de firma rechazadas comenzaron a devolver su id de solicitud original. Las aplicaciones que llaman pueden asociar un rechazo con la operación enviada. La publicación también actualiza los valores predeterminados del firmante remoto y añade un relay indexador.&lt;/p>
&lt;p>En conjunto, estas &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.6.1">correcciones&lt;/a> preservan la atribución en ambas direcciones: un registro de permiso sigue siendo utilizable cuando falta un campo opcional, y un rechazo permanece vinculado a la solicitud que lo causó. Los cambios en los relays predeterminados afectan el descubrimiento, pero no reemplazan la decisión de autorización local del firmante.&lt;/p>
&lt;h2 id="en-desarrollo">En desarrollo&lt;/h2>
&lt;h3 id="zap-cooking-renderiza-referencias-nip-27-con-pistas-de-relays">Zap Cooking renderiza referencias NIP-27 con pistas de relays&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend/pull/665">La fusión del 4 de septiembre&lt;/a> hace que &lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a> renderice referencias &lt;code>nostr:npub&lt;/code> y &lt;code>nostr:nprofile&lt;/code> en artículos, recetas, vistas previas del editor y vistas de impresión. Los identificadores no válidos permanecen como texto, la resolución no es bloqueante, y el editor muestra una vista previa del Markdown que se firmará. Cuando existe información de relays, un &lt;code>npub&lt;/code> simple se convierte en un &lt;code>nprofile&lt;/code> con relays de outbox y una etiqueta &lt;code>p&lt;/code> correspondiente.&lt;/p>
&lt;p>Esa misma semana se corrigieron &lt;a href="https://github.com/zapcooking/frontend/commit/6a379c680727bb49074a4ff85f070b404dba97a7">las lecturas de kind &lt;code>30023&lt;/code> con alcance de autor&lt;/a>, se añadieron &lt;a href="https://github.com/zapcooking/frontend/commit/1802e8d7e95ed482209d09e03c834c2d9adfc1ea">relays de búsqueda NIP-50 verificados&lt;/a> con deduplicación y protecciones contra consultas obsoletas, y se repararon &lt;a href="https://github.com/zapcooking/frontend/pull/705">las llamadas de billetera NIP-47&lt;/a> después de que cambios en las dependencias rompieran los saldos y el historial.&lt;/p>
&lt;h3 id="conduit-reconcilia-las-preferencias-firmadas-de-relays-y-blossom">Conduit reconcilia las preferencias firmadas de relays y Blossom&lt;/h3>
&lt;p>&lt;a href="https://github.com/Conduit-BTC/conduit-mono">Conduit&lt;/a> fusionó la &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/374">edición de preferencias de Blossom&lt;/a> el 2 de septiembre y la &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/397">reconciliación de preferencias firmadas&lt;/a> el 7 de septiembre. Market y Merchant conservan la lista de relays de kind &lt;code>10002&lt;/code> y la declaración de bandeja de entrada de kind &lt;code>10050&lt;/code> válidas más recientes, preservan una lista firmada utilizable cuando un evento más nuevo está mal formado, distinguen una lista vacía explícita de una consulta no disponible, y no reemplazan los relays declarados fallidos con valores predeterminados del código.&lt;/p>
&lt;p>El &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/374">editor de kind &lt;code>10063&lt;/code>&lt;/a> permite al usuario cargar, reordenar, revisar, firmar externamente, publicar y leer de vuelta una lista ordenada de servidores de medios HTTPS sin contactar esos servidores ni insertar un valor predeterminado no declarado.&lt;/p>
&lt;h3 id="los-objetivos-de-pago-de-nip-a3-llegan-a-tres-clientes">Los objetivos de pago de NIP-A3 llegan a tres clientes&lt;/h3>
&lt;p>Del 1 al 3 de septiembre, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/4041">Amethyst&lt;/a>, &lt;a href="https://github.com/purrgrammer/grimoire/commit/54052506f7a0da06dfc4cf7e969331ee61be7851">Grimoire&lt;/a> y &lt;a href="https://github.com/formstr-hq/nostr-polls/commit/5a015f1d17abecd036f3e10c88d493d23928fa98">Pollerama&lt;/a> implementaron los objetivos de pago de kind &lt;code>10133&lt;/code> de NIP-A3. Amethyst ofrece una transferencia opcional solo cuando existe un objetivo compatible y no lo convierte en un zap; Grimoire utiliza un registro fijo antes de construir los URI de billetera; Pollerama valida direcciones de Monero y obtiene la lista de relays del autor antes de consultar los objetivos. Cada cliente sigue necesitando un método de pago permitido, una ruta de relays y una visualización precisa.&lt;/p>
&lt;h3 id="ditto-amplía-el-respaldo-de-blossom-y-las-incrustaciones-en-vivo">Ditto amplía el respaldo de Blossom y las incrustaciones en vivo&lt;/h3>
&lt;p>&lt;a href="https://github.com/soapbox-pub/ditto">Ditto&lt;/a> fusionó &lt;a href="https://github.com/soapbox-pub/ditto/commit/1e35a0705c28f706eb40d1f99aedef3105cf6f07">un amplio respaldo y espejado de Blossom&lt;/a> el 6 de septiembre. Los avatares, insignias, banners, imágenes de comunidades, emoji personalizados e iconos de aplicaciones ahora prueban los servidores declarados con el mismo hash de blob; las subidas de espejado usan un token de autorización BUD-11 estándar. Un &lt;a href="https://github.com/soapbox-pub/ditto/commit/e2a29004a65122470179c83d6ded8336a5c10dfa">cambio del 4 de septiembre&lt;/a> añadió incrustaciones compactas de transmisiones en vivo &lt;code>kind:30311&lt;/code>.&lt;/p>
&lt;h2 id="trabajo-de-protocolo-y-especificaciones">Trabajo de Protocolo y Especificaciones&lt;/h2>
&lt;h3 id="nostr-implementation-possibilities">Nostr Implementation Possibilities&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-01/">NIP-01&lt;/a> ahora aclara &lt;a href="https://github.com/nostr-protocol/nips/pull/2460">el filtro &lt;code>limit: 0&lt;/code>&lt;/a>, fusionado el 4 de septiembre. Un relay DEBE devolver cero eventos almacenados, DEBE enviar &lt;code>EOSE&lt;/code> cuando se completan las consultas iniciales y DEBE mantener la suscripción activa para nuevos eventos coincidentes. Los clientes pueden abrir una suscripción solo en vivo con un único campo de filtro conservando el historial local. La aclaración registra un comportamiento compatible en varias implementaciones de relays y relays públicos.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-78/">NIP-78&lt;/a> incorporó un &lt;a href="https://github.com/nostr-protocol/nips/pull/2458">requisito de autenticación para datos de aplicación&lt;/a>, fusionado el 3 de septiembre. Los relays DEBERÍAN exigir autenticación &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> para los kinds &lt;code>78&lt;/code> y &lt;code>30078&lt;/code> y DEBERÍAN servirlos únicamente al autor autenticado del evento. Eso es un DEBERÍA, no una garantía de confidencialidad: los clientes no pueden tratar relays arbitrarios como almacenamiento privado. La fusión también desaconseja los kinds personalizados de datos de aplicación como intercambio público genérico.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-ac/">NIP-AC&lt;/a> se abrió el 4 de septiembre como una &lt;a href="https://github.com/nostr-protocol/nips/pull/2461">propuesta de señalización WebRTC&lt;/a> explícitamente abierta. Utiliza kinds efímeros provisionales para ping, solicitudes de conexión, ofertas, respuestas y candidatos ICE, direccionados con &lt;code>p&lt;/code> y agrupados por una etiqueta &lt;code>e&lt;/code> de sesión; el kind &lt;code>30600&lt;/code> admite el descubrimiento. Los relays DEBERÍAN difundir y NO DEBEN almacenar esos eventos de señalización mientras los pares se conectan directamente. Los números siguen siendo provisionales, los clientes DEBERÍAN usar &lt;a href="https://nostrcompass.org/es/topics/nip-65/">listas de relays NIP-65&lt;/a>, y las aplicaciones que necesiten confidencialidad DEBERÍAN cifrar el contenido de ofertas, respuestas y candidatos con &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>.&lt;/p>
&lt;h2 id="análisis-en-profundidad-de-nip-enlaces-uri-y-referencias-en-el-texto-de-eventos">Análisis en Profundidad de NIP: Enlaces URI y Referencias en el Texto de Eventos&lt;/h2>
&lt;p>Un identificador de Nostr necesita un significado transportable antes de que otra aplicación pueda abrirlo. &lt;a href="https://nostrcompass.org/es/topics/nip-21/">NIP-21&lt;/a> coloca un identificador &lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19&lt;/a> después del esquema URI &lt;code>nostr:&lt;/code>, dando a navegadores, sistemas operativos y aplicaciones una forma única y despachable. &lt;a href="https://nostrcompass.org/es/topics/nip-27/">NIP-27&lt;/a> define qué significa ese mismo URI dentro del &lt;code>content&lt;/code> legible de un evento. NIP-21 cruza una frontera de aplicaciones; NIP-27 mantiene una referencia a un perfil o evento dentro de la prosa firmada. Ninguno crea un kind de evento ni cambia los mensajes de los relays; las &lt;a href="https://github.com/nostr-protocol/nips/tree/master">dos especificaciones&lt;/a> definen únicamente el comportamiento de enlazado y renderizado.&lt;/p>
&lt;h3 id="despacho-de-uri-y-semántica-de-nip-19">Despacho de URI y semántica de NIP-19&lt;/h3>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/blob/master/21.md">gramática de NIP-21&lt;/a> es &lt;code>nostr:&lt;/code> seguido de una entidad bech32 de NIP-19. &lt;code>nsec&lt;/code> está excluido porque codifica una clave privada. No hay componente de autoridad, ruta o consulta, así que un enlace conforme es &lt;code>nostr:npub1...&lt;/code>, no &lt;code>nostr://npub1...&lt;/code>. Una plataforma o cliente puede registrarse como el manejador; la especificación no elige la aplicación instalada ni define una alternativa web.&lt;/p>
&lt;p>El prefijo indica al cliente qué decodificar. &lt;code>npub&lt;/code> lleva una clave pública y &lt;code>note&lt;/code> un id de evento. &lt;code>nprofile&lt;/code> añade pistas opcionales de relays a un perfil; &lt;code>nevent&lt;/code> añade relays, autor y kind a un id de evento; y &lt;code>naddr&lt;/code> lleva el autor, el kind y el identificador &lt;code>d&lt;/code> de un evento direccionable, con relays opcionales. Estas formas usan los &lt;a href="https://github.com/nostr-protocol/nips/blob/master/19.md">campos type-length-value de NIP-19&lt;/a>. Las pistas estrechan el descubrimiento pero no prueban ni la posesión por parte del relay ni el control del autor. Cada evento obtenido sigue necesitando un recálculo del id y una verificación de firma.&lt;/p>
&lt;p>La forma de perfil en la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/21.md">especificación de NIP-21&lt;/a> es:&lt;/p>
&lt;pre tabindex="0">&lt;code>nostr:npub1sn0wdenkukak0d9dfczzeacvhkrgz92ak56egt7vdgzn8pv2wfqqhrjdv9
&lt;/code>&lt;/pre>&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/21.md">NIP-21&lt;/a> también define puentes HTML: una página que sirve un evento de Nostr puede poner su &lt;code>naddr&lt;/code> en &lt;code>&amp;lt;link rel=&amp;quot;alternate&amp;quot;&amp;gt;&lt;/code>, y un perfil puede poner un &lt;code>nprofile&lt;/code> en &lt;code>&amp;lt;link rel=&amp;quot;me&amp;quot;&amp;gt;&lt;/code> o &lt;code>&amp;lt;link rel=&amp;quot;author&amp;quot;&amp;gt;&lt;/code>.&lt;/p>
&lt;h3 id="renderizado-de-nip-27-y-etiquetas-opcionales">Renderizado de NIP-27 y etiquetas opcionales&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/27.md">NIP-27&lt;/a> se aplica al contenido legible de eventos, como notas de kind &lt;code>1&lt;/code> y artículos de kind &lt;code>30023&lt;/code>. Un compositor puede mostrar &lt;code>@name&lt;/code>, pero publica &lt;code>nostr:nprofile1...&lt;/code> en la cadena firmada. Un lector escanea la URI, decodifica su entidad NIP-19, obtiene el objetivo y puede renderizar un nombre, tarjeta, vista previa o enlace local. Si la decodificación falla, la URI permanece como texto ordinario. El contenido en bruto no debe reescribirse: cambiarlo cambia la serialización de NIP-01, el id y la firma.&lt;/p>
&lt;p>Las referencias de contenido y las etiquetas tienen trabajos relacionados pero distintos. &lt;a href="https://github.com/nostr-protocol/nips/blob/master/27.md">NIP-27&lt;/a> describe las etiquetas opcionales &lt;code>p&lt;/code> y &lt;code>e&lt;/code> y la etiqueta &lt;code>q&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-18/">NIP-18&lt;/a>. Un cliente puede mostrar una referencia sin crear una notificación ni una relación de hilo; el descubrimiento de citas debería escribir tanto la URI como una etiqueta &lt;code>q&lt;/code>. La &lt;a href="https://github.com/zapcooking/frontend/pull/665">implementación del 4 de septiembre de Zap Cooking&lt;/a> sigue esa división conservando la URI mientras añade pistas de relays y una etiqueta &lt;code>p&lt;/code> correspondiente. Añadir &lt;code>p&lt;/code> o &lt;code>q&lt;/code> no hace privada la URI, y NIP-27 no tiene un modo de mención oculta.&lt;/p>
&lt;p>El siguiente &lt;a href="https://njump.me/note1e0my422kylehy2g4ax4d98vsthdvnvy702yq3f6eguedjr0256as200k6a">evento de kind &lt;code>1&lt;/code>&lt;/a> se recuperó de &lt;code>wss://nos.lol&lt;/code> y se verificó antes de su inclusión como referencia concreta de NIP-27. Su &lt;code>content&lt;/code> contiene un &lt;code>naddr&lt;/code> para un evento direccionable independiente de la versión. La decodificación produce kind &lt;code>30402&lt;/code>, autor &lt;code>91036d...310a&lt;/code>, el identificador &lt;code>d&lt;/code> del libro de trabajo y una pista &lt;code>wss://nos.lol/&lt;/code>. Las etiquetas &lt;code>q&lt;/code>, &lt;code>p&lt;/code>, &lt;code>t&lt;/code>, &lt;code>zap&lt;/code> y &lt;code>client&lt;/code> son elecciones de la aplicación, no requisitos de NIP-27.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;cbf64aa95627f3722915e9aad29d905ddac9b09e7a8808a7594732d90deaa6bb&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;ed1b999da9a434039d22338c276ffd6e338d609b81e6b1c305a120a982df787d&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1788953511&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;91036dec18ee563c07edaed5eff4b5d631755c76f006734b3787292a5e3c310a&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;wss://multiplexer.huszonegy.world/&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;archetype&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;q&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;30402:91036dec18ee563c07edaed5eff4b5d631755c76f006734b3787292a5e3c310a:Archetype-Workbook-Companion-Meet-your-King-Warrioir-Magician-Lover-today-oejbwe&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;wss://nos.lol/&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;zap&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;91036dec18ee563c07edaed5eff4b5d631755c76f006734b3787292a5e3c310a&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;wss://multiplexer.huszonegy.world/&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;0.9&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;zap&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;ed1b999da9a434039d22338c276ffd6e338d609b81e6b1c305a120a982df787d&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;wss://relay.nostr.band/&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;0.1&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;client&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;Amethyst&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;You can check, read and use this Workbook already! You can also support and get it for few sats and support us in this project.\n\nI hope it&amp;#39;ll help you in your Archetype Journey :)\n\n#archetype\n\nnostr:naddr1qpgyzunrdpjhg7tsv5k4wmmjdd3x7mmt94pk7mtsv9hxjmmw94xk2et594uk7atj949kjmn894tkzunjd9hkju3df4skw6trd9skut2vdamx2u3dw3hkgcte94hk26nzwajszrnhwden5te0dehhxtnvdakz7q3qjypkmmqcaetrcpld4m27la946cch2hrk7qr8xjehsu5j5h3uxy9qxpqqqpmvyqnrm7n&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;aa9592e7c773271b9e9f980c8a7e17fda2ffd5a4483a1789e5dd4c4a83018ac576c5202b21b33b08770dcabe023f93998a41f1a0be4bf00e36cdde611d07915e&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="confianza-comportamiento-ante-fallos-e-implementaciones-de-clientes">Confianza, comportamiento ante fallos e implementaciones de clientes&lt;/h3>
&lt;p>Un lector seguro encuentra un token &lt;code>nostr:&lt;/code> completo, valida bech32, decodifica NIP-19, rechaza &lt;code>nsec&lt;/code>, ignora los tipos TLV desconocidos y deja intacto el texto malformado o demasiado largo. &lt;code>npub&lt;/code> y &lt;code>nprofile&lt;/code> conducen a consultas de perfiles; &lt;code>note&lt;/code> y &lt;code>nevent&lt;/code> identifican eventos inmutables; &lt;code>naddr&lt;/code> selecciona el evento direccionable válido más reciente para su kind, autor y etiqueta &lt;code>d&lt;/code>. Las pistas de relays reducen la búsqueda pero no amplían la confianza. Según las &lt;a href="https://github.com/nostr-protocol/nips/blob/master/01.md">reglas de eventos de NIP-01&lt;/a>, el cliente verifica el id de un &lt;code>nevent&lt;/code> obtenido y comprueba la firma de cada candidato &lt;code>naddr&lt;/code> antes de aplicar las reglas de reemplazo de eventos direccionables.&lt;/p>
&lt;p>Las vistas previas en línea son una decisión del cliente con costes de privacidad y de recursos. Obtener cada referencia revela los intereses del lector y puede crear una tormenta de consultas, por lo que los clientes pueden usar una caché, aplazar las obtenciones hasta que sean visibles, limitar la concurrencia y exigir un clic para medios desconocidos. Según &lt;a href="https://github.com/nostr-protocol/nips/blob/master/27.md">NIP-27&lt;/a>, una vista previa debe permanecer diferenciada del texto firmado del autor actual. El fallo debe ser visible como texto sin resolver o como una tarjeta no disponible, no tratado silenciosamente como contenido verificado.&lt;/p>
&lt;p>La confianza también cambia según el tipo de identificador. Un &lt;code>nevent&lt;/code> nombra bytes inmutables, por lo que un cliente puede rechazar un evento obtenido cuyo id serializado difiera del id solicitado. Un &lt;code>naddr&lt;/code> nombra una coordenada reemplazable, por lo que un cliente debe verificar cada candidato y aplicar las reglas de eventos direccionables antes de decidir qué versión mostrar. Una pista de relay es útil para la primera consulta en cualquiera de los casos, pero no es un respaldo del relay ni del contenido devuelto. La &lt;a href="https://github.com/nostr-protocol/nips/blob/master/19.md">definición TLV de NIP-19&lt;/a> proporciona los datos necesarios para hacer esas comprobaciones explícitas.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/21.md">NIP-21&lt;/a> define un enlace portátil que puede abrirse desde fuera de Nostr, mientras que NIP-27 hace que ese mismo enlace sea duradero dentro del texto firmado. Un cliente que implementa solo NIP-21 puede abrir un URI pegado pero no renderizar referencias incrustadas. El soporte completo de NIP-27 añade escaneo, decodificación segura, política de obtención, renderizado local y una elección explícita sobre las etiquetas de notificación y cita. El URI compartido mantiene esas capas interoperables sin obligar a los clientes a presentarlas de forma idéntica. &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> modela las referencias en línea como menciones tipadas. Su &lt;a href="https://github.com/damus-io/damus/blob/2ef636aa07f6bd4f24b72fa998b7397dced56d2a/damus/Core/Nostr/Mentions.swift">código de menciones&lt;/a> asigna &lt;code>npub&lt;/code> y &lt;code>nprofile&lt;/code> a referencias de perfil, &lt;code>note&lt;/code> y &lt;code>nevent&lt;/code> a referencias de eventos, y &lt;code>naddr&lt;/code> a referencias de direcciones; &lt;a href="https://github.com/damus-io/damus/blob/2ef636aa07f6bd4f24b72fa998b7397dced56d2a/damus/Core/Nostr/NostrLink.swift">NostrLink&lt;/a> las dirige al destino apropiado. &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> &lt;a href="https://github.com/PrimalHQ/primal-android-app/blob/36939db97213e7f8eeefaa4adaf125d839fc662e/domain/nostr/src/commonMain/kotlin/net/primal/domain/nostr/utils/NostrUriUtils.kt">analiza el esquema y las formas pegadas&lt;/a>, valida bech32 y extrae las pistas de relays, y luego &lt;a href="https://github.com/PrimalHQ/primal-android-app/blob/36939db97213e7f8eeefaa4adaf125d839fc662e/app/src/main/kotlin/net/primal/android/notes/feed/model/NoteNostrUriUi.kt">asigna las referencias a modelos de contenido de notas&lt;/a>. &lt;a href="https://github.com/zapcooking/frontend/pull/665">Zap Cooking&lt;/a> renderiza las mismas referencias en artículos, recetas, vistas previas del editor y vistas de impresión.&lt;/p>
&lt;hr>
&lt;p>Envía un DM de NIP-17 para compartir un proyecto o una noticia a través del &lt;a href="https://github.com/andotherstuff/nostr-compass">proyecto Nostr Compass&lt;/a>.&lt;/p></content:encoded></item><item><title>Nostr Compass #38</title><link>https://nostrcompass.org/es/newsletters/2026-09-02-newsletter/</link><pubDate>Wed, 02 Sep 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-09-02-newsletter/</guid><description>&lt;p>Bienvenidos de nuevo a &lt;a href="https://nostrcompass.org">Nostr Compass&lt;/a>, su guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://njump.me/naddr1qq98vmmrvyknzt3s9ccqyg84e2v65erlexz84kmpkmkjqrvmzkgf8fdewfkyun3tnxlel5er3upsgqqqw4rsw0l3en">Voca&lt;/a> 1.0 lleva notas verificadas de Nostr y suscripciones de formato largo a un lector Android sin conexión que lee artículos en voz alta; &lt;a href="https://github.com/cameri/nostream">nostream&lt;/a> amplía el enrutamiento de trabajos del lado del relay y el funcionamiento autenticado; &lt;a href="https://github.com/relaystr/ndk">NDK for Dart&lt;/a> corrige negentropy y la duración de solicitudes a múltiples relays; &lt;a href="https://github.com/divinevideo/divine-mobile">Divine Mobile&lt;/a> hace deterministas la eliminación y la firma de mensajes envueltos; &lt;a href="https://github.com/Conduit-BTC/conduit-relay">Conduit Relay&lt;/a> protege de forma predeterminada las bandejas de entrada de gift wrap; &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> incorpora destacados portátiles; y &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> verifica las órdenes firmadas antes de su filtro de spam. &lt;a href="https://github.com/lnbits/napstr">Napstr&lt;/a> publica catálogos de audio y señales de actividad de seeders en Nostr mientras transfiere archivos mediante Tor. Los lanzamientos incluyen &lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> y &lt;a href="https://git.nostrdev.com/stuff/pakstr">pakstr&lt;/a>; el trabajo de protocolo incorpora una indicación de paginación de &lt;a href="https://nostrcompass.org/es/topics/nip-67/">NIP-67&lt;/a> y un esquema de tags para destacados de &lt;a href="https://nostrcompass.org/es/topics/nip-84/">NIP-84&lt;/a> en el &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>, mientras &lt;a href="https://github.com/nostr-wallet-connect/nwc">Nostr Wallet Connect&lt;/a> añade totales de transacciones; y el análisis detallado de NIPs recorre los reposts y las reacciones a través de sus estructuras de event y sus implementaciones actuales.&lt;/p></description><content:encoded>&lt;p>Bienvenidos de nuevo a &lt;a href="https://nostrcompass.org">Nostr Compass&lt;/a>, su guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://njump.me/naddr1qq98vmmrvyknzt3s9ccqyg84e2v65erlexz84kmpkmkjqrvmzkgf8fdewfkyun3tnxlel5er3upsgqqqw4rsw0l3en">Voca&lt;/a> 1.0 lleva notas verificadas de Nostr y suscripciones de formato largo a un lector Android sin conexión que lee artículos en voz alta; &lt;a href="https://github.com/cameri/nostream">nostream&lt;/a> amplía el enrutamiento de trabajos del lado del relay y el funcionamiento autenticado; &lt;a href="https://github.com/relaystr/ndk">NDK for Dart&lt;/a> corrige negentropy y la duración de solicitudes a múltiples relays; &lt;a href="https://github.com/divinevideo/divine-mobile">Divine Mobile&lt;/a> hace deterministas la eliminación y la firma de mensajes envueltos; &lt;a href="https://github.com/Conduit-BTC/conduit-relay">Conduit Relay&lt;/a> protege de forma predeterminada las bandejas de entrada de gift wrap; &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> incorpora destacados portátiles; y &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> verifica las órdenes firmadas antes de su filtro de spam. &lt;a href="https://github.com/lnbits/napstr">Napstr&lt;/a> publica catálogos de audio y señales de actividad de seeders en Nostr mientras transfiere archivos mediante Tor. Los lanzamientos incluyen &lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> y &lt;a href="https://git.nostrdev.com/stuff/pakstr">pakstr&lt;/a>; el trabajo de protocolo incorpora una indicación de paginación de &lt;a href="https://nostrcompass.org/es/topics/nip-67/">NIP-67&lt;/a> y un esquema de tags para destacados de &lt;a href="https://nostrcompass.org/es/topics/nip-84/">NIP-84&lt;/a> en el &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>, mientras &lt;a href="https://github.com/nostr-wallet-connect/nwc">Nostr Wallet Connect&lt;/a> añade totales de transacciones; y el análisis detallado de NIPs recorre los reposts y las reacciones a través de sus estructuras de event y sus implementaciones actuales.&lt;/p>
&lt;h2 id="historias-destacadas">Historias destacadas&lt;/h2>
&lt;h3 id="voca-10-lee-en-voz-alta-notas-verificadas-de-nostr-y-suscripciones-en-android">Voca 1.0 lee en voz alta notas verificadas de Nostr y suscripciones en Android&lt;/h3>
&lt;p>&lt;a href="https://njump.me/naddr1qq98vmmrvyknzt3s9ccqyg84e2v65erlexz84kmpkmkjqrvmzkgf8fdewfkyun3tnxlel5er3upsgqqqw4rsw0l3en">Voca&lt;/a> es un lector Android sin conexión que lee en voz alta artículos, PDF, archivos Markdown y notas de Nostr con la propia voz de texto a voz del teléfono, mientras la frase pronunciada permanece resaltada en la página. Su &lt;a href="https://njump.me/naddr1qq98vmmrvyknzt3s9ccqyg84e2v65erlexz84kmpkmkjqrvmzkgf8fdewfkyun3tnxlel5er3upsgqqqw4rsw0l3en">lanzamiento 1.0&lt;/a>, &lt;a href="https://njump.me/naddr1qq98vmmrvyknzt3s9ccqyg84e2v65erlexz84kmpkmkjqrvmzkgf8fdewfkyun3tnxlel5er3upsgqqqw4rsw0l3en">publicado el 2026-08-27&lt;/a> con su propia &lt;a href="https://njump.me/npub17h9fn2ny0lycg7kmvxmw6gqdnv2epya9h9excnjw9wvml87nyw8sqy3hpu">clave de proyecto&lt;/a>, convierte a Nostr en una fuente de primera clase: pegue la dirección de una nota, un identificador de event, un npub, un perfil o un enlace web común que contenga una entidad Nostr, y la aplicación decodifica la referencia, obtiene de los relays el event firmado y lee el texto del autor en lugar de la página web construida a su alrededor.&lt;/p>
&lt;p>Dos comportamientos verificados definen la integración con Nostr, ambos descritos en el &lt;a href="https://njump.me/naddr1qq98vmmrvyknzt3s9ccqyg84e2v65erlexz84kmpkmkjqrvmzkgf8fdewfkyun3tnxlel5er3upsgqqqw4rsw0l3en">anuncio firmado de Voca 1.0&lt;/a>. Primero, cada event obtenido se comprueba frente a su id recalculado y su firma Schnorr BIP-340 antes de guardarlo, usando los relays de arranque, la lista de relays &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> del autor (un event kind &lt;code>10002&lt;/code> firmado y reemplazable donde un autor enumera los relays en los que lee y escribe) y las indicaciones incluidas en la propia referencia, de modo que un relay puede negarse a responder, pero no poner palabras en boca de un autor. Segundo, añadir el npub de un autor coloca sus artículos de formato largo &lt;a href="https://nostrcompass.org/es/topics/nip-23/">NIP-23&lt;/a> (publicaciones direccionables kind &lt;code>30023&lt;/code> con títulos, resúmenes e imágenes) en una única bandeja de entrada del dispositivo junto a los feeds RSS y Atom. La actualización 1.1.0, &lt;a href="https://gitworkshop.dev/npub17h9fn2ny0lycg7kmvxmw6gqdnv2epya9h9excnjw9wvml87nyw8sqy3hpu/voca">anunciada el 2026-08-28&lt;/a> y publicada en &lt;a href="https://zapstore.dev">Zapstore&lt;/a> el 2026-08-29, sincroniza el desplazamiento frase por frase, suaviza los documentos largos y recupera el widget de la pantalla de inicio tras el desplazamiento manual, el cambio de tamaño, los reinicios del proceso y las actualizaciones.&lt;/p>
&lt;h3 id="nostream-amplía-el-enrutamiento-dvm-del-lado-del-relay-y-el-funcionamiento-autenticado">nostream amplía el enrutamiento DVM del lado del relay y el funcionamiento autenticado&lt;/h3>
&lt;p>Tras el &lt;a href="https://nostrcompass.org/en/newsletters/2026-08-19-newsletter/#nostream-adds-a-relay-monitor-and-mints-invite-codes">trabajo de ingesta de tareas del 19 de agosto&lt;/a>, &lt;a href="https://github.com/cameri/nostream">nostream&lt;/a>, una implementación de relay en TypeScript, &lt;a href="https://github.com/cameri/nostream/pull/737">almacena y sirve events de manejadores de aplicaciones NIP-89&lt;/a>. &lt;a href="https://nostrcompass.org/es/topics/nip-89/">NIP-89&lt;/a> (descubrimiento de manejadores de aplicaciones) utiliza recomendaciones kind &lt;code>31989&lt;/code> e información de manejadores kind &lt;code>31990&lt;/code>, ambas ya dentro del intervalo parametrizado y reemplazable, para que un cliente pueda consultar esos kinds y recibir un reemplazo cuando coincida un tag &lt;code>d&lt;/code>. El relay no publica información de manejadores para sus propios workers.&lt;/p>
&lt;p>Los trabajos pendientes de &lt;a href="https://nostrcompass.org/es/topics/nip-90/">NIP-90&lt;/a> (data vending machine) ahora &lt;a href="https://github.com/cameri/nostream/pull/734">llegan a un proceso worker y regresan como events de resultado&lt;/a>. Si todo va bien, el relay firma un resultado kind 6000-6999 con su propia clave. Un tiempo de espera agotado o un fallo del worker marca el trabajo como fallido en lugar de dejarlo como enviado.&lt;/p>
&lt;p>Las sesiones autenticadas y las llamadas HTTP de administración se sitúan en límites distintos. &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> (autenticación de clientes ante relays) &lt;a href="https://github.com/cameri/nostream/pull/716">registra la pubkey autenticada por socket&lt;/a>, puede exigir AUTH antes de que los clientes publiquen events y anuncia ese requisito en el documento &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> (información del relay), con ambos controles desactivados de forma predeterminada. Por separado, &lt;a href="https://github.com/cameri/nostream/pull/730">las rutas API de administración pueden aceptar autorización HTTP firmada con NIP-98&lt;/a>. &lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98&lt;/a> (autenticación HTTP con events firmados) permanece desactivado hasta que un operador lo habilita e indica las pubkeys permitidas.&lt;/p>
&lt;h3 id="ndk-for-dart-corrige-negentropy-la-duración-de-solicitudes-a-múltiples-relays-y-la-verificación-de-firmas">NDK for Dart corrige negentropy, la duración de solicitudes a múltiples relays y la verificación de firmas&lt;/h3>
&lt;p>Una ejecución de &lt;a href="https://nostrcompass.org/es/topics/nip-77/">NIP-77&lt;/a> (conciliación de conjuntos mediante negentropy) en &lt;a href="https://github.com/relaystr/ndk">NDK&lt;/a>, un kit de desarrollo en Dart para Nostr, devolvía conjuntos erróneos de elementos disponibles y necesarios sin generar errores porque el códec no hablaba la versión v1 del protocolo &lt;a href="https://nostrcompass.org/es/topics/negentropy/">negentropy&lt;/a>. La &lt;a href="https://github.com/relaystr/ndk/pull/722">corrección de la codificación v1&lt;/a> devuelve ahora los ids que posee el relay y los ids que todavía necesita.&lt;/p>
&lt;p>Los filtros idénticos enviados a distintos relays &lt;a href="https://github.com/relaystr/ndk/pull/705">se estaban fusionando en una única solicitud&lt;/a>. Las solicitudes con el mismo filtro ahora permanecen separadas cuando apuntan a distintos relays o tienen distinta duración, por lo que una consulta breve no puede mezclar events de otro relay en el resultado ni dejar bloqueada una suscripción activa.&lt;/p>
&lt;p>El mismo kit &lt;a href="https://github.com/relaystr/ndk/pull/726">verifica una firma una sola vez y conserva ese resultado&lt;/a>. Una entrega duplicada posterior ya no consume otra comprobación ni sobrescribe el event verificado almacenado.&lt;/p>
&lt;h3 id="divine-mobile-hace-deterministas-la-eliminación-y-la-firma-de-mensajes-directos-envueltos">Divine Mobile hace deterministas la eliminación y la firma de mensajes directos envueltos&lt;/h3>
&lt;p>Los events kind &lt;code>5&lt;/code> envueltos de &lt;a href="https://nostrcompass.org/es/topics/nip-09/">NIP-09&lt;/a> (solicitud de eliminación de event) dirigidos a un mensaje nunca se aplicaban en &lt;a href="https://github.com/divinevideo/divine-mobile">Divine Mobile&lt;/a>, un cliente móvil de vídeos cortos que publica mediante Nostr. El cliente &lt;a href="https://github.com/divinevideo/divine-mobile/pull/8174">ahora resuelve cada eliminación respecto al mensaje indicado&lt;/a>, en lugar de considerar ya procesado todo lo que no sea una reacción. Una segunda &lt;a href="https://github.com/divinevideo/divine-mobile/pull/8164">solicitud de eliminar para todos mientras la primera aún estaba en curso&lt;/a> desaparecía sin errores y sin ningún kind &lt;code>5&lt;/code> en la red; ahora cada eliminación simultánea se publica.&lt;/p>
&lt;p>Tras el lanzamiento 1.0.22 ya cubierto, enviar dos veces en un segundo el mismo texto 1:1 de &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (mensajes directos privados con gift wrap) &lt;a href="https://github.com/divinevideo/divine-mobile/pull/8163">creaba un único id de rumor&lt;/a>, por lo que el segundo envío desaparecía; ahora cada envío lleva un token dentro del rumor de &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> (gift wrap) para que los ids sean distintos.&lt;/p>
&lt;p>Un llamante que ya había firmado un event kind &lt;code>4&lt;/code> o kind &lt;code>5&lt;/code> &lt;a href="https://github.com/divinevideo/divine-mobile/pull/8173">conservaba esa firma&lt;/a>, en lugar de que se añadiera después un tag de cliente, lo que cambiaba el id y hacía que los relays rechazaran el event por no ser válido.&lt;/p>
&lt;h3 id="conduit-relay-refuerza-su-bandeja-de-entrada-protegida-con-nip-42">Conduit Relay refuerza su bandeja de entrada protegida con NIP-42&lt;/h3>
&lt;p>Los gift wraps kind &lt;code>1059&lt;/code> se almacenan para un destinatario. &lt;a href="https://github.com/Conduit-BTC/conduit-relay">Conduit Relay&lt;/a>, un relay en Go que conserva esos wraps en una bandeja protegida para el destinatario, &lt;a href="https://github.com/Conduit-BTC/conduit-relay/pull/8">adopta de forma predeterminada el modo de aplicación obligatoria&lt;/a>: una consulta kind &lt;code>1059&lt;/code> debe presentar autenticación &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> como ese destinatario o el relay rechaza la solicitud. Los filtros de varios kinds, comodines, recuentos y &lt;a href="https://nostrcompass.org/es/topics/negentropy/">negentropy&lt;/a> sobre esos wraps están &lt;code>restricted&lt;/code>, por lo que otro AUTH no puede convertirlos en un volcado de la bandeja de entrada ajena.&lt;/p>
&lt;p>La misma &lt;a href="https://github.com/Conduit-BTC/conduit-relay/pull/8">incorporación de la bandeja de entrada protegida&lt;/a> exige un id de event canónico en el event AUTH transmitido y acepta un event NIP-42 válido en los demás aspectos, tenga o no vacío el &lt;code>content&lt;/code>. El modo de solo desafío sigue ofreciendo AUTH sin bloquear la lectura; el modo desactivado permite el acceso libre. El valor predeterminado de la biblioteca es el modo de aplicación obligatoria.&lt;/p>
&lt;h3 id="amethyst-incorpora-destacados-nip-84-y-corrige-dos-rutas-de-fallo-frente-a-relays">Amethyst incorpora destacados NIP-84 y corrige dos rutas de fallo frente a relays&lt;/h3>
&lt;p>Tras el &lt;a href="https://nostrcompass.org/en/newsletters/2026-08-26-newsletter/#amethyst-moves-blossom-authorization-off-image-loading-threads">trabajo de autorización de Blossom de la semana pasada&lt;/a>, &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, un cliente Android de Nostr, publica &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.14.0">v1.14.0&lt;/a> con &lt;a href="https://nostrcompass.org/es/topics/nip-84/">NIP-84&lt;/a> (destacados portátiles). Un pasaje seleccionado se convierte en un event kind &lt;code>9802&lt;/code> desde el editor, un feed de destacados o al compartirlo con la aplicación.&lt;/p>
&lt;p>El lanzamiento añade controles de eliminación y archivado de canales &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3812">PR #3812&lt;/a>) y mide el comportamiento de los relays a través del tráfico que el cliente ya genera; después amplía esas pruebas &lt;a href="https://github.com/nostr-protocol/nips/blob/master/66.md">NIP-66&lt;/a> con comprobaciones de streaming, lectura, escritura y URL (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3836">PR #3836&lt;/a>, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3857">PR #3857&lt;/a>). Amethyst también elimina una vulnerabilidad de colisión de hash en SharedKeyCache y compara códigos de autenticación de mensajes en tiempo constante (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3833">PR #3833&lt;/a>), corrige una condición de carrera que podía perder la entrega de AUTH durante la conexión (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3838">PR #3838&lt;/a>), divide el bloqueo del estado de las suscripciones para acabar con una cola de ANR (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3851">PR #3851&lt;/a>) y compara todos los filtros de suscripción en lugar de solo el primero (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3856">PR #3856&lt;/a>).&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-08-19-newsletter/#amethyst-rebuilds-its-relay-authentication-decision-flow">El boletín #36 ya cubrió estos cambios de autenticación de relays, copias de seguridad y chats públicos&lt;/a>; v1.14.0 los publica ahora juntos. Los bloqueos suaves de Concord cierran brechas de autoridad detectadas por una auditoría (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3885">PR #3885&lt;/a>). La autenticación de relays tiene un flujo de permisos rediseñado (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3899">PR #3899&lt;/a>), espera la resolución del desafío en lugar de agotar el tiempo (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3905">PR #3905&lt;/a>), configura las cuentas nuevas para autenticarse de forma predeterminada (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3931">PR #3931&lt;/a>), respeta esa preferencia en relays ajenos al conjunto habitual de la cuenta (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3937">PR #3937&lt;/a>) y conserva las concesiones de sesión entre reconexiones (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3955">PR #3955&lt;/a>). Un flujo guiado de primer inicio y de Ajustes facilita encontrar las copias de seguridad de las claves (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3909">PR #3909&lt;/a>), el relleno histórico de pruebas Cashu y la paginación del historial evitan que se trunquen los saldos de la cartera (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3941">PR #3941&lt;/a>), y ahora se pueden silenciar los chats públicos (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3939">PR #3939&lt;/a>).&lt;/p>
&lt;p>Después de ese tag, las &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3983">listas de confianza&lt;/a> de los kinds &lt;code>30392&lt;/code> a &lt;code>30395&lt;/code> se indexan mediante &lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a> (búsqueda de texto completo) solo por título, por lo que una lista mencionada en el texto se puede encontrar sin indexar los ids hexadecimales de sus miembros. Los rechazos de carteras recibidos mediante &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect) &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3987">ahora muestran su error en lugar de parecer un toque que no hizo nada&lt;/a>, incluidos &lt;code>QUOTA_EXCEEDED&lt;/code> y &lt;code>RESTRICTED&lt;/code>, además de un tiempo de espera cuando la cartera nunca responde.&lt;/p>
&lt;h3 id="mostro-valida-las-órdenes-firmadas-antes-del-trabajo-costoso-y-conserva-los-events-de-auditoría-de-órdenes">Mostro valida las órdenes firmadas antes del trabajo costoso y conserva los events de auditoría de órdenes&lt;/h3>
&lt;p>Tras la &lt;a href="https://nostrcompass.org/en/newsletters/2026-08-12-newsletter/#mostro-0181-starts-a-cashu-escrow-path-and-hardens-the-daemon">base de depósito en garantía Cashu de v0.18.1&lt;/a>, &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>, un daemon de intercambio entre pares que coordina órdenes mediante Nostr, etiquetó &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.18.5">v0.18.5&lt;/a>, que usa de forma predeterminada &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> (cifrado de payload) para el transporte y mantiene gift wrap como opción explícita.&lt;/p>
&lt;p>El lanzamiento vincula los tiempos de espera del estado de espera al momento de toma registrado para que no se penalice la fianza de un creador según el reloj equivocado (&lt;a href="https://github.com/MostroP2P/mostro/pull/879">PR #879&lt;/a>), envía como máximo una vez cada pago al comprador de una orden liquidada (&lt;a href="https://github.com/MostroP2P/mostro/pull/881">PR #881&lt;/a>) y procesa esos pagos mediante esperas acotadas y no bloqueantes de &lt;code>send_payment&lt;/code> (&lt;a href="https://github.com/MostroP2P/mostro/pull/883">PR #883&lt;/a>). Un intento de cambio para pagar al ganador de la penalización por tiempo agotado (&lt;a href="https://github.com/MostroP2P/mostro/pull/875">PR #875&lt;/a>) se revirtió antes de publicar el mismo tag (&lt;a href="https://github.com/MostroP2P/mostro/pull/885">PR #885&lt;/a>). Mostro también deja de volver a publicar cada hora y al iniciarse un libro de órdenes pendientes sin cambios (&lt;a href="https://github.com/MostroP2P/mostro/pull/888">PR #888&lt;/a>), y sus events de disputas kind &lt;code>38386&lt;/code> ahora llevan un tag &lt;code>created_at&lt;/code> para su ordenación posterior (&lt;a href="https://github.com/MostroP2P/mostro/pull/878">PR #878&lt;/a>).&lt;/p>
&lt;p>Después de ese tag, una &lt;a href="https://github.com/MostroP2P/mostro/pull/892">comprobación de firma se ejecuta ahora antes del filtro de spam&lt;/a>. Un id de event no compromete &lt;code>sig&lt;/code>, por lo que una copia del kind &lt;code>14&lt;/code> de una víctima con una firma dañada podía ocupar el espacio de repetición y descartar silenciosamente el mensaje válido; el daemon verifica primero y descarta un wrap no válido en lugar de advertir y continuar.&lt;/p>
&lt;p>Los events de auditoría de comisiones kind &lt;code>8383&lt;/code> llevaban una marca de tiempo de vencimiento de 15 días según &lt;a href="https://nostrcompass.org/es/topics/nip-40/">NIP-40&lt;/a>. Ahora &lt;a href="https://github.com/MostroP2P/mostro/pull/924">mantienen un vencimiento de un año&lt;/a>, acorde con su función de registro público de pagos. En un nodo con Cashu habilitado, tomar una orden &lt;a href="https://github.com/MostroP2P/mostro/pull/830">pide al vendedor mediante Nostr que bloquee un depósito en garantía 2 de 3&lt;/a>, publica el event de orden en espera y omite la creación de una factura Lightning retenida. Esto completa la ruta de solicitud; no resuelve por sí solo todos los casos de cierre de depósitos ni de abuso del mercado.&lt;/p>
&lt;h3 id="napstr-publica-catálogos-de-audio-en-nostr-y-transfiere-archivos-mediante-tor">Napstr publica catálogos de audio en Nostr y transfiere archivos mediante Tor&lt;/h3>
&lt;p>&lt;a href="https://github.com/lnbits/napstr">Napstr&lt;/a> es un cliente de escritorio para compartir audio que publica en Nostr catálogos consultables y seeders activos, y después transfiere los archivos mediante un proceso Tor incluido, sin alternativa de IP directa. &lt;a href="https://github.com/lnbits/napstr/releases/tag/v0.2.0">La versión 0.2.0&lt;/a> mantiene públicos los perfiles y los metadatos del catálogo, y mantiene fuera de los relays las solicitudes, las credenciales de transferencia, el contenido de los archivos y las direcciones IP de los pares.&lt;/p>
&lt;p>El descubrimiento utiliza dos kinds de events direccionables en el &lt;a href="https://github.com/lnbits/napstr">repositorio de Napstr&lt;/a>. Las entradas de catálogo kind &lt;code>30421&lt;/code> identifican un archivo mediante su resumen SHA-256, nombre base público, tamaño y formato de audio, y un autor retira un archivo sustituyendo esa coordenada por un marcador de eliminación. Las señales de actividad de disponibilidad kind &lt;code>30422&lt;/code> caducan tras diez minutos y enumeran los ids de archivos que el autor está dispuesto a distribuir, por lo que una fila del catálogo solo está activa mientras una señal no vencida siga conteniendo ese resumen.&lt;/p>
&lt;p>La conversación pública utiliza &lt;a href="https://nostrcompass.org/es/topics/nip-c7/">NIP-C7&lt;/a> (mensajes de chat kind 9) en lugar de un grupo propiedad de un relay. El &lt;a href="https://github.com/lnbits/napstr">repositorio de Napstr&lt;/a> define una sala pública compartida y una conversación por pista vinculada al resumen del archivo. Esos mensajes son firmados y públicos. No contienen direcciones onion, credenciales de transferencia ni bytes de archivos.&lt;/p>
&lt;p>Una descarga empieza como una negociación mediante &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (mensajes directos privados con gift wrap). El &lt;a href="https://github.com/lnbits/napstr">repositorio de Napstr&lt;/a> envuelve una solicitud, una oferta o un rechazo dentro de un rumor kind &lt;code>14&lt;/code>, por lo que los relays no ven el nombre de host onion v3 temporal ni la capacidad de un solo uso que devuelve una oferta aceptada. Tor, incluido con la aplicación, transfiere después los bytes mediante esa dirección onion, verifica el resumen SHA-256 completo y vuelve a validar el audio antes de permitir reproducir el archivo.&lt;/p>
&lt;p>La &lt;a href="https://github.com/lnbits/napstr/compare/v0.1.7...v0.2.0">comparación entre v0.1.7 y v0.2.0&lt;/a> añade colecciones de audiolibros y Napstrfy, un complemento Android opcional. Los manifiestos kind &lt;code>30423&lt;/code> enumeran capítulos ordenados que siguen siendo archivos de catálogo comunes, por lo que un cliente que ignore la colección aún puede obtener cada capítulo. Napstr crea para ello una carpeta local Audiobooks de forma no destructiva. Napstrfy se vincula a una aplicación de escritorio en ejecución mediante un código QR de un solo uso y después busca y solicita descargas mediante los servicios Nostr y Tor ya existentes en esa aplicación, sin recibir su clave secreta.&lt;/p>
&lt;p>La misma &lt;a href="https://github.com/lnbits/napstr/compare/v0.1.7...v0.2.0">comparación&lt;/a> agota el tiempo de una vinculación con el complemento que no se completa. Un seeder copia y calcula el hash del archivo compartido antes de servir bytes, escribe los datos entrantes en un archivo temporal privado, limita los destinos de audiolibros a un subdirectorio real de la carpeta Napstr e interrumpe la operación si ese destino cambia durante la transferencia.&lt;/p>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;h3 id="mdk-v0917-los-keypackages-más-recientes-actividad-de-miembros-y-envíos-duraderos">MDK v0.9.17: los KeyPackages más recientes, actividad de miembros y envíos duraderos&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-08-26-newsletter/#mdk-v0914-and-v0915-keypackage-selection-epoch-gap-recovery-and-split-relay-roles">El boletín #37 cubrió MDK 0.9.14 y 0.9.15&lt;/a>, incluido el cambio en el &lt;a href="https://github.com/marmot-protocol/mdk">repositorio de MDK&lt;/a> desde la selección del KeyPackage más antiguo hacia el paquete válido más reciente del perfil actual, las barreras de recuperación de desfases de epoch, la limpieza de cuentas y la separación entre relays de descubrimiento y operativos. Esas correcciones siguen siendo la base de los dos lanzamientos posteriores, por lo que un paquete obsoleto ya no bloquea a un miembro que ya haya publicado uno utilizable.&lt;/p>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk/pull/1551">Los events de miembros y administradores ahora hacen avanzar la lista de chats&lt;/a> igual que un mensaje nuevo: el texto de vista previa, el orden, los recuentos de no leídos y los marcadores de lectura se actualizan cuando las personas se unen, se marchan o cambian de rol, y el actor local del sistema no se trata como un perfil de Nostr. Las reconexiones y los reinicios &lt;a href="https://github.com/marmot-protocol/mdk/pull/1516">reutilizan una identidad de envío para un texto saliente duradero que se vuelve a intentar&lt;/a>, por lo que el mismo mensaje de grupo no se publica dos veces.&lt;/p>
&lt;p>Los dos lanzamientos posteriores se concentran en el coste de mantener saludables los grupos grandes. &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.9.16">La versión 0.9.16&lt;/a> &lt;a href="https://github.com/marmot-protocol/mdk/pull/1559">mide la divergencia de epoch desde el epoch actual en lugar de una marca máxima&lt;/a>, mantiene accesibles para su obtención los events entrantes rechazados (&lt;a href="https://github.com/marmot-protocol/mdk/pull/1565">PR #1565&lt;/a>), limita la reversión de repetición al estado canónico del grupo (&lt;a href="https://github.com/marmot-protocol/mdk/pull/1563">PR #1563&lt;/a>) e introduce &lt;a href="https://github.com/marmot-protocol/mdk/pull/1545">marmot-c&lt;/a>, una ABI de C generada mediante macros sobre los bindings de UniFFI que permite a los hosts integrar el motor directamente. &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.9.17">La versión 0.9.17&lt;/a> combina después los recorridos de admisión de pases en &lt;a href="https://github.com/marmot-protocol/mdk/pull/1617">un solo recorrido de miembros en lugar de uno por cada miembro&lt;/a>, &lt;a href="https://github.com/marmot-protocol/mdk/pull/1620">comprueba si el estado de un grupo está en disputa sin sembrar todo el grafo histórico&lt;/a>, &lt;a href="https://github.com/marmot-protocol/mdk/pull/1621">reduce el coste de sondeo inactivo del barrido diferido&lt;/a> y &lt;a href="https://github.com/marmot-protocol/mdk/pull/1622">aplica la lectura por lotes de componentes a los tres puntos de proyección que omitió la primera pasada&lt;/a>. Los artefactos correspondientes &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/marmotc-v0.9.17">marmot-c 0.9.17&lt;/a> y &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/wn-agent-v0.9.17">WN Agent 0.9.17&lt;/a> se compilan desde el mismo commit, por lo que quienes integran el motor reciben a la vez las rutas de mantenimiento más económicas.&lt;/p>
&lt;h3 id="pakstr-v0160-identificadores-kind-32267-al-publicar">pakstr v0.16.0: identificadores kind-32267 al publicar&lt;/h3>
&lt;p>Tras el &lt;a href="https://nostrcompass.org/en/newsletters/2026-08-26-newsletter/#pakstr-0130-through-0150-makes-zapstore-publication-explicit">proceso de publicación en Zapstore de las versiones 0.13.0 a 0.15.0 de la semana pasada&lt;/a>, &lt;a href="https://git.nostrdev.com/stuff/pakstr">pakstr&lt;/a>, una CLI que empaqueta una aplicación web en un APK Android firmado y lo publica con una clave Nostr, &lt;a href="https://git.nostrdev.com/stuff/pakstr/pulls/67">registra los IDs de events de aplicación kind &lt;code>32267&lt;/code>&lt;/a> que consulta, publica o reemplaza. &lt;a href="https://git.nostrdev.com/stuff/pakstr/releases/tag/v0.16.0">La versión 0.16.0&lt;/a> imprime tanto el ID anterior como el nuevo cuando unos metadatos de listado obsoletos provocan una nueva publicación, de modo que un editor puede confirmar qué event de listado está activo en el relay.&lt;/p>
&lt;p>El mismo &lt;a href="https://git.nostrdev.com/stuff/pakstr/pulls/67">registro de identificadores&lt;/a> anota el ID encontrado durante la consulta antes de cualquier reemplazo y después el ID del event que se publicó, por lo que una reutilización sin cambios aparece como un ID repetido. Ese es el cambio etiquetado en &lt;a href="https://git.nostrdev.com/stuff/pakstr/releases/tag/v0.16.0">0.16.0&lt;/a>; los comportamientos de Content-Digest, publicación antes de la carga y validación del editor ya se incluyeron en los tags anteriores.&lt;/p>
&lt;h2 id="cambios-sin-publicar">Cambios sin publicar&lt;/h2>
&lt;h3 id="zap-cooking-limita-los-relays-del-bunker-y-firma-los-endpoints-de-pago">Zap Cooking limita los relays del bunker y firma los endpoints de pago&lt;/h3>
&lt;p>Recargar una sesión de bunker en &lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a>, un sitio de recetas basado en events de formato largo de Nostr, publicaba antes la conversación cifrada de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (firma remota mediante relays) en todos los relays que ya utilizaba la página. &lt;a href="https://github.com/zapcooking/frontend/pull/633">Limitar el tráfico del firmante a los propios relays del bunker&lt;/a> aplica ahora esa restricción al restaurar una sesión y al vincular mediante nostrconnect, el flujo de conexión iniciado por el firmante, igual que en la ruta de inicio de sesión mediante URL del bunker. Rechaza instalar un conjunto vacío de relays desde un registro almacenado con formato incorrecto, por lo que los relays que solo alojan recetas ya no averiguan que la misma pubkey mantiene activa una sesión de bunker.&lt;/p>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend/pull/630">La autenticación HTTP firmada&lt;/a> protege ahora el chat de pago del asistente de cocina, la introducción del recetario y las actualizaciones de recetas restringidas mediante &lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98&lt;/a> (autenticación HTTP con un event de Nostr firmado). El servidor lee el cuerpo de la solicitud una vez, verifica la firma frente a ese payload exacto y toma la identidad del event de autenticación verificado en lugar de una clave pública incluida en el cuerpo. La vista previa del chat sigue funcionando sin cabecera, mientras que una firma presente pero no válida se rechaza y la introducción del recetario siempre requiere una firma. Actualizar una receta restringida ahora también exige que la clave verificada coincida con el autor almacenado; a cualquier otra persona se le indica que la receta no existe, por lo que el endpoint no confirma qué registros de pago existen.&lt;/p>
&lt;h3 id="nostrord-repara-los-mensajes-directos-envueltos-y-los-enlaces-compartidos-a-events">nostrord repara los mensajes directos envueltos y los enlaces compartidos a events&lt;/h3>
&lt;p>Tras la &lt;a href="https://nostrcompass.org/en/newsletters/2026-08-26-newsletter/#nostrord-v290-relay-scoped-group-state-and-media">v2.9.0 de la semana pasada&lt;/a>, &lt;a href="https://github.com/nostrord/nostrord">nostrord&lt;/a>, un cliente multiplataforma para comunidades alojadas en relays, incorporó correcciones de entrega para que un mensaje directo privado con gift wrap de &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> enviado desde un dispositivo llegue a la misma cuenta en otros dispositivos. &lt;a href="https://github.com/nostrord/nostrord/pull/295">Publicar de forma independiente la copia del remitente&lt;/a> evita que la primera aceptación del wrap del destinatario por un relay descarte la copia que obtienen otros dispositivos. El mismo cambio vuelve a enviar un wrap tras completarse la autenticación ante relays de &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> y marca el envío como correcto con la primera aceptación de un relay para que un host que falle no pueda bloquear a los demás. &lt;a href="https://github.com/nostrord/nostrord/pull/297">Reintentar los gift wraps aparcados&lt;/a> cuyo descifrado de &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> (gift wrap) falló se hace ahora con un temporizador, por lo que un bunker que permanece conectado ya no deja esos mensajes mi&amp;hellip; [truncated]&lt;/p>
&lt;p>Una respuesta de &lt;a href="https://nostrcompass.org/es/topics/nip-c7/">NIP-C7&lt;/a> (mensajes de chat kind &lt;code>9&lt;/code>) repite su elemento padre como un puntero &lt;code>nevent&lt;/code> inicial de &lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19&lt;/a> (entidades codificadas en bech32) junto al tag &lt;code>q&lt;/code>. &lt;a href="https://github.com/nostrord/nostrord/pull/292">Eliminar ese puntero padre inicial&lt;/a> cuando abre el cuerpo e identifica el padre de la respuesta permite que la fila se muestre como una sola cita de respuesta, mientras que un puntero situado a mitad del cuerpo o que constituye todo el cuerpo sigue mostrándose como una tarjeta de cita. &lt;a href="https://github.com/nostrord/nostrord/pull/293">Los enlaces a events citados ahora codifican &lt;code>nevent&lt;/code>&lt;/a> con el autor, el kind y el relay del que se leyó la cita, de modo que otro cliente pueda obtener un event de &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> (grupos administrados por relays) compartido en un mensaje directo, en lugar de un identificador de nota simple sin indicaciones de consulta.&lt;/p>
&lt;h2 id="actualizaciones-de-nips-y-trabajo-en-especificaciones-de-protocolo">Actualizaciones de NIPs y trabajo en especificaciones de protocolo&lt;/h2>
&lt;h3 id="posibilidades-de-implementación-de-nostr">Posibilidades de implementación de Nostr&lt;/h3>
&lt;p>Esta semana se incorporaron dos cambios de especificaciones al &lt;a href="https://github.com/nostr-protocol/nips">repositorio principal de NIPs&lt;/a>.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-67/">NIP-67&lt;/a> define indicaciones que un relay puede añadir a un mensaje &lt;code>EOSE&lt;/code> (fin de events almacenados) para que un cliente sepa si debe seguir paginando. La &lt;a href="https://github.com/nostr-protocol/nips/pull/2371">indicación &lt;code>&amp;quot;auth&amp;quot;&lt;/code> incorporada&lt;/a> añade un tercer valor junto a &lt;code>finish&lt;/code> y &lt;code>more&lt;/code>: un relay ahora puede indicar que podrían aparecer más events almacenados si el usuario se autentica, y debe enviar el desafío &lt;code>AUTH&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> (autenticación ante el relay) antes del &lt;code>EOSE&lt;/code> que contiene la indicación. La &lt;a href="https://github.com/nostr-protocol/nips/pull/2371">adición correspondiente a NIP-42&lt;/a> define el mismo flujo desde el lado del cliente, por lo que un cliente que recibe un &lt;code>EOSE&lt;/code> con &lt;code>auth&lt;/code> ya tiene el desafío que necesita responder.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-84/">NIP-84&lt;/a> (destacados portátiles, los events kind &lt;code>9802&lt;/code> para los que Amethyst incorporó compatibilidad más arriba) &lt;a href="https://github.com/nostr-protocol/nips/pull/2454">incorporó una actualización del esquema de tags&lt;/a>: los destacados ahora pueden señalar su fuente con tags &lt;code>i&lt;/code> estructurados según &lt;a href="https://nostrcompass.org/es/topics/nip-73/">NIP-73&lt;/a> (identificadores de contenido externo), además de tags &lt;code>a&lt;/code>/&lt;code>e&lt;/code> para events de Nostr y tags &lt;code>r&lt;/code> para todo lo demás; y los destacados de citas pasaron de un MUST a un SHOULD al mostrarse como un repost con cita.&lt;/p>
&lt;h3 id="nostr-wallet-connect">Nostr Wallet Connect&lt;/h3>
&lt;p>Una respuesta &lt;code>list_transactions&lt;/code> puede indicar cuántas transacciones coinciden con la solicitud, no cuántas filas devolvió la página actual. El &lt;a href="https://github.com/nostr-wallet-connect/nwc/pull/4">&lt;code>total_count&lt;/code> opcional incorporado&lt;/a> en NWC-05 (la extensión de historial de la cartera) del &lt;a href="https://github.com/nostr-wallet-connect/nwc">repositorio de extensiones NWC&lt;/a> añade ese campo a la respuesta utilizada con &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> (control remoto cifrado de carteras mediante Nostr).&lt;/p>
&lt;p>El &lt;a href="https://github.com/nostr-wallet-connect/nwc/commit/ff3e49a47d040075edc46ee42fc0e33f10f1ef67">commit que añade &lt;code>total_count&lt;/code>&lt;/a> lo documenta como un entero opcional: el número total de transacciones que coinciden con los filtros de la solicitud.&lt;/p>
&lt;p>El &lt;a href="https://github.com/nostr-wallet-connect/nwc/commit/06315e735f744b1afd3df0b57436fdce8a7bfc2e">commit que excluye la paginación del recuento&lt;/a> indica que este total excluye la paginación, por lo que cuenta todas las transacciones coincidentes de todas las páginas.&lt;/p>
&lt;h2 id="análisis-detallado-de-nips-reposts-y-reacciones">Análisis detallado de NIPs: Reposts y reacciones&lt;/h2>
&lt;p>Un contacto puede volver a presentar una nota existente a sus seguidores y puede adjuntar un «me gusta», «no me gusta» o emoji compacto sin escribir una respuesta. &lt;a href="https://nostrcompass.org/es/topics/nip-18/">NIP-18&lt;/a> (reposts) publica esa redistribución como su propio event firmado. &lt;a href="https://nostrcompass.org/es/topics/nip-25/">NIP-25&lt;/a> (reacciones) publica la respuesta compacta como otro event firmado. Ambos siguen siendo archivos &lt;code>draft&lt;/code> &lt;code>optional&lt;/code> en la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/18.md">especificación canónica de reposts&lt;/a> y la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/25.md">especificación canónica de reacciones&lt;/a>: están presentes en el repositorio de NIPs y los clientes los implementan, pero todavía están etiquetados como no definitivos.&lt;/p>
&lt;h3 id="reposts-nip-18">Reposts (NIP-18)&lt;/h3>
&lt;p>Los seguidores reciben un puntero firmado hacia una nota de texto kind 1 que alguien ya publicó cuando un cliente escribe un event kind 6. &lt;a href="https://github.com/nostr-protocol/nips/blob/master/18.md">La especificación de reposts&lt;/a> establece &lt;code>kind&lt;/code> en 6, coloca en &lt;code>content&lt;/code> el JSON convertido en cadena de esa nota (se permite un &lt;code>content&lt;/code> vacío, pero no se recomienda), exige un tag &lt;code>e&lt;/code> cuyo valor sea el &lt;code>id&lt;/code> de la nota y cuya tercera entrada sea la URL de un relay del que se pueda obtener la nota, y dice que el event SHOULD incluir también un tag &lt;code>p&lt;/code> con la &lt;code>pubkey&lt;/code> del autor original. Un repost de un event de &lt;a href="https://nostrcompass.org/es/topics/nip-70/">NIP-70&lt;/a> (events protegidos) SHOULD mantener vacío &lt;code>content&lt;/code> para no copiar el payload protegido al nuevo event.&lt;/p>
&lt;p>Una cita es una referencia dentro de otro event, no un envoltorio kind 6. Cuando un cliente menciona un &lt;code>nevent&lt;/code>, &lt;code>note&lt;/code> o &lt;code>naddr&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-21/">NIP-21&lt;/a> (URI &lt;code>nostr:&lt;/code>), debe convertir esa mención en un tag &lt;code>q&lt;/code> con la forma &lt;code>[&amp;quot;q&amp;quot;, &amp;quot;&amp;lt;event-id&amp;gt; or &amp;lt;event-address&amp;gt;&amp;quot;, &amp;quot;&amp;lt;relay-url&amp;gt;&amp;quot;, &amp;quot;&amp;lt;pubkey-if-a-regular-event&amp;gt;&amp;quot;]&lt;/code>. Los &lt;a href="https://github.com/nostr-protocol/nips/blob/master/18.md#quote-reposts">tags de reposts con cita&lt;/a> mantienen esas referencias fuera de los hilos de respuestas y permiten que los clientes obtengan y cuenten las citas de una publicación.&lt;/p>
&lt;p>Kind 6 está reservado para notas kind 1. Un repost genérico kind 16 puede envolver cualquier kind de event excepto kind 1. SHOULD incluir un tag &lt;code>k&lt;/code> cuyo valor sea el kind convertido en cadena del event interno. Cuando ese event interno sea reemplazable, el repost genérico SHOULD añadir un tag &lt;code>a&lt;/code> con la coordenada &lt;code>kind:pubkey:d-tag&lt;/code>; si falta ese tag &lt;code>a&lt;/code>, el repost apunta a una versión específica y &lt;code>content&lt;/code> debe contener la cadena JSON completa de esa versión. &lt;a href="https://github.com/nostr-protocol/nips/blob/master/18.md#generic-reposts">Las reglas de reposts genéricos&lt;/a> evitan que los events de formato largo, direccionables y otros que no son notas se publiquen como si fueran kind 1.&lt;/p>
&lt;p>El siguiente event kind 6 es un repost real recuperado de &lt;code>wss://relay.damus.io&lt;/code> en el momento de preparar el boletín (&lt;a href="https://njump.me/nevent1qqs88k8xgv2d3d3yymawaa24f22a0kqqvknpur0p05vq9e5r4y74xjspz3mhxue69uhhyetvv9ujuerpd46hxtnfdu7elvca">abrir el event&lt;/a>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">6&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;73d8e64314d8b62426faeef5554a95d7d80065a61e0de17d1802e683a93d534a&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a60e79e0edad5100d7543b669e513dbc1c2170e8e9b74fdb8e971afd1e0e6813&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1787768621&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;38980cd673ee16609dc87081d9f645c331d5a5a8b5b0d6c8147600ed29447976&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;34d2f5274f1958fcd2cb2463dabeaddf8a21f84ace4241da888023bf05cc8095&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;client&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;Primal iOS&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;pubkey\&amp;#34;:\&amp;#34;34d2f5274f1958fcd2cb2463dabeaddf8a21f84ace4241da888023bf05cc8095\&amp;#34;,\&amp;#34;sig\&amp;#34;:\&amp;#34;8c0271f7b438083ce491c391335598e0cbceee0758177cf98f7894531033cb5153704b01009590f3d4e9cdfadd5bbf73fc5eea54186fcbac6d30744e0e6c1cd6\&amp;#34;,\&amp;#34;id\&amp;#34;:\&amp;#34;38980cd673ee16609dc87081d9f645c331d5a5a8b5b0d6c8147600ed29447976\&amp;#34;,\&amp;#34;tags\&amp;#34;:[[\&amp;#34;r\&amp;#34;,\&amp;#34;https:\/\/stacker.news\/items\/1555439\&amp;#34;],[\&amp;#34;client\&amp;#34;,\&amp;#34;Damus\&amp;#34;]],\&amp;#34;created_at\&amp;#34;:1787766056,\&amp;#34;content\&amp;#34;:\&amp;#34;🚨 Attention CLN (Core Lightning) node runners 🚨\n\nhttps:\/\/stacker.news\/items\/1555439\&amp;#34;,\&amp;#34;kind\&amp;#34;:1}&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;b6b97fa377cfdb651e2850f65f2ccb12ca0724c0de0fc0e39e9721f850abdfd31f5d5567517a51d988145c2a2de9ae9540b02eecf7352e554022870d5e8c64a5&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Su &lt;code>kind&lt;/code> es 6, el tag &lt;code>e&lt;/code> apunta a la nota que se volvió a publicar, el tag &lt;code>p&lt;/code> identifica al autor de esa nota y &lt;code>content&lt;/code> contiene el event kind 1 original convertido en cadena JSON. Este event recuperado de un relay omite la indicación de relay que la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/18.md">especificación NIP-18&lt;/a> marca como obligatoria, lo que ilustra por qué los lectores y clientes deben validar los events reales y admitir productores que omitan campos.&lt;/p>
&lt;h3 id="reacciones-nip-25">Reacciones (NIP-25)&lt;/h3>
&lt;p>Una publicación puede reunir «me gusta», «no me gusta» y emojis firmados sin que esas marcas entren en el hilo de respuestas. &lt;a href="https://github.com/nostr-protocol/nips/blob/master/25.md">La especificación de reacciones&lt;/a> define esa marca como un event kind 7 cuyo &lt;code>content&lt;/code> MUST contener el valor de la reacción. &lt;code>+&lt;/code> o una cadena vacía MUST interpretarse como un «me gusta» o voto positivo. &lt;code>-&lt;/code> MUST interpretarse como un «no me gusta» o voto negativo. Un emoji o un shortcode de &lt;a href="https://nostrcompass.org/es/topics/nip-30/">NIP-30&lt;/a> (emoji personalizado) SHOULD NOT interpretarse como «me gusta» o «no me gusta», y un cliente MAY mostrar ese emoji en la publicación.&lt;/p>
&lt;p>El objetivo está en los tags, no se deduce de &lt;code>content&lt;/code>. MUST haber un tag &lt;code>e&lt;/code> establecido en el &lt;code>id&lt;/code> del event objetivo, y ese tag SHOULD incluir una indicación de relay; no se recomiendan tags &lt;code>e&lt;/code> adicionales y, si aparecen, el &lt;code>id&lt;/code> objetivo debe ser el último. SHOULD haber un tag &lt;code>p&lt;/code> para el autor objetivo, el último si aparecen varios tags &lt;code>p&lt;/code>. Un objetivo direccionable SHOULD recibir también un tag &lt;code>a&lt;/code> con coordenadas &lt;code>kind:pubkey:d-tag&lt;/code>. Los tags &lt;code>e&lt;/code> y &lt;code>a&lt;/code> SHOULD incluir indicaciones de relay y pubkey, los tags &lt;code>p&lt;/code> SHOULD incluir indicaciones de relay, y un tag &lt;code>k&lt;/code> MAY contener el kind convertido en cadena del event al que se reaccionó. &lt;a href="https://github.com/nostr-protocol/nips/blob/master/25.md#tags">Esas reglas de tags&lt;/a> permiten que un cliente obtenga el objetivo y notifique a su autor a partir únicamente del event de reacción.&lt;/p>
&lt;p>Un cliente MAY colocar un único &lt;code>:shortcode:&lt;/code> en &lt;code>content&lt;/code> y un tag &lt;code>emoji&lt;/code> que asocie ese shortcode a una URL de imagen, según las &lt;a href="https://github.com/nostr-protocol/nips/blob/master/25.md#custom-emoji-reaction">reglas de reacciones con emojis personalizados&lt;/a>. Si el objetivo no es un event nativo de Nostr, la reacción MUST ser kind 17 y MUST llevar tags &lt;code>k&lt;/code> e &lt;code>i&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-73/">NIP-73&lt;/a> (IDs de contenido externo), como en las &lt;a href="https://github.com/nostr-protocol/nips/blob/master/25.md#external-content-reactions">reglas de reacciones a contenido externo&lt;/a>. Kind 17 es una reacción a un sitio web, episodio de podcast u otro objeto externo. No es una reacción entre events kind 7 ni es un repost.&lt;/p>
&lt;p>El siguiente event kind 7 es una reacción real recuperada de &lt;code>wss://relay.damus.io&lt;/code> en el momento de preparar el boletín (&lt;a href="https://njump.me/nevent1qqsytac63l00k7kyaphkfwqqn94wglmx78v6zhqtytg65w5k957luccpz3mhxue69uhhyetvv9ujuerpd46hxtnfdus63jym">abrir el event&lt;/a>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">7&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;45f71a8fdefb7ac4e86f64b800996ae47f66f1d9a15c0b22d1aa3a962d3dfe63&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;0755cc2b972c3cbcae36913109c50b36b3fe110fa38a76dc37d1f01c5305496a&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1787768605&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;519de32071d71bb2ab8b71a07e03eb9a256b6a59f9b08877b156c80966d5c320&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;34236:5ab67f7d7fed4f781008c0ec0d26c8113f9fb46094a8346246c70c75e75db9fb:2ddda68516f4729d3ef55a1eb01fe028253393212493a34816ad8eb79f97a3b7&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;5ab67f7d7fed4f781008c0ec0d26c8113f9fb46094a8346246c70c75e75db9fb&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;k&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;34236&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;client&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;Divine&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;31990:d95aa8fc0eff8e488952495b8064991d27fb96ed8652f12cdedc5a4e8b5ae540:divine-mobile&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;wss://relay.divine.video&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;+&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;3c081756c7a73e2ee8aa10fadf3b5009390d5ac9a72078ba03701c42af91022ef275df7cb17724689a23dca4e29ff1a7cd5e3a24135d021983e2726a28b00b1e&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Su &lt;code>content&lt;/code> es &lt;code>+&lt;/code>, el «me gusta» convencional de &lt;a href="https://github.com/nostr-protocol/nips/blob/master/25.md">NIP-25&lt;/a>. El tag &lt;code>e&lt;/code> identifica el event al que se reaccionó; el tag &lt;code>a&lt;/code> añade su coordenada direccionable; el tag &lt;code>p&lt;/code> identifica a su autor; y el tag opcional &lt;code>k&lt;/code> registra como cadena el kind del objetivo.&lt;/p>
&lt;h3 id="implementaciones-actuales-en-clientes">Implementaciones actuales en clientes&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, un cliente Android de Nostr, define el &lt;a href="https://github.com/vitorpamplona/amethyst/blob/d06b83bd53c510e589d5ce13d46f6bd1a8206394/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip18Reposts/RepostEvent.kt">tipo de event de repost&lt;/a> y el &lt;a href="https://github.com/vitorpamplona/amethyst/blob/d06b83bd53c510e589d5ce13d46f6bd1a8206394/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip25Reactions/ReactionEvent.kt">tipo de event de reacción&lt;/a> en su capa de protocolo actual.&lt;/p>
&lt;p>&lt;a href="https://github.com/v0l/snort">Snort&lt;/a>, un cliente web de Nostr, implementa &lt;a href="https://github.com/v0l/snort/blob/8b2e6cb6dc5a5e0b7e052b4ed89a9c5630444e95/packages/system/src/impl/nip18.ts">funciones auxiliares de NIP-18 que incluyen el manejo de tags de enlaces de citas&lt;/a> y &lt;a href="https://github.com/v0l/snort/blob/8b2e6cb6dc5a5e0b7e052b4ed89a9c5630444e95/packages/system/src/impl/nip25.ts">crea tags de reacción a events de NIP-25&lt;/a>.&lt;/p>
&lt;p>&lt;a href="https://github.com/soapbox-pub/ditto">Ditto&lt;/a>, un servidor Mastodon y relay de Nostr combinados, &lt;a href="https://github.com/soapbox-pub/ditto/blob/570fc4b26e5900ccb4085cfdb2cc86d08cdd9ade/src/components/RepostMenu.tsx">publica reposts genéricos kind 16 con un tag &lt;code>k&lt;/code> y una coordenada &lt;code>a&lt;/code> en objetivos direccionables&lt;/a> y &lt;a href="https://github.com/soapbox-pub/ditto/blob/570fc4b26e5900ccb4085cfdb2cc86d08cdd9ade/src/lib/nostrEvents.ts">aplica la semántica de reacciones kind 7 tratando el último tag &lt;code>e&lt;/code> como el event objetivo&lt;/a>.&lt;/p>
&lt;h3 id="cómo-funcionan-juntos">Cómo funcionan juntos&lt;/h3>
&lt;p>Un event kind 6 o kind 16 redistribuye un event existente a los feeds de los seguidores de quien hace el repost, ya sea insertando el JSON de ese event o apuntando a una coordenada reemplazable. Un tag &lt;code>q&lt;/code> marca una cita dentro de otro event para que la reconstrucción del hilo pueda contar las referencias sin tratar el event que cita como una respuesta, que es la distinción trazada en la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/18.md#quote-reposts">sección de reposts con cita&lt;/a>. Un event kind 7 deja el event original en su lugar y adjunta únicamente el valor de la reacción junto con los tags del objetivo, según el contrato de la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/25.md">especificación de reacciones&lt;/a>. Por tanto, los clientes que obtienen una pubkey ven los reposts de esa pubkey como nuevos events kind 6 o 16 y las opiniones de esa pubkey como events kind 7 en las publicaciones de otras personas.&lt;/p>
&lt;hr>
&lt;p>Envíe un mensaje directo NIP-17 para compartir un proyecto o una noticia mediante el &lt;a href="https://github.com/andotherstuff/nostr-compass">proyecto Nostr Compass&lt;/a>.&lt;/p></content:encoded></item><item><title>Nostr Compass #37</title><link>https://nostrcompass.org/es/newsletters/2026-08-26-newsletter/</link><pubDate>Wed, 26 Aug 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-08-26-newsletter/</guid><description>&lt;p>Bienvenidos de nuevo a &lt;a href="https://nostrcompass.org">Nostr Compass&lt;/a>, vuestra guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> mantiene los secretos del firmante remoto y de la cartera fuera del almacenamiento del navegador, &lt;a href="https://github.com/Routstr/routstr-sdk">Routstr SDK&lt;/a> verifica el descubrimiento de proveedores procedente de relays, &lt;a href="https://gitworkshop.dev/npub1qwkd5wzftcxquuhtkcg0xn9ed7evksluuppf7qdmdh34ywe9uncs5uqfvl/relay.ngit.dev/postr">Postr&lt;/a> se lanza como un compositor pequeño para Android, &lt;a href="https://github.com/TurkeyNostr/infans">Infans&lt;/a> cifra el seguimiento familiar y la sincronización entre progenitores, &lt;a href="https://walls.rip/comms">walls.rip&lt;/a> transporta chat cifrado con PGP por relays públicos de Nostr, y &lt;a href="https://git.nostrdev.com/stuff/pakstr">pakstr&lt;/a> hace explícita la publicación en Zapstore. &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a> vincula los rumors de gift wrap con sus seals. Las versiones cubren el aislamiento de suscripciones, los estados de perfil y los marcadores de salida por relay. El trabajo de protocolo alcanza el despliegue de hilos de comentarios, borradores de límite de comisión y consulta de pagos en wallet connect, solicitudes de pantalla para napplets, y una inscripción experimental desde la misma cuenta. El número cierra con &lt;a href="https://nostrcompass.org/es/newsletters/2026-08-26-newsletter/#seis-agostos-en-la-historia-de-nostr">Seis agostos en la historia de Nostr&lt;/a>.&lt;/p></description><content:encoded>&lt;p>Bienvenidos de nuevo a &lt;a href="https://nostrcompass.org">Nostr Compass&lt;/a>, vuestra guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> mantiene los secretos del firmante remoto y de la cartera fuera del almacenamiento del navegador, &lt;a href="https://github.com/Routstr/routstr-sdk">Routstr SDK&lt;/a> verifica el descubrimiento de proveedores procedente de relays, &lt;a href="https://gitworkshop.dev/npub1qwkd5wzftcxquuhtkcg0xn9ed7evksluuppf7qdmdh34ywe9uncs5uqfvl/relay.ngit.dev/postr">Postr&lt;/a> se lanza como un compositor pequeño para Android, &lt;a href="https://github.com/TurkeyNostr/infans">Infans&lt;/a> cifra el seguimiento familiar y la sincronización entre progenitores, &lt;a href="https://walls.rip/comms">walls.rip&lt;/a> transporta chat cifrado con PGP por relays públicos de Nostr, y &lt;a href="https://git.nostrdev.com/stuff/pakstr">pakstr&lt;/a> hace explícita la publicación en Zapstore. &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a> vincula los rumors de gift wrap con sus seals. Las versiones cubren el aislamiento de suscripciones, los estados de perfil y los marcadores de salida por relay. El trabajo de protocolo alcanza el despliegue de hilos de comentarios, borradores de límite de comisión y consulta de pagos en wallet connect, solicitudes de pantalla para napplets, y una inscripción experimental desde la misma cuenta. El número cierra con &lt;a href="https://nostrcompass.org/es/newsletters/2026-08-26-newsletter/#seis-agostos-en-la-historia-de-nostr">Seis agostos en la historia de Nostr&lt;/a>.&lt;/p>
&lt;h2 id="historias-principales">Historias Principales&lt;/h2>
&lt;h3 id="postr-se-lanza-como-un-compositor-pequeño-para-android">Postr se lanza como un compositor pequeño para Android&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev/npub1qwkd5wzftcxquuhtkcg0xn9ed7evksluuppf7qdmdh34ywe9uncs5uqfvl/relay.ngit.dev/postr">Postr&lt;/a> es un compositor deliberadamente pequeño para notas kind 1 en Android. La custodia de la clave privada permanece en &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, un firmante &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> (firmante local) y NIP-46 para Android. La versión 1.0.0 incorpora una bandeja de salida duradera que sobrevive a la pérdida de conectividad y a la muerte del proceso, borradores privados por cuenta, y adjuntos &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> con hashes verificados y autorización de subida acotada.&lt;/p>
&lt;p>Una publicación tiene éxito después de que Postr relea el evento firmado idéntico y compruebe su firma. Los reintentos conservan el mismo id de evento. La publicación usa los relays de escritura de la lista &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> (lista de relays) del autor más relays de arranque cifrados, o una lista personalizada por cuenta. Un &lt;a href="https://njump.me/nevent1qqsqxdwxa8k5e0ftf6j6q5ucs3u94ezgjqmyzwznqt99pyxxw23c74spz3mhxue69uhhyetvv9ujumn8d96zuer9wcx4nr0m">anuncio de repositorio&lt;/a> &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> (git sobre Nostr) firmado y un &lt;a href="https://njump.me/nevent1qqs24gy97frkjkma8ys3rwc3jj8f0qrrmsxjwe39jxrhuemztrygr8qpz3mhxue69uhhyetvv9ujumn8d96zuer9wcspcsat">perfil de proyecto kind 0&lt;/a> correspondiente se publican en &lt;code>relay.ngit.dev&lt;/code>. Los feeds, la analítica, la publicidad y el almacenamiento de claves quedan fuera de la aplicación.&lt;/p>
&lt;h3 id="infans-cifra-el-seguimiento-familiar-y-la-sincronización-entre-progenitores-sobre-nostr">Infans cifra el seguimiento familiar y la sincronización entre progenitores sobre Nostr&lt;/h3>
&lt;p>Los progenitores pueden mantener los registros de alimentación, sueño y crecimiento en sus propios teléfonos y compartirlos sin un proveedor de datos familiares. &lt;a href="https://github.com/TurkeyNostr/infans">Infans&lt;/a> es un rastreador de bebés para Android que trata una base de datos Room local como fuente de verdad y publica eventos cifrados kind 30078 de &lt;a href="https://nostrcompass.org/es/topics/nip-78/">NIP-78&lt;/a> (datos específicos de aplicación) para copia de seguridad y sincronización con la pareja. Su repositorio etiqueta el cifrado local como &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> (cifrado de payload), pero la implementación usa AES-256-GCM mientras NIP-44 v2 exige ChaCha20 con HMAC-SHA256, así que los payloads en modo local no deberían presentarse como compatibles con NIP-44.&lt;/p>
&lt;p>La &lt;a href="https://github.com/TurkeyNostr/infans/blob/main/README.md">sincronización con la pareja&lt;/a> usa el d-tag &lt;code>baby-tracker-sync&lt;/code>, mientras las copias propias usan &lt;code>baby-tracker-backup&lt;/code>. Las notas asíncronas viajan dentro del payload de la pareja. La ruta documentada de Amber &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> (firmante local) delega la firma y el cifrado en el firmante, pero el repositorio no aporta ninguna prueba de interoperabilidad que muestre que cada ruta de copia y de sincronización produce texto cifrado NIP-44 v2. El repositorio no presenta ninguna declaración de producto sanitario ni ninguna auditoría de seguridad externa.&lt;/p>
&lt;h3 id="el-ghost-chat-de-wallsrip-lleva-el-chat-cifrado-con-pgp-a-relays-públicos-de-nostr">El Ghost Chat de walls.rip lleva el chat cifrado con PGP a relays públicos de Nostr&lt;/h3>
&lt;p>&lt;a href="https://walls.rip/comms">walls.rip&lt;/a> es un conjunto de herramientas de comunicación anónima cuyo modo Ghost Chat crea o importa una identidad OpenPGP en el navegador. Su &lt;a href="https://github.com/KYC-rip/walls-rip/tree/cf40bda32df5f106007631b21afc3cd193ac0cda/src/components/ghostChat">cliente de código abierto&lt;/a> cifra cada mensaje con la clave pública PGP del destinatario. La conversación legible permanece en el almacenamiento de sesión local del dispositivo; la aplicación no tiene cuenta de chat ni base de datos central de mensajes.&lt;/p>
&lt;p>El transporte es Nostr real, pero es deliberadamente específico de la aplicación. Ghost Chat &lt;a href="https://github.com/KYC-rip/walls-rip/blob/cf40bda32df5f106007631b21afc3cd193ac0cda/src/utils/nostrService.ts">publica texto cifrado en formato armored como eventos kind 1&lt;/a> hacia cinco relays predeterminados y etiqueta cada evento con un tag de sala estable derivado de la huella PGP del destinatario. Eso ofrece a los desarrolladores un ejemplo concreto de uso de relays como transporte de mensajes resistente a la censura, y también muestra por qué la entrega descentralizada por sí sola no protege los metadatos ni es interoperable con los mensajes directos NIP-17.&lt;/p>
&lt;h3 id="pakstr-0130-a-0150-hace-explícita-la-publicación-en-zapstore">pakstr 0.13.0 a 0.15.0 hace explícita la publicación en Zapstore&lt;/h3>
&lt;p>Tras el &lt;a href="https://nostrcompass.org/en/newsletters/2026-07-29-newsletter/#pakstr-031">trabajo de empaquetado y Amber de 0.3.1 en julio&lt;/a>, &lt;a href="https://git.nostrdev.com/stuff/pakstr">pakstr&lt;/a> es una CLI que convierte una carpeta de recursos web en un APK de Android firmado y lo publica en Zapstore con una clave Nostr. &lt;a href="https://git.nostrdev.com/stuff/pakstr/releases/tag/v0.13.0">0.13.0&lt;/a> añade versionado automático de releases. Las versiones 0.13.1 a 0.13.3 reparan la publicación en Blossom: &lt;a href="https://git.nostrdev.com/stuff/pakstr/releases/tag/v0.13.1">la autorización ahora usa base64url&lt;/a>, &lt;a href="https://git.nostrdev.com/stuff/pakstr/releases/tag/v0.13.2">las subidas llevan un Content-Digest&lt;/a>, y &lt;a href="https://git.nostrdev.com/stuff/pakstr/releases/tag/v0.13.3">el evento de aplicación de Zapstore se publica antes de la subida a Blossom&lt;/a>.&lt;/p>
&lt;p>&lt;a href="https://git.nostrdev.com/stuff/pakstr/releases/tag/v0.14.0">0.14.0&lt;/a> valida al publicador de Zapstore antes de que la publicación continúe. &lt;a href="https://git.nostrdev.com/stuff/pakstr/releases/tag/v0.15.0">0.15.0&lt;/a> escribe los metadatos de la ficha en eventos de aplicación kind 32267 y coloca las notas de la versión en el content de los eventos de release kind 30063, de modo que el registro de Zapstore de una app empaquetada puede llevar nombre, resumen y notas sin un paso manual de ficha aparte.&lt;/p>
&lt;h3 id="heterodyne-especifica-personas-portables-y-comunicación-social-cifrada">Heterodyne especifica personas portables y comunicación social cifrada&lt;/h3>
&lt;p>&lt;a href="https://radicle.network/nodes/iris.radicle.network/rad%3Az2zX5XvPiggGJvCn8DPkp1hRNGA5">Heterodyne&lt;/a> es una familia de protocolos orientada a especificación para personas portables, comunicación autenticada, control sobre el propio dispositivo e interacción social. Su &lt;a href="https://radicle.network/nodes/iris.radicle.network/rad%3Az2zX5XvPiggGJvCn8DPkp1hRNGA5">README actual&lt;/a> compone cuatro capas existentes: eventos Nostr firmados, &lt;a href="https://radicle.xyz">Radicle&lt;/a> (git entre pares) como almacenamiento duradero, &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> (mensajería de grupo MLS sobre Nostr) para conversaciones cifradas directas y de grupo, y registros de eventos de clave &lt;a href="https://arxiv.org/abs/1907.02143">KERI&lt;/a> (Key Event Receipt Infrastructure) para la rotación de identidad. Una persona se describe como un npub Nostr de raíz en frío más un registro KERI aceptado; la firma rutinaria usa claves de época rotatorias, mientras las identidades de nodo Radicle se delegan con doble prueba.&lt;/p>
&lt;p>La familia divide ese trabajo en &lt;a href="https://radicle.network/nodes/iris.radicle.network/rad%3Az2zX5XvPiggGJvCn8DPkp1hRNGA5">cuatro borradores 0.x versionados de forma independiente&lt;/a>. Core posee la identidad, la verificación de registros de eventos de clave, los bytes canónicos de Nostr y el sustrato de repositorio Radicle; Comms posee los sobres nativos de Nostr, los niveles de privacidad, la publicación y las conversaciones Marmot; y Social posee el seguimiento público, las interacciones y las listas. Control, para la inscripción y los permisos del propio dispositivo, está incompleto y no puede reclamarse. Estos documentos siguen siendo borradores que pueden romperse antes de 1.0, y este número presenta la familia antes de que haya llegado ningún lanzamiento de cliente Heterodyne.&lt;/p>
&lt;h2 id="versiones">Versiones&lt;/h2>
&lt;h3 id="nostr-java-v208-aislamiento-de-suscripciones-y-nip-44-portable">Nostr Java v2.0.8: aislamiento de suscripciones y NIP-44 portable&lt;/h3>
&lt;p>Una consulta de gift wrap contra un relay con cinco eventos devolvía cero, dos o seis eventos al azar, porque &lt;a href="https://github.com/tcheeric/nostr-java">Nostr Java&lt;/a>, una biblioteca Java para hablar con relays y cifrar payloads de Nostr, entregaba cada frame entrante a todos los listeners de la conexión. La &lt;a href="https://github.com/tcheeric/nostr-java/releases/tag/v2.0.8">versión 2.0.8&lt;/a> enruta &lt;code>EVENT&lt;/code>, &lt;code>EOSE&lt;/code> y &lt;code>CLOSED&lt;/code> a la suscripción que esos frames nombran, así que la señal de fin de eventos almacenados de una consulta ya no puede cerrar otra. Los frames de ámbito de conexión como &lt;code>NOTICE&lt;/code>, &lt;code>OK&lt;/code> y &lt;code>AUTH&lt;/code> siguen llegando a todos los listeners.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> (cifrado de payload) en la misma &lt;a href="https://github.com/tcheeric/nostr-java/releases/tag/v2.0.8">versión&lt;/a> ya no necesita un proveedor JCE registrado en el proceso. El cifrado solo funcionaba después de generar una clave en esa JVM, lo que registraba BouncyCastle como efecto secundario, y fallaba en Android, donde añadir un proveedor llamado &amp;ldquo;BC&amp;rdquo; no hace nada. Ambas rutas de cifrado usan ahora el motor ligero ChaCha20 de BouncyCastle, y la generación de claves ya no altera el estado JCE de todo el proceso. Quienes dependían de la biblioteca para registrar el proveedor deben registrarlo por su cuenta. La &lt;a href="https://github.com/tcheeric/nostr-java/issues/537">dependencia de NIP-44 respecto al proveedor JCE&lt;/a> es el issue que esto cierra.&lt;/p>
&lt;h3 id="noornote-v136-estados-de-perfil-y-anuncios-clasificados">NoorNote v1.3.6: estados de perfil y anuncios clasificados&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a> es un cliente Nostr para escritorio, web y Android. Una semana después de que &lt;a href="https://nostrcompass.org/en/newsletters/2026-08-19-newsletter/#noornote-134-joining-encrypted-communities-from-an-invite-link">1.3.4 añadiera incorporaciones cifradas a comunidades&lt;/a>, la &lt;a href="https://github.com/77elements/noornote/releases/tag/v1.3.6">versión 1.3.6&lt;/a> muestra &lt;a href="https://nostrcompass.org/es/topics/nip-38/">NIP-38&lt;/a> (estados de usuario) bajo el nombre &lt;a href="https://nostrcompass.org/es/topics/nip-05/">NIP-05&lt;/a> (verificado por dominio) de un perfil: los eventos direccionables kind &lt;code>30315&lt;/code>, con expiración opcional, que llevan un estado general o musical de una línea. Al hacer clic en esa línea se establece el estado propio de quien mira.&lt;/p>
&lt;p>Los &lt;a href="https://github.com/77elements/noornote/releases/tag/v1.3.6">anuncios clasificados&lt;/a> de &lt;a href="https://nostrcompass.org/es/topics/nip-99/">NIP-99&lt;/a> (ofertas de mercado kind &lt;code>30402&lt;/code>) se renderizan ahora en toda la aplicación, así que el complemento de mercado solo hace falta para comprar y vender. Las notas privadas de apodo en los perfiles también aparecen en naranja de advertencia, con un icono de nota rellenado y un anillo naranja en el avatar.&lt;/p>
&lt;h3 id="nostrord-v290-estado-de-grupo-y-medios-por-relay">nostrord v2.9.0: estado de grupo y medios por relay&lt;/h3>
&lt;p>Salir de un grupo &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> (grupos gestionados por relay) en un servidor suprimía antes el mismo id de grupo en todos los demás relays, porque &lt;a href="https://github.com/nostrord/nostrord">nostrord&lt;/a>, un cliente multiplataforma para comunidades alojadas en relays, indexaba sus marcadores de salida y borrado por el id desnudo. Los &lt;a href="https://github.com/nostrord/nostrord/pull/253">marcadores de salida y borrado acotados por relay&lt;/a> mantienen esas supresiones en el servidor que las produjo, así que un grupo que comparte un id entre dos relays ya no se abandona ni se descarta en pareja. Una incorporación que el relay rechaza por ser ya miembro cuenta ahora como éxito y limpia el marcador local, que había sido un estado absorbente: la autorreparación limpiaba una ranura mientras el arranque en frío restauraba la otra.&lt;/p>
&lt;p>La &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v2.9.0">versión 2.9.0&lt;/a> también renderiza &lt;a href="https://github.com/nostrord/nostrord/pull/254">imágenes incrustadas en markdown&lt;/a> que otros clientes escriben como &lt;code>![alt](url)&lt;/code>, en lugar de mostrar la puntuación markdown alrededor de una URL ya detectada. Los mensajes directos incorporan &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (DM privados con gift wrap) y &lt;a href="https://github.com/nostrord/nostrord/pull/275">rumors de archivo kind &lt;code>15&lt;/code>&lt;/a>, así que un adjunto cifrado enviado desde Jumble se descarga, se descifra y se muestra, y los adjuntos salientes se cifran antes de subirse. Esta etiqueta incluye ya el &lt;a href="https://nostrcompass.org/en/newsletters/2026-08-19-newsletter/#nostrord-implements-an-unmerged-encryption-key-proposal">trabajo de clave de cifrado NIP-4e cubierto la semana pasada&lt;/a>. La propuesta sigue sin fusionarse, y nostrord dice que su implementación sigue el comportamiento desplegado de Jumble donde ese comportamiento difiere del borrador.&lt;/p>
&lt;h2 id="cambios-no-publicados">Cambios no publicados&lt;/h2>
&lt;h3 id="shopstr-mantiene-los-secretos-del-firmante-remoto-y-de-la-cartera-fuera-del-almacenamiento-del-navegador">Shopstr mantiene los secretos del firmante remoto y de la cartera fuera del almacenamiento del navegador&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> es un mercado web para anuncios clasificados &lt;a href="https://nostrcompass.org/es/topics/nip-99/">NIP-99&lt;/a>. Tras el &lt;a href="https://nostrcompass.org/en/newsletters/2026-07-22-newsletter/#shopstr-binds-payment-validation-to-signed-receipts-and-server-side-prices">trabajo de integridad de pagos del mes pasado&lt;/a>, &lt;a href="https://github.com/shopstr-eng/shopstr/pull/437">deja de escribir en &lt;code>localStorage&lt;/code> los secretos serializados del firmante bunker&lt;/a>. Un payload de bunker &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (firma remota) había incluido la URL &lt;code>bunker://&lt;/code> activa y la clave privada de aplicación generada, así que cualquier script en el origen de Shopstr podía reanudar la sesión de firma remota. Los datos del bunker permanecen ahora en memoria durante la sesión actual, los payloads de bunker residuales se eliminan cuando se encuentran, y los tipos de firmante que no son bunker mantienen su comportamiento de almacenamiento anterior.&lt;/p>
&lt;p>El &lt;a href="https://github.com/shopstr-eng/shopstr/pull/436">cambio de NWC&lt;/a> correspondiente hace lo mismo con las credenciales &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> (wallet connect). Shopstr había guardado la cadena &lt;code>nostr+walletconnect://&lt;/code> completa, incluido el secreto usado para las acciones de cartera, como datos ordinarios del navegador y la reutilizaba al pagar. Las cadenas de conexión y los metadatos de cartera permanecen ahora en memoria, y las copias almacenadas antiguas se borran al leer los datos locales. Los scripts que ya se ejecutan en el origen de Shopstr durante una sesión activa siguen pudiendo ver esos valores en memoria.&lt;/p>
&lt;h3 id="routstr-verifica-el-descubrimiento-de-proveedores-procedente-de-relays">Routstr verifica el descubrimiento de proveedores procedente de relays&lt;/h3>
&lt;p>Un único relay malicioso podía decidir antes en qué proveedores de inferencia confiaba un cliente Routstr. &lt;a href="https://github.com/Routstr/routstr-sdk">Routstr SDK&lt;/a> es la biblioteca TypeScript detrás de Routstr, un mercado que descubre proveedores de IA en Nostr y les paga con Cashu. La &lt;a href="https://github.com/Routstr/routstr-sdk/pull/47">corrección de descubrimiento de esta semana&lt;/a> verifica cada anuncio de proveedor, lista de modelos y reseña entregados por relays (kinds 38421, 38423 y 38425) antes de que cualquier consumidor los vea, así que una reseña que nombra un pubkey de confianza pero lleva una firma basura ya no entra en el ranking.&lt;/p>
&lt;p>Las &lt;a href="https://github.com/Routstr/routstr-sdk/pull/47">marcas de tiempo muy futuras&lt;/a> se descartan antes de seleccionar la &amp;ldquo;reseña más reciente&amp;rdquo;. Los eventos con más de quince minutos de adelanto respecto al reloj local se eliminan en la ruta en vivo y al leer el almacén persistente, lo que evita que un &lt;code>created_at&lt;/code> falsificado supere a reseñas firmadas válidamente entre reinicios. Si no hay reseñas de confianza disponibles, la puerta de reseñas falla en cerrado y excluye a los proveedores sin reseña del ranking de pagos hasta que lleguen reseñas. Los operadores todavía pueden habilitar un proveedor a mano.&lt;/p>
&lt;h3 id="nostr-tools-vincula-los-rumors-de-gift-wrap-con-sus-seals">nostr-tools vincula los rumors de gift wrap con sus seals&lt;/h3>
&lt;p>Desenvolver un evento &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> (gift wrap) descifraba antes el wrap, descifraba el seal y devolvía el rumor interior sin comprobar de quién venía el seal. &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a> es una biblioteca JavaScript de utilidades del protocolo Nostr. La &lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/545">corrección de desenvoltura de esta semana&lt;/a> exige que el wrap sea kind 1059, que el seal sea kind 13 con firma válida, y que el &lt;code>pubkey&lt;/code> del rumor sea igual al &lt;code>pubkey&lt;/code> del seal. Descifrar el seal ya prueba el control de &lt;code>seal.pubkey&lt;/code>. Sin esa última comprobación, cualquiera podría sellar un rumor que nombrara a otra persona como autora y hacer que un cliente atribuyera el mensaje a esa víctima.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (DM privados con gift wrap) usa la misma ruta de desenvoltura, así que el vínculo se aplica a los DM privados. El &lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/545">desenvuelto por lotes&lt;/a> omite ahora un wrap que falle esas comprobaciones en lugar de lanzar una excepción, porque los gift wraps no se solicitan y un solo evento hostil descartaría el resto de una consulta al relay.&lt;/p>
&lt;h3 id="haven-añade-administración-de-relay-firmada-y-un-navegador-local-de-notas">Haven añade administración de relay firmada y un navegador local de notas&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/haven">Haven&lt;/a> es un relay Nostr autoalojado y un servidor de medios Blossom. Su &lt;a href="https://github.com/barrydeen/haven/pull/135">consola de administración&lt;/a> recién fusionada expone llamadas de gestión NIP-86 en cada endpoint del relay, con cada petición autenticada por un evento NIP-98 del propietario configurado. Los operadores pueden gestionar bloqueos, listas de permitidos, reglas de kind, nombres de relay y medios almacenados sin dar al relay una clave de firma. Un navegador de notas de solo lectura mantiene opacos los kinds cifrados y carga medios remotos solo después de un clic, evitando una petición automática que revelaría la dirección IP del operador a un servidor externo.&lt;/p>
&lt;p>El mismo &lt;a href="https://github.com/barrydeen/haven/pull/135">cambio en Haven&lt;/a> añade gráficas de tráfico persistentes y corrige un fallo con LMDB por defecto en el que contar eventos almacenados podía entrar en bucle indefinido, fijar un núcleo de CPU y bloquear llamadas posteriores de estadísticas. Haven usa ahora el contador del backend donde este termina y un recorrido acotado de eventos en el resto de los casos. El proyecto añadió sus primeras 23 pruebas sobre paginación de eventos, borrado, persistencia de métricas, comprobaciones de propietario y firmas de peticiones ligadas a la URL.&lt;/p>
&lt;h3 id="amethyst-saca-la-autorización-de-blossom-de-los-hilos-de-carga-de-imágenes">Amethyst saca la autorización de Blossom de los hilos de carga de imágenes&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, un cliente Nostr para Android, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3991">deja de esperar la autorización de lectura de Blossom en los hilos del dispatcher de OkHttp&lt;/a>. El interceptor inicia ahora la firma fuera del hilo de red, mientras el cargador de imágenes espera una firma compartida por servidor y reintenta la petición del blob protegido. Una ráfaga de imágenes con puerta ya no ocupa por tanto todas las ranuras de conexión por servidor mientras un firmante responde.&lt;/p>
&lt;p>El mismo &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3991">parche de Amethyst&lt;/a> alinea la codificación del token con BUD-11: Base64url sin relleno, ámbito &lt;code>server&lt;/code>, y sin tag &lt;code>x&lt;/code> específico de blob, permitiendo que un token cubra varios blobs en el mismo servidor. Nuevas pruebas de concurrencia ejercitan el cacheado, la expiración, los reintentos firmados y dieciséis llamantes simultáneos compartiendo una firma.&lt;/p>
&lt;h2 id="actualizaciones-de-nips-y-trabajo-de-especificación-del-protocolo">Actualizaciones de NIPs y trabajo de especificación del protocolo&lt;/h2>
&lt;h3 id="nips">NIPs&lt;/h3>
&lt;p>Snort y Ditto usan ahora &lt;a href="https://nostrcompass.org/es/topics/nip-22/">NIP-22&lt;/a> (hilos de comentarios) para las respuestas de texto ordinarias, convergiendo en kind 1111 mientras conservan rutas de compatibilidad; esto no establece un kind de respuesta único para todo el protocolo. Después de que la &lt;a href="https://nostrcompass.org/en/newsletters/2026-06-24-newsletter/#kind-1111-as-reply-to-kind-1-notes">modificación de junio&lt;/a> eliminara la prohibición de usar NIP-22 contra notas kind 1, una &lt;a href="https://github.com/nostr-protocol/nips/pull/2448">adición fusionada&lt;/a> a &lt;a href="https://nostrcompass.org/es/topics/nip-30/">NIP-30&lt;/a> (emoji personalizados) lista kind &lt;code>1111&lt;/code> entre los eventos que pueden llevar tags &lt;code>emoji&lt;/code>, con un shortcode en &lt;code>content&lt;/code> resuelto por ese tag. &lt;a href="https://github.com/v0l/snort">Snort&lt;/a>, un cliente Nostr web, &lt;a href="https://github.com/v0l/snort/commit/420ed60e2ff43bd373f2583e171a77002ec9f3a0">escribe ahora cada respuesta como kind 1111&lt;/a>, carga esos comentarios mediante tags de ámbito raíz &lt;code>E&lt;/code>/&lt;code>A&lt;/code> en mayúsculas, y todavía acepta una ruta opcional &lt;a href="https://nostrcompass.org/es/topics/nip-10/">NIP-10&lt;/a> (tags de respuesta kind 1) para las notas antiguas. &lt;a href="https://github.com/soapbox-pub/ditto">Ditto&lt;/a>, un servidor Mastodon y relay Nostr combinados, &lt;a href="https://github.com/soapbox-pub/ditto/commit/8a0ffc6e3a5d9202ffc452fa0de8ae33b5883384">publica cada respuesta como un comentario NIP-22&lt;/a>, kind &lt;code>1111&lt;/code> para texto y kind &lt;code>1244&lt;/code> para voz, mientras sigue renderizando las respuestas kind 1 existentes. Los clientes que solo entienden NIP-10 no verán la nueva forma. Las publicaciones de nivel superior siguen siendo kind 1.&lt;/p>
&lt;p>Una petición &lt;code>pay_invoice&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect) no tiene actualmente una manera estándar de que el cliente especifique un techo de comisión de enrutamiento. Una &lt;a href="https://github.com/nostr-protocol/nips/pull/2444">propuesta abierta de techo de comisión&lt;/a> añade un parámetro opcional &lt;code>max_fee&lt;/code>, en milisatoshis, a &lt;code>pay_invoice&lt;/code>. Las carteras que respeten el presupuesto NO DEBEN enviar un pago cuyo coste de enrutamiento supere &lt;code>amount + max_fee&lt;/code> y DEBEN devolver &lt;code>FEE_LIMIT_EXCEEDED&lt;/code>, definido como ningún cargo y ningún pago intentado. Las implementaciones que lo soporten DEBEN incluir &lt;code>fees_paid&lt;/code> en la respuesta para que el cliente pueda conciliar. Las implementaciones sin soporte de límite de comisión ignoran el parámetro desconocido, y los clientes deberían tratar la ausencia del campo &lt;code>fees_paid&lt;/code> como señal de que el tope puede no haberse aplicado. El cambio no añade kinds de evento y sigue siendo una propuesta hasta que se fusione.&lt;/p>
&lt;p>Una &lt;a href="https://github.com/nostr-protocol/nips/pull/2451">propuesta abierta de etiquetas de idioma en NIP-32&lt;/a> estandarizaría &lt;code>[&amp;quot;l&amp;quot;, &amp;quot;&amp;lt;BCP-47&amp;gt;&amp;quot;, &amp;quot;lang&amp;quot;]&lt;/code> para el idioma del texto declarado por el autor. Como el tag &lt;code>l&lt;/code> de una sola letra ya es indexable por los relays, los clientes podrían pedir un feed en japonés con &lt;code>{&amp;quot;#l&amp;quot;:[&amp;quot;ja&amp;quot;]}&lt;/code> sin actualizar el relay ni recurrir a una detección de idioma poco fiable tras la descarga. El borrador también migra los ejemplos de idioma en los informes de relay de NIP-66, los metadatos de imagen de NIP-68 y las pistas de audio de NIP-71 al mismo espacio de nombres. Las etiquetas siguen siendo afirmaciones del autor sin verificar, y el cambio no está fusionado.&lt;/p>
&lt;h3 id="nostr-wallet-connect">Nostr Wallet Connect&lt;/h3>
&lt;p>Tras un tiempo de espera agotado, una reconexión o una notificación perdida, un cliente de wallet connect necesita una manera de pedir un único registro de pago sin saber qué protocolo de pago de Bitcoin lo creó. Un &lt;a href="https://github.com/nostr-wallet-connect/nwc/pull/5">borrador abierto de consulta de pagos&lt;/a> en el &lt;a href="https://github.com/nostr-wallet-connect/nwc">repositorio de extensiones de NWC&lt;/a> define el opcional NWC-09 &lt;code>lookup_payment&lt;/code> junto al núcleo de NIP-47. La petición usa exactamente un selector: un &lt;code>transaction_id&lt;/code> estable acotado a la cartera, los campos &lt;code>payment_hash&lt;/code> y/o &lt;code>invoice&lt;/code> compatibles con BOLT11 que ya usa &lt;code>lookup_invoice&lt;/code>, o un &lt;code>payment_type&lt;/code> más un objeto &lt;code>lookup&lt;/code> tipado definido por otra extensión. Un resultado exitoso devuelve un sobre común (&lt;code>transaction_id&lt;/code>, &lt;code>type&lt;/code>, &lt;code>state&lt;/code>, &lt;code>payment_type&lt;/code>, &lt;code>amount&lt;/code> en msats, marcas de tiempo, &lt;code>fees_paid&lt;/code> y &lt;code>metadata&lt;/code> opcionales, y un objeto &lt;code>details&lt;/code> discriminado) y DEBE resolverse a exactamente un registro visible para esa conexión. La cartera NO DEBE revelar si existe un registro inaccesible, y un selector que coincida con varios registros visibles devuelve &lt;code>MULTIPLE_MATCHES&lt;/code>. Los estados son &lt;code>pending&lt;/code>, &lt;code>accepted&lt;/code>, &lt;code>settled&lt;/code>, &lt;code>failed&lt;/code>, &lt;code>expired&lt;/code> y &lt;code>canceled&lt;/code>. La misma propuesta añade detalles de oferta y pago BOLT12 en NWC-12 que reutilizan ese sobre. Ambos documentos siguen siendo borradores.&lt;/p>
&lt;h3 id="naps">NAPs&lt;/h3>
&lt;p>Un &lt;a href="https://github.com/napplet/naps/pull/97">borrador abierto de NAP-DISPLAY&lt;/a> permitiría a un napplet pedir a su anfitrión las pantallas de píxeles que tiene permitido usar. Se apoya en la &lt;a href="https://nostrcompass.org/es/topics/nip-5d/">propuesta de web applets NIP-5D&lt;/a>, sin fusionar y tramitada por separado, que presentó el Newsletter #17 y que sigue fuera del conjunto de NIPs fusionados. El borrador define &lt;code>display.list&lt;/code>, que devolvería identificadores estables opacos con ancho y alto lógicos y un tipo elegido en tiempo de ejecución (&lt;code>lcd&lt;/code>, &lt;code>eink&lt;/code>, &lt;code>led-matrix&lt;/code> u &lt;code>other&lt;/code>), y &lt;code>display.push&lt;/code>, que enviaría un lote no vacío de píxeles sRGB de tres bytes direccionados por coordenadas. El descubrimiento en tiempo de ejecución mapearía el RGB lógico sobre la profundidad de color nativa, la orientación y el refresco, y PUEDE rotar, reordenar, cuantizar, aplicar dither o fusionar actualizaciones. La política del shell controlaría qué pantallas puede listar o escribir un napplet y PUEDE rechazar, limitar la tasa o topar los lotes. Antes de aplicar cualquier píxel, el runtime validaría todo el lote, así que un push fallido no cambiaría nada en el dispositivo. El éxito significaría que el lote fue aceptado, no que el refresco del hardware haya terminado.&lt;/p>
&lt;h3 id="marmot">Marmot&lt;/h3>
&lt;p>Un &lt;a href="https://github.com/marmot-protocol/marmot/pull/417">experimento abierto de Marmot&lt;/a> sustituiría el borrador retirado de External Commit para la inscripción desde la misma cuenta por una forma de Commit acotada. &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, el protocolo de mensajería de grupo MLS sobre Nostr, asigna en ese borrador el componente sin datos &lt;code>0x800d&lt;/code> (&lt;code>marmot.same-account-membership.v1&lt;/code>) como marcador de comportamiento negociado. Mientras sea obligatorio, una hoja actual puede redactar exactamente un Add inline de la misma cuenta o de uno a cuatro Removes inline de hermanos, cada uno con un UpdatePath normal y prioridad de convergencia ordinaria, y cada Commit DEBE dejar como máximo cinco hojas actuales por cuenta. El emparejamiento usa un QR efímero mostrado por el patrocinador (&lt;code>marmot-pairing-v1:&lt;/code>) cuyo secreto alimenta HKDF-SHA256 y ChaCha20-Poly1305 sobre un canal independiente del portador. Las pruebas kind &lt;code>453&lt;/code> solo locales ligan la sesión a la clave de cuenta compartida y nunca se envían por relays. Tras un Welcome coincidente, el primer payload de aplicación de quien se une es un acuse kind &lt;code>452&lt;/code> no renderizado ligado a los digests de Welcome y GroupInfo, de modo que un Welcome idéntico byte a byte puede recuperarse sin consumir de nuevo el KeyPackage. El patrocinador emparejado es la raíz de confianza de quien se une para esa rama y no prueba finalidad global. Un documento acompañante de sincronización de cuentas sigue siendo exploratorio y no interoperable. El experimento no forma parte del perfil base adoptado.&lt;/p>
&lt;h2 id="seis-agostos-en-la-historia-de-nostr">Seis agostos en la historia de Nostr&lt;/h2>
&lt;p>Los agostos siguen un solo problema de interoperabilidad: cómo un cliente nombra un objetivo y le adjunta comentarios. El &lt;a href="https://github.com/nostr-protocol/nostr">repositorio original del protocolo&lt;/a> no registró commits en agosto de 2021, así que el núcleo de eventos firmados quedó quieto. &lt;a href="https://nostrcompass.org/es/topics/nip-25/">NIP-25&lt;/a> (reacciones) salió luego de la caja de solo kind 1 en 2022. Los registros reemplazables regulares ganaron coordenadas &lt;code>naddr&lt;/code> y &lt;code>a&lt;/code> con identificador vacío en 2023; en 2024, la &lt;a href="https://github.com/nostr-protocol/nips/commit/ca3c52e3e74f0a4679f1c6c0d9ac6461ea748d2d">clase reemplazable parametrizada aparte pasó a llamarse eventos direccionables&lt;/a> sin cambiar el formato de cable. Las reacciones se trasladaron a medios externos en 2025. El kind 1111 de &lt;a href="https://nostrcompass.org/es/topics/nip-22/">NIP-22&lt;/a> (hilos de comentarios) llegó a clientes en producción en 2026. La progresión va de un documento de protocolo inactivo a un vocabulario compartido de respuestas y reacciones que funciona en notas, registros reemplazables y objetos fuera de la red.&lt;/p>
&lt;h3 id="agosto-de-2021">Agosto de 2021&lt;/h3>
&lt;p>La &lt;a href="https://api.github.com/repos/nostr-protocol/nostr/commits?since=2021-08-01T00:00:00Z&amp;amp;until=2021-08-31T23:59:59Z">ventana de commits de agosto de 2021&lt;/a> en el repositorio original del protocolo está vacía. El último cambio antes de ese mes inactivo fue el borrador de NIP-05 del 18 de junio, que añadió identificadores de dominio DNS como puntero legible por humanos a una clave pública. &lt;a href="https://nostrcompass.org/es/topics/nip-05/">NIP-05&lt;/a> (identificadores de dominio) pasó después a un archivo JSON well-known, pero a mediados de 2021 seguía siendo una consulta TXT de DNS. Agosto no amplió ese trabajo de identificadores ni añadió un nuevo kind de evento o mensaje de relay.&lt;/p>
&lt;p>La misma ventana vacía aparece en las herramientas que ya existían junto a la especificación. &lt;a href="https://github.com/fiatjaf/noscl/commits?since=2021-08-01&amp;amp;until=2021-09-01">noscl&lt;/a>, un cliente de línea de comandos creado en enero de 2021, no registró commits en agosto; tampoco lo hicieron &lt;a href="https://github.com/nbd-wtf/go-nostr/commits?since=2021-08-01&amp;amp;until=2021-09-01">go-nostr&lt;/a> ni &lt;a href="https://github.com/nbd-wtf/nostr-tools/commits?since=2021-08-01&amp;amp;until=2021-09-01">nostr-tools&lt;/a>. La actividad del protocolo se reanudó solo a final de año, cuando el repositorio asignó &lt;a href="https://nostrcompass.org/es/topics/nip-09/">NIP-09&lt;/a> (solicitudes de borrado de eventos) y sustituyó el esquema DNS por un archivo JSON well-known de identificadores. Agosto de 2021 es la etapa inactiva entre el borrador de identificadores de junio y el trabajo de borrado y JSON well-known de diciembre, mientras el &lt;a href="https://fiatjaf.com/nostr.html">modelo de eventos firmados y relays&lt;/a> se mantuvo tal como estaba escrito.&lt;/p>
&lt;h3 id="agosto-de-2022">Agosto de 2022&lt;/h3>
&lt;p>El 19 de agosto, una &lt;a href="https://github.com/nostr-protocol/nips/commit/7af2540c6e392d5cb789c743b1dd237294388649">edición de NIP-25&lt;/a> amplió los objetivos de las reacciones kind 7 desde las notas de texto kind 1 a otras notas. El evento kind 7 y la convención &lt;code>+&lt;/code>/&lt;code>-&lt;/code> ya estaban en el borrador. Ese cambio de interoperabilidad permitió que un me gusta, un no me gusta o un emoji se adjuntara a un perfil, una lista de seguidos o cualquier kind de evento posterior que reutilizara los mismos tags &lt;code>e&lt;/code> y &lt;code>p&lt;/code>.&lt;/p>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/blob/master/25.md">especificación actual de NIP-25&lt;/a> conserva esa generalización: una reacción indica reacciones de usuario a otros eventos, y un objetivo direccionable recibe además un tag &lt;code>a&lt;/code> con coordenadas &lt;code>kind:pubkey:d-tag&lt;/code>. &lt;a href="https://github.com/vitorpamplona/amethyst/blob/main/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip25Reactions/ReactionEvent.kt">Amethyst&lt;/a>, un cliente Android, implementa ese contrato en su constructor de reacciones. Su constructor acepta cualquier evento, escribe tags &lt;code>e&lt;/code>, &lt;code>p&lt;/code> y &lt;code>k&lt;/code>, y añade un tag &lt;code>a&lt;/code> cuando el objetivo es un evento direccionable. Esto generalizó los objetivos de reacción más allá de kind 1; cambios posteriores de agosto añadieron coordenadas estables y tags de contexto de comentario.&lt;/p>
&lt;p>El software de relay también estaba convirtiendo reglas de tags en comportamiento de almacenamiento. El 17 de agosto, nostr-rs-relay &lt;a href="https://github.com/scsibug/nostr-rs-relay/commit/035cf34673ae23407bda6656eef505b3178482ab">dejó de tratar cualquier valor de tag con aspecto hexadecimal como clave de índice binaria&lt;/a>. Limitó esa optimización a los tags de una sola letra y a los valores hexadecimales en minúsculas, preservando los tags de texto ordinarios en lugar de decodificarlos a una forma que los filtros no podían igualar. Ese mismo mes unió así dos caras de la interoperabilidad: las especificaciones ampliaron a qué podía apuntar una interacción, mientras un relay corregía cómo se indexaban y recuperaban esos tags de objetivo.&lt;/p>
&lt;h3 id="agosto-de-2023">Agosto de 2023&lt;/h3>
&lt;p>El 24 de agosto, &lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19&lt;/a> (identificadores bech32) &lt;a href="https://github.com/nostr-protocol/nips/commit/208dee210249f84496ddfa823542d023e23b3edb">definió cómo codificar un evento reemplazable no parametrizado como naddr&lt;/a>. El campo de identificador, el tag &lt;code>d&lt;/code>, pasó a ser una cadena vacía para los kinds que reemplazan solo por pubkey y kind, como los metadatos y las listas de contactos. Cinco días después, &lt;a href="https://nostrcompass.org/es/topics/nip-01/">NIP-01&lt;/a> (el protocolo base de eventos y relays) &lt;a href="https://github.com/nostr-protocol/nips/commit/e50bf508d9014cfb19bfa8a5c4ec88dc4788d490">añadió el formato de a-tag correspondiente&lt;/a>: &lt;code>kind:pubkey:&lt;/code> con dos puntos finales y sin identificador. Los clientes podían ahora apuntar a un registro reemplazable sin esperar un id de evento concreto que el siguiente reemplazo invalidaría.&lt;/p>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/blob/master/19.md">texto actual de NIP-19&lt;/a> sigue indicando a quienes implementan que usen una cadena vacía para esos eventos reemplazables. &lt;a href="https://github.com/nbd-wtf/nostr-tools/blob/master/nip19.ts">nostr-tools&lt;/a>, la biblioteca JavaScript de identificadores, codifica ese campo mediante &lt;code>naddrEncode&lt;/code>, así que quien la llama puede pasar un identificador vacío y producir una coordenada compartible. El trabajo de agosto de 2023 convirtió el estado reemplazable en algo que un comentario, una reacción o un enlace de compartición podía nombrar después de que el evento subyacente hubiera sido sustituido. El agosto siguiente estandarizó la terminología de la clase reemplazable parametrizada relacionada, mientras tags de comentario posteriores reutilizaron la gramática de coordenadas como &lt;code>A&lt;/code> y &lt;code>a&lt;/code>.&lt;/p>
&lt;p>Los payloads privados se estaban volviendo portables al mismo tiempo. El 24 de agosto, rust-nostr &lt;a href="https://github.com/nostrdevkit/nostr/commit/39e581d398d926ff37a6b57a1c6d5fceae270d77">añadió funciones de cifrado y descifrado NIP-44 a sus bindings de JavaScript&lt;/a>, exponiendo el esquema versionado de clave de conversación a las aplicaciones web junto a quienes llamaban desde Rust nativo. El 22 de agosto, Amethyst &lt;a href="https://github.com/vitorpamplona/amethyst/commit/fa4257ad7d7afa76ccb368b4cf6cadefa39461ba">separó el cifrado NIP-44 del formato del evento de mensajería&lt;/a>, reflejando la separación de protocolo entre cómo se cifra el contenido y cómo lo transporta una aplicación. Las coordenadas estables hicieron más fáciles de referenciar los objetos públicos; las APIs de cifrado reutilizables hicieron más fácil mover contenido privado entre implementaciones sin acoplarlo a un kind de mensaje.&lt;/p>
&lt;p>El mismo mes también trajo financiación para trabajo adyacente de aislamiento de claves, interfaz y educación. Una &lt;a href="https://github.com/OpenSats/website/commit/acd33f11b7529c34a846e8c4b4a6c63e7187f970">ronda de subvenciones de OpenSats del 17 de agosto&lt;/a> asignó sus subvenciones del Nostr Fund a Amber, al diseño compartido de interfaz de Nostr y a la educación sobre casos de uso de Nostr. La subvención de Amber se centró en mantener las claves de firma en una aplicación Android dedicada mediante NIP-46, mientras las subvenciones de diseño y educación abordaron la incorporación y los patrones de aplicación reutilizables. El sistema Nostr más amplio avanzaba mediante commits de especificación, aislamiento de claves, trabajo de interfaz y educación de desarrolladores financiada como infraestructura compartida.&lt;/p>
&lt;h3 id="agosto-de-2024">Agosto de 2024&lt;/h3>
&lt;p>El 20 de agosto, las especificaciones &lt;a href="https://github.com/nostr-protocol/nips/commit/ca3c52e3e74f0a4679f1c6c0d9ac6461ea748d2d">renombraron &amp;ldquo;evento reemplazable parametrizado&amp;rdquo; a &amp;ldquo;evento direccionable&amp;rdquo;&lt;/a> en NIP-01 y dieciséis documentos más, incluidos artículos de formato largo, actividades en directo, listas, calendarios y anuncios clasificados. El formato de cable no cambió. &lt;code>kind:pubkey:d-tag&lt;/code> siguió siendo la coordenada. Lo que cambió es que cada especificación que ya usaba esas coordenadas empezó a usar la misma palabra para ellas.&lt;/p>
&lt;p>Ese vocabulario es el que llevan las implementaciones actuales. &lt;a href="https://github.com/nostr-protocol/nips/blob/master/01.md">NIP-01&lt;/a> almacena los eventos direccionables como el registro más reciente por kind, pubkey y tag &lt;code>d&lt;/code>. &lt;a href="https://github.com/nostr-protocol/nips/blob/master/19.md">NIP-19&lt;/a> llama a un naddr &amp;ldquo;a nostr addressable event coordinate&amp;rdquo;. La ruta de reacciones de Amethyst, citada arriba, tipa el objetivo como &lt;code>AddressableEvent&lt;/code> antes de escribir el tag &lt;code>a&lt;/code>. La extensión de coordenadas de 2023 y el cambio de terminología de 2024 usan ambos la gramática de coordenadas &lt;code>kind:pubkey:d-tag&lt;/code>, mientras NIP-01 sigue distinguiendo los eventos reemplazables regulares de los direccionables. Un comentario posterior puede por tanto recuperar una discusión direccionable mediante &lt;code>A&lt;/code> en mayúscula sin importarle qué id de evento ocupa esa dirección en ese momento.&lt;/p>
&lt;p>Los protocolos de almacenamiento aplicaban la misma preferencia por identificadores explícitos. El 27 de agosto, el BUD-04 de Blossom &lt;a href="https://github.com/hzrd149/blossom/commit/4325aa79891cb4d68448ce16e5fa5519058eae4b">permitió que un evento de autorización llevara varios tags &lt;code>x&lt;/code> de hash de blob&lt;/a>, de modo que un cliente pudiera autorizar un lote acotado de subidas, réplicas o borrados sin pretender que los hashes describían un solo objeto. Cuatro días después, el proyecto &lt;a href="https://github.com/hzrd149/blossom/commit/95eb92e70768b0a2d5bab3dc42a5e3418f9055ec">aclaró su descriptor de blob y añadió un ejemplo&lt;/a>. Los eventos Nostr coordinaban operaciones sobre medios direccionados por contenido mientras los bytes permanecían en servidores de medios, separando la autorización firmada del transporte de almacenamiento.&lt;/p>
&lt;p>El 29 de agosto, la firma remota se volvió más tolerante con conjuntos de relays imperfectos. go-nostr cambió su cliente NIP-46 para que &lt;a href="https://github.com/nbd-wtf/go-nostr/commit/5edb54efee52f469fe62180c20d2876fe9c72910">un relay defectuoso no pudiera bloquear una petición enviada por otros relays configurados&lt;/a>: las conexiones a relays y los intentos de publicación se ejecutan de forma independiente, y la llamada avanza en cuanto cualquier conexión tiene éxito. El 19 de agosto, OpenSats también &lt;a href="https://github.com/OpenSats/website/commit/b0ac18552a80c662b6ca33381abeed5c3d833a4c">anunció apoyo a largo plazo para el creador de Amethyst, Vitor Pamplona&lt;/a>, incluido trabajo en los mensajes privados NIP-17, las bibliotecas multiplataforma y el modelo outbox. El vocabulario del protocolo, el transporte resistente, el trabajo de privacidad y la financiación sostenida de mantenimiento convergían en el mismo objetivo: clientes que pudieran seguir funcionando entre dispositivos y condiciones desiguales de relay.&lt;/p>
&lt;h3 id="agosto-de-2025">Agosto de 2025&lt;/h3>
&lt;p>El 22 de agosto, &lt;a href="https://github.com/nostr-protocol/nips/pull/2020">NIP-25 ganó reacciones a contenido externo&lt;/a>. Una reacción a algo que no es un evento Nostr nativo debe ser kind 17 y debe llevar tags &lt;code>k&lt;/code> e &lt;code>i&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-73/">NIP-73&lt;/a> (identificadores de contenido externo), sustituyendo el antiguo tag &lt;code>r&lt;/code> de sitio web. Los ejemplos del texto fusionado son una URL web (&lt;code>k=web&lt;/code>) y un episodio de pódcast identificado por GUID de programa y GUID de ítem, con URLs de Fountain como pistas. Las reacciones habían salido de kind 1 en 2022. Ahora salieron del conjunto de eventos Nostr.&lt;/p>
&lt;p>&lt;a href="https://blog.fountain.fm/p/1-3">Fountain 1.3&lt;/a>, publicado el 15 de agosto de 2025, incorporó esos me gusta antes de la fusión de la especificación y dijo que funcionan con Nostr para que otras apps de pódcast puedan leerlos. El &lt;a href="https://github.com/nostr-protocol/nips/blob/master/25.md">documento de NIP-25&lt;/a> de hoy sigue usando el ejemplo de GUID de pódcast de Fountain. Para agosto de 2025, una coordenada de reacción podía nombrar un episodio de pódcast o una página web con la misma gramática de identificadores que un comentario usa después para una raíz externa.&lt;/p>
&lt;h3 id="agosto-de-2026">Agosto de 2026&lt;/h3>
&lt;p>Este agosto llevó los hilos de comentarios a los clientes que escriben respuestas ordinarias. &lt;a href="https://nostrcompass.org/en/newsletters/2026-06-24-newsletter/#kind-1111-as-reply-to-kind-1-notes">La modificación de junio&lt;/a>, fusionada después, eliminó la línea que había dicho a los clientes que no usaran comentarios NIP-22 en notas cortas. &lt;a href="https://nostrcompass.org/es/topics/nip-30/">NIP-30&lt;/a> (emoji personalizados) &lt;a href="https://github.com/nostr-protocol/nips/pull/2448">añadió luego kind 1111&lt;/a> junto a notas, reacciones y estados de usuario, así que un comentario puede llevar los mismos tags de emoji que esos otros kinds ya usaban. El trabajo de especificación es el permiso. El trabajo de cliente es el despliegue.&lt;/p>
&lt;p>&lt;a href="https://github.com/v0l/snort/commit/420ed60e2ff43bd373f2583e171a77002ec9f3a0">Snort&lt;/a>, un cliente web, publica ahora comentarios NIP-22 para objetivos kind 1 por defecto, se suscribe a hilos mediante tags raíz &lt;code>E&lt;/code>/&lt;code>A&lt;/code> en mayúsculas, y acepta kind 1111 en las notificaciones. &lt;a href="https://github.com/soapbox-pub/ditto/commit/8a0ffc6e3a5d9202ffc452fa0de8ae33b5883384">Ditto&lt;/a>, un cliente web comunitario, publica cada respuesta como comentario NIP-22, kind 1111 para texto y 1244 para voz, incluidas las respuestas a notas kind 1, mientras sigue leyendo respuestas &lt;a href="https://nostrcompass.org/es/topics/nip-10/">NIP-10&lt;/a> (encadenado de notas). El giro de seis años se ve en esos valores por defecto: 2022 generalizó la reacción, 2023 y 2024 nombraron la coordenada, 2025 apuntó las reacciones fuera de la red, y 2026 convirtió el comentario en el evento de respuesta compartido para esos mismos objetivos.&lt;/p>
&lt;p>La infraestructura de grupos privados definía la recuperación como requisito de interoperabilidad. El &lt;a href="https://github.com/marmot-protocol/marmot/commit/4a2bc65f8db5866cec3b2a127dedb37818eaf207">contrato de durabilidad y reinicio del 13 de agosto&lt;/a> de Marmot especifica qué estado local de MLS y de publicación debe sobrevivir a un reinicio, y exige a los clientes reconciliar el estado persistido antes de continuar con operaciones de grupo. Eso extiende la progresión de agosto más allá de nombrar un objetivo: un cliente maduro debe además preservar suficiente estado criptográfico y de entrega para reanudar con seguridad tras una interrupción. Las formas de evento compartidas solo sirven cuando las implementaciones pueden recuperar el estado necesario para usarlas.&lt;/p>
&lt;hr>
&lt;p>Enviad un DM &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> para compartir un proyecto o una noticia a través del &lt;a href="https://github.com/andotherstuff/nostr-compass">proyecto Nostr Compass&lt;/a>.&lt;/p></content:encoded></item><item><title>Nostr Compass #36</title><link>https://nostrcompass.org/es/newsletters/2026-08-19-newsletter/</link><pubDate>Wed, 19 Aug 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-08-19-newsletter/</guid><description>&lt;p>Bienvenidos de nuevo a &lt;a href="https://nostrcompass.org">Nostr Compass&lt;/a>, vuestra guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> endurece la autenticación con relays y cifra los secretos almacenados, &lt;a href="https://github.com/forgesworn/cambium">Cambium&lt;/a> firma para sitios web bajo carga de relay-auth, &lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a> aloja grupos y sitios estáticos en un relay de teléfono, &lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> encola la moderación bajo spam y sincroniza silencios entre dispositivos, &lt;a href="https://github.com/hedwig-corp/bitchat-to-sonar">Sonar&lt;/a> añade respuestas en malla con hilos, &lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> publica pódcasts, y &lt;a href="https://github.com/formstr-hq/nail">Nail&lt;/a> conecta el correo como eventos gift wrap. Las versiones cubren el estado de grupos de MDK, acuñación de insignias, emparejamiento de firmante por QR, firma en navegador en Android y una biblioteca compartida de wallet connect. El trabajo de protocolo abarca parches de comentarios, metadatos de archivos cifrados, formato de hilos, garantías de reinicio de Marmot y listas de membresía de Concord. Análisis en profundidad: insignias y comentarios.&lt;/p></description><content:encoded>&lt;p>Bienvenidos de nuevo a &lt;a href="https://nostrcompass.org">Nostr Compass&lt;/a>, vuestra guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> endurece la autenticación con relays y cifra los secretos almacenados, &lt;a href="https://github.com/forgesworn/cambium">Cambium&lt;/a> firma para sitios web bajo carga de relay-auth, &lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a> aloja grupos y sitios estáticos en un relay de teléfono, &lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> encola la moderación bajo spam y sincroniza silencios entre dispositivos, &lt;a href="https://github.com/hedwig-corp/bitchat-to-sonar">Sonar&lt;/a> añade respuestas en malla con hilos, &lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> publica pódcasts, y &lt;a href="https://github.com/formstr-hq/nail">Nail&lt;/a> conecta el correo como eventos gift wrap. Las versiones cubren el estado de grupos de MDK, acuñación de insignias, emparejamiento de firmante por QR, firma en navegador en Android y una biblioteca compartida de wallet connect. El trabajo de protocolo abarca parches de comentarios, metadatos de archivos cifrados, formato de hilos, garantías de reinicio de Marmot y listas de membresía de Concord. Análisis en profundidad: insignias y comentarios.&lt;/p>
&lt;h2 id="historias-principales">Historias Principales&lt;/h2>
&lt;h3 id="amber-650-cierra-un-confused-deputy-de-relay-auth-y-cifra-los-secretos-almacenados">Amber 6.5.0 cierra un confused deputy de relay-auth y cifra los secretos almacenados&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> es un firmante Android de &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> (intents de firmante en Android) y &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (firma remota mediada por relays). &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.5.0">La versión 6.5.0&lt;/a> cierra cuatro brechas divulgadas: un &lt;a href="https://github.com/greenart7c3/Amber/security/advisories/GHSA-vx4h-56qj-wcp7">confused deputy en la autenticación con relays&lt;/a> que permitía a cualquier llamante obtener un evento &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> (autenticación cliente-relay) de kind &lt;code>22242&lt;/code> para relays que el usuario nunca había aprobado; una &lt;a href="https://github.com/greenart7c3/Amber/security/advisories/GHSA-h9fv-9247-3582">brecha de replay de NIP-46&lt;/a>; &lt;a href="https://github.com/greenart7c3/Amber/security/advisories/GHSA-5fjp-ghh8-wch8">secretos de conexión y claves locales en texto plano&lt;/a> que ahora se cifran en reposo con sobre cifrado; y un &lt;a href="https://github.com/greenart7c3/Amber/security/advisories/GHSA-8844-q5vh-9j8f">lote de endurecimiento de ocho puntos&lt;/a> que cubre autorización del llamante antes de descifrar, análisis de permisos fail-closed, advertencias de &lt;code>ws://&lt;/code> sin cifrar, pantallas QR seguras, redacción de registros, borrado perezoso de claves al cerrar sesión y uso opcional del Keystore con dispositivo desbloqueado.&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.5.1">La versión 6.5.1&lt;/a> vuelve a cifrar los secretos NIP-46 almacenados cuando la clave del Keystore rota tras activar o desactivar el requisito de dispositivo desbloqueado, y corrige un fallo del editor de permisos. &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.5.2">La versión 6.5.2&lt;/a> deja de descifrar columnas que la lista de aplicaciones nunca renderiza, cachea el handle del Keystore, precalienta la caché de cuentas al arrancar y aplica debounce a las notificaciones de estado de relay.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-08-12-newsletter/#amber-640-makes-every-grouped-signing-decision-explicit">La 6.4.0 de la semana pasada&lt;/a> hizo explícitas las decisiones de firma agrupadas; 6.5.x cambia lo que Amber autorizará en absoluto.&lt;/p>
&lt;h3 id="cambium-040-firma-para-sitios-web-y-alivia-ráfagas-de-relay-auth">Cambium 0.4.0 firma para sitios web y alivia ráfagas de relay-auth&lt;/h3>
&lt;p>&lt;a href="https://github.com/forgesworn/cambium">Cambium&lt;/a> es un proxy Android de &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> hacia un firmante hardware Heartwood sobre &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>. Se publicaron seis versiones en dos días.&lt;/p>
&lt;p>&lt;a href="https://github.com/forgesworn/cambium/releases/tag/v0.4.0">La versión 0.4.0&lt;/a> extiende la firma a sitios web. Una página puede solicitar una firma mediante un callback &lt;code>nostrsigner:&lt;/code> validado sin heredar los permisos concedidos a aplicaciones nativas, de modo que una pestaña del navegador no pueda tomar prestada la aprobación de otra app. La misma versión corrige la forma mínima de evento de la especificación: un evento que solo lleva &lt;code>kind&lt;/code> y &lt;code>content&lt;/code> ahora firma correctamente, con Cambium aportando la identidad NIP-46 emparejada, la marca de tiempo actual y un array de etiquetas vacío antes de entregar el evento a rust-nostr. La instrumentación nativa de rust-nostr pasó a ser una puerta obligatoria de integración continua en el mismo cambio.&lt;/p>
&lt;p>&lt;a href="https://github.com/forgesworn/cambium/releases/tag/v0.3.6">La versión 0.3.6&lt;/a> repara el emparejamiento con firmantes que siguen la especificación. La compilación antigua de rust-nostr en Cambium solo aceptaba la cadena literal &lt;code>ack&lt;/code> como resultado de una llamada &lt;code>connect&lt;/code> de NIP-46, así que un firmante que respondía devolviendo el secreto de la URI del bunker — lo que pide la especificación actual y lo que hace el firmware de Heartwood — terminaba el emparejamiento con un error de respuesta inesperada. Pasar de rust-nostr 0.44.2 a 0.44.8 hace aceptables ambas formas, verificado contra hardware en vivo y contra &lt;code>nak bunker&lt;/code>, que sigue respondiendo &lt;code>ack&lt;/code>.&lt;/p>
&lt;p>Las versiones 0.4.1 a 0.4.3 tratan el control de admisión bajo carga. &lt;a href="https://github.com/forgesworn/cambium/releases/tag/v0.4.1">La versión 0.4.1&lt;/a> reserva un hueco en cola para reacciones, publicaciones, eliminaciones y cifrado por delante de la autenticación con relay y el descifrado en segundo plano, acota las llamadas en cola, las descarta cuando el llamante ha agotado el tiempo de espera y devuelve un resultado terminal de no disponible en sobrecarga en lugar de abrir una pantalla de firma en primer plano. &lt;a href="https://github.com/forgesworn/cambium/releases/tag/v0.4.2">La versión 0.4.2&lt;/a> descarta sesiones NIP-46 caducadas o inactivas mucho tiempo antes de la siguiente petición y deja que copias concurrentes del mismo evento de autenticación kind &lt;code>22242&lt;/code> compartan una firma hardware. &lt;a href="https://github.com/forgesworn/cambium/releases/tag/v0.4.3">La versión 0.4.3&lt;/a> admite como máximo un desafío de autenticación distinto por identidad en el worker hardware, nunca reintenta la autenticación internamente y abre un enfriamiento de sesenta segundos por identidad tras un timeout, respondiendo aún a duplicados exactos en caché. Las mediciones de las notas de la versión provienen de un teléfono GrapheneOS conduciendo &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>: una ráfaga en arranque en frío produjo treinta y tres respuestas inmediatas de sobrecarga y trece peticiones completadas sin timeouts del firmante, y un inicio de sesión nuevo durante una ráfaga de autenticación volvió 1,254 segundos después de la aprobación.&lt;/p>
&lt;h3 id="citrine-310-convierte-un-relay-de-teléfono-en-anfitrión-de-grupos-y-de-sitios">Citrine 3.1.0 convierte un relay de teléfono en anfitrión de grupos y de sitios&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a> es un relay Android en el dispositivo. &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v3.1.0">La versión 3.1.0&lt;/a> añade tres capacidades que cambian lo que el relay puede alojar.&lt;/p>
&lt;p>El soporte de &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> (grupos gestionados por relays), la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/29.md">especificación de grupos basada en relay&lt;/a> donde el propio relay guarda membresía y estado de moderación, significa que un teléfono puede alojar un grupo en lugar de unirse a uno. El soporte de &lt;a href="https://nostrcompass.org/es/topics/nip-86/">NIP-86&lt;/a> (API de gestión de relays), la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/86.md">API de gestión de relays&lt;/a> que expone acciones administrativas por JSON-RPC autenticado, llega con una pantalla de ajustes, así que listas de permitidos y baneos pueden gestionarse desde la API además de desde la app. El soporte de sitios web estáticos de &lt;a href="https://nostrcompass.org/es/topics/nip-5a/">NIP-5A&lt;/a> &lt;a href="https://github.com/nostr-protocol/nips/blob/master/5A.md">permite al relay servir nsites&lt;/a> a clientes web, con una lista de exploración modernizada que incluye iconos, búsqueda, orden por última actualización, progreso de instalación, descripciones y un conjunto configurable de relays para obtenerlos que por defecto es &lt;code>nsite.run&lt;/code>, &lt;code>nos.lol&lt;/code> y &lt;code>nostr.land&lt;/code>.&lt;/p>
&lt;p>La superficie de moderación creció en paralelo en &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v3.1.0">la misma versión&lt;/a>. Banear una clave pública localmente ahora ofrece purgar los eventos almacenados de ese autor, una lista configurable &lt;code>REJECTED_KINDS&lt;/code> bloquea kinds que el operador no quiere almacenar, y el control de acceso puede importar listas existentes. Una herramienta de retransmisión empuja eventos almacenados de nuevo a relays seleccionados, lo que da a un archivo guardado en el teléfono una forma de resembrar la red. La versión también elimina la extensión WebSocket &lt;code>permessage-deflate&lt;/code>, aprieta la ruta caliente de consultas, corrige el fallo de Tor al arrancar o detenerse cuando cambia el ajuste de exposición vía Tor, y mueve los registros a una base de datos local con logcat limitado a compilaciones de depuración.&lt;/p>
&lt;h3 id="vector-042-hace-que-la-moderación-comunitaria-sobreviva-a-una-ola-de-spam">Vector 0.4.2 hace que la moderación comunitaria sobreviva a una ola de spam&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> es un mensajero &lt;a href="https://github.com/concord-protocol/concord">Concord&lt;/a> de escritorio y Android. &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.2">La versión 0.4.2&lt;/a> se centra en la moderación bajo carga.&lt;/p>
&lt;p>Los baneos rápidos antes se sobrescribían entre sí. Ahora se encolan, se apilan y se resuelven como una sola operación, así que banear una ola de cuentas cuesta una rotación de claves en lugar de una por cuenta. Aceptar una invitación a una comunidad ya disuelta ahora explica por qué y elimina la invitación de todos los dispositivos del usuario, y disolver una comunidad propia la quita de la lista de comunidades en todas partes, una corrección que llegó en &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.3">la versión 0.4.3&lt;/a>. Los mensajes comunitarios que llegan durante una puesta al día en segundo plano ya no suenan notificaciones como si acabasen de enviarse, y el indicador de escritura expira desde el momento del envío para que una señal retrasada no permanezca en un canal.&lt;/p>
&lt;p>La lista comunitaria fragmentada definida por &lt;a href="https://github.com/concord-protocol/concord">Concord&lt;/a> pasó una revisión cruzada con Armada, el otro cliente Concord. Los renombres ya no inflan la lista, los empates se resuelven igual en ambos clientes, y los datos sin cambios ya no se republican a relays. Silenciar también salió del camino de mensajes directos: un usuario puede silenciar a alguien directamente desde una comunidad sin historial previo, y el silencio aplica a notificaciones e insignias en canales y mensajes directos dejando visibles los mensajes. Los mensajes fijados pasaron a ser una superficie compartida del canal con enlaces clicables, y las ediciones de un fijado lo siguen donde aparezca. Listas de bloqueo, silencios y apodos ahora se sincronizan entre dispositivos del usuario, al igual que chats fijados. La versión 0.4.3 también deja de anunciar que el usuario escribe cuando otro cliente Nostr está conectado con la misma identidad, y desbloquea el arranque de Tor en Windows, que se había congelado al quince por ciento tanto en x64 como en ARM64.&lt;/p>
&lt;h3 id="sonar-trae-respuestas-en-hilo-a-un-mensajero-en-malla-con-nip-c7">Sonar trae respuestas en hilo a un mensajero en malla con NIP-C7&lt;/h3>
&lt;p>&lt;a href="https://github.com/hedwig-corp/bitchat-to-sonar">Sonar&lt;/a> es un mensajero Bluetooth en malla y Nostr. &lt;a href="https://github.com/hedwig-corp/bitchat-to-sonar/releases/tag/v0.1-alpha.13.1">La versión 0.1-alpha.13.1&lt;/a> añade respuestas al estilo Signal en chat &lt;a href="https://github.com/nostr-protocol/nips/blob/master/C7.md">NIP-C7&lt;/a> kind &lt;code>9&lt;/code>, más menciones, reensamblado Bluetooth acotado, límites de copia de seguridad, verificación de firma de ruta en malla y respaldo push FCM. &lt;a href="https://github.com/hedwig-corp/bitchat-to-sonar/releases/tag/v0.1-alpha.13.2">Las versiones 0.1-alpha.13.2&lt;/a> y &lt;a href="https://github.com/hedwig-corp/bitchat-to-sonar/releases/tag/v0.1-alpha.13.3">0.1-alpha.13.3&lt;/a> corrigen cierres al abrir el chat en Android y solapamiento del teclado en iOS.&lt;/p>
&lt;h3 id="nostria-empieza-a-publicar-pódcasts-y-pide-a-los-relays-que-cuenten">Nostria empieza a publicar pódcasts y pide a los relays que cuenten&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> es un cliente web. &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v4.1.70">Las versiones 4.1.70&lt;/a> y &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v4.1.71">4.1.71&lt;/a> añaden publicación de pódcasts para suscriptores premium, con episodios como eventos Nostr firmados. &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v4.1.69">La versión 4.1.69&lt;/a> usa &lt;code>COUNT&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-45/">NIP-45&lt;/a> (consultas de recuento en relays) para totales de reacciones, respuestas y zaps en feeds y completa la localización. &lt;a href="https://nostrcompass.org/en/newsletters/2026-08-12-newsletter/#nostria-4167-expands-encrypted-community-administration">La 4.1.67 de la semana pasada&lt;/a> amplió la administración de comunidades cifradas.&lt;/p>
&lt;h2 id="versiones">Versiones&lt;/h2>
&lt;h3 id="mdk-0914-historial-de-grupo-fail-closed-mediante-creación-de-grupos-más-rápida">MDK 0.9.14: historial de grupo fail-closed mediante creación de grupos más rápida&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> es el kit de desarrollo Rust para &lt;a href="https://github.com/marmot-protocol/marmot">Marmot&lt;/a>, un protocolo de mensajería grupal cifrada transportado sobre Nostr. &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.9.12">La versión 0.9.12&lt;/a> hace fail-closed varias rutas de estado de grupo en lugar de adivinar. Un ancla de bifurcación ausente es ahora un error duro (&lt;a href="https://github.com/marmot-protocol/mdk/pull/1329">PR #1329&lt;/a>), una propuesta de salida se persiste de forma atómica para que un fallo no deje una salida a medias (&lt;a href="https://github.com/marmot-protocol/mdk/pull/1360">PR #1360&lt;/a>), y la reproducción de incidentes se niega a adivinar un formato en flujos JSON delimitados por saltos de línea sin manifiesto (&lt;a href="https://github.com/marmot-protocol/mdk/pull/1140">PR #1140&lt;/a>). Las pruebas de convergencia se ampliaron a la vez, con recuperación entre rutas de historial retenido (&lt;a href="https://github.com/marmot-protocol/mdk/pull/1350">PR #1350&lt;/a>), garantía de convergencia entre adaptadores (&lt;a href="https://github.com/marmot-protocol/mdk/pull/1372">PR #1372&lt;/a>) y campañas de convergencia aisladas generalizadas (&lt;a href="https://github.com/marmot-protocol/mdk/pull/1357">PR #1357&lt;/a>). El diagnóstico de rechazo de relay se conserva en lugar de colapsarse en un fallo genérico (&lt;a href="https://github.com/marmot-protocol/mdk/pull/1361">PR #1361&lt;/a>).&lt;/p>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.9.13">La versión 0.9.13&lt;/a> llegó el 18 de agosto con formato de almacenamiento v2 (&lt;a href="https://github.com/marmot-protocol/mdk/pull/1421">PR #1421&lt;/a>), raíles de migración y escrituras delta sustituyendo instantáneas de cuenta en vivo (&lt;a href="https://github.com/marmot-protocol/mdk/pull/1435">PR #1435&lt;/a>), más puesta al día de invitaciones más rápida (&lt;a href="https://github.com/marmot-protocol/mdk/pull/1444">PR #1444&lt;/a>) y bindings de macOS (&lt;a href="https://github.com/marmot-protocol/mdk/pull/1402">PR #1402&lt;/a>). &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.9.14">La versión 0.9.14&lt;/a> siguió el 19 de agosto con pulido de creación de grupos: imágenes fundacionales pre-subidas (&lt;a href="https://github.com/marmot-protocol/mdk/pull/1498">PR #1498&lt;/a>), agrupación de KeyPackage (&lt;a href="https://github.com/marmot-protocol/mdk/pull/1494">PR #1494&lt;/a>), retención atómica del mensaje inicial (&lt;a href="https://github.com/marmot-protocol/mdk/pull/1497">PR #1497&lt;/a>) y publicación de perfil con relays propios de la cuenta (&lt;a href="https://github.com/marmot-protocol/mdk/pull/1495">PR #1495&lt;/a>). &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/marmotkit-v0.9.14">MarmotKit 0.9.14&lt;/a> y &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/wn-agent-v0.9.14">wn-agent 0.9.14&lt;/a> se publican con el crate principal.&lt;/p>
&lt;h3 id="divine-mobile-1020-acuñar-una-insignia-sin-salir-de-la-app">Divine Mobile 1.0.20: acuñar una insignia sin salir de la app&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">Divine Mobile&lt;/a> es un cliente de vídeo corto que publica y recupera vídeo a través de Nostr. &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.20">La versión 1.0.20&lt;/a> permite acuñar una insignia &lt;a href="https://nostrcompass.org/es/topics/nip-58/">NIP-58&lt;/a> (eventos de premio firmados descritos en el primer análisis en profundidad de este número) y entregarla a alguien sin salir de la app. Tocar una insignia en un perfil explica qué hizo falta para ganarla, la parte de la especificación que suele quedar sin implementar porque el evento de definición y el de premio se almacenan por separado.&lt;/p>
&lt;p>El resto de &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.20">la versión&lt;/a> es trabajo de cliente: tema claro, recorte, rotación y volteo en el editor stop-motion, borradores a un toque del grabador, sincronización de subtítulos con el vídeo, un feed que deprioriza material ya visto, soporte de lector de pantalla en editor, grabador y pestañas de perfil, manejo de movimiento reducido, y ajustes de cuenta que gestionan correo y contraseña de Divine y vinculan o desvinculan cuentas. Los vídeos eliminados ya no dejan estado local, y los marcadores persisten. &lt;a href="https://nostrcompass.org/en/newsletters/2026-08-12-newsletter/#divine-mobile-1019-tightens-accounts-private-messages-and-publishing">La 1.0.19 de la semana pasada&lt;/a> endureció el aislamiento de cuentas y la validación de mensajes privados; la emisión de insignias es una nueva superficie de publicación encima de eso.&lt;/p>
&lt;h3 id="cliprelay-020-emparejar-un-firmante-con-una-cámara">ClipRelay 0.2.0: emparejar un firmante con una cámara&lt;/h3>
&lt;p>&lt;a href="https://github.com/tajava2006/cliprelay">ClipRelay&lt;/a> sincroniza el portapapeles entre dispositivos sobre Nostr. &lt;a href="https://github.com/tajava2006/cliprelay/releases/tag/android%2Fv0.2.0">La versión Android 0.2.0&lt;/a> añade inicio de sesión QR &lt;code>nostrconnect://&lt;/code>, para firmar con una app firmante en otro teléfono, y escaneo con cámara de URLs de bunker, eliminando el hábito de pegar una cadena con secreto a través de un mensajero. La conexión bunker ahora agota el tiempo a los sesenta segundos en lugar de colgarse, y el botón de reintento tras un fallo de inicio con Amber funciona. &lt;a href="https://github.com/tajava2006/cliprelay/releases/tag/desktop%2Fv0.2.0">La versión de escritorio 0.2.0&lt;/a> incluye el timeout y las correcciones de la pestaña de inicio de sesión.&lt;/p>
&lt;p>&lt;a href="https://github.com/tajava2006/cliprelay/releases/tag/android%2Fv0.1.4">La versión 0.1.4&lt;/a> añadió sincronización de portapapeles sensible con caducidad corta en relay, relays de sesión de firmante fijados, y una sonda de vida que exige un ida y vuelta real en lugar de un &lt;code>EOSE&lt;/code> sintetizado localmente. &lt;a href="https://nostrcompass.org/en/newsletters/2026-08-12-newsletter/#cliprelay-013-restores-relay-and-signer-connections-after-idle-periods">La 0.1.3 de la semana pasada&lt;/a> restauró conexiones tras periodos de inactividad.&lt;/p>
&lt;h3 id="bark-139-un-firmante-de-navegador-que-funciona-en-android">Bark 1.3.9: un firmante de navegador que funciona en Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/forgesworn/bark">Bark&lt;/a> es una extensión de navegador que proporciona la interfaz &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a> &lt;code>window.nostr&lt;/code>, el objeto que una página web invoca para pedir firma u operación de cifrado. &lt;a href="https://github.com/forgesworn/bark/releases/tag/v1.3.9">La versión 1.3.9&lt;/a> declara soporte Android para la compilación de Firefox, de modo que el listado de complementos se instala en un teléfono. Firefox en Android no implementa la API de ventanas, así que toda aprobación que abría una ventana emergente habría sido denegada de plano; la superficie de aprobación ahora recurre a una pestaña en primer plano donde cerrar deniega, revisar la trae al frente, y el fondo la cierra cuando la petición termina. Las notas de la versión registran verificación en un Pixel 10 Pro XL con GrapheneOS y Firefox 153.0.4, y dejan claro que Chromium en Android compila fuera el subsistema de extensiones, así que ningún navegador Android derivado de Chromium puede ejecutar Bark.&lt;/p>
&lt;p>&lt;a href="https://github.com/forgesworn/bark/releases/tag/v1.3.8">La versión 1.3.8&lt;/a> corrigió un defecto de interoperabilidad NIP-46 en la otra dirección. Bark sondeaba un dialecto compacto de firma Heartwood enviando el evento como objeto JSON, que firmantes estrictamente tipados incluidos &lt;code>nak&lt;/code> y bunkers sobre rust-nostr no pueden analizar y descartan en silencio, de modo que la firma se quedaba colgada. La sonda ahora solo se envía a firmantes que se identificaron como Heartwood, y todo otro firmante recibe una llamada estándar &lt;code>sign_event&lt;/code> desde la primera firma.&lt;/p>
&lt;h3 id="bray-300-y-toll-booth-600-migran-a-una-biblioteca-compartida-de-wallet-connect">Bray 3.0.0 y Toll Booth 6.0.0 migran a una biblioteca compartida de wallet connect&lt;/h3>
&lt;p>&lt;a href="https://github.com/forgesworn/bray">Bray&lt;/a> y &lt;a href="https://github.com/forgesworn/toll-booth">Toll Booth&lt;/a> pagan ambos mediante &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> Nostr Wallet Connect, la especificación que permite a una aplicación solicitar pagos a un monedero sobre eventos Nostr cifrados. &lt;a href="https://github.com/forgesworn/bray/releases/tag/v3.0.0">Bray 3.0.0&lt;/a> y &lt;a href="https://github.com/forgesworn/toll-booth/releases/tag/v6.0.0">Toll Booth 6.0.0&lt;/a> declaran cada uno un cambio incompatible adoptando &lt;a href="https://github.com/forgesworn/nwc-kit">nwc-kit&lt;/a> para pagos con monedero, y Toll Booth elimina su flujo de credenciales del pagador en el mismo cambio. Ambos publican compilaciones reproducibles cuya salida fue idéntica byte a byte en dos ejecutores independientes, con el hash del tarball impreso en las notas de la versión para que un lector pueda verificar el artefacto del registro.&lt;/p>
&lt;p>Tres parches de Toll Booth siguieron: &lt;a href="https://github.com/forgesworn/toll-booth/releases/tag/v6.0.1">6.0.1&lt;/a> fija la clave de host de despliegue negociada, &lt;a href="https://github.com/forgesworn/toll-booth/releases/tag/v6.1.1">6.1.1&lt;/a> fija &lt;code>cashu-ts&lt;/code> a la versión que apunta su parche, y &lt;a href="https://github.com/forgesworn/toll-booth/releases/tag/v6.1.2">6.1.2&lt;/a> restaura una compilación de imagen.&lt;/p>
&lt;h3 id="noornote-134-unirse-a-comunidades-cifradas-desde-un-enlace-de-invitación">NoorNote 1.3.4: unirse a comunidades cifradas desde un enlace de invitación&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a> es un cliente Nostr para escritorio, web y Android. &lt;a href="https://github.com/77elements/noornote/releases/tag/v1.3.4">La versión 1.3.4&lt;/a> añade comunidades cifradas Armada y Concord como complemento: un usuario se une mediante enlace de invitación, ve las comunidades unidas listadas en ajustes, y recibe notificaciones de actividad. La misma versión añade un control para ocultar publicaciones citadas externas, los destacados que citan un párrafo de un artículo web, globalmente o por autor, ocultando también los reposts de ellos y manteniendo visibles los destacados propios. La resolución de perfil también se reparó, de modo que los perfiles ya no se renderizan como clave pública truncada o marcador anónimo.&lt;/p>
&lt;p>&lt;a href="https://github.com/77elements/noornote/releases/tag/v1.3.5">La versión 1.3.5&lt;/a> añade un expansor para notas largas y corrige el diseño del campo de enlace de invitación Armada. &lt;a href="https://nostrcompass.org/en/newsletters/2026-08-12-newsletter/#noornote-132-moves-article-discovery-into-the-social-graph">La 1.3.2 de la semana pasada&lt;/a> movió el descubrimiento de artículos al grafo social; la membresía comunitaria es una superficie aparte.&lt;/p>
&lt;h3 id="mostro-mueve-el-chat-de-disputas-fuera-del-gift-wrap">Mostro mueve el chat de disputas fuera del gift wrap&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> es un daemon de comercio entre pares cuyas órdenes y mensajes viajan como eventos Nostr, con &lt;a href="https://github.com/MostroP2P/mostro-core">mostro-core&lt;/a> como biblioteca compartida y &lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a> como cliente. &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.3.2">Mobile 1.3.2&lt;/a> migra el chat de disputas del gift wrap &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> (sobres que ocultan metadatos) a un sobre de chat kind &lt;code>14&lt;/code> y respalda el backlog con cursores duraderos por conversación. &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.14.5">mostro-core 0.14.5&lt;/a> serializa el identificador del rumor dentro del gift wrap (&lt;a href="https://github.com/MostroP2P/mostro-core/pull/164">PR #164&lt;/a>), &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.14.4">0.14.4&lt;/a> corrige un error de media de valoraciones (&lt;a href="https://github.com/MostroP2P/mostro-core/pull/163">PR #163&lt;/a>), y &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.3.1">Mobile 1.3.1&lt;/a> cambia a servidores Blossom que retienen adjuntos de chat cifrados. Usar daemon &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.18.2">0.18.2&lt;/a> o &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.18.4">0.18.4&lt;/a>.&lt;/p>
&lt;h3 id="nym-373522-chats-grupales-cifrados-y-almacenamiento-local-cifrado">NYM 3.73.522: chats grupales cifrados y almacenamiento local cifrado&lt;/h3>
&lt;p>&lt;a href="https://github.com/Spl0itable/NYM">NYM&lt;/a> es un cliente Nostr con integración propia de asistente. &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.73.522">La versión 3.73.522&lt;/a> cifra el almacén SQLite local tras &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.73.521">3.73.521&lt;/a> que refina el chat grupal cifrado, y &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.73.520">3.73.520&lt;/a> corrige una rotura de política de seguridad de contenido y la presentación duplicada de mensajes nuevos.&lt;/p>
&lt;h3 id="morganite-004-verificar-un-blob-antes-de-cachearlo">Morganite 0.0.4: verificar un blob antes de cachearlo&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Morganite">Morganite&lt;/a> es un servidor Android &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>, el protocolo de medios donde un archivo se direcciona por el hash SHA-256 de su contenido y se sirve desde cualquier host que lo tenga. &lt;a href="https://github.com/greenart7c3/Morganite/releases/tag/v0.0.4">La versión 0.0.4&lt;/a> verifica el hash de un blob durante la descarga en un solo paso antes de cachearlo, la comprobación que hace significativa la dirección por contenido en el lado receptor. La versión también rastrea el tamaño de caché de forma incremental en lugar de reescanear el directorio en cada guardado, mueve llamadas de red bloqueantes a hilos de entrada y salida, reutiliza instancias Tika para detección MIME, y persiste registros en una base de datos local.&lt;/p>
&lt;h2 id="recién-descubiertos">Recién descubiertos&lt;/h2>
&lt;h3 id="nail-lleva-el-correo-a-nostr-como-eventos-gift-wrap">Nail lleva el correo a Nostr como eventos gift wrap&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nail">Nail&lt;/a> es un puente de correo con licencia MIT y cliente web del equipo Formstr, el grupo detrás de &lt;a href="https://github.com/formstr-hq/nostr-forms">Formstr&lt;/a> y &lt;a href="https://github.com/formstr-hq/nostr-calendar">nostr-calendar&lt;/a>. Llegó al lanzamiento el 18 de agosto con &lt;a href="https://github.com/formstr-hq/nail/pull/7">PR #7&lt;/a>, un cambio de veintidós archivos que añadió etiquetas &lt;code>k&lt;/code> a eventos de correo, recuperación de claves en ajustes y un mensaje de bienvenida. Su despliegue corre en &lt;a href="https://mailstr.app">mailstr.app&lt;/a>, que sirve el propio registro &lt;code>_smtp&lt;/code> &lt;a href="https://nostrcompass.org/es/topics/nip-05/">NIP-05&lt;/a> (esquema DNS que mapea un nombre en un dominio a una clave pública Nostr) del puente.&lt;/p>
&lt;p>El correo en sí es un evento Nostr. Las &lt;a href="https://github.com/formstr-hq/nail/blob/main/client/src/lib/nostr/constants.ts">constantes&lt;/a> del cliente definen un rumor de correo kind &lt;code>1301&lt;/code> llevado dentro de un gift wrap &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> kind &lt;code>1059&lt;/code>, de modo que un mensaje llega al destinatario mediante el mismo sobre que oculta metadatos usado para mensajes directos privados. Los relays de entrega provienen de una lista de bandeja de entrada &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (mensajes directos privados) kind &lt;code>10050&lt;/code> con una lista de relays &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> kind &lt;code>10002&lt;/code> detrás, las carpetas son etiquetas &lt;a href="https://github.com/nostr-protocol/nips/blob/master/32.md">NIP-32&lt;/a> (eventos de etiqueta) kind &lt;code>1985&lt;/code> bajo un espacio de nombres &lt;code>mail&lt;/code>, y los ajustes del cliente viven en un evento de datos de aplicación &lt;a href="https://nostrcompass.org/es/topics/nip-78/">NIP-78&lt;/a> kind &lt;code>30078&lt;/code>. Los adjuntos mayores de 60.000 bytes van a &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> en lugar de al evento, porque &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> (cifrado) limita el texto plano cifrado a 65.535 bytes. Una dirección es un npub en un dominio, y un dominio local sin registro NIP-05 se trata como un buzón inexistente.&lt;/p>
&lt;p>La mitad puente es un servidor LMTP Node que corre junto a un despliegue &lt;a href="https://github.com/mailcow/mailcow-dockerized">mailcow&lt;/a> sin parchearlo: Postfix enruta dominios coincidentes al puente, y el puente inyecta respuestas de vuelta por SMTP. Ese diseño obliga a una respuesta honesta a la pregunta más dura de un puente de correo: qué demuestra una cabecera &lt;code>From&lt;/code>. La &lt;a href="https://github.com/formstr-hq/nail/blob/main/client/src/lib/mail/receive.ts">ruta de recepción&lt;/a> de Nail clasifica cada mensaje en uno de cuatro estados de procedencia: el puente configurado lo selló y se niega a retransmitir un remitente que no verificó upstream, el usuario lo selló él mismo, el registro NIP-05 de la dirección resuelve a la clave selladora, o nada corrobora la cabecera. En ese último caso la interfaz recurre a la clave pública selladora, la única identidad que el evento puede probar de verdad. Las llamadas a la API del puente se autentican con eventos HTTP firmados &lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98&lt;/a> (autenticación HTTP mediante eventos firmados).&lt;/p>
&lt;h3 id="glow-almacena-etiquetas-de-monedero-en-relays-bajo-una-identidad-derivada-de-passkey">Glow almacena etiquetas de monedero en relays bajo una identidad derivada de passkey&lt;/h3>
&lt;p>&lt;a href="https://breez.technology/glow/">Glow&lt;/a> es un monedero Lightning autocustodial de Breez. El inicio de sesión con passkey deriva una identidad Nostr, y las etiquetas del monedero se listan desde relays y se guardan en relays bajo esa identidad, con duplicados idénticos byte a byte colapsados entre cobertura parcial de relays.&lt;/p>
&lt;h2 id="en-desarrollo">En desarrollo&lt;/h2>
&lt;h3 id="amethyst-reconstruye-el-flujo-de-decisión-de-autenticación-con-relays">Amethyst reconstruye el flujo de decisión de autenticación con relays&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> es un cliente Nostr Android. Un bloque de trabajo fusionado remodela cómo maneja la autenticación cliente-relay &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a>. La interfaz de permisos y el flujo de decisión se rediseñaron (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3899">PR #3899&lt;/a>), la autenticación ahora espera a que un desafío se resuelva en lugar de agotar el tiempo (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3905">PR #3905&lt;/a>), las cuentas nuevas autentican por defecto siempre con relays (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3931">PR #3931&lt;/a>), y una opción de «iniciar sesión siempre» se honra para relays que la cuenta no usa (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3937">PR #3937&lt;/a>). La autenticación también reconoce grupos &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> y comunidades Concord como espacios unidos (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3906">PR #3906&lt;/a>), lo que evita que un grupo alojado en relay parezca un relay desconocido cada vez que se abre.&lt;/p>
&lt;p>Dos cambios más tocan superficies de protocolo. La minería de prueba de trabajo bajo &lt;a href="https://nostrcompass.org/es/topics/nip-13/">NIP-13&lt;/a> (nonce PoW) actualiza &lt;code>created_at&lt;/code> mientras mina y gana un análisis de ruta GPU (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3911">PR #3911&lt;/a>), y los hosts de napplet a pantalla completa manejan insets del método de entrada (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3932">PR #3932&lt;/a>). Una copia de seguridad guiada de claves en el primer arranque con entrada en ajustes también se fusionó (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3909">PR #3909&lt;/a>), junto a la capacidad de silenciar chats públicos (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3939">PR #3939&lt;/a>).&lt;/p>
&lt;h3 id="nostrord-implementa-una-propuesta-no-fusionada-de-clave-de-cifrado">nostrord implementa una propuesta no fusionada de clave de cifrado&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrord/nostrord">nostrord&lt;/a> es un cliente de chat Nostr organizado en torno a grupos acotados por relay. Fusionó una implementación de NIP-4e, una propuesta no fusionada para desacoplar el cifrado de mensajes de la clave de identidad que Compass &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/">describió por última vez en el número del 15 de julio&lt;/a>. La cuenta anuncia su propia clave de cifrado kind &lt;code>10044&lt;/code>, guarda la mitad privada localmente y descifra mensajes directos entrantes en proceso, sacando un bunker o extensión de navegador del camino de lectura por completo (&lt;a href="https://github.com/nostrord/nostrord/pull/261">PR #261&lt;/a>). El emparejamiento de dispositivos sobre kinds &lt;code>4454&lt;/code> y &lt;code>4455&lt;/code> mueve esa clave a un segundo dispositivo, y un autoarchivo republica historial dirigido a la nueva clave. El envío se dirigió primero a la clave anunciada (&lt;a href="https://github.com/nostrord/nostrord/pull/247">PR #247&lt;/a>), y un seguimiento corrigió emparejamiento que negoció con éxito sin entregar la clave (&lt;a href="https://github.com/nostrord/nostrord/pull/271">PR #271&lt;/a>). El pull request indica que el formato en wire sigue la implementación desplegada de Jumble donde diverge de la propuesta abierta, lo que sitúa la definición operativa de esta especificación en código publicado en lugar del documento.&lt;/p>
&lt;p>La identidad de grupo se apretó en el mismo lote. Un identificador de grupo es ahora único solo dentro de su relay (&lt;a href="https://github.com/nostrord/nostrord/pull/269">PR #269&lt;/a>), así que el mismo identificador en dos relays se trata como dos grupos (&lt;a href="https://github.com/nostrord/nostrord/pull/272">PR #272&lt;/a>), y las publicaciones de hilo se renderizan como publicaciones de foro (&lt;a href="https://github.com/nostrord/nostrord/pull/274">PR #274&lt;/a>). El churn de conexión que producía repetidas solicitudes de firma kind &lt;code>22242&lt;/code> también se detuvo (&lt;a href="https://github.com/nostrord/nostrord/pull/268">PR #268&lt;/a>), la misma clase de presión sobre el firmante en la que Cambium trabajó tres versiones esta semana.&lt;/p>
&lt;h3 id="nostream-añade-un-monitor-de-relay-y-acuña-códigos-de-invitación">nostream añade un monitor de relay y acuña códigos de invitación&lt;/h3>
&lt;p>&lt;a href="https://github.com/cameri/nostream">nostream&lt;/a> es una implementación de relay en TypeScript. Fusionó un worker de clúster y planificador de sondas que publican eventos de monitorización de relay &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a> (especificación de descubrimiento que permite a un monitor anunciar datos de vida y capacidad sobre otros relays) (&lt;a href="https://github.com/cameri/nostream/pull/724">PR #724&lt;/a>), con esquema de ajustes y valores por defecto (&lt;a href="https://github.com/cameri/nostream/pull/689">PR #689&lt;/a>) y pruebas de integración (&lt;a href="https://github.com/cameri/nostream/pull/733">PR #733&lt;/a>). Una herramienta de línea de comandos ahora acuña códigos de invitación &lt;a href="https://nostrcompass.org/es/topics/nip-43/">NIP-43&lt;/a> (esquema de metadatos de acceso a relay) (&lt;a href="https://github.com/cameri/nostream/pull/732">PR #732&lt;/a>), y el relay por fin anuncia prueba de trabajo &lt;a href="https://nostrcompass.org/es/topics/nip-13/">NIP-13&lt;/a> en su lista de soportados (&lt;a href="https://github.com/cameri/nostream/pull/680">PR #680&lt;/a>), que ya había implementado sin anunciar. Los trabajos de máquinas expendedoras de datos también ganaron migración de persistencia y repositorio (&lt;a href="https://github.com/cameri/nostream/pull/727">PR #727&lt;/a>), y el relay ahora atrapa peticiones de trabajo &lt;a href="https://nostrcompass.org/es/topics/nip-90/">NIP-90&lt;/a> (peticiones de trabajo de máquinas expendedoras de datos) y las registra por el repositorio de trabajos (&lt;a href="https://github.com/cameri/nostream/pull/729">PR #729&lt;/a>).&lt;/p>
&lt;h3 id="rust-nostr-corrige-un-identificador-de-gift-wrap-y-rechaza-reposts-protegidos">rust-nostr corrige un identificador de gift wrap y rechaza reposts protegidos&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrdevkit/nostr">rust-nostr&lt;/a> es la biblioteca Rust y kit de desarrollo detrás de gran parte del trabajo de clientes Rust y móviles de este número. Ahora asegura que el identificador del rumor se calcula antes de cifrar el sello del gift wrap (&lt;a href="https://github.com/nostrdevkit/nostr/pull/1444">PR #1444&lt;/a>), la misma clase de defecto que Mostro corrigió en su propia biblioteca esta semana. Su relay local rechaza un repost de un evento protegido &lt;a href="https://nostrcompass.org/es/topics/nip-70/">NIP-70&lt;/a> (&lt;a href="https://github.com/nostrdevkit/nostr/pull/1445">PR #1445&lt;/a>), la protección para la que existe esa especificación, y el análisis de respuestas NIP-47 tolera importes ausentes y nulos (&lt;a href="https://github.com/nostrdevkit/nostr/pull/1450">PR #1450&lt;/a>) en lugar de fallar con un monedero que los omite. El análisis de URL de relay se endureció (&lt;a href="https://github.com/nostrdevkit/nostr/pull/1451">PR #1451&lt;/a>).&lt;/p>
&lt;h3 id="ndk-añade-mensajes-directos-poscuánticos-y-elimina-una-dependencia-gpl">NDK añade mensajes directos poscuánticos y elimina una dependencia GPL&lt;/h3>
&lt;p>&lt;a href="https://github.com/relaystr/ndk">NDK&lt;/a> es un kit de desarrollo Dart para Nostr. Fusionó cifrado poscuántico híbrido para mensajes directos usando ML-KEM-1024, el mecanismo de encapsulación de claves reticular estandarizado como FIPS 203 (&lt;a href="https://github.com/relaystr/ndk/pull/713">PR #713&lt;/a>), colocándolo junto al acuerdo de claves clásico en lugar de en su lugar. Un cambio aparte sustituyó una implementación Dilithium solo GPL-3.0 por &lt;code>fips204&lt;/code>, el estándar de firma ML-DSA (&lt;a href="https://github.com/relaystr/ndk/pull/712">PR #712&lt;/a>), lo que elimina una restricción de licencia para aplicaciones que incrustan el kit. Las conexiones también pasaron a una identidad cada una (&lt;a href="https://github.com/relaystr/ndk/pull/710">PR #710&lt;/a>).&lt;/p>
&lt;h3 id="nostter-añade-listas-de-marcadores-insignias-de-perfil-y-subidas-blossom">Nostter añade listas de marcadores, insignias de perfil y subidas Blossom&lt;/h3>
&lt;p>&lt;a href="https://github.com/SnowCait/nostter">Nostter&lt;/a> es un cliente web. Fusionó soporte para las formas estándar y heredadas de listas de marcadores &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a> (&lt;a href="https://github.com/SnowCait/nostter/pull/2311">PR #2311&lt;/a>), actualizó su manejo de insignias de perfil NIP-58 (&lt;a href="https://github.com/SnowCait/nostter/pull/2281">PR #2281&lt;/a>), añadió un cargador de medios Blossom (&lt;a href="https://github.com/SnowCait/nostter/pull/2298">PR #2298&lt;/a>), y ahora muestra un identificador &lt;a href="https://nostrcompass.org/es/topics/nip-05/">NIP-05&lt;/a> (nombre de verificación DNS) en el autocompletado de menciones (&lt;a href="https://github.com/SnowCait/nostter/pull/2303">PR #2303&lt;/a>).&lt;/p>
&lt;h3 id="zap-cooking-ata-rutas-de-administración-a-peticiones-firmadas-y-cifra-conexiones-de-monedero-almacenadas">Zap Cooking ata rutas de administración a peticiones firmadas y cifra conexiones de monedero almacenadas&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a> es un sitio de recetas construido sobre eventos Nostr de formato largo. Un lote de seguridad cifra cadenas de conexión Nostr Wallet Connect almacenadas en reposo dentro de un sobre NIP-44 (&lt;a href="https://github.com/zapcooking/frontend/pull/622">PR #622&lt;/a>), sustituye una comparación falsificable de clave pública en rutas administrativas por autenticación HTTP &lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98&lt;/a> (esquema que firma un evento para autorizar una petición HTTP) (&lt;a href="https://github.com/zapcooking/frontend/pull/626">PR #626&lt;/a>), y borra datos de cuenta al cerrar sesión acotando registros NIP-46 pendientes (&lt;a href="https://github.com/zapcooking/frontend/pull/627">PR #627&lt;/a>).&lt;/p>
&lt;h2 id="actualizaciones-de-nips-y-trabajo-de-especificación-del-protocolo">Actualizaciones de NIPs y trabajo de especificación del protocolo&lt;/h2>
&lt;h3 id="nips">NIPs&lt;/h3>
&lt;p>Ningún pull request se fusionó en &lt;a href="https://github.com/nostr-protocol/nips">nostr-protocol/nips&lt;/a> durante esta ventana. Se abrieron seis propuestas tras cerrarse el número anterior, tres de ellas el 18 de agosto después de que el borrador circulara por primera vez.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2438">NIPs PR #2438&lt;/a> propone NIP-9A, parcheo basado en comentarios. Un parche es un comentario kind &lt;code>1111&lt;/code> que referencia el evento parcheado como padre cuyo &lt;code>content&lt;/code> comienza con la etiqueta literal &lt;code>PATCH&lt;/code>, seguida de líneas de parche. Una línea que comienza con un número edita el &lt;code>content&lt;/code> del objetivo en la forma &lt;code>&amp;lt;index&amp;gt; -&amp;lt;deleted&amp;gt; +&amp;lt;inserted&amp;gt; &amp;lt;caracteres insertados&amp;gt;&lt;/code>, contados en caracteres unicode en lugar de bytes, y una línea que comienza con &lt;code>t&lt;/code> sustituye una etiqueta legible por humanos como &lt;code>title&lt;/code>, &lt;code>description&lt;/code>, &lt;code>subject&lt;/code> o &lt;code>picture&lt;/code>. El diseño es deliberadamente retrocompatible: un cliente que no entiende el formato muestra el parche como un comentario etiquetado ordinario, y un cliente que sí lo entiende aplica el parche y oculta el comentario. La propuesta nombra kinds &lt;code>1&lt;/code>, &lt;code>11&lt;/code>, &lt;code>1111&lt;/code>, &lt;code>24&lt;/code> y &lt;code>1621&lt;/code> como parcheables y pide a escritores y lectores rechazar parches demasiado grandes, demasiado numerosos o publicados mucho después del evento original, un intento explícito de evitar que la función se convierta en un canal general de edición para eventos inmutables.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2437">NIPs PR #2437&lt;/a> propone cifrado de archivos para &lt;a href="https://github.com/nostr-protocol/nips/blob/master/94.md">NIP-94&lt;/a>, la especificación de metadatos de archivo que describe un archivo subido en un evento kind &lt;code>1063&lt;/code>. Añade tres etiquetas opcionales: &lt;code>encryption-algorithm&lt;/code>, con &lt;code>aes-gcm&lt;/code> como único valor listado, más &lt;code>decryption-key&lt;/code> y &lt;code>decryption-nonce&lt;/code> codificados en hex. La semántica de etiquetas cambia en consecuencia, con &lt;code>m&lt;/code> describiendo el tipo MIME antes del cifrado, &lt;code>x&lt;/code> guardando el hash del archivo cifrado, y &lt;code>ox&lt;/code> el hash del original, y cualquier fuente &lt;code>thumb&lt;/code>, &lt;code>image&lt;/code> y &lt;code>fallback&lt;/code> cifrada bajo la misma clave y nonce. El propósito declarado es que un operador Blossom público que aloja los bytes no pueda decir qué son, y el autor enmarca el cambio como copiar las propiedades de cifrado de mensajes directos &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> en metadatos de archivo para que el mismo tratamiento funcione dentro de una etiqueta &lt;code>imeta&lt;/code>.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2436">NIPs PR #2436&lt;/a> enmienda NIP-7D, la especificación de hilos de foro construida sobre eventos de hilo kind &lt;code>11&lt;/code> con comentarios &lt;a href="https://nostrcompass.org/es/topics/nip-22/">NIP-22&lt;/a> kind &lt;code>1111&lt;/code> como respuestas. Añade una sección de formato que indica que una publicación de hilo puede formatearse como una nota kind &lt;code>1&lt;/code>, con imágenes en línea, enlaces y referencias &lt;a href="https://nostrcompass.org/es/topics/nip-27/">NIP-27&lt;/a> (referencias de texto), y también podría soportar Djot, un lenguaje de marcado ligero con gramática inequívoca. El argumento del autor es que dejar el formato sin especificar invita a una implementación Markdown por defecto eventual, y el pull request señala a squalk como implementación Djot existente.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2439">NIPs PR #2439&lt;/a> añade métodos &lt;code>assign&lt;/code> y &lt;code>unassign&lt;/code> a &lt;a href="https://nostrcompass.org/es/topics/nip-86/">NIP-86&lt;/a> (comandos de gestión de relay), de modo que un administrador de relay pueda conceder permisos de administración a otra pubkey sin compartir la clave maestra.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2442">NIPs PR #2442&lt;/a> sucede la propuesta de pistas de audio que &lt;a href="https://nostrcompass.org/es/newsletters/2026-01-13-newsletter/">Compass cubrió en enero&lt;/a> mientras ese borrador permanecía abierto; el pull request anterior se ha cerrado desde entonces y este se publica en producción en lightning.fm como eventos de pista kind &lt;code>31337&lt;/code>, con objetos de lanzamiento kind &lt;code>31339&lt;/code>, perfiles de banda, colaboradores por pista, y repartos opcionales de zap &lt;a href="https://nostrcompass.org/es/topics/nip-57/">NIP-57&lt;/a> manteniendo ventas en &lt;a href="https://nostrcompass.org/es/topics/nip-99/">NIP-99&lt;/a>. El contrato de interoperabilidad está publicado en &lt;a href="https://lightning.fm/interop">lightning.fm/interop&lt;/a>, y el editor de escritorio y el daemon de vendedor autoalojado son código abierto.&lt;/p>
&lt;h3 id="marmot">Marmot&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/marmot/pull/416">Marmot PR #416&lt;/a> se fusionó el 13 de agosto y añade un contrato de durabilidad y reinicio al núcleo del protocolo. Los documentos adoptados ya definían convergencia determinista, material retenido de padre candidato, orden publicar-antes-de-aplicar, y comportamiento fail-closed ante historial ausente, sin una regla inequívoca sobre qué ocurre cuando un proceso se interrumpe en las costuras entre ellos. El cambio define hechos lógicos recuperables, equivalencia de reinicio, límites de interrupción de publicación y convergencia, transiciones atómicas para observadores, manejo de material ausente o corrupto, y recuperación de efecto de aplicación, y añade escenarios de conformidad de fallo y reinicio para cada uno. Deja transacciones, diarios, instantáneas, estrategia de reproducción, planificadores y formatos de almacenamiento definidos por implementación, y declara que no requiere cambio de codificación en wire. El fallo específico que cierra es una publicación aceptada externamente pero no confirmada localmente, o una rama seleccionada aplicada parcialmente, produciendo resultados de protocolo dependientes de implementación tras un reinicio.&lt;/p>
&lt;h3 id="concord-y-cords">Concord y CORDs&lt;/h3>
&lt;p>&lt;a href="https://github.com/concord-protocol/concord/pull/18">Concord PR #18&lt;/a>, cubierto previamente en el número de la semana pasada como propuesta abierta, se fusionó el 15 de agosto. Fragmenta la lista comunitaria cifrada entre eventos kind &lt;code>33302&lt;/code>, elimina el límite de cincuenta membresías, y poda entradas retiradas para mantener la lista dentro de límites de tamaño de relay. Las notas de la versión de Vector esta semana registran la mitad del cliente de ese cambio, incluida resolución de empates y la decisión de dejar de republicar datos sin cambios.&lt;/p>
&lt;p>&lt;a href="https://github.com/concord-protocol/concord/pull/22">Concord PR #22&lt;/a> propone brokers de audio y vídeo propiedad de la comunidad. La entidad de metadatos CORD-02 llevaría una lista opcional &lt;code>av_brokers&lt;/code> junto a sus relays, evolucionando por edición como el resto de esa entidad, y el rendezvous CORD-07 tomaría de esa lista, o del broker propio del miembro cuando la comunidad no publica ninguno, ordenado por el desempate existente por clave de sala. La etiqueta broker en presencia sigue siendo legible y útil para informar una división residual, y el argumento de la propuesta para degradarla del enrutamiento es directo: enrutar sobre ella deja que la entrada no confiable de un compañero miembro supere la instrucción propia de la comunidad.&lt;/p>
&lt;p>&lt;a href="https://github.com/concord-protocol/concord/pull/23">Concord PR #23&lt;/a> hace normativo un comportamiento de implementación existente en CORD-05. Antes de persistir una unión, la edición de metadatos génesis del propietario debe abrir bajo las claves entregadas, con planos rotados anclados en el par de compactación. El pull request declara de entrada que esto nunca fue una vulnerabilidad en vivo: la aceptación de paquetes de Vector ya rechaza un paquete cuya raíz entregada no puede abrir el génesis del propietario y nunca aparca una invitación para una comunidad ya retenida, y Armada ya descarta cualquier paquete que movería la base de una comunidad retenida. La brecha era que ningún comportamiento estaba exigido por la especificación, así que un cliente fiel a la especificación podría haber publicado la versión vulnerable.&lt;/p>
&lt;p>Los &lt;a href="https://github.com/hzrd149/blossom">documentos de actualización de Blossom&lt;/a>, las &lt;a href="https://github.com/napplet/naps">propuestas de aplicación Napplet&lt;/a> y la &lt;a href="https://github.com/GammaMarkets/market-spec">especificación Gamma Markets&lt;/a> no registraron cambios en esta ventana.&lt;/p>
&lt;h2 id="análisis-en-profundidad-de-nips">Análisis en profundidad de NIPs&lt;/h2>
&lt;h3 id="insignias-nip-58">Insignias (NIP-58)&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-58/">NIP-58&lt;/a>, definido por su &lt;a href="https://github.com/nostr-protocol/nips/blob/master/58.md">especificación principal&lt;/a>, da a una identidad Nostr una forma de otorgar un token con nombre a otra, y da al destinatario control sobre si aparece en su perfil. El problema que aborda es que cualquier afirmación sobre una persona en Nostr es de otro modo solo una nota: no hay estructura que diga quién emitió una reclamación, cómo se llama, cómo se ve, o si el sujeto la aceptó. Las insignias dan a esa reclamación tres eventos firmados separados con tres intenciones de autor separadas codificadas en ellos.&lt;/p>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/blob/master/58.md">mecánica&lt;/a> se construye a partir de una definición direccionable, un premio y una lista de visualización. Una definición de insignia es un evento kind &lt;code>30009&lt;/code> publicado por el emisor, direccionable mediante su etiqueta &lt;code>d&lt;/code>, de modo que el emisor puede revisar después las etiquetas &lt;code>name&lt;/code>, &lt;code>description&lt;/code>, &lt;code>image&lt;/code> y &lt;code>thumb&lt;/code> de la insignia sin cambiar el identificador al que apunta cualquier otra cosa. El premio es un evento kind &lt;code>8&lt;/code> publicado por el mismo emisor, llevando una etiqueta &lt;code>a&lt;/code> con la coordenada &lt;code>30009:&amp;lt;issuer-pubkey&amp;gt;:&amp;lt;d-identifier&amp;gt;&lt;/code> de la definición y una o más etiquetas &lt;code>p&lt;/code> nombrando destinatarios. La lista de visualización es un evento kind &lt;code>30008&lt;/code> publicado por el destinatario con el valor fijo &lt;code>d&lt;/code> &lt;code>profile_badges&lt;/code>, listando pares de etiquetas &lt;code>a&lt;/code> y &lt;code>e&lt;/code> donde la etiqueta &lt;code>a&lt;/code> es la coordenada de definición y la etiqueta &lt;code>e&lt;/code> es el evento de premio concreto. Esos pares están ordenados y se leen como pares: una etiqueta &lt;code>a&lt;/code> cuyo premio coincidente falta, o una etiqueta &lt;code>e&lt;/code> cuya definición coincidente falta, se ignora, así que una insignia referenciada a medias no se renderiza en silencio.&lt;/p>
&lt;p>Los compromisos de diseño son visibles en lo que la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/58.md">especificación&lt;/a> se niega a hacer. No hay mecanismo de revocación ni caducidad, así que un premio es una declaración permanente del emisor sobre un momento en el tiempo, y un emisor que cambia de opinión solo puede cambiar la definición a la que apunta el premio. No hay transferencia, así que una insignia no circula como token. No hay noción de registro de emisores de confianza, lo que empuja toda la pregunta de confianza al cliente y al lector: una insignia vale exactamente lo que la clave pública del emisor vale para quien la mira. La especificación también concede a los clientes libertad para mostrar menos insignias de las que listó el destinatario y elegir qué tamaño de imagen renderizar, lo que evita que un perfil se convierta en un muro de gráficos elegidos enteramente por terceros.&lt;/p>
&lt;p>La especificación adyacente más cercana es &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a>, la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/51.md">especificación de listas&lt;/a>, y comparar las dos muestra por qué las insignias necesitan tres eventos en lugar de uno. Una lista es un solo autor curando referencias; el autor de la lista es el autor de la reclamación. Una insignia divide la autoría por la mitad, con el emisor firmando que ocurrió el premio y el destinatario firmando que acepta su visualización. Ninguna parte puede producir sola el resultado visible, lo que separa una insignia de una etiqueta autoaplicada.&lt;/p>
&lt;p>Un premio kind &lt;code>8&lt;/code> en vivo recuperado de &lt;a href="https://nos.lol">nos.lol&lt;/a> y &lt;a href="https://relay.primal.net">relay.primal.net&lt;/a> esta semana:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;08504dec368939bd63849a349cab83dea0ac199a852129dbf68cf35fe5c64e96&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;bef514bd58c8ceea4beb9e6b84a8d983935f7be26f49e14df68098f1ba64156e&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1787051248&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">8&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30009:bef514bd58c8ceea4beb9e6b84a8d983935f7be26f49e14df68098f1ba64156e:blocks_orange_league&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;92dfa05d915196a7a09152fa3f57871debfd422e1d278ac5af266a70c3350b1f&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.damus.io&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Badge awarded!&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;5bf0218dfec5e56b47339b0b4b992cceedd2e18798fb3d47cafea51850c00827f66251e4a3e08190370e04a5e1d4d092eeb441141b7219acdd18b80290a022f8&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Las implementaciones actuales cubren emisión, visualización y lectura. &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.20">Divine Mobile 1.0.20&lt;/a> acuña y otorga una insignia dentro de la app y explica una insignia ganada cuando un lector la toca, &lt;a href="https://github.com/SnowCait/nostter/pull/2281">Nostter PR #2281&lt;/a> actualiza el manejo de insignias de perfil en un cliente web, y &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> publica eventos de premio llevando su propia etiqueta de cliente, uno de los cuales aparece en datos de relay junto al ejemplo anterior.&lt;/p>
&lt;h3 id="comentarios-nip-22">Comentarios (NIP-22)&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-22/">NIP-22&lt;/a>, definido por su &lt;a href="https://github.com/nostr-protocol/nips/blob/master/22.md">especificación principal&lt;/a>, proporciona un evento de comentario general para responder a cosas que no son notas de texto corto. El hilado de notas cortas ya tenía &lt;a href="https://nostrcompass.org/es/topics/nip-10/">NIP-10&lt;/a> (convenciones de etiquetas de respuesta), cuyas convenciones de etiquetas crecieron alrededor de kind &lt;code>1&lt;/code> y sus cadenas de respuesta. NIP-22 existe porque un vídeo, un artículo, un evento de calendario, una página wiki o una URL necesita una estructura de respuesta que identifique qué tipo de cosa se está respondiendo, y que funcione cuando el objetivo es direccionable, o es un recurso externo sin evento Nostr alguno.&lt;/p>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/blob/master/22.md">mecánica&lt;/a> gira en torno a una distinción de mayúsculas. Un comentario es un evento kind &lt;code>1111&lt;/code> que lleva dos conjuntos de etiquetas: etiquetas en mayúsculas describen la raíz de la discusión y etiquetas en minúsculas describen el padre inmediato. &lt;code>E&lt;/code>, &lt;code>A&lt;/code> e &lt;code>I&lt;/code> nombran un evento raíz, una coordenada direccionable raíz o un identificador externo raíz, &lt;code>K&lt;/code> nombra el kind de la raíz, y &lt;code>P&lt;/code> nombra al autor de la raíz. Las variantes en minúsculas &lt;code>e&lt;/code>, &lt;code>a&lt;/code>, &lt;code>i&lt;/code>, &lt;code>k&lt;/code> y &lt;code>p&lt;/code> nombran los mismos hechos sobre el padre, que es la raíz misma para un comentario de nivel superior y otro comentario kind &lt;code>1111&lt;/code> para una respuesta anidada. Separarlas significa que un cliente puede obtener toda una discusión con un filtro sobre las etiquetas raíz en mayúsculas, sin recorrer la cadena de respuestas, mientras renderiza correctamente el anidamiento desde las etiquetas padre en minúsculas. Las variantes &lt;code>I&lt;/code> e &lt;code>i&lt;/code> llevan identificadores externos en el formato &lt;a href="https://nostrcompass.org/es/topics/nip-73/">NIP-73&lt;/a> (referencias de contenido externo), lo que permite que un hilo de comentarios se adjunte a una página web, un episodio de pódcast o un libro.&lt;/p>
&lt;p>Los compromisos son sobre todo lo que NIP-22 declina absorber. La &lt;a href="https://github.com/nostr-protocol/nips/blob/master/22.md">especificación&lt;/a> indica que los comentarios no deben usarse para responder a notas kind &lt;code>1&lt;/code>, lo que evita que dos modelos de hilado compitan sobre los mismos objetos y deja NIP-10 donde ya funciona. El anidamiento está permitido pero la raíz permanece fija, así que un hilo profundo nunca pierde su ancla aunque falten eventos intermedios. Las etiquetas de kind son la parte que soporta la carga: un cliente que obtiene un comentario sin su objetivo aún puede decir a qué se enfrenta desde &lt;code>K&lt;/code> y &lt;code>k&lt;/code>, y decidir si puede renderizar ese kind. Lo que la especificación no proporciona es ningún modelo de orden o moderación, así que el orden de visualización, colapso y ocultación son enteramente política del cliente.&lt;/p>
&lt;p>Comparado con &lt;a href="https://github.com/nostr-protocol/nips/blob/master/10.md">NIP-10&lt;/a>, la diferencia está en el tipado. NIP-10 asume que el objetivo es una nota y codifica posición en un hilo; NIP-22 codifica explícitamente la identidad y el kind del objetivo y no asume nada más sobre él. Ese tipado explícito es por qué las propuestas más recientes de este número recurren a kind &lt;code>1111&lt;/code>: un comentario ya lleva una declaración legible por máquina sobre a qué está adjunto.&lt;/p>
&lt;p>Un comentario kind &lt;code>1111&lt;/code> en vivo recuperado de &lt;a href="https://nos.lol">nos.lol&lt;/a> y &lt;a href="https://relay.primal.net">relay.primal.net&lt;/a> esta semana, respondiendo a otro comentario bajo un vídeo:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;c8d335f8bfea58ecd1a943d6000fb2045f4bddf4a36c67df53eb661671f7ab45&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;3e911baba55ae247339cf805dd6ff49ad2cd6bee84ac44e088ce66450c49104f&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1787062681&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1111&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;E&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1c492f2bac17b79d66934a340fa43d8d30d0aea4c9fa329346c05573ef912d70&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;482d024b8acfde50e7429e5ac561d764f3a53a8b4fb0b6975369d9f0926ef839&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;A&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;34236:482d024b8acfde50e7429e5ac561d764f3a53a8b4fb0b6975369d9f0926ef839:e64ba9ea157b1a315caff51dbca656ed73ce817d4494e3966adf24055a86f5c5&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;K&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;34236&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;P&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;482d024b8acfde50e7429e5ac561d764f3a53a8b4fb0b6975369d9f0926ef839&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;7a14723b9ef999e74b1757a0fb74942cb6c121138d4ddafe096a57a67ed0a442&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;8b69e548402afa997343d73e8088224a440f256350f6257b61acc4bb1fa4af4f&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;k&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1111&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;8b69e548402afa997343d73e8088224a440f256350f6257b61acc4bb1fa4af4f&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;client&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Divine&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;31990:d95aa8fc0eff8e488952495b8064991d27fb96ed8652f12cdedc5a4e8b5ae540:divine-mobile&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.divine.video&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;niiice&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a5517fdea07647efa7ab1730fbea8df882690bba667e93ea5aeba4a73be6a49af1ee17c045535483650caf41dbbcb0897d5803fa39b59f395fd6f9bb193bb789&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Las etiquetas en mayúsculas guardan el vídeo y su autor mientras las &lt;code>e&lt;/code> y &lt;code>k&lt;/code> en minúsculas apuntan al comentario padre, que es la forma que describe la especificación. Las implementaciones que leen y escriben kind &lt;code>1111&lt;/code> incluyen &lt;a href="https://github.com/divinevideo/divine-mobile">Divine Mobile&lt;/a>, cuya etiqueta de cliente aparece en el evento anterior, &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, cuyos comentarios aparecen en los mismos resultados de relay, y &lt;a href="https://github.com/nostrord/nostrord/pull/274">nostrord&lt;/a>, que renderiza publicaciones de hilo como publicaciones de foro esta semana. El formato de parche propuesto en &lt;a href="https://github.com/nostr-protocol/nips/pull/2438">NIPs PR #2438&lt;/a> se construye sobre el mismo kind.&lt;/p>
&lt;hr>
&lt;p>Envía un DM &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (mensajes directos privados) para compartir un proyecto o una noticia a través del &lt;a href="https://github.com/andotherstuff/nostr-compass">proyecto Nostr Compass&lt;/a>.&lt;/p></content:encoded></item><item><title>Nostr Compass #35</title><link>https://nostrcompass.org/es/newsletters/2026-08-12-newsletter/</link><pubDate>Wed, 12 Aug 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-08-12-newsletter/</guid><description>&lt;p>Bienvenidos de nuevo a &lt;a href="https://nostrcompass.org">Nostr Compass&lt;/a>, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/nostr-wot/nostr-wot-extension">nostr-wot-extension&lt;/a> añade claves poscuánticas y mensajes protegidos opcionales junto a identidades de Nostr existentes. &lt;a href="https://github.com/divinevideo/divine-mobile">Divine&lt;/a> refuerza el aislamiento de cuentas, la validación de mensajes privados y la confirmación de publicación; &lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> fortalece la convergencia y recuperación de grupos cifrados; y &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> hace explícitas las decisiones de firma agrupadas. Las versiones mejoran las conexiones de monedero, el chat cifrado, el descubrimiento social, la sincronización entre dispositivos y la firma remota, mientras que el trabajo de protocolo abarca identidad y comunidades cifradas. Los análisis en profundidad explican las solicitudes de borrado autenticadas y las denuncias descentralizadas.&lt;/p></description><content:encoded>&lt;p>Bienvenidos de nuevo a &lt;a href="https://nostrcompass.org">Nostr Compass&lt;/a>, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/nostr-wot/nostr-wot-extension">nostr-wot-extension&lt;/a> añade claves poscuánticas y mensajes protegidos opcionales junto a identidades de Nostr existentes. &lt;a href="https://github.com/divinevideo/divine-mobile">Divine&lt;/a> refuerza el aislamiento de cuentas, la validación de mensajes privados y la confirmación de publicación; &lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> fortalece la convergencia y recuperación de grupos cifrados; y &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> hace explícitas las decisiones de firma agrupadas. Las versiones mejoran las conexiones de monedero, el chat cifrado, el descubrimiento social, la sincronización entre dispositivos y la firma remota, mientras que el trabajo de protocolo abarca identidad y comunidades cifradas. Los análisis en profundidad explican las solicitudes de borrado autenticadas y las denuncias descentralizadas.&lt;/p>
&lt;h2 id="historias-principales">Historias Principales&lt;/h2>
&lt;h3 id="nostr-wot-extension-040-añade-claves-poscuánticas-junto-a-una-identidad-de-nostr">nostr-wot-extension 0.4.0 añade claves poscuánticas junto a una identidad de Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-wot/nostr-wot-extension/releases/tag/v0.4.0">nostr-wot-extension 0.4.0&lt;/a> es una extensión de navegador para gestionar identidades de Nostr y firmar. Las cuentas creadas a partir de una semilla de 24 palabras pueden derivar ahora claves de cifrado ML-KEM-1024 y de firma ML-DSA-87 junto a su clave de Nostr existente. Un flujo de un clic publica una atestación de kind &lt;code>10203&lt;/code> que vincula la pubkey de Nostr con ambas pubkeys poscuánticas e incluye una prueba de posesión ML-DSA. Las cuentas importadas desde un mnemónico de 12 palabras, un &lt;code>nsec&lt;/code> sin envoltorio, un firmante remoto o una clave de solo lectura no pueden usar el flujo de derivación, y la extensión explica esa limitación en la vista de cuenta.&lt;/p>
&lt;p>La versión también añade mensajes directos poscuánticos opcionales. Combina el secreto compartido ML-KEM con la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/44.md">clave de conversación cifrada de NIP-44&lt;/a> existente mediante HKDF, y mantiene las capas normales de gift-wrap de &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> (envolturas que ocultan metadatos) para la entrega por relay. El cifrado nunca recurre silenciosamente a un camino anterior después de que el destinatario opte por el nuevo, mientras que el descifrado selecciona automáticamente la ruta adecuada. Esto protege la nueva ruta de mensajes frente a una recuperación posterior de una clave privada de Nostr actual, pero no sustituye las firmas de eventos secp256k1; la versión deja explícitamente esa migración mayor para una futura coordinación con relays y clientes.&lt;/p>
&lt;h3 id="divine-mobile-1019-refuerza-cuentas-mensajes-privados-y-publicación">Divine Mobile 1.0.19 refuerza cuentas, mensajes privados y publicación&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.19">Divine Mobile 1.0.19&lt;/a> es un cliente móvil de vídeo corto que publica y recupera vídeos a través de Nostr. Su selector de cuentas construye ahora cada identidad iniciada en torno a un contenedor con alcance de cuenta, y una corrección de publicación evita que un vídeo se envíe bajo la cuenta equivocada. Las rutas de publicación en relay esperan ahora una respuesta &lt;code>OK&lt;/code> con semántica explícita de éxito, mientras que un frame &lt;code>CLOSED&lt;/code> del relay puede terminar su propia consulta pendiente en lugar de dejar la petición colgada.&lt;/p>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile/pull/6368">El manejo de mensajes privados&lt;/a> rechaza campos rumor no autenticados y sellos sin firmar, restaura cuatro casos de mensajes faltantes y enruta las conversaciones de grupo de participantes totalmente seguidos hacia la bandeja de entrada. La versión también conserva las tags de eventos de vídeo direccionables cuando se actualizan las listas y consume las solicitudes de borrado observadas para que los vídeos eliminados desaparezcan del estado local. Esos cambios siguen al trabajo de tiempo de espera por consulta de relay cubierto la semana pasada, pero desplazan el foco del aislamiento de recuperación hacia los límites de identidad, la validación de mensajes y la confirmación de publicación.&lt;/p>
&lt;h3 id="mdk-0911-refuerza-la-convergencia-y-recuperación-de-grupos-marmot">MDK 0.9.11 refuerza la convergencia y recuperación de grupos Marmot&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.9.11">MDK 0.9.11&lt;/a> es un kit de desarrollo en Rust para Marmot, un protocolo de mensajería de grupo cifrada transportado sobre Nostr. La versión construye un sistema mayor de convergencia y recuperación en torno a la máquina de estados del grupo: los pasos de convergencia obsoletos se reabren en la punta actual del grupo, las proyecciones de capacidad entrantes se confirman de forma atómica, los mensajes diferidos reciben vidas acotadas entre reinicios, y los puntos de control direccionados por commit ayudan a recuperar las propias bifurcaciones de commit de una identidad. Los envíos no estables pueden encolarse y recuperarse, mientras que una ruta de estancamiento de época escala a backfill y los mensajes enviados sobreviven al trabajo de convergencia.&lt;/p>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk/pull/1201">El almacenamiento y las integraciones de host&lt;/a> reciben un refuerzo paralelo. MDK elimina de forma segura las proyecciones SQLite podadas, pone a cero las claves privadas importadas, los intermedios de exportación de claves cifradas NIP-49 y los búferes de serialización OpenMLS, y redacta las claves de imagen de grupo de la salida de depuración. La importación de cuentas puede reanudarse tras una interrupción, se reparan las rutas de almacenamiento privado en iOS y Android, y los hosts pueden cerrar explícitamente el almacenamiento antes de la suspensión. Nuevas proyecciones ligeras de roster y membresía local reducen lo que las aplicaciones deben leer, mientras que el conector Hermes puede entregar varias imágenes generadas por agentes como un álbum Marmot.&lt;/p>
&lt;h3 id="nostria-4167-amplía-la-administración-de-comunidades-cifradas">Nostria 4.1.67 amplía la administración de comunidades cifradas&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria/releases/tag/v4.1.67">Nostria 4.1.67&lt;/a> es un cliente social web y de escritorio para Nostr. Se apoya en los grupos gestionados por relays experimentales de &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> (grupos gestionados por relays) y las comunidades cifradas Concord introducidas en 4.1.53, añadiendo disolución de comunidad, administración de icono y banner, subidas de fotos cifradas con vistas previas comprimidas, un selector completo de reacciones y un diseño de doble panel que mantiene una comunidad abierta mientras el usuario lee notas o artículos. La versión también añade mensajería en hilos y un hub combinado para chats públicos, de grupo y privados.&lt;/p>
&lt;h3 id="amber-640-hace-explícita-cada-decisión-de-firma-agrupada">Amber 6.4.0 hace explícita cada decisión de firma agrupada&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.4.0">Amber 6.4.0&lt;/a> es un firmante Android que mantiene las claves privadas de Nostr separadas de las aplicaciones que solicitan firmas. Su pantalla rediseñada de solicitudes múltiples ofrece controles Aprobar y Denegar para cada petición y cada grupo, sustituyendo al flujo anterior de selección y confirmación. Las solicitudes denegadas enviadas a través de la interfaz bunker mediada por relay de Amber reciben ahora respuestas de error adecuadas, de modo que el cliente solicitante puede distinguir un rechazo de un firmante estancado.&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/tree/v6.4.0">El código etiquetado de Amber&lt;/a> también añade etiquetas localizadas y legibles para 113 kinds de evento más en cada locale publicado. Las adiciones incluyen eventos de grupo Concord, marcadores de repositorio Git de &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a> (listas curadas de eventos) y eventos de presencia en sala de &lt;a href="https://nostrcompass.org/es/topics/nip-53/">NIP-53&lt;/a> (actividades en vivo), dando a los usuarios más contexto sobre datos desconocidos antes de aprobar una firma. Una guarda de mapa concurrente también corrige un fallo de suscripción a relay que podía producir un &lt;code>NegativeArraySizeException&lt;/code>.&lt;/p>
&lt;h3 id="safebox-acorn-separa-un-componente-de-recuperación-portátil-de-la-aplicación-web">Safebox Acorn separa un componente de recuperación portátil de la aplicación web&lt;/h3>
&lt;p>&lt;a href="https://github.com/trbouma/safebox-acorn">Safebox Acorn&lt;/a> es un componente Python independiente y una interfaz de línea de comandos para salvaguardar claves, fondos y registros controlados por el usuario con estado respaldado por Nostr. Extraer Acorn de la aplicación web Safebox más amplia permite a otro proyecto Python instalar el runtime y usar sus ayudantes de clave, perfil de Nostr, relay, registro, Cashu, Lightning y criptografía sin asumir la interfaz web. Sus primitivas actuales de protección de registros pueden generar una clave fresca de 256 bits, derivar una a partir de entropía suministrada por separado, y codificar la clave exacta como una frase de recuperación de 24 palabras con suma de comprobación.&lt;/p>
&lt;p>La &lt;a href="https://trbouma.github.io/safebox-acorn/recovery-and-continuity/">guía de recuperación y continuidad&lt;/a> del proyecto enmarca Acorn como el componente de protocolo reemplazable dentro de un Safebox doméstico o comunitario. El diseño mantiene el estado cifrado disponible a través de un relay local y réplicas independientes para que la recuperación no dependa de un solo dispositivo, aplicación, relay, mint o proveedor de servicio. La documentación es cuidadosa con el límite actual: el cifrado de registros protegidos sigue en diseño, por lo que las aplicaciones no deberían hacer depender los registros de la nueva clave de protección de registros hasta que ese perfil se haya implementado y revisado.&lt;/p>
&lt;h2 id="versiones">Versiones&lt;/h2>
&lt;h3 id="mostro-core-0142-cambia-el-sobre-del-chat-cifrado">Mostro Core 0.14.2 cambia el sobre del chat cifrado&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro-core">Mostro Core&lt;/a> es la biblioteca Rust de tipos compartidos y funciones entre pares usada por el daemon de intercambio Mostro y sus clientes. La &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.14.2">versión 0.14.2&lt;/a> sustituye los mensajes de chat gift-wrap por sobres de kind 14 que usan claves separadas de cifrado de conversación y de firma derivadas del secreto compartido de los pares. El nuevo lector valida el autor, la firma, el destinatario, la marca temporal y el tamaño del contenido, mientras que los ayudantes legacy de gift-wrap siguen disponibles para que los clientes puedan leer ambos formatos durante la migración.&lt;/p>
&lt;h3 id="mostro-0181-inicia-una-ruta-de-escrow-cashu-y-refuerza-el-daemon">Mostro 0.18.1 inicia una ruta de escrow Cashu y refuerza el daemon&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> es un daemon de intercambio Lightning entre pares que coordina órdenes a través de Nostr. La &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.18.1">versión 0.18.1&lt;/a> sienta las bases de un backend de escrow Cashu, incluyendo configuración, ayudantes de base de datos, integración con mint, cableado de arranque y la primera acción de bloqueo. También puede usar precios anunciados por un nodo de confianza sobre Nostr y anuncia requisitos de prueba de trabajo para el primer contacto en su evento de información reemplazable. La versión actualiza su dependencia de Nostr por una corrección de denegación de servicio de NIP-44, elimina claves privadas de los registros de sesión de restauración, rechaza mensajes de cancelación cooperativa no autorizados, refuerza las obtenciones LNURL contra falsificación de peticiones del lado del servidor y bloqueos, valida facturas de pago y restaura las suscripciones a facturas retenidas tras un reinicio.&lt;/p>
&lt;h3 id="lawallet-nwc-230-añade-notificaciones-de-nostr-y-recibos-de-zap">LaWallet NWC 2.3.0 añade notificaciones de Nostr y recibos de zap&lt;/h3>
&lt;p>&lt;a href="https://github.com/lawalletio/lawallet-nwc">LaWallet NWC&lt;/a> es una plataforma Lightning Address de código abierto que conecta monederos a través de &lt;a href="https://nostrcompass.org/es/topics/nip-47/">Nostr Wallet Connect&lt;/a> (conexión de monedero por Nostr). La &lt;a href="https://github.com/lawalletio/lawallet-nwc/releases/tag/v2.3.0">versión 2.3.0&lt;/a> permite a cada monedero enviar notificaciones de recibidos y reenviados como eventos de Nostr configurables, incluyendo una tag &lt;code>p&lt;/code> del destinatario, relays seleccionados, contenido con plantilla y cifrado opcional de &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> (cifrado de mensajes); los reintentos reutilizan el mismo ID de evento firmado. También acepta solicitudes de zap y publica recibos firmados de kind 9735 de &lt;a href="https://nostrcompass.org/es/topics/nip-57/">NIP-57&lt;/a> (zaps) tras la liquidación, mientras que una nueva vista de capacidades de dirección muestra si la dirección resuelta admite NIP-05, NIP-57 y protocolos Lightning Address relacionados.&lt;/p>
&lt;h3 id="nostr-double-ratchet-typescript-00166-vincula-invitaciones-públicas-a-claves-de-sesión">nostr-double-ratchet TypeScript 0.0.166 vincula invitaciones públicas a claves de sesión&lt;/h3>
&lt;p>&lt;a href="https://github.com/irislib/nostr-double-ratchet">nostr-double-ratchet&lt;/a> proporciona primitivas TypeScript y Rust para mensajería directa y de grupo cifrada de extremo a extremo sobre relays de Nostr. &lt;a href="https://github.com/irislib/nostr-double-ratchet/releases/tag/nostr-double-ratchet-ts-v0.0.166">TypeScript 0.0.166&lt;/a> exige que una respuesta a invitación demuestre la propiedad de su clave de sesión, evitando que una invitación pública reutilizable vincule una identidad de Nostr a la sesión de otra parte. La versión también rechaza campos rumor malformados y refuerza la validación de cargas; las sesiones existentes siguen funcionando, pero un invitador actualizado rechaza respuestas sin prueba de invitados antiguos.&lt;/p>
&lt;h3 id="cln-nip47-020-amplía-y-aísla-las-peticiones-nwc">cln-nip47 0.2.0 amplía y aísla las peticiones NWC&lt;/h3>
&lt;p>&lt;a href="https://github.com/daywalker90/cln-nip47">cln-nip47&lt;/a> es un plugin de Core Lightning que expone un nodo a monederos a través de &lt;a href="https://nostrcompass.org/es/topics/nip-47/">Nostr Wallet Connect&lt;/a> (conexión de monedero por Nostr). La &lt;a href="https://github.com/daywalker90/cln-nip47/releases/tag/v0.2.0">versión 0.2.0&lt;/a> añade métodos NWC para crear, cancelar y liquidar facturas retenidas más una notificación &lt;code>hold_invoice_accepted&lt;/code>, y anuncia el conjunto de métodos que el nodo conectado admite realmente. Las respuestas de lista de transacciones se detienen ahora en 500 entradas y unos 128 kB, los eventos de petición se desduplican por ID de evento, y la notificación fallida de un cliente ya no impide la entrega a otros clientes. La versión también elimina los dos métodos de multipago que ya no forman parte de la especificación NWC.&lt;/p>
&lt;h3 id="cliprelay-013-restaura-las-conexiones-de-relay-y-firmante-tras-periodos-de-inactividad">ClipRelay 0.1.3 restaura las conexiones de relay y firmante tras periodos de inactividad&lt;/h3>
&lt;p>&lt;a href="https://github.com/tajava2006/cliprelay">ClipRelay&lt;/a> sincroniza el portapapeles de un usuario entre dispositivos a través de relays de Nostr, cifrando el contenido hacia la misma identidad con &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> (cifrado de mensajes). Las versiones &lt;a href="https://github.com/tajava2006/cliprelay/releases/tag/desktop/v0.1.3">de escritorio&lt;/a> y &lt;a href="https://github.com/tajava2006/cliprelay/releases/tag/android/v0.1.3">Android&lt;/a> 0.1.3 correspondientes añaden un cuadro de texto para enviar texto escrito directamente al portapapeles de otro dispositivo. También prueban la actividad con idas y vueltas reales al relay tras periodos de inactividad, escalando desde la resuscripción hasta la sustitución del socket y un pool de conexiones reconstruido, mientras que las llamadas estancadas al firmante &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (firma remota mediada por relays) agotan ahora el tiempo de espera y se reconstruyen automáticamente.&lt;/p>
&lt;h3 id="noornote-132-traslada-el-descubrimiento-de-artículos-al-grafo-social">NoorNote 1.3.2 traslada el descubrimiento de artículos al grafo social&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a> es un cliente de Nostr para publicaciones sociales, mensajes cifrados, artículos de formato largo y otros tipos de evento en web, escritorio y Android. La &lt;a href="https://github.com/77elements/noornote/releases/tag/v1.3.2">versión 1.3.2&lt;/a> sustituye su feed global plano de artículos por descubrimiento extraído de contactos de primer, segundo y tercer grado, ofreciendo a los lectores una línea temporal de artículos arraigada en su grafo de seguimiento. También colapsa ráfagas de mensajes directos reproducidos de remitentes desconocidos en una sola notificación continua en lugar de producir una pila de avisos a medida que llega el historial del relay.&lt;/p>
&lt;h3 id="bray-240-añade-un-dialecto-compacto-de-firma-remota">Bray 2.4.0 añade un dialecto compacto de firma remota&lt;/h3>
&lt;p>&lt;a href="https://github.com/forgesworn/bray">Bray&lt;/a> es un servidor MCP de Nostr que ofrece a agentes de software y personas herramientas para acceso a relays, identidad, publicación y firma remota. La &lt;a href="https://github.com/forgesworn/bray/releases/tag/v2.4.0">versión 2.4.0&lt;/a> acepta una solicitud de firma cuyo evento es un objeto además de la forma serializada en cadena usada por &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (firma remota mediada por relays), y añade &lt;code>sign_event_compact&lt;/code>, que devuelve solo el ID del evento, la firma, la pubkey y la marca temporal. Ese formato de petición y respuesta más pequeño reduce el uso de memoria para firmantes de hardware restringidos, mientras que el flujo estándar &lt;code>sign_event&lt;/code> permanece sin cambios y ambos dialectos producen una firma sobre el ID del evento recibido.&lt;/p>
&lt;h2 id="recién-descubiertos">Recién descubiertos&lt;/h2>
&lt;h3 id="pact-aporta-vínculos-de-agentes-con-consentimiento-mutuo-a-nostr">Pact aporta vínculos de agentes con consentimiento mutuo a Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/bobodread876/pact">Pact&lt;/a>, descubierto esta semana, es una capa de relaciones en fase temprana para agentes de software construida sobre MATE.md y un transporte borrador NIP-BD. Sus vínculos firmados con consentimiento mutuo los retienen las propias claves de los agentes y pueden publicarse sobre Nostr, mientras que los vínculos privados usan gift-wrap de &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> (envolturas que ocultan metadatos). El monorepo incluye un servidor MCP, SDK TypeScript, cliente de línea de comandos, daemon autoalojable e interfaz web. Su actividad más reciente en el repositorio es anterior a la ventana semanal de este número, por lo que esto es una nota de descubrimiento y no una afirmación de nueva versión.&lt;/p>
&lt;h2 id="cambios-sin-publicar">Cambios sin publicar&lt;/h2>
&lt;h3 id="nostrord-mantiene-sincronizado-el-silenciamiento-de-grupos-entre-dispositivos">nostrord mantiene sincronizado el silenciamiento de grupos entre dispositivos&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrord/nostrord">nostrord&lt;/a> es un cliente multiplataforma para comunidades gestionadas por relays. El &lt;a href="https://github.com/nostrord/nostrord/pull/250">PR #250&lt;/a> almacena las elecciones de silenciamiento por grupo de cada cuenta en un evento autocifrado de kind &lt;code>30078&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-78/">NIP-78&lt;/a> (datos específicos de aplicación), de modo que un ajuste hecho en un dispositivo puede seguir al usuario a otro sin revelar la lista de grupos al relay. El registro reemplazable usa ordenación por evento más reciente, escucha cambios en vivo y revierte la interfaz cuando falla la firma o la publicación en lugar de dejar el estado local desincronizado. Los grupos silenciados también dejan de contribuir totales de no leídos visibles mientras conservan su posición de no leído para la próxima visita.&lt;/p>
&lt;h3 id="amethyst-completa-el-ciclo-de-vida-de-invitaciones-de-concord">Amethyst completa el ciclo de vida de invitaciones de Concord&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> es un cliente Android de Nostr cuyo soporte de comunidades cifradas implementa el protocolo Concord. El &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3888">PR #3888&lt;/a> permite que los enlaces de invitación sobrevivan a un refounding de comunidad reemitiendo sus paquetes en las mismas coordenadas direccionables, mientras que una comprobación de expulsión impide que un miembro eliminado use esa ruta de recuperación. También implementa la lista de invitaciones cifrada CORD-05 tanto en la aplicación como en el cliente de línea de comandos &lt;code>amy&lt;/code>, añade lápidas de revocación por enlace, y exige confirmación del relay antes de eliminar la única clave de firma almacenada que puede retirar un enlace. El mismo trabajo dota a &lt;code>amy&lt;/code> de las rutas de entrega de clave de control, refounding, rekeying y recuperación de miembros aislados necesarias para seguir épocas comunitarias posteriores.&lt;/p>
&lt;h3 id="buzz-lleva-la-apariencia-de-cada-comunidad-entre-escritorio-y-móvil">Buzz lleva la apariencia de cada comunidad entre escritorio y móvil&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/buzz">Buzz&lt;/a> es un espacio de trabajo comunitario basado en Nostr con clientes de escritorio y móvil. Los PR fusionados de escritorio &lt;a href="https://github.com/block/buzz/pull/3653">#3653&lt;/a> y móvil &lt;a href="https://github.com/block/buzz/pull/3767">#3767&lt;/a> almacenan el tema, el acento y la elección de modo del sistema de cada comunidad como un registro cifrado NIP-78 en el relay de esa comunidad. Ambos clientes comparten la misma carga versionada y mantienen cachés locales con alcance de identidad, de modo que cambiar de comunidad o de cuenta no puede aplicar la apariencia equivocada mientras el relay no esté disponible. El orden de reemplazo, las escrituras protegidas y la resuscripción tras una conexión cerrada permiten que los dos clientes converjan de nuevo tras reconectar.&lt;/p>
&lt;p>&lt;a href="https://github.com/block/buzz/releases/tag/desktop-v0.5.10">Buzz Desktop 0.5.10&lt;/a> llegó antes del corte del número con un pase de rendimiento y fiabilidad. Elimina regresiones introducidas tras 0.5.9, acelera la carga de canales, acota la retención inicial de la línea temporal, coalesce la persistencia del estado de lectura, preserva líneas temporales de canal frescas y evita que el worker de ingestión del relay falle con reacciones a eventos de proyecto. También añade el envío de un mensaje de hilo a un canal y restringe la búsqueda de escritorio al alcance previsto.&lt;/p>
&lt;h2 id="actualizaciones-de-nips-y-trabajo-de-especificación-del-protocolo">Actualizaciones de NIPs y trabajo de especificación del protocolo&lt;/h2>
&lt;h3 id="nips">NIPs&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2435">El PR de NIPs #2435&lt;/a> es una enmienda abierta a NIP-34 (colaboración en repositorios git mediante eventos de Nostr). Añade una tag &lt;code>b&lt;/code> opcional a un evento de pull request para que el autor pueda nombrar una rama destino distinta de la predeterminada del repositorio. La propuesta coincide con soporte ya implementado en ngit y GitWorkshop, pero aún no ha entrado en la especificación.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2434">El PR de NIPs #2434&lt;/a> es una propuesta abierta de claves de identidad poscuánticas. Deriva claves poscuánticas de cifrado y firma junto a la clave secp256k1 existente a partir de una semilla de derivación de claves mnemónicas de NIP-06, y vincula las pubkeys a la identidad de Nostr con una atestación de kind &lt;code>10203&lt;/code>. El borrador limita su reclamo a proteger la confidencialidad de mensajes anteriores si secp256k1 se rompe más adelante; no sustituye las firmas de eventos actuales.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2431">El PR de NIPs #2431&lt;/a> es una enmienda abierta de NIP-07 (firmantes de navegador). Un cliente podría adjuntar la pubkey que espera a las peticiones de firma o cifrado, exigiendo al firmante usar esa cuenta o rechazar la llamada. Esto evitaría que una página continuara silenciosamente bajo una identidad distinta después de que el usuario cambie de cuenta en el firmante.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/1813">El PR de NIPs #1813&lt;/a> sigue siendo una propuesta abierta de double-ratchet tras trabajo sustantivo durante la ventana. Especifica conversaciones cifradas con secreto hacia adelante cuyas claves avanzan con los mensajes, con una implementación ya disponible en la biblioteca nostr-double-ratchet e Iris. Sigue siendo un borrador, no un NIP fusionado.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2433">El PR de NIPs #2433&lt;/a> se abrió y cerró sin fusionar durante la ventana. Proponía aclarar los errores de relay de NIP-42 para que &lt;code>auth-required&lt;/code> significara que otra autenticación podría cambiar el resultado, mientras que &lt;code>restricted&lt;/code> significaría que no podría. La distinción abordaba conexiones autenticadas para una clave pero aún sin autorización para otra; el estado cerrado significa que la redacción no entró en la especificación.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2378">El PR de NIPs #2378&lt;/a>, cubierto previamente mientras aún estaba propuesto, se ha cerrado ahora sin fusionar. Sus eventos propuestos de pasaportes de agente, descubrimiento, tareas, marketplace, facturas y conexiones permanecen por tanto fuera del conjunto de NIPs.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/commit/656cecc7c0a815b6a2b218d3b5d6f078b3f4dbab">El commit de NIPs 656cecc&lt;/a> fusionó una corrección solo documental de NIP-29. Añade una tag &lt;code>previous&lt;/code> al ejemplo de metadatos de grupo, mostrando cómo un evento de reemplazo puede identificar el evento que sustituye. Esto aclara un ejemplo y no introduce una nueva característica de protocolo.&lt;/p>
&lt;h3 id="concord-y-cords">Concord y CORDs&lt;/h3>
&lt;p>&lt;a href="https://github.com/concord-protocol/concord/pull/18">El PR de CORD #18&lt;/a> fragmentaría las listas comunitarias cifradas en eventos de kind &lt;code>33302&lt;/code>, eliminaría el límite de 50 membresías y podaría entradas retiradas para mantenerse dentro de los límites del relay. Otras dos propuestas abiertas añaden &lt;a href="https://github.com/concord-protocol/concord/pull/16">localizadores de mención privada&lt;/a> y una &lt;a href="https://github.com/concord-protocol/concord/pull/17">señal de pausa&lt;/a> que suspende el chat sin descartar mensajes.&lt;/p>
&lt;p>&lt;a href="https://github.com/concord-protocol/concord/pull/15">El PR de CORD-02 #15&lt;/a> se fusionó el 6 de agosto y restringe las escrituras al plano de control de una comunidad. Propietarios y personal retienen un nuevo secreto de firma &lt;code>control_root&lt;/code>, mientras que todos los miembros conservan la pubkey derivada y la clave de lectura necesarias para verificar y descifrar el estado de moderación. La clave de escritura es una barrera antispam, no un sustituto de las firmas internas de actor y las comprobaciones de roster que establecen la autoridad.&lt;/p>
&lt;p>&lt;a href="https://github.com/concord-protocol/concord/pull/12">El PR de CORD #12&lt;/a>, cubierto previamente como borrador abierto, se ha cerrado ahora sin fusionar. Su porción de plano de control fue reemplazada por la enmienda CORD-02 fusionada más estrecha arriba, mientras que los canales de escritura restringida y el resto del material borrador no entraron en la especificación.&lt;/p>
&lt;h2 id="análisis-en-profundidad-de-nips">Análisis en profundidad de NIPs&lt;/h2>
&lt;h3 id="solicitudes-de-borrado-de-eventos-nip-09">Solicitudes de borrado de eventos (NIP-09)&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-09/">NIP-09&lt;/a> (solicitudes de borrado de eventos), definido por la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/09.md">especificación principal&lt;/a>, ofrece al autor de un evento una forma firmada de pedir a relays y clientes que dejen de servir uno o más de los eventos de ese autor. No borra cada copia. Transporta la intención del autor a través de la misma red de relays que distribuyó el evento original.&lt;/p>
&lt;p>La solicitud es un evento firmado ordinario de kind &lt;code>5&lt;/code>. Sus tags contienen una o más referencias &lt;code>e&lt;/code> a IDs de evento concretos o referencias &lt;code>a&lt;/code> a coordenadas de eventos direccionables, y las &lt;a href="https://github.com/nostr-protocol/nips/blob/master/09.md#event-deletion-request">reglas de tags de NIP-09&lt;/a> indican que debería incluir una tag &lt;code>k&lt;/code> por cada kind de evento referenciado. El &lt;code>content&lt;/code> opcional puede explicar el motivo. Para una referencia &lt;code>a&lt;/code>, un relay debería eliminar toda versión en esa coordenada cuya marca temporal no sea posterior al &lt;code>created_at&lt;/code> de la solicitud, lo que evita que una solicitud de borrado antigua suprima un reemplazo posterior.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/09.md#relay-behavior">La autoría es el límite de seguridad&lt;/a>. Un relay debería dejar de publicar un evento referenciado solo cuando su &lt;code>pubkey&lt;/code> coincide con la &lt;code>pubkey&lt;/code> de la solicitud de borrado, y un cliente debe realizar esa comprobación antes de ocultar un evento. Un relay puede no poseer el evento referenciado y por tanto ser incapaz de validar la relación al aceptar la solicitud, de modo que los clientes no pueden tratar la aceptación del relay como prueba de que el borrado fue autorizado. La especificación también pide a los relays conservar la solicitud de kind &lt;code>5&lt;/code> porque otro cliente puede ya tener el evento original y encontrar la solicitud más tarde.&lt;/p>
&lt;p>Aquí hay un &lt;a href="https://primal.net/e/6f39fd3d0d593d97dd093f21fabe8f78895579d6979a6ecf14e169bd85bb0943">evento firmado de kind &lt;code>5&lt;/code>&lt;/a>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;6f39fd3d0d593d97dd093f21fabe8f78895579d6979a6ecf14e169bd85bb0943&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;5877220aaae6e54a6f974602d5995c0fe24a3ea7ddabd8644bec795b9da00743&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1786465675&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">5&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;f3d47f8b813928c5baf7ac993846be0220dc37a2e7c7b128fb49a4b92711f131&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;k&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30091&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30091:5877220aaae6e54a6f974602d5995c0fe24a3ea7ddabd8644bec795b9da00743:survey:0ad5cebc-608b-47d7-97fd-9e6c47787199&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nostr-survey&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Public survey summary deleted during privacy refresh&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;846be83b038dc5f91af0c9d03a4ac81aff9bc4cfde7d85c849fa2fdae890f75cc444a4072f45aa18883b0b3871e15381b220182d6e366892f0c9c6f9c0557244&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El borrado sigue siendo una política cooperativa, no revocación de un objeto firmado. Un relay, caché, captura de pantalla o cliente sin conexión puede conservar los bytes originales, y borrar la solicitud de kind &lt;code>5&lt;/code> no la deshace. Los clientes pueden ocultar el objetivo, marcarlo como desautorizado o mostrar el motivo de la solicitud, pero deberían decir a los usuarios que no puede garantizarse un borrado universal. Esto difiere de &lt;a href="https://github.com/nostr-protocol/nips/blob/master/40.md">NIP-40&lt;/a> (expiración de eventos), donde una tag &lt;code>expiration&lt;/code> pide a los relays dejar de almacenar un evento tras un momento elegido al publicarlo. NIP-09 maneja una decisión posterior del autor y puede apuntar a eventos ya distribuidos.&lt;/p>
&lt;p>Las implementaciones actuales aplican esa política en distintas capas. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/6623">Divine PR #6623&lt;/a> elimina vídeos borrados del almacén de eventos del cliente, &lt;a href="https://github.com/hoytech/strfry/pull/251">strfry PR #251&lt;/a> extiende las solicitudes de borrado válidas a destinatarios gift-wrap, y &lt;a href="https://github.com/vitorpamplona/amethyst/blob/278ddd27904dc721e54ffaca8803307d154f2e1d/README.md">Amethyst&lt;/a> declara soporte de NIP-09 en su cliente. &lt;a href="https://github.com/nostrord/nostrord/blob/862855e8e7130f509c458c6b4d36a3bd660f16d8/composeApp/src/commonMain/kotlin/org/nostr/nostrord/network/NostrGroupClient.kt">El cliente de grupo de nostrord&lt;/a> ofrece otra ruta de implementación actual.&lt;/p>
&lt;h3 id="denuncias-nip-56">Denuncias (NIP-56)&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-56/">NIP-56&lt;/a> (eventos de denuncia), definido por la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/56.md">especificación principal&lt;/a>, estandariza una denuncia firmada sobre una cuenta, un evento o un blob referenciado. Separa la señal de denuncia de la decisión de moderación, permitiendo a cada cliente o relay elegir qué denunciantes confía y qué respuesta encaja con su política.&lt;/p>
&lt;p>Una denuncia usa kind &lt;code>1984&lt;/code> y debe identificar la cuenta denunciada en una tag &lt;code>p&lt;/code>. Denunciar una nota también requiere una tag &lt;code>e&lt;/code> para el ID del evento. El tercer valor de la tag lleva una de las categorías especificadas: &lt;code>nudity&lt;/code>, &lt;code>malware&lt;/code>, &lt;code>profanity&lt;/code>, &lt;code>illegal&lt;/code>, &lt;code>spam&lt;/code>, &lt;code>impersonation&lt;/code> o &lt;code>other&lt;/code>. Una denuncia sobre un blob puede usar su hash en una tag &lt;code>x&lt;/code>, una tag &lt;code>e&lt;/code> para el evento que referenció el blob, y una tag &lt;code>server&lt;/code> opcional para una ubicación. Las tags opcionales &lt;code>L&lt;/code> y &lt;code>l&lt;/code> de &lt;a href="https://github.com/nostr-protocol/nips/blob/master/32.md">NIP-32&lt;/a> (etiquetado) pueden añadir una etiqueta con espacio de nombres cuando la lista fija de categorías no es lo bastante precisa.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/56.md#reporting">El evento prueba solo que una clave hizo una alegación&lt;/a>. El contenido denunciado no se vuelve falso, ilegal o eliminable meramente porque exista un kind &lt;code>1984&lt;/code> válido, y un relay abierto no puede contar con seguridad denuncias anónimas como votos. La especificación desaconseja la moderación automática del relay porque las denuncias son fáciles de manipular, a la vez que permite a los administradores de relay actuar sobre denuncias de moderadores en los que ya confían. Un cliente puede en cambio ponderar denuncias a través del grafo social de un usuario, por ejemplo difuminando contenido tras varios contactos de confianza que marquen la misma cuenta.&lt;/p>
&lt;p>Aquí hay un &lt;a href="https://primal.net/e/17301ea66066d34af9ba0b6957ed9d9d8854b9436939e682e21e7a5a8768e4b2">evento firmado de kind &lt;code>1984&lt;/code>&lt;/a>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;17301ea66066d34af9ba0b6957ed9d9d8854b9436939e682e21e7a5a8768e4b2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;1ff02fb5cdc633c1be55368ab655490ec25d2f5dc2e364d4703bc3196d99eab1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1786465319&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1984&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;3a72b02cc05ee07310dc580874b6a9ca8271c6518b90655bd2e98003c9601e68&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;impersonation&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;6362e415410feb19e0505654a4660e8456b6b2aec5ae39173a0429a6a8e5fa1381c9488198ca2982db43ee8198af056f2a25537705c763784062056d0ab2eb1a&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/tree/master">NIP-56 y NIP-09 resuelven problemas distintos&lt;/a>. Una denuncia de kind &lt;code>1984&lt;/code> puede apuntar a la cuenta o evento de otra persona, pero no confiere autoridad de borrado. Una solicitud de kind &lt;code>5&lt;/code> expresa la intención del autor original y solo es válida contra los propios eventos de ese autor. Ninguno garantiza eliminación: NIP-56 delega deliberadamente la acción a la política de moderación local, mientras que NIP-09 depende de que relays y clientes honren una solicitud autenticada.&lt;/p>
&lt;p>Las implementaciones exponen esas elecciones en productos distintos. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/6591">Divine PR #6591&lt;/a> corrige la entrega de denuncias en un cliente de vídeo corto, &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/250">Conduit PR #250&lt;/a> lee denuncias como contexto acotado para participantes de marketplace, y &lt;a href="https://github.com/nostrord/nostrord/blob/862855e8e7130f509c458c6b4d36a3bd660f16d8/composeApp/src/commonMain/kotlin/org/nostr/nostrord/nostr/Nip56.kt">el módulo NIP-56 de nostrord&lt;/a> publica y procesa eventos de denuncia. &lt;a href="https://github.com/vitorpamplona/amethyst/blob/278ddd27904dc721e54ffaca8803307d154f2e1d/README.md#nip-support">Amethyst&lt;/a> también lista soporte actual de NIP-56.&lt;/p>
&lt;hr>
&lt;p>Envía un DM por NIP-17 para compartir un proyecto o noticia a través del &lt;a href="https://github.com/andotherstuff/nostr-compass">proyecto Nostr Compass&lt;/a>.&lt;/p></content:encoded></item><item><title>Nostr Compass #34</title><link>https://nostrcompass.org/es/newsletters/2026-08-05-newsletter/</link><pubDate>Wed, 05 Aug 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-08-05-newsletter/</guid><description>&lt;p>Bienvenidos de nuevo a &lt;a href="https://github.com/andotherstuff/nostr-compass">Nostr Compass&lt;/a>, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://sandstr.app/">Sandstr&lt;/a> permite a los recién llegados explorar clientes de Nostr simulados sin crear claves ni instalar una aplicación. &lt;a href="https://github.com/0ceanSlim/nostr-mill">nostr-mill&lt;/a> añade consentimiento del firmante por evento y recuperación de claves entre clientes, mientras que &lt;a href="https://github.com/nostrord/nostrord">nostrord&lt;/a> amplía los grupos alojados en relays, los firmantes, la moderación, las subidas y los destacados. El trabajo de protocolo abarca los formatos de eventos de Nostr, las conexiones de monedero, el descubrimiento de relays, los napplets, Marmot y Concord; los análisis en profundidad explican la búsqueda asistida por relays y los destacados portátiles.&lt;/p></description><content:encoded>&lt;p>Bienvenidos de nuevo a &lt;a href="https://github.com/andotherstuff/nostr-compass">Nostr Compass&lt;/a>, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://sandstr.app/">Sandstr&lt;/a> permite a los recién llegados explorar clientes de Nostr simulados sin crear claves ni instalar una aplicación. &lt;a href="https://github.com/0ceanSlim/nostr-mill">nostr-mill&lt;/a> añade consentimiento del firmante por evento y recuperación de claves entre clientes, mientras que &lt;a href="https://github.com/nostrord/nostrord">nostrord&lt;/a> amplía los grupos alojados en relays, los firmantes, la moderación, las subidas y los destacados. El trabajo de protocolo abarca los formatos de eventos de Nostr, las conexiones de monedero, el descubrimiento de relays, los napplets, Marmot y Concord; los análisis en profundidad explican la búsqueda asistida por relays y los destacados portátiles.&lt;/p>
&lt;h2 id="historias-principales">Historias Principales&lt;/h2>
&lt;h3 id="nostr-mill-160-lleva-el-consentimiento-de-firma-y-la-recuperación-de-cuentas-al-navegador">nostr-mill 1.6.0 lleva el consentimiento de firma y la recuperación de cuentas al navegador&lt;/h3>
&lt;p>&lt;a href="https://github.com/0ceanSlim/nostr-mill/releases/tag/v1.6.0">nostr-mill 1.6.0&lt;/a> es un selector de cuentas y firmante integrable en el navegador. Ahora solicita consentimiento por kind de evento y muestra el contenido y las etiquetas decodificados antes de firmar, con permisos de duración limitada y un gestor de permisos. La versión también corrige un error de primera sesión que permitía firmar sin preguntar en las categorías configuradas para solicitar confirmación cada vez. Su incorporación opcional mediante Google puede importar un &lt;code>nsec&lt;/code> existente, almacena la clave cifrada en la carpeta de datos de aplicación de Drive del usuario, admite múltiples identidades y puede exportar un &lt;code>ncryptsec&lt;/code> en formato &lt;a href="https://nostrcompass.org/es/topics/nip-49/">NIP-49&lt;/a> (formato de clave privada cifrada).&lt;/p>
&lt;p>La &lt;a href="https://github.com/0ceanSlim/nostr-mill/releases/tag/v1.6.0">copia de seguridad experimental en relays&lt;/a> deriva una frase de recuperación robusta con scrypt y HKDF, envuelve la clave como &lt;code>ncryptsec&lt;/code>, verifica los eventos recuperados y exige un quórum de relays antes de la recuperación. El inicio de sesión mediante &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> (intents de firmante en Android) ahora usa la ruta de retorno por portapapeles de Amber, y las conexiones &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (firma remota mediada por relays) son silenciosas por defecto. Los controles de marca y las pantallas de permisos adaptables completan la versión sin cambiar las integraciones existentes salvo que el operador lo active.&lt;/p>
&lt;h3 id="nostrord-250-da-a-los-grupos-de-relays-identidades-estables-y-específicas-del-relay">nostrord 2.5.0 da a los grupos de relays identidades estables y específicas del relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrord/nostrord/releases/tag/v2.5.0">nostrord 2.5.0&lt;/a> es un cliente multiplataforma para comunidades alojadas en relays. Ahora deriva una identidad &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> (grupos gestionados por relays) a partir del ID de grupo y del relay anfitrión, delimita la membresía y las insignias de administrador del mismo modo, acepta enlaces profundos &lt;code>naddr&lt;/code> de grupo y sincroniza los hilos de grupos privados entre dispositivos.&lt;/p>
&lt;p>La &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v2.5.0">versión&lt;/a> también añade una bandeja de moderación con &lt;a href="https://nostrcompass.org/es/topics/nip-56/">NIP-56&lt;/a> (eventos de denuncia), inicio de sesión con Amber a través de NIP-55, retroceso ante límites de velocidad para el tráfico del firmante NIP-46, renderizado de &lt;a href="https://nostrcompass.org/es/topics/nip-84/">NIP-84&lt;/a> (destacados portátiles) con reintentos para referencias no resueltas, y subidas de medios a través de Blossom o &lt;a href="https://nostrcompass.org/es/topics/nip-96/">NIP-96&lt;/a> (almacenamiento HTTP de archivos). El inicio de sesión con Google ahora respalda la clave antes de crear la cuenta y confirma las desconexiones. Las respuestas en hilos ganan contenido más rico y borrado por administradores, mientras que las correcciones del llavero de escritorio y del teclado móvil mantienen utilizables esas funciones de protocolo.&lt;/p>
&lt;h3 id="primal-android-3525-actualiza-la-firma-remota-y-el-filtrado-de-listas-de-seguimiento">Primal Android 3.5.25 actualiza la firma remota y el filtrado de listas de seguimiento&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.5.25">Primal Android 3.5.25&lt;/a> es un cliente móvil de Nostr con feeds, búsqueda y firma remota. Actualiza su firmante remoto para el comportamiento actual del protocolo, añade una lista de silenciados de seguidos, abre la búsqueda desde Explorar, repara automáticamente las conexiones de relay estancadas, expone los tiempos de espera de las peticiones en la interfaz, rechaza entradas no válidas en la lista de seguidos y actualiza las URL de relay de reserva. La precarga de feeds, el menor uso de memoria y un límite de caché de 100 MB reducen el coste de mantener esos feeds al día. Las notas con una sola imagen ahora usan todo el ancho del contenido, y los controles de perfil y la precarga de medios reciben correcciones menores de interacción y ordenación.&lt;/p>
&lt;h3 id="nostur-1302-amplía-las-respuestas-privadas-y-los-medios-en-mensajes-directos">Nostur 1.30.2 amplía las respuestas privadas y los medios en mensajes directos&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostur-com/nostur-ios-public/releases/tag/527">Nostur 1.30.2&lt;/a> es un cliente de Nostr para plataformas Apple. Siempre expone la acción de respuesta privada, añade cachés de medios por conversación con límites y controles de borrado, mejora el autocompletado de nombres y etiquetas en publicaciones y chats, muestra los mensajes referenciados en el chat en vivo e incluye el título de la sala en las notificaciones del chat. Las correcciones de paginación del feed y de respuestas anidadas abordan regresiones de recuperación y renderizado de conversaciones.&lt;/p>
&lt;h3 id="chama-570-añade-registros-de-árbitros-y-recuperación-de-intercambios-en-caché">Chama 5.7.0 añade registros de árbitros y recuperación de intercambios en caché&lt;/h3>
&lt;p>&lt;a href="https://github.com/jesuspirate/chama/releases/tag/v5.7.0">Chama 5.7.0&lt;/a> coordina intercambios entre pares y arbitraje mediante cadenas de eventos de Nostr firmados. Muestra el importe bloqueado de un árbitro, la antigüedad de su fianza y su outpoint de financiación; registra cuándo un suplente reemplazó a un árbitro ausente; y define los eventos dormidos de kind &lt;code>38136&lt;/code> de atestación de fallos que requieren las firmas de ambos principales. Una reparación explícita reintenta los historiales de relay incompletos contra la caché duradera del dispositivo y republica los eventos recuperados, mientras que las publicaciones fallidas se encolan para la próxima conexión. La versión también evita pagos duplicados entre dispositivos de la prima de árbitro tratando el evento de kind &lt;code>38113&lt;/code> del autor como el registro de pago.&lt;/p>
&lt;h3 id="auditable-voting-01165-restablece-la-entrega-de-papeletas-delegadas">Auditable Voting 0.1.165 restablece la entrega de papeletas delegadas&lt;/h3>
&lt;p>&lt;a href="https://github.com/tidley/auditable-voting/releases/tag/v0.1.165">Auditable Voting 0.1.165&lt;/a> realiza votaciones verificables separando las credenciales del votante del contenido de la papeleta. Restablece la emisión delegada de papeletas ciegas mediante entrega autenticada de delegaciones y reposición de DMs de control, mantiene los mensajes directos de credenciales ciegas en los relays privados configurados y actualiza el proxy de auditoría a 0.1.52.&lt;/p>
&lt;h3 id="sandstr-permite-a-los-recién-llegados-probar-clientes-de-nostr-con-datos-simulados">Sandstr permite a los recién llegados probar clientes de Nostr con datos simulados&lt;/h3>
&lt;p>&lt;a href="https://sandstr.app/">Sandstr&lt;/a> ofrece simulaciones interactivas en el navegador de clientes de Nostr para que un recién llegado pueda comparar sus interfaces antes de instalar uno o crear un par de claves. Su lanzamiento del 3 de agosto incluye reproducciones verificadas contra la referencia de Damus, Amethyst, Primal, Snort, YakiHonne, Coracle y Wisp, además de vistas previas tempranas claramente etiquetadas de Gossip, Keychat y Olas. Todo se ejecuta localmente contra datos simulados, por lo que las simulaciones no generan claves ni se conectan a relays. Cada simulación enlaza al sitio web y al repositorio de código del cliente real, lo que convierte a Sandstr en una herramienta de incorporación y comparación de interfaces en lugar de otro cliente de Nostr. Muestra cómo se sienten los feeds, los perfiles, los hilos, los mensajes directos, la búsqueda, los zaps y los controles de relay sin pedir a un usuario primerizo que tome una decisión de identidad o seguridad por adelantado.&lt;/p>
&lt;h3 id="mineracks-signer-combina-una-extensión-de-navegador-con-un-bunker-de-escritorio">mineracks signer combina una extensión de navegador con un bunker de escritorio&lt;/h3>
&lt;p>&lt;a href="https://github.com/mineracks/mineracks-signer">mineracks signer&lt;/a> ofrece dos superficies de firma desde el mismo proyecto. Su extensión de navegador implementa &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a> para que las aplicaciones web puedan solicitar firmas sin recibir la clave privada, mientras que la aplicación de escritorio expone un firmante remoto &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> para clientes que se comunican a través de relays.&lt;/p>
&lt;p>La &lt;a href="https://github.com/mineracks/mineracks-signer/releases/tag/desktop-v0.1.0">versión de escritorio 0.1.0&lt;/a> del proyecto almacena el material de claves con la codificación de claves cifradas de NIP-49 y mantiene la clave descifrada dentro del proceso de Rust en lugar de pasarla a la interfaz. Cada solicitud muestra la aplicación que llama y la acción solicitada, mientras que la aprobación automática por aplicación es opcional y revocable. La primera compilación de escritorio admite Apple Silicon pero no los Mac con Intel.&lt;/p>
&lt;h2 id="versiones">Versiones&lt;/h2>
&lt;h3 id="jumble-2681-añade-controles-de-prueba-de-trabajo-y-vistas-previas-de-comentarios">Jumble 26.8.1 añade controles de prueba de trabajo y vistas previas de comentarios&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble/releases/tag/v26.8.1">Jumble 26.8.1&lt;/a> es un cliente de Nostr web y de escritorio. Recuerda la dificultad de la prueba de trabajo para publicar, muestra insignias de trabajo verificado, previsualiza los comentarios enlazados sobre el contenido externo, guarda imágenes desde el visor a pantalla completa y expande las biografías de perfil largas bajo demanda. Las notificaciones de reacciones ahora descartan los kinds de evento no admitidos, los avisos de desconexión de relay son menos ruidosos, se actualizaron los relays por defecto y se corrigió un conflicto de reproducción automática de medios.&lt;/p>
&lt;h3 id="nostr-calendar-210-restablece-la-vinculación-del-firmante-en-formularios-privados">nostr-calendar 2.1.0 restablece la vinculación del firmante en formularios privados&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v2.1.0">nostr-calendar 2.1.0&lt;/a> publica calendarios, eventos y respuestas de formularios como datos de Nostr. Vincula los envíos de formularios privados al firmante activo, guarda los eventos duplicados intencionados en los relays, corrige la obtención desde relays, analiza las fechas del calendario en hora local y añade notificaciones de la aplicación además de un cliente iOS. La corrección del firmante evita que una identidad obsoleta produzca una respuesta cifrada inutilizable.&lt;/p>
&lt;h3 id="manent-200-añade-etiquetado-y-búsqueda-para-notas-guardadas">Manent 2.0.0 añade etiquetado y búsqueda para notas guardadas&lt;/h3>
&lt;p>&lt;a href="https://github.com/dtonon/manent/releases/tag/v2.0.0">Manent 2.0.0&lt;/a> es un archivo personal para notas de Nostr firmadas. Añade etiquetas locales y búsqueda, permitiendo al lector organizar y recuperar los eventos guardados sin modificar su contenido firmado.&lt;/p>
&lt;h3 id="nosvelte-061-cierra-las-suscripciones-vacías-tras-el-eose">nosvelte 0.6.1 cierra las suscripciones vacías tras el EOSE&lt;/h3>
&lt;p>&lt;a href="https://github.com/akiomik/nosvelte/releases/tag/v0.6.1">nosvelte 0.6.1&lt;/a> proporciona componentes y hooks reactivos de Svelte para datos de relay. Las búsquedas vacías ahora se resuelven al llegar el End of Stored Events, la cancelación cierra el &lt;code>REQ&lt;/code> subyacente, los reintentos limpian los errores obsoletos y los hooks de lista devuelven su valor vacío documentado. También reconoce los eventos direccionables independientemente de dónde aparezca su etiqueta &lt;code>d&lt;/code>, sustituye los metadatos y artículos reemplazados, desduplica las reacciones por ID de evento y conserva todos los eventos del primer lote de un relay.&lt;/p>
&lt;h2 id="cambios-sin-publicar">Cambios sin publicar&lt;/h2>
&lt;h3 id="nmp-vincula-la-admisión-al-relay-a-las-declaraciones-y-amplía-las-consultas-de-grupo">NMP vincula la admisión al relay a las declaraciones y amplía las consultas de grupo&lt;/h3>
&lt;p>&lt;a href="https://github.com/pablof7z/nmp">NMP&lt;/a> es un kit de herramientas de TypeScript para construir aplicaciones de Nostr e interfaces de grupos respaldados por relays. El &lt;a href="https://github.com/pablof7z/nmp/pull/1254">PR #1254&lt;/a> hace que la admisión al relay siga al propietario de la declaración que la autoriza, manteniendo la decisión de permisos vinculada al estado firmado de Nostr. El &lt;a href="https://github.com/pablof7z/nmp/pull/1255">PR #1255&lt;/a> generaliza las consultas de grupos gestionados por relays de &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> en lugar de asumir una única forma de búsqueda restringida. Ambos cambios están fusionados pero aún no han aparecido en una versión etiquetada.&lt;/p>
&lt;h3 id="mosaico-deriva-la-identidad-de-grupo-gestionado-de-los-registros-del-relay">Mosaico deriva la identidad de grupo gestionado de los registros del relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/pablof7z/mosaico">Mosaico&lt;/a> es un cliente de Nostr para explorar y administrar comunidades gestionadas por relays. El &lt;a href="https://github.com/pablof7z/mosaico/pull/758">PR #758&lt;/a> deriva la identidad de un grupo gestionado del relay que aloja sus registros autoritativos. El &lt;a href="https://github.com/pablof7z/mosaico/pull/757">PR #757&lt;/a> observa el registro publicado del grupo al resolver el estado de administración. Esto mantiene distintos a dos grupos con nombres similares en relays diferentes y ofrece a los clientes una fuente respaldada por relay para sus metadatos de gestión.&lt;/p>
&lt;h3 id="divine-aísla-los-relays-lentos-durante-las-consultas-multi-relay">Divine aísla los relays lentos durante las consultas multi-relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">Divine&lt;/a> es un cliente móvil de vídeo corto que publica y recupera vídeos a través de Nostr. El &lt;a href="https://github.com/divinevideo/divine-mobile/pull/6673">PR #6673&lt;/a> da a cada consulta de relay su propio tiempo de espera en lugar de dejar que una conexión estancada consuma el presupuesto de tiempo de toda una petición. Los resultados de los relays que responden pueden llegar así mientras el punto final lento se abandona de forma independiente. El cambio mejora la recuperación sin tratar un relay como autoritativo para el resultado combinado.&lt;/p>
&lt;h3 id="rust-nostr-refuerza-el-cifrado-los-hashes-y-la-reconciliación">rust-nostr refuerza el cifrado, los hashes y la reconciliación&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> es una biblioteca y kit de herramientas de Rust para clientes, relays e implementaciones del protocolo Nostr. El &lt;a href="https://github.com/rust-nostr/nostr/pull/1421">PR #1421&lt;/a> reduce las asignaciones en su ruta de cifrado versionado de &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>, mientras que el &lt;a href="https://github.com/rust-nostr/nostr/pull/1423">PR #1423&lt;/a> introduce hashes tipados que dificultan mezclar accidentalmente valores de resumen incompatibles. El &lt;a href="https://github.com/rust-nostr/nostr/commit/21e31c28da3dfadedb5fa6e58c712647f16e5f69">commit 21e31c2&lt;/a> evita que un mensaje malformado de reconciliación de conjuntos Negentropy de &lt;a href="https://nostrcompass.org/es/topics/nip-77/">NIP-77&lt;/a> desconecte el relay local. El trabajo fusionado refuerza tanto el manejo de cargas cifradas como el comportamiento ante fallos de reconciliación antes de la próxima versión.&lt;/p>
&lt;h3 id="zeus-serializa-los-pagos-nwc-antes-de-cargar-los-presupuestos-de-gasto">Zeus serializa los pagos NWC antes de cargar los presupuestos de gasto&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a> es un monedero móvil de Bitcoin y Lightning que puede exponer operaciones del monedero a través de Nostr Wallet Connect. El &lt;a href="https://github.com/ZeusLN/zeus/pull/4305">PR #4305&lt;/a> cuenta los pagos pendientes contra un presupuesto de &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> Nostr Wallet Connect en lugar de esperar a la liquidación. El &lt;a href="https://github.com/ZeusLN/zeus/pull/4303">PR #4303&lt;/a> serializa el manejo de pagos para que las solicitudes concurrentes no puedan competir a través del mismo límite de autorización. El par fusionado cierra una brecha de aplicación de presupuestos en la superficie de control Nostr del monedero.&lt;/p>
&lt;h3 id="nostr-components-comparte-un-único-intento-de-conexión-al-relay">Nostr Components comparte un único intento de conexión al relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/saiy2k/nostr-components">Nostr Components&lt;/a> es una biblioteca reutilizable de componentes web para añadir datos e interacciones de Nostr a las aplicaciones. El &lt;a href="https://github.com/saiy2k/nostr-components/pull/105">PR #105&lt;/a> permite que los componentes montados al mismo tiempo compartan un intento de conexión al relay en curso. Cada consumidor sigue recibiendo la conexión resultante, pero los montajes concurrentes ya no abren sockets duplicados mientras el primer apretón de manos está pendiente. El cambio reduce la carga evitable sobre los relays en aplicaciones ensambladas a partir de varios componentes independientes.&lt;/p>
&lt;h2 id="actualizaciones-de-nips-y-trabajo-de-especificación-del-protocolo">Actualizaciones de NIPs y trabajo de especificación del protocolo&lt;/h2>
&lt;h3 id="formatos-de-eventos-de-nostr-y-descubrimiento">Formatos de eventos de Nostr y descubrimiento&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2430">El PR de NIP #2430&lt;/a> propone paquetes de pegatinas como definiciones direccionables de kind &lt;code>30031&lt;/code> y los paquetes instalados por un usuario como kind reemplazable &lt;code>10031&lt;/code>. Cada etiqueta de pegatina lleva un código corto, un hash SHA-256 y un tipo MIME; la imagen permanece en un servidor &lt;a href="https://github.com/nostr-protocol/nips/blob/master/B7.md">NIP-B7&lt;/a> (almacenamiento de blobs Blossom). El borrador abierto estandariza así la identidad e instalación de paquetes sin colocar los bytes de la imagen en los eventos.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2429">El PR de NIP #2429&lt;/a> propone documentos Gopher direccionables de kind &lt;code>31436&lt;/code>. Cada evento contiene un nodo de texto o menú UTF-8, y los nodos firmados bajo una misma pubkey forman un gopherhole que cualquier puente RFC 1436 respaldado por relay puede servir. La propuesta abierta usa el almacenamiento ordinario de eventos direccionables en lugar de vincular la publicación a un único nombre de host Gopher.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2428">El PR de NIP #2428&lt;/a> propone grupos privados con tickets por época. Un grupo rota las credenciales de membresía entre épocas, y los clientes presentan el ticket de la época actual para participar. El borrador apunta al chat privado sin pedir a un relay que trate un token portador permanente como membresía de por vida.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2425">El PR de NIP #2425&lt;/a>, cubierto como propuesta la semana pasada, ha fusionado ahora una aclaración de URI en &lt;a href="https://nostrcompass.org/es/topics/nip-b0/">NIP-B0&lt;/a> (marcadores web direccionables). Distingue los prefijos HTTPS omitidos de los esquemas URI explícitos cuando un marcador almacena su destino en la etiqueta &lt;code>d&lt;/code>, evitando que los clientes reconstruyan un destino ambiguo.&lt;/p>
&lt;h3 id="pagos-y-conexiones-de-monedero">Pagos y conexiones de monedero&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2419">El PR de NIP #2419&lt;/a>, cubierto como propuesta en la edición del 22 de julio, ha fusionado ahora un núcleo más reducido de &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect). Los URI de conexión, el transporte cifrado por relay, el descubrimiento de capacidades, la negociación de cifrado y los métodos comunes permanecen en el NIP; las notificaciones, las facturas retenidas, keysend, el historial de transacciones, los metadatos y el emparejamiento por enlace profundo pasan a un repositorio de extensiones dedicado. Las conexiones existentes siguen siendo compatibles mientras los monederos pueden implementar los contratos opcionales de forma independiente.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-wallet-connect/nwc/pull/2">El PR de NWC #2&lt;/a>, cubierto como propuesta la semana pasada, ha fusionado ahora los métodos de pago BIP-321 en ese repositorio de extensiones. BIP-321 proporciona un URI de pago de Bitcoin común que puede transportar distintos raíles, de modo que quien llama a NWC puede solicitar o enviar un pago sin añadir un nuevo RPC central por cada tipo de instrucción subyacente.&lt;/p>
&lt;h3 id="capacidades-del-anfitrión-de-napplets">Capacidades del anfitrión de napplets&lt;/h3>
&lt;p>&lt;a href="https://github.com/napplet/naps/pull/95">El PR de NAP #95&lt;/a> propone el descubrimiento de catálogos para aplicaciones en sandbox distribuidas por Nostr. Un napplet pregunta a su anfitrión qué aplicaciones y capacidades están disponibles, y el anfitrión devuelve metadatos filtrados por política en lugar de exponer todo su entorno local. El contrato admite decisiones de lanzamiento sin conceder autoridad de ejecución durante el descubrimiento.&lt;/p>
&lt;p>&lt;a href="https://github.com/napplet/naps/pull/33">El PR de NAP #33&lt;/a> propone subidas de archivos y blobs mediadas por el shell. Un napplet aporta los bytes y la intención; el anfitrión selecciona un raíl NIP-96 o Blossom, firma la autorización, informa del progreso y devuelve URL, hashes, datos MIME y etiquetas &lt;a href="https://nostrcompass.org/es/topics/nip-94/">NIP-94&lt;/a> (metadatos de archivo) listas para adjuntar. Las credenciales de almacenamiento y la autoridad HTTP nunca entran en el napplet.&lt;/p>
&lt;h3 id="grupos-cifrados-marmot">Grupos cifrados Marmot&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/marmot/pull/410">El PR de Marmot #410&lt;/a> fusionó reglas de convergencia y de entrada diferida. Los clientes distinguen un objeto al que le falta una dependencia de época actual de una entrada obsoleta o no válida, lo mantienen elegible para una nueva obtención tras un rechazo de recursos y reintentan cuando otro commit cambia el contexto de descifrado. Un compromiso de estado con separación de dominio ofrece a las pruebas de conformidad un oráculo de convergencia compartido sin añadir un campo de producción al protocolo.&lt;/p>
&lt;h3 id="planos-comunitarios-de-concord">Planos comunitarios de Concord&lt;/h3>
&lt;p>&lt;a href="https://github.com/concord-protocol/concord/pull/14">El PR de Concord #14&lt;/a> fusionó los mensajes que desaparecen de CORD-08. Un valor de metadatos de la comunidad fija la duración; los rumores de chat y las envolturas cifradas llevan una etiqueta de &lt;a href="https://nostrcompass.org/es/topics/nip-40/">NIP-40&lt;/a> (expiración de eventos), mientras que los eventos de borrado y el aviso de temporizador de kind &lt;code>1740&lt;/code> están exentos. El temporizador firmado viaja con el estado de la comunidad, aunque el borrado por el relay sigue siendo una solicitud de retención y no una garantía criptográfica de eliminación.&lt;/p>
&lt;p>&lt;a href="https://github.com/concord-protocol/concord/pull/13">El PR de Concord #13&lt;/a> fusionó en CORD-04 el fijado resistente a rotaciones. Cada canal tiene una lista de fijados que reemplaza por completo en el plano de control; las entradas llevan el sello firmado original más claves de expansión NIP-44 por mensaje, lo que permite a un miembro nuevo verificar el autor y el texto plano sin recibir una clave de época antigua. Las listas privadas pueden permanecer selladas a una época del canal, los topes acotan el tamaño de la lista y los borrados del autor eliminan fijados sin bifurcar la cadena del plano de control.&lt;/p>
&lt;h2 id="análisis-en-profundidad-de-nips">Análisis en profundidad de NIPs&lt;/h2>
&lt;h3 id="capacidad-de-búsqueda-nip-50">Capacidad de búsqueda (NIP-50)&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a>, definido en la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/50.md">especificación principal&lt;/a>, añade un filtro de búsqueda opcional para los relays. Los filtros ordinarios de Nostr funcionan cuando un cliente ya conoce un autor, un kind de evento, un identificador o una etiqueta; NIP-50 aborda el descubrimiento cuando la entrada es una consulta humana como &lt;code>best nostr apps&lt;/code>.&lt;/p>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/blob/master/50.md#search-filter-field">formato de red de NIP-50&lt;/a> añade una cadena &lt;code>search&lt;/code> a un filtro normal dentro de un mensaje &lt;code>REQ&lt;/code>. Una petición puede combinar ese campo con &lt;code>kinds&lt;/code>, &lt;code>authors&lt;/code>, &lt;code>ids&lt;/code>, filtros de etiquetas y &lt;code>limit&lt;/code>, y un REQ puede llevar varios filtros independientes. Un relay que lo admita debería buscar principalmente en el &lt;code>content&lt;/code> del evento, puede usar otros campos cuando el kind de evento lo haga útil y debería ordenar según su propia puntuación de relevancia antes de aplicar el &lt;code>limit&lt;/code>. Ese orden difiere del flujo habitual de eventos ordenados del más reciente al más antiguo.&lt;/p>
&lt;p>La cadena de consulta puede incluir las &lt;a href="https://github.com/nostr-protocol/nips/blob/master/50.md#extensions">extensiones &lt;code>key:value&lt;/code>&lt;/a> de la especificación. Nombra &lt;code>include:spam&lt;/code>, &lt;code>domain:&lt;/code>, &lt;code>language:&lt;/code>, &lt;code>sentiment:&lt;/code> y &lt;code>nsfw:&lt;/code>; un relay debería ignorar las extensiones que no implemente. Los clientes descubren el soporte declarado a través del campo &lt;code>supported_nips&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> del relay, pero aún pueden enviar el filtro a otros si están preparados para rechazar respuestas no relacionadas.&lt;/p>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/blob/master/50.md">especificación de NIP-50&lt;/a> deliberadamente no estandariza la tokenización, el stemming, la clasificación, la detección de idioma, el análisis de sentimiento ni la clasificación de spam. Dos relays conformes pueden devolver eventos y ordenaciones diferentes para la misma consulta. Eso convierte al relay en un proveedor de índices y clasificación, no en una fuente de verdad. La especificación recomienda consultar varios relays compatibles, comprobar si los eventos devueltos satisfacen el caso de uso del cliente y descartar los relays cuyos resultados tengan mala precisión.&lt;/p>
&lt;p>Esto difiere del &lt;a href="https://github.com/nostr-protocol/nips/blob/master/01.md">filtrado exacto de NIP-01&lt;/a>. Un filtro de &lt;code>authors&lt;/code> o &lt;code>#t&lt;/code> tiene una semántica de coincidencia determinista que un cliente puede verificar directamente, mientras que una coincidencia de búsqueda puede depender de un índice y de una puntuación opaca. NIP-50 conserva el sobre de eventos firmados y el transporte de relay de NIP-01, pero acepta variación en el recall y la ordenación para hacer posible la recuperación abierta.&lt;/p>
&lt;p>El evento siguiente es un resultado de búsqueda ilustrativo que usa los &lt;a href="https://github.com/nostr-protocol/nips/blob/master/01.md#events-and-signatures">siete campos de evento de NIP-01&lt;/a>. Los valores hexadecimales repetidos son marcadores de posición y no una firma válida.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;2943d6b43bcbf0ee4a8b4cac912111be0309607b8bb435ae40529989bea7f6c5&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1785771175&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;I&amp;#39;ve been working on a customizable client (mostly relay feeds, but a ton of other things and subtle details too). It&amp;#39;s called Hallway for reasons I don&amp;#39;t remember and it&amp;#39;s a fork of Fevela which is a fork of Jumble, but very rewritten for speed and simplicity...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;5b058b89dab9bd09d81bdc10eff95536125b87fbcbbc97f08d835c1272b2a3190cc3d340e42f54acb0d7e0e4b00355ab91292d0305c84a2d73b538319c0da12c&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Los clientes actuales usan el mismo filtro en distintas superficies de descubrimiento. &lt;a href="https://github.com/nostria-app/nostria/blob/d291c2ab091c60c36f99c90241e2fd9da1b0c4bc/src/app/services/relays/search-relay.ts">Nostria&lt;/a> envía búsquedas NIP-50 a relays de búsqueda dedicados, &lt;a href="https://github.com/soapbox-pub/ditto/blob/04adb2d242ab6f5807fd27ae3e0cb9beab091641/src/hooks/useSearchEvents.ts">Ditto&lt;/a> busca eventos a través de su pool de relays, y &lt;a href="https://github.com/77elements/noornote/blob/bf1f9b431552497dc1779ea0d8fed2c3c28e6070/src/services/orchestration/SearchOrchestrator.ts">NoorNote&lt;/a> coordina búsquedas respaldadas por relays para la lectura de formato largo. Su distinto manejo de resultados refleja la libertad que NIP-50 deja a relays y clientes.&lt;/p>
&lt;h3 id="destacados-nip-84">Destacados (NIP-84)&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-84/">NIP-84&lt;/a>, definido por su &lt;a href="https://github.com/nostr-protocol/nips/blob/master/84.md">especificación principal&lt;/a>, asigna el kind &lt;code>9802&lt;/code> a un destacado. Convierte un pasaje seleccionado, o una referencia a un medio no textual, en un evento firmado que puede moverse entre clientes de lectura, sociales y de anotación.&lt;/p>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/blob/master/84.md#format">&lt;code>content&lt;/code> del evento&lt;/a> contiene el texto seleccionado y puede estar vacío cuando la fuente es audio, vídeo u otro medio no textual. Un destacado apunta a una fuente de Nostr con una etiqueta &lt;code>a&lt;/code> para un evento direccionable o una etiqueta &lt;code>e&lt;/code> para un evento ordinario; una etiqueta &lt;code>r&lt;/code> identifica una URL web. Los clientes que producen URL deberían eliminar los parámetros de seguimiento y otros parámetros de consulta no útiles antes de publicar, para que las variantes cosméticas de URL no fragmenten las referencias a la misma fuente.&lt;/p>
&lt;p>Las &lt;a href="https://github.com/nostr-protocol/nips/blob/master/84.md#attribution">etiquetas &lt;code>p&lt;/code>&lt;/a> opcionales atribuyen la fuente a una o más pubkeys de Nostr. Su cuarto valor puede identificar un rol como &lt;code>author&lt;/code> o &lt;code>editor&lt;/code>, y una etiqueta &lt;code>context&lt;/code> puede conservar el texto circundante cuando la selección por sí sola resultaría poco clara. Un destacado con cita añade una etiqueta &lt;code>comment&lt;/code> en lugar de publicar una segunda nota de kind &lt;code>1&lt;/code>: la etiqueta &lt;code>r&lt;/code> de la fuente recibe el marcador &lt;code>source&lt;/code>, mientras que las pubkeys o URL mencionadas en el comentario llevan &lt;code>mention&lt;/code>, lo que permite a los renderizadores distinguir la atribución de la respuesta del usuario.&lt;/p>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/blob/master/84.md">definición del kind &lt;code>9802&lt;/code>&lt;/a> convierte a un destacado en un evento regular en lugar de uno reemplazable. Repetir o corregir una selección crea otro evento firmado, y eliminar uno depende del flujo normal de solicitudes de borrado y de la política de retención del relay. La especificación no define desplazamientos de bytes, selectores ni una instantánea canónica del documento, por lo que un cliente puede ser incapaz de reubicar un pasaje después de que su fuente web cambie. Los destacados públicos también revelan intereses de lectura; la anotación privada requiere un diseño separado de cifrado y compartición.&lt;/p>
&lt;p>NIP-84 difiere de un &lt;a href="https://github.com/nostr-protocol/nips/blob/master/23.md">evento de formato largo de NIP-23&lt;/a>, que publica un artículo completo como kind &lt;code>30023&lt;/code>; un destacado cita o apunta a material que puede permanecer en otro lugar. También difiere de un &lt;a href="https://github.com/nostr-protocol/nips/blob/master/51.md">conjunto de marcadores de NIP-51&lt;/a>, que almacena una colección reemplazable de referencias. NIP-84 hace que cada selección sea firmada, atribuible, descubrible y discutible de forma independiente.&lt;/p>
&lt;p>Este destacado ilustrativo contiene los &lt;a href="https://github.com/nostr-protocol/nips/blob/master/01.md#events-and-signatures">siete campos de evento de NIP-01&lt;/a>. Su identificador y su firma son marcadores de posición.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;0d57c07cfdfe8ec00711e2af88a666b61fc35c167b90b02dfb5db7ffba7b794a&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;07367baec8e73c076b14e47fba3b0d5c014d559d7986a7172a79a8a64419d7c2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1785797755&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">9802&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;context&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Quantum computers will break secp256k1 which nostr relies on for its public private key pair. This means that given an npub, a quantum computer will be able to derive your nsec, read all your encrypted data and sign events as you.&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;alt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;This is a highlight created in https://primal.net iOS application&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30023:1ec454734dcbf6fe54901ce25c0c7c6bca5edd89443416761fadc321d38df139:nostr-quantum-preparation&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1ec454734dcbf6fe54901ce25c0c7c6bca5edd89443416761fadc321d38df139&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;mention&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Quantum computers will break secp256k1 which nostr relies on for its public private key pair. This means that given an npub, a quantum computer will b&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;219f3c1e572d1a087d667dc0d3a5443c77c0db3a5d42ce4e630604901ac63d2c879a86269d81e220bb77fd48b1579adafc333075e53c6eb0a108791fdd4a1622&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El formato ya cruza las fronteras entre clientes. &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v2.5.0">nostrord 2.5.0&lt;/a> añadió renderizado de NIP-84 esta semana, &lt;a href="https://github.com/77elements/noornote/blob/bf1f9b431552497dc1779ea0d8fed2c3c28e6070/src/components/ui/note-rendering/HighlightRenderer.ts">NoorNote&lt;/a> renderiza eventos de destacados en su cliente de formato largo, y &lt;a href="https://github.com/soapbox-pub/ditto/blob/04adb2d242ab6f5807fd27ae3e0cb9beab091641/src/hooks/useCreateHighlight.ts">Ditto&lt;/a> los publica a partir del contenido seleccionado. Esas implementaciones cubren la lectura, la creación y el renderizado social sin requerir que un único servicio sea dueño de la anotación.&lt;/p>
&lt;hr>
&lt;p>Envía un DM por NIP-17 para compartir un proyecto o noticia a través del &lt;a href="https://github.com/andotherstuff/nostr-compass">proyecto Nostr Compass&lt;/a>.&lt;/p></content:encoded></item><item><title>Nostr Compass #33</title><link>https://nostrcompass.org/es/newsletters/2026-07-29-newsletter/</link><pubDate>Wed, 29 Jul 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-07-29-newsletter/</guid><description>&lt;p>Bienvenidos de nuevo a &lt;a href="https://github.com/andotherstuff/nostr-compass">Nostr Compass&lt;/a>, su guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.13.1">Amethyst 1.13.1&lt;/a>, tras el lanzamiento de las aplicaciones Nostr en la versión 1.13.0, incorpora autenticación del relay anfitrión NIP-29 y reintentos autenticados de descargas de Blossom. &lt;a href="https://github.com/tidley/nostr-codex-phone/releases/tag/v0.2.68">Code Call&lt;/a> permite mantener en marcha sesiones remotas de programación desde un teléfono, &lt;a href="https://github.com/DanConwayDev/gitworkshop">GitWorkshop&lt;/a> coordina a los responsables de mantenimiento y la sincronización de repositorios, y &lt;a href="https://github.com/pablof7z/mosaico/releases/tag/v0.1.2">Mosaico&lt;/a> ofrece a los agentes de programación una capa compartida de visibilidad sobre la actividad en Nostr. &lt;a href="https://dev.nostrolo.gy/relays">Nostrology&lt;/a> cartografía cómo los perfiles distribuyen las funciones de lectura y escritura entre sus listas de relays publicadas. Los lanzamientos para Android de &lt;a href="https://github.com/DestBro/mafrend-zapstore/releases/tag/v1.0">Mafrend&lt;/a>, &lt;a href="https://github.com/Letdown2491/hanami-android/releases/tag/v0.1.0">Hanami&lt;/a> y &lt;a href="https://github.com/Cordn-msg/cordn-web/releases/tag/v0.2.1">Cordn&lt;/a> encabezan los lanzamientos etiquetados, mientras &lt;a href="https://github.com/jmcorgan/fips/pull/126">FIPS añade una capa de acceso para OpenWrt&lt;/a> y un &lt;a href="https://github.com/jmcorgan/fips/pull/129">PR abierto propone una adaptación para FreeBSD&lt;/a>. Las novedades sobre protocolos abarcan NIPs, BUDs, NAPs, Marmot, Gamma Markets, Concord y NWC, mientras &lt;a href="https://github.com/nostr-protocol/nips/commits/master/">Seis julios en la historia de Nostr&lt;/a> recorre los cambios de julio desde las primeras búsquedas de dominios hasta el estado de los grupos de relay.&lt;/p></description><content:encoded>&lt;p>Bienvenidos de nuevo a &lt;a href="https://github.com/andotherstuff/nostr-compass">Nostr Compass&lt;/a>, su guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.13.1">Amethyst 1.13.1&lt;/a>, tras el lanzamiento de las aplicaciones Nostr en la versión 1.13.0, incorpora autenticación del relay anfitrión NIP-29 y reintentos autenticados de descargas de Blossom. &lt;a href="https://github.com/tidley/nostr-codex-phone/releases/tag/v0.2.68">Code Call&lt;/a> permite mantener en marcha sesiones remotas de programación desde un teléfono, &lt;a href="https://github.com/DanConwayDev/gitworkshop">GitWorkshop&lt;/a> coordina a los responsables de mantenimiento y la sincronización de repositorios, y &lt;a href="https://github.com/pablof7z/mosaico/releases/tag/v0.1.2">Mosaico&lt;/a> ofrece a los agentes de programación una capa compartida de visibilidad sobre la actividad en Nostr. &lt;a href="https://dev.nostrolo.gy/relays">Nostrology&lt;/a> cartografía cómo los perfiles distribuyen las funciones de lectura y escritura entre sus listas de relays publicadas. Los lanzamientos para Android de &lt;a href="https://github.com/DestBro/mafrend-zapstore/releases/tag/v1.0">Mafrend&lt;/a>, &lt;a href="https://github.com/Letdown2491/hanami-android/releases/tag/v0.1.0">Hanami&lt;/a> y &lt;a href="https://github.com/Cordn-msg/cordn-web/releases/tag/v0.2.1">Cordn&lt;/a> encabezan los lanzamientos etiquetados, mientras &lt;a href="https://github.com/jmcorgan/fips/pull/126">FIPS añade una capa de acceso para OpenWrt&lt;/a> y un &lt;a href="https://github.com/jmcorgan/fips/pull/129">PR abierto propone una adaptación para FreeBSD&lt;/a>. Las novedades sobre protocolos abarcan NIPs, BUDs, NAPs, Marmot, Gamma Markets, Concord y NWC, mientras &lt;a href="https://github.com/nostr-protocol/nips/commits/master/">Seis julios en la historia de Nostr&lt;/a> recorre los cambios de julio desde las primeras búsquedas de dominios hasta el estado de los grupos de relay.&lt;/p>
&lt;h2 id="historias-principales">Historias principales&lt;/h2>
&lt;h3 id="amethyst-1131-añade-acceso-autenticado-a-grupos-y-a-blossom-tras-el-lanzamiento-de-sus-aplicaciones-nostr">Amethyst 1.13.1 añade acceso autenticado a grupos y a Blossom tras el lanzamiento de sus aplicaciones Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.13.0">Amethyst 1.13.0&lt;/a>, publicado el 28 de julio para el cliente Nostr de Android y multiplataforma, abre napplets y nsites NIP-5A dentro de un proceso de navegador aislado y sin claves. Un puente &lt;code>window.nostr&lt;/code> sujeto a consentimiento puede firmar y usar capacidades seleccionadas mediante la cuenta activa, mientras las pantallas de permisos por sitio y por cuenta permiten a los usuarios revisar o revocar esas concesiones. Las aplicaciones favoritas pueden permanecer fijadas en la barra inferior sin compartir cookies, estado de inicio de sesión ni concesiones entre cuentas.&lt;/p>
&lt;p>El mismo &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.13.0">lanzamiento 1.13.0&lt;/a> añade árboles de repositorios Git, incidencias y pull requests junto con comunidades Concord, grupos de relay NIP-29, chat grupal de Buzz, páginas wiki y feeds RSS. Estas superficies permiten al usuario moverse entre vistas de código, comunidad, publicación y actividad social con la misma identidad Nostr.&lt;/p>
&lt;p>Los pagos y la identidad también se ampliaron en la &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.13.0">versión 1.13.0&lt;/a>. Amethyst puede crear y pagar ofertas BOLT12, iniciar automáticamente cuentas con firmante remoto, añadir servidores Blossom de respaldo y ampliar los controles de Web of Trust para insignias, comunidades y grupos de relay. La &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.13.1">actualización 1.13.1&lt;/a> del 29 de julio añade un &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3767">sello de disolución CORD-02&lt;/a>, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3779">eliminación de grupos y canales&lt;/a> con kind &lt;code>9008&lt;/code>, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3788">autenticación del relay anfitrión NIP-29&lt;/a> y &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3789">reintentos BUD-01&lt;/a> autenticados para descargas de Blossom con acceso restringido.&lt;/p>
&lt;h3 id="code-call-0268-añade-un-explorador-de-carpetas-de-workers-después-de-que-0266-introdujera-la-puesta-al-día">Code Call 0.2.68 añade un explorador de carpetas de workers después de que 0.2.66 introdujera la puesta al día&lt;/h3>
&lt;p>&lt;a href="https://github.com/tidley/nostr-codex-phone/releases/tag/v0.2.68">Code Call 0.2.68&lt;/a>, un control remoto para Android de sesiones de programación ejecutadas en un ordenador, sustituye su lista específica de espacios de trabajo por un explorador de carpetas con raíz en el directorio del worker. El usuario puede entrar en carpetas permitidas anidadas, seleccionar una para una sesión de OpenCode y volver a las carpetas superiores; la &lt;a href="https://github.com/tidley/nostr-codex-phone/releases/tag/v0.2.67">versión 0.2.67&lt;/a> abre ese explorador cuando se inicia una sesión.&lt;/p>
&lt;p>El &lt;a href="https://github.com/tidley/nostr-codex-phone/releases/tag/v0.2.66">lanzamiento 0.2.66&lt;/a> anterior puede pedir a un worker enrutado una puesta al día concisa a partir del último mensaje del teléfono. Otros lanzamientos de la misma semana mantienen &lt;a href="https://github.com/tidley/nostr-codex-phone/releases/tag/v0.2.51">independientes varias sesiones&lt;/a>, aceptan respuestas únicamente del &lt;a href="https://github.com/tidley/nostr-codex-phone/releases/tag/v0.2.56">remitente esperado&lt;/a> y mantienen la bandeja de entrada conectada a &lt;a href="https://github.com/tidley/nostr-codex-phone/releases/tag/v0.2.59">cada relay de worker configurado&lt;/a> para la entrega en segundo plano. Las solicitudes y respuestas viajan dentro de &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17 (Mensajes directos privados)&lt;/a>, mientras los archivos adjuntos de &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> cifrados localmente &lt;a href="https://github.com/tidley/nostr-codex-phone/releases/tag/v0.2.55">conservan su tipo de archivo original después de descifrarlos&lt;/a>.&lt;/p>
&lt;h3 id="gitworkshop-coordina-a-los-responsables-de-mantenimiento-y-mantiene-independiente-la-sincronización-de-repositorios">GitWorkshop coordina a los responsables de mantenimiento y mantiene independiente la sincronización de repositorios&lt;/h3>
&lt;p>El &lt;a href="https://primal.net/e/869e01f9a74d98f468a66f3b83865d198a82cc718c1db36324398b1b88a17c60">lanzamiento firmado de GitWorkshop del 27 de julio&lt;/a> añade inicio de sesión en Android mediante &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55 (Aplicación de firma para Android)&lt;/a> a la forja web &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34 (elementos de &lt;code>git&lt;/code>)&lt;/a>. Su &lt;a href="https://github.com/DanConwayDev/gitworkshop">repositorio de código fuente&lt;/a> ahora coordina de forma recursiva a los responsables principales de mantenimiento, conserva las sugerencias de relay de cada responsable y mantiene la sincronización del repositorio independiente de la aceptación de invitaciones. Las referencias a elementos de trabajo entre repositorios conectan trabajos relacionados, mientras GRASP copia datos del repositorio en endpoints Git seleccionados sin vincular esa transferencia a la entrega de invitaciones. La &lt;a href="https://primal.net/e/01d0939e9960cb82f1f7aba6f1900af2c61ce384e38352221bf9d5878116ae2d">actualización 3.1.1&lt;/a>, firmada por el desarrollador, repara la entrega de intents de Android al firmante, la resolución recursiva de responsables de mantenimiento y los enlaces de repositorio que preservan las rutas.&lt;/p>
&lt;h3 id="mosaico-012-permite-que-los-agentes-de-programación-compartan-su-estado-mediante-nostr">Mosaico 0.1.2 permite que los agentes de programación compartan su estado mediante Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/pablof7z/mosaico/releases/tag/v0.1.2">Mosaico 0.1.2&lt;/a> permite que las sesiones de agentes de programación en Claude Code, Codex, Goose, Hermes, OpenCode y Grok publiquen actualizaciones breves de estado mediante &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29 (Grupos basados en relays)&lt;/a>. Las sesiones pueden encontrar trabajo activo relacionado entre hosts sin compartir sus transcripciones ni su contexto.&lt;/p>
&lt;p>El descubrimiento de perfiles de Codex por nombre y la vista Top Of Mind de Goose muestran ese estado compartido dentro de ambos entornos (&lt;a href="https://github.com/pablof7z/mosaico/pull/618">PR #618&lt;/a>, &lt;a href="https://github.com/pablof7z/mosaico/pull/619">PR #619&lt;/a>). El lanzamiento restaura la capacidad de los agentes alojados para incorporarse a la capa pública de visibilidad sobre la actividad, y la configuración ahora exige elegir explícitamente un relay (&lt;a href="https://github.com/pablof7z/mosaico/pull/626">PR #626&lt;/a>, &lt;a href="https://github.com/pablof7z/mosaico/pull/629">PR #629&lt;/a>). Mosaico sigue siendo una capa de visibilidad sobre la actividad, no un host de agentes, un orquestador ni un sistema para combinar transcripciones.&lt;/p>
&lt;h3 id="nostrology-cartografía-la-concentración-de-listas-de-relays-a-partir-de-events-nip-65-publicados">Nostrology cartografía la concentración de listas de relays a partir de events NIP-65 publicados&lt;/h3>
&lt;p>El &lt;a href="https://dev.nostrolo.gy/relays">observatorio de relays de Nostrology&lt;/a> deriva su conjunto de datos del event kind &lt;code>10002&lt;/code> más reciente de cada perfil conforme a &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65 (Metadatos de listas de relays)&lt;/a>, siguiendo la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/65.md">especificación publicada&lt;/a>. Separa las funciones de lectura, escritura y combinadas de los relays, muestra en gráficos cuántos relays enumera cada perfil y expone los recuentos subyacentes en una tabla ordenable. En la revisión de publicación del 29 de julio, la página contenía 34.430 valores distintos de URL de relay y agrupaba 520.468 perfiles con exactamente un relay enumerado, frente a 150.657 con tres y 60.710 con cuatro.&lt;/p>
&lt;p>La misma &lt;a href="https://dev.nostrolo.gy/relays">captura de Nostrology&lt;/a> muestra una concentración superpuesta en torno a &lt;code>relay.momostr.pink&lt;/code> con 298.859 perfiles, &lt;code>relay.damus.io&lt;/code> con 287.181, &lt;code>nos.lol&lt;/code> con 279.468 y &lt;code>relay.primal.net&lt;/code> con 225.336. Estos recuentos miden entradas publicadas en listas de relays, no disponibilidad: la tabla sin procesar puede incluir URL malformadas y direcciones locales, mientras la &lt;a href="https://github.com/nostr-protocol/nips/blob/master/65.md">especificación NIP-65&lt;/a> define metadatos de enrutamiento y no comprueba el estado de los relays. El observatorio hace visibles los problemas de adopción y calidad de datos sin asumir que cada relay incluido esté activo.&lt;/p>
&lt;h2 id="lanzamientos-etiquetados">Lanzamientos etiquetados&lt;/h2>
&lt;h3 id="kairos-011-añade-recordatorios-y-una-instrucción-local-para-astraea">Kairos 0.1.1 añade recordatorios y una instrucción local para Astraea&lt;/h3>
&lt;p>&lt;a href="https://primal.net/e/ffb054280008dc3ba488d5d3a2cbfec6c4123489a874683545a29a466682fd90">Kairos 0.1.1&lt;/a> añade recordatorios de fechas límite, una instrucción local explícita para Astraea y un manejo más estricto de relays y URL. El &lt;a href="https://primal.net/e/6e02430844abdabf5421bbf5745a09ef2870e4ade93f56627ee14ba8db58a00a">lanzamiento firmado 0.1.0&lt;/a> introdujo el &lt;a href="https://github.com/Lwb89dev/kairos">gestor de tareas con prioridad al funcionamiento sin conexión&lt;/a>, cuya capa opcional de sincronización escribe registros cifrados mediante &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44 (Cargas útiles cifradas)&lt;/a> en relays seleccionados por el usuario. Kairos usa coordenadas deterministas de tareas y lápidas cifradas con solicitudes de eliminación &lt;a href="https://nostrcompass.org/es/topics/nip-09/">NIP-09 (Solicitud de eliminación de events)&lt;/a>, mientras las tareas exclusivamente locales nunca salen del dispositivo.&lt;/p>
&lt;h3 id="bray-230-permite-aplicar-gift-wrap-a-cualquier-event-desde-su-cli-y-añade-un-entorno-local-de-pruebas-para-blossom">Bray 2.3.0 permite aplicar Gift Wrap a cualquier event desde su CLI y añade un entorno local de pruebas para Blossom&lt;/h3>
&lt;p>&lt;a href="https://github.com/forgesworn/bray/releases/tag/v2.3.0">Bray 2.3.0&lt;/a>, un SDK de Nostr y conjunto de herramientas de línea de comandos, puede envolver y desenvolver cualquier event mediante &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59 (Gift Wrap)&lt;/a>, con la firma enrutada mediante &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46 (Nostr Connect)&lt;/a> cuando un bunker conserva la clave. El &lt;a href="https://github.com/forgesworn/bray/pull/75">PR #75&lt;/a> también dota al relay de pruebas incluido de desafíos &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42 (Autenticación de clientes ante relays)&lt;/a> y expone los comandos restantes del cliente Blossom. El &lt;a href="https://github.com/forgesworn/bray/pull/77">PR #77&lt;/a> añade un servidor BUD-01/02 en memoria cuya autorización firmada vincula cada carga o eliminación a un único blob, mientras el &lt;a href="https://github.com/forgesworn/bray/pull/76">PR #76&lt;/a> añade event kinds con nombre, tags abreviados y opciones de reconciliación de ID de &lt;a href="https://nostrcompass.org/es/topics/nip-77/">NIP-77&lt;/a> que evitan descargar events que el solicitante ya posee.&lt;/p>
&lt;h3 id="buzz-desktop-050-refuerza-las-invitaciones-la-búsqueda-y-las-actualizaciones-de-identidad-en-relays">Buzz Desktop 0.5.0 refuerza las invitaciones, la búsqueda y las actualizaciones de identidad en relays&lt;/h3>
&lt;p>Después de la cobertura de la semana pasada sobre los espacios de trabajo de Armada y Buzz, &lt;a href="https://github.com/block/buzz/releases/tag/v0.5.0">Buzz Desktop 0.5.0&lt;/a> añade enlaces de invitación con un límite de usos (&lt;a href="https://github.com/block/buzz/pull/3141">PR #3141&lt;/a>) y filtros de búsqueda por autor, canal e intervalos temporales (&lt;a href="https://github.com/block/buzz/pull/2871">PR #2871&lt;/a>). El &lt;a href="https://github.com/block/buzz/pull/2862">PR #2862&lt;/a> obtiene políticas de incorporación mediante la capa de red nativa de la aplicación de escritorio, y el &lt;a href="https://github.com/block/buzz/pull/2607">PR #2607&lt;/a> vuelve a publicar el registro de identidad de un agente después de que el cambio de nombre de un perfil llegue al relay. El lanzamiento también actualiza su dependencia de Nostr a raíz de un &lt;a href="https://github.com/block/buzz/pull/3135">aviso sobre denegación de servicio remota en NIP-44&lt;/a> y repara la recuperación del almacenamiento local, la posición en hilos, la reconexión de relays y las rutas de ejecución de Linux y Windows.&lt;/p>
&lt;h3 id="shosho-100-amplía-su-mercado-de-transmisiones-en-directo">Shosho 1.0.0 amplía su mercado de transmisiones en directo&lt;/h3>
&lt;p>&lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v1.0.0">Shosho 1.0.0&lt;/a> rediseña el mercado de transmisiones en directo en torno a creadores, sesiones en directo, clips y productos que los usuarios pueden encontrar mediante búsquedas configurables en relays. Un feed unificado de notificaciones reúne ahora menciones, reacciones, republicaciones y zaps, y permite responder sin salir del feed. Los espectadores pueden publicar clips de transmisiones en directo o repeticiones, mientras el lanzamiento también mejora el chat con hilos, las respuestas a clips, la carga de perfiles y el uso de red.&lt;/p>
&lt;h3 id="mafrend-v10-presenta-una-versión-preliminar-del-chat-nostr-basado-en-lugares-para-android">Mafrend v1.0 presenta una versión preliminar del chat Nostr basado en lugares para Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/DestBro/mafrend-zapstore/releases/tag/v1.0">Mafrend v1.0&lt;/a> es la primera alfa pública para Android de una aplicación prevista de chat Nostr basado en lugares. Su &lt;a href="https://mafrend.com">página del proyecto&lt;/a> indica que el conjunto de funciones sigue en desarrollo activo y describe cada ubicación del mapa como una sala de chat específica para conversaciones sobre un lugar. Un repositorio público de lanzamientos contiene el paquete instalable de Zapstore, mientras la aplicación principal sigue siendo privada.&lt;/p>
&lt;h3 id="hanami-010-ofrece-a-los-servidores-blossom-una-vía-para-android-mediada-por-un-firmante">Hanami 0.1.0 ofrece a los servidores Blossom una vía para Android mediada por un firmante&lt;/h3>
&lt;p>&lt;a href="https://github.com/Letdown2491/hanami-android/releases/tag/v0.1.0">Hanami 0.1.0&lt;/a>, una aplicación complementaria para Android destinada a servidores &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>, permite iniciar sesión, cargar y descargar desde un teléfono. La aplicación usa &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55 (Aplicación de firma para Android)&lt;/a> para someter cada firma a aprobación y un intercambio nativo de &lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98 (Autenticación HTTP)&lt;/a> para establecer la sesión con el servidor. Hanami restringe su shell web y su puente de firma al origen del servidor elegido, lo que mantiene las credenciales en el firmante mientras la interfaz web existente del servidor proporciona la experiencia de la aplicación. El primer lanzamiento público requiere Android 8 o posterior, un servidor Hanami accesible y una aplicación de firma compatible.&lt;/p>
&lt;h3 id="cordn-lanza-en-android-su-chat-grupal-con-identidad-nostr">Cordn lanza en Android su chat grupal con identidad Nostr&lt;/h3>
&lt;p>Cordn, un cliente privado de mensajería grupal, ofrece ahora a los usuarios de Android incorporación con identidad Nostr, enlaces de perfil mediante &lt;a href="https://nostrcompass.org/es/topics/nip-05/">NIP-05 (Asignación de claves Nostr a identificadores de Internet basados en DNS)&lt;/a> y enlaces verificados que abren destinos de Cordn en la aplicación. El &lt;a href="https://github.com/Cordn-msg/cordn-web/releases/tag/v0.2.1">lanzamiento 0.2.1 publicado el 24 de julio&lt;/a> introduce esa versión nativa junto con el cliente web existente. Los mensajes usan &lt;a href="https://nostrcompass.org/es/topics/mls/">MLS&lt;/a>, un protocolo de cifrado grupal, con entrega asistida por un coordinador, por lo que los grupos conservan conversaciones cifradas y ordenadas sin requerir una dirección de correo electrónico ni un número de teléfono.&lt;/p>
&lt;h3 id="nostur-1301-corrige-los-hilos-y-las-publicaciones-duplicadas-después-de-que-1300-ampliara-las-opciones-para-compartir">Nostur 1.30.1 corrige los hilos y las publicaciones duplicadas después de que 1.30.0 ampliara las opciones para compartir&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostur-com/nostur-ios-public/releases/tag/1.30.1">Nostur 1.30.1&lt;/a>, un cliente Nostr para iPhone, iPad y Mac, permite recorrer hilos de respuestas anidadas sin los fallos de expansión y contracción que alteraban el nuevo diseño. También impide que el mismo borrador se publique dos veces, incluso cuando se repiten las devoluciones de llamada de carga de medios. El lanzamiento sigue a &lt;a href="https://github.com/nostur-com/nostur-ios-public/releases/tag/1.30.0">1.30.0&lt;/a>, que añadió mensajes directos que desaparecen y una vía desde la hoja de compartir para enviar medios a Nostr, de modo que la aplicación combina ahora nuevas rutas de mensajería y publicación con correcciones para sus flujos cotidianos de hilos y publicaciones.&lt;/p>
&lt;h3 id="formstr-drive-002-combina-metadatos-de-archivos-nostr-con-blobs-de-blossom">Formstr Drive 0.0.2 combina metadatos de archivos Nostr con blobs de Blossom&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/formstr-drive/releases/tag/v0.0.2">Formstr Drive 0.0.2&lt;/a>, un gestor de archivos nativo de Nostr, ofrece a los usuarios vistas previas en la aplicación y la opción de abrir documentos de oficina en Nostr Docs. En segundo plano, almacena los archivos grandes como blobs fragmentados de &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> y elimina el blob remoto cuando el usuario borra un archivo. Un relay local mantiene cerca los metadatos Nostr de la aplicación mientras Blossom conserva los datos del archivo, separando la organización de los archivos del almacenamiento de sus datos de gran tamaño.&lt;/p>
&lt;h3 id="noornote-131">NoorNote 1.3.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote/releases/tag/v1.3.1">NoorNote 1.3.1&lt;/a>, un cliente Nostr para web, escritorio y Android, añade temporizadores para mensajes que desaparecen y configura relays predeterminados funcionales para DM en cuentas recién creadas. Filtra los artículos globales sin imágenes de portada y dirige las notificaciones de republicaciones al lector de artículos. El &lt;a href="https://github.com/77elements/noornote/releases/tag/v1.3.0">lanzamiento 1.3.0&lt;/a> anterior añadió tarjetas de &lt;a href="https://nostrcompass.org/es/topics/nip-53/">NIP-53 (actividades en directo)&lt;/a>, tags de personas de &lt;a href="https://nostrcompass.org/es/topics/nip-68/">NIP-68 (Feeds centrados en imágenes)&lt;/a>, silenciamiento parcial mediante &lt;a href="https://nostrcompass.org/es/topics/nip-78/">NIP-78 (datos de aplicaciones)&lt;/a> y la indicación de qué relays han visto las notas.&lt;/p>
&lt;h3 id="algia-00133">algia 0.0.133&lt;/h3>
&lt;p>&lt;a href="https://github.com/mattn/algia/releases/tag/v0.0.133">algia 0.0.133&lt;/a>, un cliente de línea de comandos para Nostr escrito en Go, sigue a &lt;a href="https://github.com/mattn/algia/releases/tag/v0.0.132">0.0.132&lt;/a>, que añadió listado, cronologías, publicación, reacciones, eliminaciones y flujos para entrar y salir de &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29 (Grupos basados en relays)&lt;/a>. El mismo lanzamiento añadió preautenticación &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42 (Autenticación de clientes ante relays)&lt;/a> para los relays configurados para exigirla. La versión 0.0.133 añadió después la carga de imágenes locales a los comandos de publicación normal, en canales y en grupos, adjuntando las URL resultantes y los tags de &lt;a href="https://nostrcompass.org/es/topics/nip-92/">NIP-92 (Archivos adjuntos multimedia)&lt;/a> a cada event. También funcionan las publicaciones que solo contienen imágenes, y las publicaciones grupales se dirigen de forma predeterminada al almacén multimedia del relay del grupo, mientras las demás usan los servidores de archivos configurados.&lt;/p>
&lt;h3 id="swift-nostr-070">swift-nostr 0.7.0&lt;/h3>
&lt;p>Para aplicaciones Swift, &lt;a href="https://github.com/yysskk/swift-nostr/releases/tag/0.7.0">swift-nostr 0.7.0&lt;/a>, una biblioteca Nostr para plataformas Apple, permite que un &lt;a href="https://nostrcompass.org/es/topics/nip-46/">firmante remoto NIP-46&lt;/a> gestione todas las funciones del cliente mediante su abstracción de firma. El lanzamiento añade compatibilidad con &lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98 (Autenticación HTTP)&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29 (Grupos basados en relays)&lt;/a>, incluidos los flujos para incorporarse a grupos, publicar y moderar. También valida el relleno de &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44 (Cargas útiles cifradas con versiones)&lt;/a> frente a los vectores oficiales y rechaza las cargas útiles que contienen un MAC válido sobre un relleno no canónico.&lt;/p>
&lt;h3 id="lawallet-nwc-200">lawallet-nwc 2.0.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/lawalletio/lawallet-nwc/releases/tag/v2.0.0">LaWallet NWC 2.0.0&lt;/a>, una cartera conectada a Nostr y un servicio &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a>, añade inicio de sesión con passkey que deriva la clave de firma Nostr en el navegador mediante la extensión PRF de WebAuthn. El servidor nunca recibe ese secreto, y la misma passkey puede recuperar la misma clave en otro dispositivo sincronizado. Las cuentas ahora pueden vincular y combinar varios pubkeys de Nostr, mientras el servicio opcional de escucha retransmite events de conexión con la cartera y vuelve a intentar la entrega de webhooks cuando un endpoint resulta inaccesible.&lt;/p>
&lt;h3 id="mdk-0910">MDK 0.9.10&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.9.10">MDK 0.9.10&lt;/a>, la implementación en Rust del &lt;a href="https://nostrcompass.org/es/topics/marmot/">protocolo Marmot&lt;/a>, conserva los envíos pendientes mientras un transporte está inactivo y &lt;a href="https://github.com/marmot-protocol/mdk/pull/1157">supervisa el reenvío de notificaciones de relays&lt;/a> para que la entrega entrante se recupere tras un retraso, un panic o un cierre. El &lt;a href="https://github.com/marmot-protocol/mdk/pull/1159">PR #1159&lt;/a> añade un historial de conversaciones duradero y paginado, además del contexto completo de las respuestas para agentes locales, y el &lt;a href="https://github.com/marmot-protocol/mdk/pull/1167">PR #1167&lt;/a> vuelve a publicar el event KeyPackage firmado actual en vez de generar un sustituto. El lanzamiento también conserva la ordenación manual de chats, admite la disolución definitiva de grupos y amplía la búsqueda clasificada por Web of Trust, las API de políticas de relays y los bindings para lenguajes.&lt;/p>
&lt;h3 id="pakstr-031">pakstr 0.3.1&lt;/h3>
&lt;p>&lt;a href="https://git.nostrdev.com/stuff/pakstr/releases/tag/v0.3.1">pakstr 0.3.1&lt;/a> permite que los equipos web que empaquetan un cliente Nostr para Android proporcionen configuración en tiempo de ejecución y un proxy de API sin reconstruir el shell de la aplicación. Su &lt;a href="https://git.nostrdev.com/stuff/pakstr/releases">serie de lanzamientos del mismo día&lt;/a> añadió un puente para el firmante Amber, cifrado y descifrado mediante &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44 (cargas útiles cifradas)&lt;/a>, y corrigió la inyección de permisos de Android antes del trabajo de configuración en tiempo de ejecución de la serie 0.3.x. La plantilla mantiene locales los recursos web incluidos mientras la configuración específica del despliegue llega en tiempo de ejecución, y el proxy ofrece a la aplicación empaquetada una ruta controlada para solicitudes de API junto a sus conexiones habituales con relays.&lt;/p>
&lt;h3 id="ditto-2342">Ditto 2.34.2&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/ditto/-/releases/v2.34.2">Ditto 2.34.2&lt;/a>, un cliente social Nostr personalizable, muestra los estados de los usuarios como tarjetas en feeds, páginas de detalle y citas incrustadas, incluidos emoji personalizados, caducidad y vistas previas opcionales de enlaces. Los zaps con comentarios ahora aparecen como respuestas debajo de la publicación referenciada. El lanzamiento también conserva el &lt;a href="https://gitlab.com/soapbox-pub/ditto/-/releases/v2.34.1">botón opcional del globo terráqueo en el perfil de 2.34.1&lt;/a> para propietarios que publican un sitio raíz &lt;a href="https://nostrcompass.org/es/topics/nip-5a/">NIP-5A (manifiesto de sitio web)&lt;/a>, y corrige la navegación de la página de inicio, la búsqueda de transmisiones en directo, el manejo de enlaces externos y los emoji personalizados rotos.&lt;/p>
&lt;h3 id="earthly-009">Earthly 0.0.9&lt;/h3>
&lt;p>&lt;a href="https://github.com/zeSchlausKwab/earthly/releases/tag/v0.0.9">Earthly 0.0.9&lt;/a>, un editor colaborativo de mapas construido sobre Nostr, ahora mantiene visibles los «me gusta» cuando se cierra, vuelve a abrir o actualiza el panel de una entidad del mapa. Su flujo de &lt;a href="https://nostrcompass.org/es/topics/nip-57/">NIP-57 (zaps Lightning)&lt;/a> envía JSON válido de solicitudes de zap para que los proveedores Lightning puedan publicar recibos verificados en relays accesibles públicamente, también durante el desarrollo local. Las facturas generadas permanecen visibles al cambiar entre las vistas de una entidad, y la aplicación muestra una confirmación después de que llega un recibo verificado.&lt;/p>
&lt;h2 id="en-desarrollo">En desarrollo&lt;/h2>
&lt;h3 id="keep-añade-firma-nip-44-v3-limitada-por-kind-y-refuerza-la-política-de-aprobación">Keep añade firma NIP-44 v3 limitada por kind y refuerza la política de aprobación&lt;/h3>
&lt;p>Keep integró cinco cambios en el firmante de Android que transmiten solicitudes de cifrado y descifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44 (Cargas útiles cifradas)&lt;/a> v3 mediante los dos transportes &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55 (Aplicación de firma para Android)&lt;/a> y su bunker &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46 (Nostr Connect)&lt;/a>. Los &lt;a href="https://github.com/privkeyio/keep-android/pull/451">PR #451&lt;/a>, &lt;a href="https://github.com/privkeyio/keep-android/pull/452">#452&lt;/a> y &lt;a href="https://github.com/privkeyio/keep-android/pull/453">#453&lt;/a> mantienen las concesiones v3 separadas de v2, restringen su alcance según el kind del event, rechazan kinds ausentes o no válidos y conservan las solicitudes de aprobación abiertas desde notificaciones. Los &lt;a href="https://github.com/privkeyio/keep-android/pull/454">PR #454&lt;/a> y &lt;a href="https://github.com/privkeyio/keep-android/pull/455">#455&lt;/a> dejan de tratar la política de firma Basic como Auto y trasladan la selección global al almacén cifrado gestionado por el núcleo. Los responsables de Keep integraron los cinco cambios después del lanzamiento etiquetado más reciente para Android.&lt;/p>
&lt;h3 id="routstrd-cambia-su-enlace-de-red-predeterminado-después-de-una-exposición-sin-autenticación">Routstrd cambia su enlace de red predeterminado después de una exposición sin autenticación&lt;/h3>
&lt;p>El &lt;a href="https://github.com/Routstr/routstrd/pull/56">PR #56&lt;/a> de Routstrd cambia la dirección de enlace predeterminada del router local de inferencia Nostr, de todas las interfaces de red a &lt;code>127.0.0.1&lt;/code>. La configuración anterior exponía sin autenticación los endpoints de saldo de cartera, historial, acceso, envío, reembolso, claves de API, proveedor, cliente, uso y detención del daemon a cualquier host que pudiera alcanzar el puerto. Los operadores aún pueden configurar explícitamente un enlace no local, pero el cambio integrado hace que un despliegue nuevo sea exclusivamente local de forma predeterminada y todavía no ha aparecido en un lanzamiento etiquetado.&lt;/p>
&lt;h3 id="imwald-android-aclara-el-estado-de-publicación-sin-conexión">Imwald Android aclara el estado de publicación sin conexión&lt;/h3>
&lt;p>Imwald Android, un cliente Nostr para Android, ahora da por completada una publicación tras la confirmación de un relay local solo cuando todos los destinos configurados son locales. Su &lt;a href="https://git.imwald.eu/silberengel/imwald-android/commit/f4de9f61df35110c77d2e5f99d764c0df176962b">corrección de publicación sin conexión y outbox&lt;/a> mantiene pendiente la entrega remota cuando un relay local ha aceptado el event pero los relays remotos configurados no lo han hecho, de modo que el informe de publicación distingue el almacenamiento local en el dispositivo de la entrega a relays.&lt;/p>
&lt;h3 id="fips-añade-una-capa-de-acceso-para-openwrt-una-adaptación-para-freebsd-sigue-en-revisión">FIPS añade una capa de acceso para OpenWrt; una adaptación para FreeBSD sigue en revisión&lt;/h3>
&lt;p>El Free Internetworking Peering System nativo de Nostr permite ahora que un router OpenWrt exponga una red de acceso &lt;code>!FIPS&lt;/code> abierta mediante el &lt;a href="https://github.com/jmcorgan/fips/pull/126">PR #126 integrado&lt;/a>. El &lt;a href="https://github.com/jmcorgan/fips/pull/129">PR #129 para FreeBSD&lt;/a>, paralelo y aún abierto, propone adaptar el daemon, la ruta de datos TUN, la resolución de nombres &lt;code>.fips&lt;/code>, la gestión de servicios y la compilación de paquetes nativos. La integración de OpenWrt amplía el acceso hoy, mientras el trabajo para FreeBSD lo extendería a otro sistema operativo de propósito general.&lt;/p>
&lt;p>Una &lt;a href="https://primal.net/e/d0afe733f75e909341ab7f39834883968df097472238a474df3a3346c5d38f51">actualización del proyecto FIPS del 26 de julio&lt;/a> informó de más de 300 nodos en su red superpuesta UDP pública y de una malla más amplia que se acercaba a los 2.000 nodos. El &lt;a href="https://github.com/jmcorgan/fips">repositorio de FIPS&lt;/a> dedicó la misma semana a reforzar las pruebas de red simultáneas, la continuidad tras el cambio de claves, el comportamiento del límite de saltos, las comprobaciones del cortafuegos y el aislamiento del laboratorio NAT. El trabajo en el repositorio ofrece a los operadores comprobaciones reproducibles de estos comportamientos a medida que crece la red.&lt;/p>
&lt;h3 id="zap-cooking-programa-publicaciones-y-vincula-las-solicitudes-del-escáner">Zap Cooking programa publicaciones y vincula las solicitudes del escáner&lt;/h3>
&lt;p>Zap Cooking, una aplicación Nostr para compartir recetas y planificar comidas, puede ahora conservar una publicación programada en almacenamiento cifrado y publicarla cuando corresponda mediante un barrido periódico de relays (&lt;a href="https://github.com/zapcooking/frontend/pull/566">PR #566&lt;/a>, &lt;a href="https://github.com/zapcooking/frontend/pull/569">PR #569&lt;/a>). Esto ofrece a los usuarios una vía de publicación programada sin dejar expuesto contenido de publicaciones sin firmar en la base de datos del programador.&lt;/p>
&lt;p>Su escáner de nevera ahora autentica el cuerpo exacto de la solicitud con autenticación HTTP &lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98&lt;/a>, por lo que las comprobaciones de membresía se basan en la clave que firmó la solicitud de escaneo en vez de un pubkey proporcionado en su cuerpo (&lt;a href="https://github.com/zapcooking/frontend/pull/599">PR #599&lt;/a>).&lt;/p>
&lt;h3 id="citrine-convierte-un-dispositivo-android-en-un-relay-gestionable">Citrine convierte un dispositivo Android en un relay gestionable&lt;/h3>
&lt;p>Citrine, un relay Nostr alojado en Android, puede ahora enviar los events que ha almacenado a relays externos, lo que ofrece al operador una forma de volver a difundir el historial local (&lt;a href="https://github.com/greenart7c3/Citrine/pull/179">PR #179&lt;/a>). También añade comandos &lt;a href="https://nostrcompass.org/es/topics/nip-86/">NIP-86 (API de gestión de relays)&lt;/a> para que los clientes compatibles puedan administrar el relay (&lt;a href="https://github.com/greenart7c3/Citrine/pull/150">PR #150&lt;/a>).&lt;/p>
&lt;p>Los operadores de grupos pueden administrar grupos basados en relays &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> mediante la firma de Amber en el &lt;a href="https://github.com/greenart7c3/Citrine/pull/178">PR #178&lt;/a>, mientras el &lt;a href="https://github.com/greenart7c3/Citrine/pull/174">PR #174&lt;/a> mantiene alineados durante los reinicios la configuración de relays mediante Tor y el estado del ciclo de vida.&lt;/p>
&lt;h3 id="wired-recupera-conversaciones-completas-en-el-navegador">Wired recupera conversaciones completas en el navegador&lt;/h3>
&lt;p>Wired, un cliente Nostr basado en navegador, ahora sigue las raíces de feeds, las respuestas y los events referenciados hasta completarlos en vez de detenerse ante límites fijos de amplitud o resultados (&lt;a href="https://github.com/smolgrrr/Wired/pull/148">PR #148&lt;/a>, &lt;a href="https://github.com/smolgrrr/Wired/pull/147">PR #147&lt;/a>, &lt;a href="https://github.com/smolgrrr/Wired/pull/146">PR #146&lt;/a>). Por tanto, los usuarios pueden recuperar hilos más profundos y el contexto de los feeds cuando los events pertinentes están disponibles en sus relays.&lt;/p>
&lt;p>El navegador también conserva las sugerencias de relay en los events referenciados y solo las usa para el contexto que aún falta, lo que restaura conversaciones que los relays configurados no contienen (&lt;a href="https://github.com/smolgrrr/Wired/pull/145">PR #145&lt;/a>, &lt;a href="https://github.com/smolgrrr/Wired/pull/144">PR #144&lt;/a>). La recuperación incompleta se mantiene separada de una captura completa, por lo que una respuesta parcial no sobrescribe la vista anterior almacenada en caché.&lt;/p>
&lt;h2 id="trabajo-sobre-protocolos-y-especificaciones">Trabajo sobre protocolos y especificaciones&lt;/h2>
&lt;h3 id="nips-límite-de-alojamiento-de-nip-34-migración-de-grupos-y-tres-borradores-activos">NIPs: límite de alojamiento de NIP-34, migración de grupos y tres borradores activos&lt;/h3>
&lt;p>Esta semana se integraron dos cambios en especificaciones. El &lt;a href="https://github.com/nostr-protocol/nips/commit/6d2979b3f503a8539c983efbcdcf901bbcf9ed23">commit 6d2979b de NIP-34&lt;/a> elimina las instrucciones de alojamiento GRASP de la descripción del pull request &lt;code>kind:1618&lt;/code>, dejando el alojamiento y el comportamiento alternativo fuera del contrato del event. El &lt;a href="https://github.com/nostr-protocol/nips/commit/db5fe3de8c5d1443b634c9bbf66ecb004f337057">commit db5fe3d de NIP-29&lt;/a> define cómo migran los metadatos de un grupo de relay a otro relay y cómo distinguen los clientes un traslado válido de una bifurcación que continúa de forma independiente.&lt;/p>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/pull/2424">PR #2424&lt;/a> propone declaraciones mutuas de conjuntos de claves con &lt;code>kind:10045&lt;/code>. El requisito recíproco impediría que una identidad vinculara unilateralmente otra clave. El &lt;a href="https://github.com/nostr-protocol/nips/pull/2421">PR #2421&lt;/a> propone intents de zap BOLT12 y pruebas del pagador que los clientes puedan validar frente al destino, el importe, la oferta y el pago liquidado sin depender de un servidor de recibos operado por el destinatario.&lt;/p>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/pull/2425">PR #2425&lt;/a> permitiría que los marcadores NIP-B0 conservaran esquemas distintos de HTTP, como &lt;code>nostr:&lt;/code>, junto con URL web. Esto mantendría intactos los identificadores nativos de Nostr, las solicitudes de pago y otros esquemas de aplicaciones dentro de las mismas listas privadas o públicas de marcadores que ya contienen direcciones web.&lt;/p>
&lt;h3 id="mill-implementa-un-borrador-para-copias-de-seguridad-de-claves-mediante-cuentas-en-la-nube">Mill implementa un borrador para copias de seguridad de claves mediante cuentas en la nube&lt;/h3>
&lt;p>Mill &lt;a href="https://primal.net/e/6362d9b00662fa64200530f8a29ae547521bac0a1e3c9379ef9086eac7d2030b">anunció&lt;/a> un &lt;a href="https://github.com/0ceanSlim/nostr-mill/blob/main/docs/nip-cloud-key-backup.md">borrador implementado de copia de seguridad de claves mediante cuentas en la nube&lt;/a> que combina un identificador de cuenta OIDC de Google con una frase de contraseña de alta entropía para derivar una clave de respaldo desechable. Su &lt;a href="https://github.com/0ceanSlim/nostr-mill/blob/main/src/nipbackup.js">implementación de referencia&lt;/a> cifra la clave real del usuario como un &lt;code>ncryptsec&lt;/code> &lt;a href="https://nostrcompass.org/es/topics/nip-49/">NIP-49 (Cifrado de claves privadas)&lt;/a> y después la almacena en un event provisional kind &lt;code>30049&lt;/code>, reemplazable y parametrizado, en los relays configurados. El proyecto &lt;a href="https://github.com/0ceanSlim/nostr-mill/commit/eeb4b9114d02114b703a6823ad36ca8063b224da">integró el flujo de copia de seguridad en main&lt;/a>, pero ningún lanzamiento posterior a v1.0.0 lo incluye, y el flujo de copia de seguridad permanece desactivado salvo que un operador proporcione &lt;code>backupRelays&lt;/code> específicos. Un conjunto versionado de relays sigue siendo provisional, y el borrador advierte que el texto cifrado publicado sigue disponible para intentar adivinar la frase de contraseña sin conexión. Los lectores deben considerar el diseño como un experimento implementado que depende de una frase de contraseña de alta entropía.&lt;/p>
&lt;h3 id="buds-los-servidores-blossom-pueden-identificar-cargas-desconocidas-por-sus-bytes">BUDs: los servidores Blossom pueden identificar cargas desconocidas por sus bytes&lt;/h3>
&lt;p>El &lt;a href="https://github.com/hzrd149/blossom/pull/110">PR #110 de BUD-02&lt;/a> propone recomendar la detección del tipo MIME en el servidor cuando quien carga un archivo omite &lt;code>Content-Type&lt;/code> o envía &lt;code>application/octet-stream&lt;/code>. Un servidor Blossom inspeccionaría los primeros bytes con una biblioteca actualizada de tipos de archivo, conservaría un tipo específico proporcionado por el cliente y recurriría al tipo binario genérico cuando fallara la detección. Esto permitiría presentar correctamente imágenes, audio, vídeo y archivos producidos por agentes sin hacer obligatoria la inspección de bytes para cada carga.&lt;/p>
&lt;h3 id="naps-las-convenciones-sustituyen-las-vías-numeradas-mientras-se-desarrollan-contratos-de-captura-y-sistema-de-archivos">NAPs: las convenciones sustituyen las vías numeradas mientras se desarrollan contratos de captura y sistema de archivos&lt;/h3>
&lt;p>El &lt;a href="https://github.com/napplet/naps/pull/87">PR #87&lt;/a> elimina la vía numerada de protocolos entre napplets y mantiene las capacidades de tiempo de ejecución bajo contratos con nombre, mientras los mensajes de las aplicaciones convergen en URI de convención &lt;code>napplet:&amp;lt;archetype&amp;gt;/&amp;lt;intent&amp;gt;&lt;/code>. El &lt;a href="https://github.com/napplet/naps/pull/89">cambio de identidad de temas&lt;/a> integrado separa una ruta de convención estable y sin consultas de los datos de carga útil de cada mensaje, y el &lt;a href="https://github.com/napplet/naps/pull/90">PR #90&lt;/a> aplica esa regla de transposición a los metadatos de descubrimiento y manejadores.&lt;/p>
&lt;p>Dos borradores NAP amplían el límite del shell de confianza. El &lt;a href="https://github.com/napplet/naps/pull/94">PR #94 de NAP-CAPTURE&lt;/a> mantiene en el entorno de ejecución el consentimiento para el micrófono, los permisos de la plataforma, los límites, la retención y la limpieza al finalizar, mientras devuelve un artefacto multimedia acotado a un napplet aislado. El &lt;a href="https://github.com/napplet/naps/pull/88">PR #88 de NAP-FS&lt;/a> es la propuesta paralela de sistema de archivos virtual, con descriptores sujetos a políticas en vez de rutas de host sin restricciones.&lt;/p>
&lt;h3 id="marmot-la-especificación-define-un-estado-terminal-de-grupo">Marmot: la especificación define un estado terminal de grupo&lt;/h3>
&lt;p>El &lt;a href="https://github.com/marmot-protocol/marmot/pull/409">PR #409 de Marmot&lt;/a> añade un estado &lt;code>Disbanded&lt;/code> autenticado e irreversible porque MLS no dispone de una operación para eliminar grupos. Un commit autorizado de administrador saca a un grupo de &lt;code>Active&lt;/code>, impide que ramas antiguas, mensajes y Welcomes lo reactiven, y ofrece a los grupos existentes una vía explícita de compatibilidad antes de poder disolverse. La &lt;a href="https://github.com/marmot-protocol/marmot/pull/408">revisión anterior de incidencias de la especificación&lt;/a> también concilió la autoridad sobre el estado del grupo, la convergencia, los paquetes de claves, las confirmaciones, las reglas de medios, el lenguaje del registro y 200 incidencias de especificación registradas.&lt;/p>
&lt;h3 id="gamma-markets-no-se-incorporaron-cambios-públicos-en-la-especificación">Gamma Markets: no se incorporaron cambios públicos en la especificación&lt;/h3>
&lt;p>El &lt;a href="https://github.com/GammaMarkets/market-spec">repositorio de la especificación de Gamma Markets&lt;/a> no registró commits públicos ni actividad de pull requests entre el 21 y el 28 de julio. Sus documentos publicados sobre órdenes, liquidación y datos de mercado siguen siendo la referencia actual; esta entrada sin cambios mantiene a Gamma visible en la revisión semanal de especificaciones.&lt;/p>
&lt;h3 id="concord-las-capacidades-de-lectura-y-escritura-pueden-separarse-dentro-de-un-mismo-plano">Concord: las capacidades de lectura y escritura pueden separarse dentro de un mismo plano&lt;/h3>
&lt;p>El &lt;a href="https://github.com/concord-protocol/concord/pull/12">PR #12 de Concord&lt;/a> sigue siendo un borrador abierto para planos en los que no todos los lectores deberían poder escribir. Orienta el Control Plane hacia capacidades separadas para flujos de lectura y escritura, y esboza canales de escritura restringida, invitaciones y ámbitos de cambio de claves. La clave de escritura funciona como barrera contra spam en el borrador, mientras los actores internos firmados y las comprobaciones de la lista de miembros siguen otorgando la autoridad.&lt;/p>
&lt;h3 id="nwc-un-método-de-cartera-puede-elegir-entre-bolt11-y-bolt12">NWC: un método de cartera puede elegir entre BOLT11 y BOLT12&lt;/h3>
&lt;p>El &lt;a href="https://github.com/nostr-wallet-connect/nwc/pull/2">PR #2 de NWC&lt;/a> propone métodos opcionales &lt;code>pay&lt;/code> y &lt;code>receive&lt;/code> para URI de pago BIP-321. Un servicio de cartera puede anunciar compatibilidad, elegir una factura BOLT11 o una oferta BOLT12 compatible de una URI, rechazar una red Bitcoin que no coincida antes del pago e informar del tipo de instrucción que utilizó. La propuesta permanece fuera del núcleo de NWC para que las carteras sin compatibilidad con BIP-321 o BOLT12 no tengan que implementarla.&lt;/p>
&lt;h2 id="seis-julios-en-la-historia-de-nostr">Seis julios en la historia de Nostr&lt;/h2>
&lt;p>Este recorrido histórico por los julios de Nostr aborda problemas recurrentes: identificadores legibles, filtrado de relays, datos portátiles de aplicaciones, privacidad e interoperabilidad. A lo largo de seis años, cada capa transforma una solución puntual en infraestructura compartida: los nombres se convierten en perfiles, los filtros en contratos de aplicación y el estado transportado por relays se expande de las notas a las salas y los grupos en directo. Comienza con &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/1ce00bd3b6909f78f212a7a172cf845b55280599">la primera implementación de NIP-05&lt;/a> y termina con &lt;a href="https://github.com/nostr-protocol/nips/commit/2f4b09335c54a993d483bc220195e3f4a33df1ec">la integración del descubrimiento direccionable de este mes&lt;/a>, y después examina los cambios de julio que desarrollaron esos temas.&lt;/p>
&lt;h3 id="julio-de-2021">Julio de 2021&lt;/h3>
&lt;p>El 19 de julio de 2021, el &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/1ce00bd3b6909f78f212a7a172cf845b55280599">commit 1ce00bd de nostr-tools&lt;/a> añadió un módulo &lt;code>nip05.js&lt;/code> y elevó el paquete a la versión 0.5.0. Su función &lt;code>keyFromDomain&lt;/code> construía una solicitud DNS TXT para &lt;code>_nostrkey.&amp;lt;domain&amp;gt;&lt;/code>, enviaba la consulta binaria a uno de ocho proveedores DNS-over-HTTPS seleccionados por rotación y devolvía la primera clave de la respuesta. Así, un cliente de navegador podía obtener una clave pública a partir de un dominio controlado por una persona sin operar un resolutor DNS ni depender de un único proveedor predefinido en el código.&lt;/p>
&lt;p>Ese primer enfoque resolvía la búsqueda, pero no los nombres dentro de un dominio, y su perímetro de confianza abarcaba DNS y el resolutor seleccionado. La &lt;a href="https://github.com/nostr-protocol/nips/blob/master/05.md">especificación NIP-05&lt;/a> moderna trasladó el descubrimiento a &lt;code>/.well-known/nostr.json&lt;/code>, donde un dominio asigna nombres locales a pubkeys y puede adjuntar sugerencias de relay. El código de 2021 registra la presión de diseño anterior: las claves públicas eran portátiles, pero las personas aún necesitaban identificadores que pudieran leer, verificar y trasladar entre clientes.&lt;/p>
&lt;h3 id="julio-de-2022">Julio de 2022&lt;/h3>
&lt;p>El 10 de julio, el &lt;a href="https://github.com/nostr-protocol/nips/commit/3771186c0351656a675576051b75d253f26c0f0b">commit 3771186 de NIP-12&lt;/a> limitó las consultas genéricas de relays a tags de una sola letra. Esa decisión hizo útiles filtros como &lt;code>#r&lt;/code>, &lt;code>#g&lt;/code> y &lt;code>#t&lt;/code> para referencias URL, geohashes y hashtags sin pedir a los relays que indexaran todas las claves arbitrarias de metadatos. Diez días después, el primer &lt;a href="https://github.com/nostr-protocol/nips/commit/9f9a864ce1e1ebfdcfdd4835cd60807440f038e8">borrador de comentarios web NIP-20&lt;/a> usó directamente ese modelo de consulta: un comentario kind &lt;code>34&lt;/code> llevaba una URL de página web normalizada en un tag &lt;code>r&lt;/code>, lo que permitía a un sitio y a clientes independientes recuperar la misma conversación de los relays.&lt;/p>
&lt;p>A continuación llegaron la política de relays y la respuesta social. El &lt;a href="https://github.com/nostr-protocol/nips/commit/f51ce9dc0efaf61f39a76e112c310a9f58af1c87">commit original de NIP-22&lt;/a> permitía a los relays rechazar events cuya marca temporal &lt;code>created_at&lt;/code> fuera inverosímilmente antigua, y el &lt;a href="https://github.com/nostr-protocol/nips/commit/8bef0e9d79ebb4b11f8fd2bea11dc8f1668bc9d0">commit 8bef0e9&lt;/a> añadió las marcas temporales futuras a la misma política. El 30 de julio, el &lt;a href="https://github.com/nostr-protocol/nips/commit/dcbd504639d20d1b0ae6bb837609710645781b88">commit dcbd504 de NIP-25&lt;/a> definió reacciones kind &lt;code>7&lt;/code> con tags de destino &lt;code>e&lt;/code> y &lt;code>p&lt;/code>; el commit siguiente asignó &lt;code>-&lt;/code> a una reacción negativa, y el &lt;a href="https://github.com/nostr-protocol/nips/commit/6903ff5b2c395a550a26069f6e2b5460ae1fdca6">commit 6903ff5&lt;/a> convirtió &lt;code>+&lt;/code> en el «me gusta» genérico explícito. En conjunto, estos commits especificaron el rechazo de marcas temporales por los relays, la recuperación basada en tags, los comentarios web y los tags de reacción para los clientes que adoptaran los borradores.&lt;/p>
&lt;h3 id="julio-de-2023">Julio de 2023&lt;/h3>
&lt;p>Julio de 2023 llevó la coordinación más allá de las notas breves. El &lt;a href="https://github.com/nostr-protocol/nips/commit/e057fa01ca3928a32bdc0e9a44c27f946f267041">borrador de NIP-37 sobre claves perdidas&lt;/a> exploró la retirada irreversible de claves, umbrales de recuperación social y claves de sustitución precomprometidas, a la vez que se negaba explícitamente a denominar el resultado rotación universal de claves. Cinco días después, &lt;a href="https://github.com/nostr-protocol/nips/commit/141197c564d97073f0293e3b2f367f0b6b3619c2">NIP-53&lt;/a> introdujo actividades en directo direccionables kind &lt;code>30311&lt;/code> y mensajes de chat kind &lt;code>1311&lt;/code>, lo que proporcionó a transmisiones, escenarios y salas en directo un modelo de event compartido para anfitriones, participantes, estado y conversación.&lt;/p>
&lt;p>Las aplicaciones también comenzaron a anunciar trabajo y comercio. El primer &lt;a href="https://github.com/nostr-protocol/nips/commit/67e950a2009e81df1b8c91b0a2ade0596e83f168">borrador de Data Vending Machine&lt;/a> describió solicitudes de trabajo kind &lt;code>68001&lt;/code>, resultados kind &lt;code>68002&lt;/code>, ofertas, vencimientos, encadenamiento y proveedores que compiten por tareas como transcripción, resumen y traducción. El 13 de julio, el &lt;a href="https://github.com/nostr-protocol/nips/commit/451c06a3c572a13afe45c1d80616f8e6dd9bb1de">borrador de anuncios clasificados&lt;/a> añadió ofertas direccionables kind &lt;code>30402&lt;/code> con metadatos de título, resumen, precio, ubicación y estado. Esos borradores se convirtieron más tarde en NIP-90 y NIP-99, pero sus formas de julio ya separaban una solicitud o un anuncio del servidor que los mostraba.&lt;/p>
&lt;p>El enrutamiento de pagos también se volvió componible. La &lt;a href="https://github.com/nostr-protocol/nips/commit/5d63b1570c490007252b10e757f7f68ef1f4b717">integración de divisiones de zap de NIP-57&lt;/a> del 31 de julio convirtió un único destino de &lt;code>zap&lt;/code> en una lista ponderada de pubkeys de destinatarios y sugerencias de relay. Un cliente podía dividir un zap entre colaboradores, omitir destinatarios sin ponderar cuando había algunas ponderaciones y mostrar la división antes del pago. El cambio estandarizó una representación mediante events firmados para los destinatarios ponderados de zaps y las sugerencias de relay, lo que permitía a clientes compatibles presentar la división antes del pago.&lt;/p>
&lt;h3 id="julio-de-2024">Julio de 2024&lt;/h3>
&lt;p>El 4 de julio, el &lt;a href="https://github.com/nostr-protocol/nips/commit/c60ca888efbdc9b8fa4bbfbace372409d0b2161a">commit c60ca88 de NIP-29&lt;/a> añadió la acción de moderación de relay &lt;code>kind:9007&lt;/code> para crear un grupo. Seis días después, &lt;a href="https://github.com/nostr-protocol/nips/commit/ae1906ec7943a6bd756f05d2cd2fb2a041398921">NIP-70&lt;/a> definió los events protegidos: un tag &lt;code>-&lt;/code> indica a un relay que acepte la publicación únicamente del autor autenticado del event. Un cambio dio a los relays una transición explícita de estado de grupo; el otro permitió a los autores impedir que terceros reprodujeran en relays events firmados que, por lo demás, eran válidos.&lt;/p>
&lt;p>El 16 de julio, un &lt;a href="https://github.com/nostr-protocol/nips/commit/506b38916ab67a37b2d98b46b62cf0c0c5fde5a4">commit de la especificación Cashu&lt;/a> introdujo tanto las carteras NIP-60 como los nutzaps NIP-61. NIP-60 colocó los metadatos de la cartera en kind &lt;code>37375&lt;/code>, las pruebas no gastadas en events kind &lt;code>7375&lt;/code> cifrados y el historial opcional de transacciones en kind &lt;code>7376&lt;/code>. NIP-61 combinó las preferencias de mint y relay del destinatario, publicadas en kind &lt;code>10019&lt;/code>, con nutzaps kind &lt;code>7337&lt;/code> bloqueados mediante P2PK. El estado de la cartera y los tokens al portador podían circular entonces por relays, mientras el canje seguía dependiendo de las pruebas del mint Cashu y de una prevención cuidadosa de las reclamaciones dobles.&lt;/p>
&lt;p>Dos modificaciones de finales de julio reforzaron el estado determinista. El &lt;a href="https://github.com/nostr-protocol/nips/commit/9c54549f1842245b842d8a66f3bade744da24189">commit 9c54549 de NIP-01&lt;/a> exigió usar los ID de event como criterio de desempate después de marcas temporales &lt;code>created_at&lt;/code> iguales, para que los clientes pudieran ordenar del mismo modo conjuntos de resultados idénticos. La &lt;a href="https://github.com/nostr-protocol/nips/commit/722ac7a58695a365be0dbb6eccb33ccd7890a8c7">integración de eliminación NIP-09&lt;/a> aclaró que las solicitudes kind &lt;code>5&lt;/code> pueden dirigirse a ID de event o a coordenadas direccionables y deberían incluir tags &lt;code>k&lt;/code> que identifiquen los kinds que los relays deberían eliminar. Ambos cambios redujeron los puntos en los que dos implementaciones correctas podrían discrepar.&lt;/p>
&lt;h3 id="julio-de-2025">Julio de 2025&lt;/h3>
&lt;p>El descubrimiento de ecash obtuvo su propio directorio social el 16 de julio. El &lt;a href="https://github.com/nostr-protocol/nips/commit/1afb6da049e57dd628ef46a3b0f90300653a66ee">commit 1afb6da de NIP-87&lt;/a> definió registros kind &lt;code>38172&lt;/code> de mints Cashu, registros kind &lt;code>38173&lt;/code> de Fedimint y recomendaciones kind &lt;code>38000&lt;/code> que pueden apuntar a esos registros con sugerencias de relay. Las carteras podían consultar las recomendaciones de autores de confianza antes de conectarse a un mint, mientras la especificación advertía que el descubrimiento global sin filtrar podía dirigir a los usuarios hacia operadores maliciosos.&lt;/p>
&lt;p>Una semana después, un borrador especificó registros portátiles de events Nostr para mensajes de voz. El primer &lt;a href="https://github.com/nostr-protocol/nips/commit/e50f37a527ace39cc3057827d52295c6b6de1112">commit de NIP-A0&lt;/a> asignó kind &lt;code>1222&lt;/code> a la raíz de un mensaje de voz y kind &lt;code>1244&lt;/code> a una respuesta, con una URL de audio y metadatos multimedia. La &lt;a href="https://github.com/nostr-protocol/nips/commit/4984b057c20397eae919ee5e463bc8a5d3fb2dc0">actualización de formato&lt;/a> del 27 de julio recomendó Opus en un contenedor Ogg y estandarizó una forma de onda comprimida. Los clientes podían intercambiar audio breve sin acordar un único grabador, host o representación de forma de onda.&lt;/p>
&lt;p>La mensajería privada y las conexiones de cartera añadieron después estado de protocolo para el seguimiento de lectura, la selección de cifrado y el progreso de los pagos. El &lt;a href="https://github.com/nostr-protocol/nips/commit/3d76da368e157934e056d95b3b3d8d6eaa105b09">commit 3d76da3 de NIP-17&lt;/a> definió un registro reemplazable kind &lt;code>30016&lt;/code> cuyos tags &lt;code>seen&lt;/code> ordenados permiten a un cliente distinguir los mensajes leídos de los intervalos que podría haberse perdido. El 31 de julio, la &lt;a href="https://github.com/nostr-protocol/nips/commit/f30a43bd37e08516923b96dd0d860122c9ffe04e">negociación de cifrado NIP-47&lt;/a> permitió a los servicios de cartera anunciar NIP-44 v2 o el antiguo NIP-04, mientras el &lt;a href="https://github.com/nostr-protocol/nips/commit/0595d438aaa163dd33ed00748026698a411a0861">commit de estado de transacciones&lt;/a> añadió los estados &lt;code>pending&lt;/code>, &lt;code>settled&lt;/code>, &lt;code>accepted&lt;/code>, &lt;code>expired&lt;/code> y &lt;code>failed&lt;/code>. La entrega, el cifrado y el progreso del pago se convirtieron en datos explícitos del protocolo en vez de inferencias locales.&lt;/p>
&lt;h3 id="julio-de-2026">Julio de 2026&lt;/h3>
&lt;p>Este julio comenzó conectando direcciones web corrientes con consultas de relays. El &lt;a href="https://github.com/nostr-protocol/nips/commit/2f4b09335c54a993d483bc220195e3f4a33df1ec">commit 2f4b093 de descubrimiento direccionable&lt;/a> define una búsqueda &lt;code>/.well-known/nostr.json?ad=&amp;lt;path&amp;gt;&lt;/code> cuya respuesta contiene un filtro Nostr y una lista de relays. Un navegador normal aún puede abrir la URL original como HTML, mientras un cliente Nostr puede consultar el endpoint &lt;code>/.well-known/nostr.json?ad=&amp;lt;path&amp;gt;&lt;/code> correspondiente para obtener un filtro y una lista de relays que resuelvan la dirección como un grupo, nsite, feed, event u otro objeto nativo. El patrón retoma el problema de 2021 de pasar del dominio a la clave en una capa más amplia: una URL legible por humanos puede ahora nombrar tanto una identidad como una consulta.&lt;/p>
&lt;p>NIP-29 pasó entonces de grupos de relay planos a espacios estructurados. El &lt;a href="https://github.com/nostr-protocol/nips/commit/223ddb3b0c282f2a133adb9f4a9c098a31b36937">commit sobre subgrupos&lt;/a> del 16 de julio añadió relaciones de padre e hijos ordenados; otros commits relacionados añadieron sufijos de códigos de invitación, banners, instantáneas ordenadas de elementos fijados y events direccionables fijados. El 22 de julio, la &lt;a href="https://github.com/nostr-protocol/nips/commit/db5fe3de8c5d1443b634c9bbf66ecb004f337057">aclaración sobre migración y bifurcación&lt;/a> definió cuándo los metadatos trasladan legítimamente un grupo a otro relay y cuándo una rama todavía activa constituye una bifurcación independiente. El identificador del grupo se mantuvo sencillo, mientras la jerarquía, la presentación y los cambios de relay se convirtieron en estado explícito.&lt;/p>
&lt;p>Dos modificaciones menores aclararon los límites de implementación. El &lt;a href="https://github.com/nostr-protocol/nips/commit/f0af20484c5e0d12e2d1936f87c5a6681a08daff">commit f0af204 de NIP-46&lt;/a> exige que un firmante remoto devuelva un error ante métodos desconocidos o no compatibles en vez de dejar que el cliente agote en silencio el tiempo de espera. El &lt;a href="https://github.com/nostr-protocol/nips/commit/6d2979b3f503a8539c983efbcdcf901bbcf9ed23">commit 6d2979b de NIP-34&lt;/a> elimina de la descripción del event de pull request las instrucciones de alojamiento específicas de GRASP. Uno proporciona a los solicitantes una respuesta definitiva; el otro evita que un event portátil de git herede en silencio un protocolo de servidor.&lt;/p>
&lt;hr>
&lt;p>Envíe un DM NIP-17 para compartir un proyecto o una noticia mediante el &lt;a href="https://github.com/andotherstuff/nostr-compass">proyecto Nostr Compass&lt;/a>.&lt;/p></content:encoded></item><item><title>Nostr Compass #32</title><link>https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/</link><pubDate>Wed, 22 Jul 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/</guid><description>&lt;p>Bienvenidos de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#indiesats-drops-its-publisher-role-and-relaunches-as-open-nostr-music-infrastructure">IndieSats&lt;/a> retira la custodia de claves, su whitelist y su recorte obligatorio de ingresos, y se relanza como un relay abierto, un reproductor y una capa de descubrimiento donde los artistas publican bajo sus propias claves. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#nostrord-v230-ships-group-moderation-mute-lists-and-onion-relays">Nostrord v2.3.0&lt;/a> incorpora moderación de grupos, listas de silencio y relays onion la misma semana en que se fusionan cinco &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#protocol-work-and-nip-updates">PRs de la spec NIP-29&lt;/a>. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#zapstore-110-makes-the-device-key-portable-and-adds-background-auto-updates">Zapstore 1.1.0&lt;/a> introduce una clave de dispositivo portátil cifrada, con respaldo mediante Amber, y actualizaciones automáticas opcionales en segundo plano. El &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#the-favorite-follow-sets-list-kind-merges-and-immediately-moves-house">kind de lista favorite-follow-sets&lt;/a> se fusiona y abre un PR de renumeración en cuestión de días. Y los &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#the-iris-projects-ship-a-pubsub-library-a-browser-fips-runtime-and-a-social-graph-20-in-one-week">proyectos de Iris&lt;/a> entregan nostr-pubsub, el runtime de navegador fips-ts y nostr-social-graph 2.0.&lt;/p></description><content:encoded>&lt;p>Bienvenidos de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#indiesats-drops-its-publisher-role-and-relaunches-as-open-nostr-music-infrastructure">IndieSats&lt;/a> retira la custodia de claves, su whitelist y su recorte obligatorio de ingresos, y se relanza como un relay abierto, un reproductor y una capa de descubrimiento donde los artistas publican bajo sus propias claves. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#nostrord-v230-ships-group-moderation-mute-lists-and-onion-relays">Nostrord v2.3.0&lt;/a> incorpora moderación de grupos, listas de silencio y relays onion la misma semana en que se fusionan cinco &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#protocol-work-and-nip-updates">PRs de la spec NIP-29&lt;/a>. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#zapstore-110-makes-the-device-key-portable-and-adds-background-auto-updates">Zapstore 1.1.0&lt;/a> introduce una clave de dispositivo portátil cifrada, con respaldo mediante Amber, y actualizaciones automáticas opcionales en segundo plano. El &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#the-favorite-follow-sets-list-kind-merges-and-immediately-moves-house">kind de lista favorite-follow-sets&lt;/a> se fusiona y abre un PR de renumeración en cuestión de días. Y los &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#the-iris-projects-ship-a-pubsub-library-a-browser-fips-runtime-and-a-social-graph-20-in-one-week">proyectos de Iris&lt;/a> entregan nostr-pubsub, el runtime de navegador fips-ts y nostr-social-graph 2.0.&lt;/p>
&lt;p>Los releases etiquetados traen &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#amber-v630-groups-bunker-signing-approvals-and-adds-expert-list-support">Amber v6.3.0&lt;/a> con aprobaciones agrupadas de firma bunker, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#armada-v0370-opens-buzz-workspaces-from-a-second-client">Armada v0.37.0&lt;/a> con un segundo cliente para espacios de trabajo Buzz, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#divine-mobile-1017-hardens-relay-security-and-dm-delivery">Divine Mobile 1.0.17&lt;/a> con entrega persistente de NIP-17 y validación TLS estricta, y &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#nak-v0202-adds-nip-34-pull-request-workflows">nak v0.20.2&lt;/a> con comandos para pull requests NIP-34.&lt;/p>
&lt;p>En el lado no publicado, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#snort-rewrites-query-synchronization-around-eose-proven-coverage">Snort&lt;/a> registra cobertura de caché probada por EOSE, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#shopstr-binds-payment-validation-to-signed-receipts-and-server-side-prices">Shopstr&lt;/a> cierra dos brechas de integridad de pagos, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#mostr-bridges-activitypub-private-chats-and-nostr-dms">Mostr&lt;/a> conecta chats privados de ActivityPub con DMs de Nostr, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#nostream-merges-eight-prs-without-cutting-a-release">nostream&lt;/a> fusiona el stack de control de acceso que cubre el Deep Dive de esta semana, y &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#amethyst-lands-v1130-pre-release-qa-on-napplet-isolation-and-concord-authority">Amethyst&lt;/a> alcanza 88 PRs fusionados con encuestas NIP-88 completas en Desktop.&lt;/p>
&lt;p>El repositorio de NIPs fusiona cinco PRs esta semana, incluido el &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#protocol-work-and-nip-updates">clúster NIP-29&lt;/a> y los &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#the-favorite-follow-sets-list-kind-merges-and-immediately-moves-house">favorite follow sets kind:10011&lt;/a>, y abre debates sobre la &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#protocol-work-and-nip-updates">simplificación de NIP-47&lt;/a> y las &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#protocol-work-and-nip-updates">trusted relay assertions&lt;/a>. El Deep Dive cubre &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#nip-deep-dive-nip-42-and-nip-43">NIP-42 y NIP-43, la pareja de control de acceso de relays&lt;/a>.&lt;/p>
&lt;hr>
&lt;h2 id="historias-principales">Historias principales&lt;/h2>
&lt;h3 id="indiesats-abandona-su-papel-de-editor-y-se-relanza-como-infraestructura-abierta-de-música-en-nostr">IndieSats abandona su papel de editor y se relanza como infraestructura abierta de música en Nostr&lt;/h3>
&lt;p>&lt;a href="https://zapstore.dev">IndieSats&lt;/a> es una plataforma de música basada en Nostr que hasta esta semana actuaba como editor: custodiaba claves para los artistas, operaba una whitelist y se quedaba con un recorte obligatorio del 2 % de los ingresos. En un &lt;a href="https://njump.me/nevent1qqsr4awwnfndnnz77zanjxarw6nd0uld0ckayxp2navz0u9tzzwfweqpzamhxue69uhhyetvv9ujuurjd9kkzmpwdejhgtczyquwq70hxz22lzytw65rnnjewg0lj8a74khxa8h9j47q38pdnqy3kqcyqqqqqqgz8083u">anuncio de pivote publicado el 20 de julio&lt;/a>, el proyecto retiró los tres roles a la vez. La plataforma relanzada consta de tres piezas de infraestructura abierta: un relay abierto, un reproductor y una capa de descubrimiento. Los artistas ahora publican música bajo sus propios perfiles Nostr. La participación de plataforma del 2 % por pista es opcional, pero se selecciona de forma predeterminada cuando un artista publica, y este puede desmarcarla para conservar el pago completo; la plataforma también respeta las solicitudes de borrado kind:5 de &lt;a href="https://nostrcompass.org/es/topics/nip-09/">NIP-09&lt;/a> para que los artistas puedan eliminar su obra. Una &lt;a href="https://zapstore.dev/apps/com.indiesats.app">actualización v1.1.5 publicada el 21 de julio&lt;/a> cambió la publicación de pistas al formato de eventos esperado por Amethyst y otros clientes de música Nostr e hizo explícita la entrega al relay. Para un espacio que suele hablar de protocolos que reemplazan plataformas, este es un caso real de una plataforma que se desarma voluntariamente en piezas de protocolo.&lt;/p>
&lt;h3 id="nostrord-v230-entrega-moderación-de-grupos-listas-de-silencio-y-relays-onion">Nostrord v2.3.0 entrega moderación de grupos, listas de silencio y relays onion&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrord/nostrord">Nostrord&lt;/a>, el cliente de chat grupal para Android, iOS, web y escritorio, entregó &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v2.3.0">v2.3.0&lt;/a> con acciones de moderación de grupos conectadas en todas las UIs (&lt;a href="https://github.com/nostrord/nostrord/pull/192">PR #192&lt;/a>), invitaciones de grupo con consentimiento y detección cross-relay (&lt;a href="https://github.com/nostrord/nostrord/pull/195">PR #195&lt;/a>), listas de silencio &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a> multiplataforma (&lt;a href="https://github.com/nostrord/nostrord/pull/188">PR #188&lt;/a>) y soporte para relays .onion vía Tor. El release llega la misma semana en que la spec &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> subyacente fusionó cinco PRs sobre subgrupos, fijado de mensajes, banners y códigos de invitación (detalles en la &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#protocol-work-and-nip-updates">sección de protocolo&lt;/a> de esta semana), así que el chat grupal en Nostr tiene ahora tanto una spec más profunda como un cliente que ejercita la mayor parte de ella, lo que acorta el ciclo de feedback para todos los demás que construyen sobre grupos de relays.&lt;/p>
&lt;h3 id="zapstore-110-hace-portátil-la-clave-del-dispositivo-y-añade-actualizaciones-automáticas-en-segundo-plano">Zapstore 1.1.0 hace portátil la clave del dispositivo y añade actualizaciones automáticas en segundo plano&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapstore/zapstore">Zapstore&lt;/a> es una tienda de apps nativa de Nostr donde los releases están firmados por las claves de los desarrolladores y ningún operador central los avala. La &lt;a href="https://github.com/zapstore/zapstore/releases/tag/1.1.0">versión 1.1.0&lt;/a>, el primer release cubierto aquí desde principios de marzo, cierra las dos mayores brechas con las tiendas de apps convencionales. La primera son las actualizaciones: las actualizaciones automáticas opcionales en segundo plano ahora descargan por Wi-Fi e instalan de forma silenciosa o escalonada, de modo que las apps se mantienen al día sin viajes manuales por la tienda. La segunda es la continuidad de identidad: la clave del dispositivo se vuelve portátil, cifrada y respaldable a través de &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> vía &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>, la interfaz de firmante de Android, de modo que un usuario que cambia de teléfono ya no empieza de cero como un dispositivo desconocido. El release también mueve el catálogo de apps a los relays como eventos kind:10067 firmados por el dispositivo, añade reportes verificados &lt;a href="https://nostrcompass.org/es/topics/nip-56/">NIP-56&lt;/a> desde el menú adicional para que los usuarios puedan marcar apps problemáticas de una forma que otros clientes puedan consumir, y verifica la prueba C1 adjunta a un release antes de que proceda cualquier instalación, estrechando el vínculo entre lo que un desarrollador firmó y lo que un dispositivo ejecuta.&lt;/p>
&lt;h3 id="el-kind-de-lista-favorite-follow-sets-se-fusiona-y-se-muda-de-inmediato">El kind de lista favorite-follow-sets se fusiona y se muda de inmediato&lt;/h3>
&lt;p>Una historia de coordinación de specs se desarrolló dentro de una sola semana. El &lt;a href="https://github.com/nostr-protocol/nips/pull/2413">PR #2413&lt;/a> se fusionó el 15 de julio, estandarizando un kind de lista reemplazable para favorite follow sets bajo &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a> (listas): un kind dedicado donde los clientes pueden publicar los conjuntos curados de cuentas seguidas de un usuario en lugar de sobrecargar kinds de lista genéricos. En pocos días resultó que el kind:10011 asignado ya estaba en uso en otra parte, así que ahora está abierto un &lt;a href="https://github.com/nostr-protocol/nips/pull/2417">PR #2417&lt;/a> de seguimiento para renumerar la lista a kind:10021. Todavía no se ha publicado nada contra el kind fusionado, lo que convierte este en el momento barato para renumerar; una vez que los clientes empiecen a publicar eventos kind:10011, la colisión sería cara de deshacer. Los desarrolladores que construyan funciones que consuman listas deberían seguir el PR de renumeración, no el texto fusionado, hasta que se resuelva.&lt;/p>
&lt;h3 id="el-ecosistema-iris-entrega-una-biblioteca-pubsub-un-runtime-fips-para-el-navegador-y-un-social-graph-20-en-una-semana">El ecosistema Iris entrega una biblioteca pubsub, un runtime FIPS para el navegador y un social-graph 2.0 en una semana&lt;/h3>
&lt;p>Tres releases de la órbita de Iris aterrizaron juntos, y se engranan entre sí. &lt;a href="https://github.com/mmalmi/nostr-pubsub">nostr-pubsub&lt;/a> es una biblioteca publish/subscribe neutral al transporte para eventos Nostr; sus &lt;a href="https://github.com/mmalmi/nostr-pubsub/releases">primeros releases rastreados, v0.1.3 a v0.5.2&lt;/a>, entregan un carrier de relay para navegador construido sobre el SimplePool de nostr-tools, verificación de eventos en la frontera del transporte para que las firmas inválidas nunca lleguen a los suscriptores, y consultas históricas acotadas. &lt;a href="https://github.com/mmalmi/fips-ts">fips-ts&lt;/a> trae &lt;a href="https://nostrcompass.org/es/topics/fips/">FIPS&lt;/a>, el transporte peer Noise-over-secp256k1 antes disponible como stack Rust, al navegador como runtime TypeScript: los releases &lt;a href="https://github.com/mmalmi/fips-ts/releases">0.0.24 a 0.0.30&lt;/a> añadieron un carrier de datachannel WebRTC, señalización basada en Nostr para el descubrimiento de peers, una caché de peers recientes y un adaptador IndexedDB para almacenamiento en el navegador, y el runtime es compatible a nivel de wire con la implementación de referencia en Rust. La tercera pieza, &lt;a href="https://github.com/mmalmi/nostr-social-graph/releases/tag/v2.0.0">nostr-social-graph v2.0.0&lt;/a>, es una versión mayor de la biblioteca de grafo social: operaciones de roster firmadas para grafos de identidad Nostr, flujos de aprobación de dispositivos arrancados desde una URI canónica de tres campos, y facetas de identidad de transporte FIPS con vectores de prueba compartidos entre Rust y TypeScript. El marco conector es el &lt;a href="https://stack.iris.to/">Iris Stack&lt;/a>, el laboratorio de integración del proyecto que une estas bibliotecas con Blossom, Hashtree y mensajería cifrada. En conjunto, una app web puede ahora descubrir peers vía Nostr, abrir un canal FIPS cifrado hacia ellos y mantener un grafo social firmado, todo en TypeScript.&lt;/p>
&lt;hr>
&lt;h2 id="releases-etiquetados">Releases etiquetados&lt;/h2>
&lt;h3 id="amber-v630-agrupa-las-aprobaciones-de-firma-bunker-y-añade-soporte-de-expert-list">Amber v6.3.0 agrupa las aprobaciones de firma bunker y añade soporte de Expert List&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> es un firmante remoto &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> para Android. &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.3.0">v6.3.0&lt;/a> añade aprobación agrupada de múltiples solicitudes para firma bunker, de modo que un lote de solicitudes de firma pendientes puede revisarse y aprobarse junto en lugar de una ventana cada vez. El release también añade soporte para eventos Expert List (kind 12022) y Expert Pack (kind 32022), un modo de privacidad que oculta contenido sensible en pantalla, y un cambio para obtener primero la lista de relays &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> de una cuenta antes que sus metadatos de perfil, de modo que los flujos del firmante parten del conjunto real de relays del usuario. Esto sigue a la línea v6.2.x cubierta en la edición del 08-07-2026.&lt;/p>
&lt;h3 id="seguimiento-de-nostrord-v220">Seguimiento de Nostrord v2.2.0&lt;/h3>
&lt;p>Con &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-22-newsletter/#nostrord-v230-ships-group-moderation-mute-lists-and-onion-relays">v2.3.0&lt;/a> liderando la sección de noticias de esta semana, el espacio de releases etiquetados solo señala lo que no cubre la historia principal: v2.3.0 sigue a los controles de DM de v2.2.0 cubiertos en el #31, lo que convierte a este en el segundo release semanal consecutivo del cliente.&lt;/p>
&lt;h3 id="armada-v0370-abre-espacios-de-trabajo-buzz-desde-un-segundo-cliente">Armada v0.37.0 abre espacios de trabajo Buzz desde un segundo cliente&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/armada">Armada&lt;/a>, un cliente Nostr al estilo Discord, lanzó &lt;a href="https://gitlab.com/soapbox-pub/armada/-/commit/7a0d0ade51fb8a7bafa4513d2881d275bb2c7dde">v0.37.0&lt;/a> con soporte para relays Buzz como un modo de espacio de trabajo mejorado de &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a>, detectado mediante los metadatos &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> del relay. El cliente renderiza publicaciones y comentarios de foros Buzz como kinds 45001 y 45003, incorpora ediciones y eliminaciones a las cronologías de streams, y añade superficies de presencia, flujo de trabajo, trabajos, reuniones y lienzos compartidos. Su espacio de trabajo Projects lee directamente del relay anuncios de repositorios, parches, pull requests, issues y eventos de estado de &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> (&lt;a href="https://gitlab.com/soapbox-pub/armada/-/commit/7d5603a3e21d564301d667113d28de4407d6f642">commit de implementación&lt;/a>), lo que brinda a los espacios de trabajo Buzz un segundo cliente tanto para conversación como para trabajo de repositorio.&lt;/p>
&lt;h3 id="wisp-v120-añade-un-conmutador-multi-cuenta-y-hilos-de-respuestas-plegables">Wisp v1.2.0 añade un conmutador multi-cuenta y hilos de respuestas plegables&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> es un cliente Nostr orientado a la privacidad con soporte de wallet integrado. &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.2.0">v1.2.0&lt;/a> añade un conmutador multi-cuenta para cambiar entre perfiles sin volver a iniciar sesión, hilos de respuestas plegables para conversaciones largas, eliminación de parámetros de seguimiento de los enlaces de notas antes de abrirlos y una vista del historial de transacciones de la wallet. El release sigue a la actualización de Wisp cubierta en la edición del 2026-07-08.&lt;/p>
&lt;h3 id="divine-mobile-1017-endurece-la-seguridad-de-relays-y-la-entrega-de-dms">Divine Mobile 1.0.17 endurece la seguridad de relays y la entrega de DMs&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">Divine Mobile&lt;/a>, un cliente Nostr de vídeos cortos, lanzó &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.17">1.0.17&lt;/a> con un editor persistente de stop-motion y rutas Nostr más estrictas. Los mensajes directos ahora esperan las respuestas &lt;code>OK&lt;/code> del relay, reintentan mediante una cola persistente y se enrutan a través de listas kind 10050 de relays de bandeja de entrada de los destinatarios (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/6046">PR #6046&lt;/a>); el emparejamiento NIP-46 conserva los desafíos &lt;code>auth_url&lt;/code> como pasos de firmante recuperables (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/6151">PR #6151&lt;/a>). El &lt;a href="https://github.com/divinevideo/divine-mobile/pull/6278">PR #6278&lt;/a> elimina la aceptación permisiva de certificados de los WebSockets de relay de producción y de las solicitudes HTTP usadas para subidas NIP-96, LNURL y zaps, y restaura la validación TLS de la plataforma fuera de las conexiones locales de depuración. Las subidas interrumpidas también pueden reanudarse desde el último offset confirmado por el servidor, de modo que una publicación enviada al segundo plano ya no empieza de cero.&lt;/p>
&lt;h3 id="cliprelay-v012-proyecto-nuevo-sincroniza-portapapeles-entre-dispositivos-a-través-de-relays-nostr">ClipRelay v0.1.2 (proyecto nuevo) sincroniza portapapeles entre dispositivos a través de relays Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/tajava2006/cliprelay">ClipRelay&lt;/a> es una app multiplataforma recién lanzada (Android, macOS, Windows, Linux) que sincroniza tu portapapeles entre tus propios dispositivos: copia en una máquina, pega en otra. Todo el tráfico se mueve a través de relays Nostr como eventos cifrados &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> dirigidos a ti mismo, así que no hay servidor que operar ni cuenta que crear; la clave privada permanece fuera de la app. &lt;a href="https://github.com/tajava2006/cliprelay/releases">v0.1.2&lt;/a> corrige un fallo sutil de sincronización en el que una máquina que despertaba de la suspensión seguía publicando pero dejaba de recibir en silencio, y endurece los indicadores de estado de relay que antes reportaban suscripciones muertas como saludables. Esta es la primera aparición de ClipRelay en el boletín.&lt;/p>
&lt;h3 id="sonar-v01-alpha11-continúa-la-línea-alpha">Sonar v0.1-alpha.11 continúa la línea alpha&lt;/h3>
&lt;p>&lt;a href="https://github.com/hedwig-corp/bitchat-to-sonar">Sonar&lt;/a>, la historia principal de la semana pasada, lanzó &lt;a href="https://github.com/hedwig-corp/bitchat-to-sonar/releases/tag/v0.1-alpha.11">v0.1-alpha.11&lt;/a> con trabajo en el motor de enlaces mesh de Rust, correcciones de BLE y mesh, y diagnósticos de relays; un seguimiento incremental de la línea alpha cubierta en el #31.&lt;/p>
&lt;h3 id="nak-v0202-añade-flujos-de-pull-requests-nip-34">nak v0.20.2 añade flujos de pull requests NIP-34&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>, la herramienta de línea de comandos de Nostr, lanzó &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.20.2">v0.20.2&lt;/a> con comandos para crear, obtener y fusionar pull requests de &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> y para obtener parches individuales, y permite hacer push sin reescribir un anuncio de repositorio. El &lt;a href="https://github.com/fiatjaf/nak/compare/v0.20.1...v0.20.2">rango de release de 11 commits&lt;/a> también añade manejo de grupos padre para &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a>, consulta más relays de outbox, hace configurables los tiempos de espera de conexión al relay y corrige la selección de bunker cuando solo existe el valor predeterminado &lt;code>--sec&lt;/code>.&lt;/p>
&lt;h3 id="los-lanzamientos-menores-de-la-semana">Los lanzamientos menores de la semana&lt;/h3>
&lt;p>Cuatro releases menores merecen una línea cada uno: &lt;a href="https://github.com/sanah9/noscall/releases/tag/v0.6.0-release">noscall v0.6.0&lt;/a>, la app de llamadas Nostr, migró sus notificaciones push a UnifiedPush, manteniendo la señalización de llamadas fuera de la infraestructura push de Google; &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.1.3">nostr-vpn v4.1.3&lt;/a>, una VPN mesh que usa Nostr para señalización, unificó su política de DNS de salida entre plataformas y ahora restaura el estado original de ruta y DNS después de sesiones de WireGuard o salida privada; &lt;a href="https://github.com/ChadFarrow/stablekraft-app/releases/tag/v1.3.0">StableKraft v1.3.0&lt;/a>, el agregador de música y pódcasts Nostr-más-Lightning cubierto en abril, añadió controles nativos de pantalla de bloqueo y auriculares de Android, además de un wake lock limitado a la reproducción para que el audio sobreviva a Doze; y la nueva app de Zapstore Hakari respalda un registrador de peso mediante eventos Nostr cifrados.&lt;/p>
&lt;h3 id="amethyst-entrega-qa-de-pre-release-de-v1130-sobre-aislamiento-de-napplets-y-autoridad-concord">Amethyst entrega QA de pre-release de v1.13.0 sobre aislamiento de napplets y autoridad Concord&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> fusionó 88 PRs esta semana antes de su release v1.13.0. El &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3650">PR #3650&lt;/a> es una pasada de QA pre-release que cubre aislamiento de cuentas de napplets, correcciones de autoridad Concord y alrededor de otras 30 correcciones. El trabajo de última hora añade renderizado, creación, votación, conteo por relay declarado y búsqueda kind 1068 completos de encuestas &lt;a href="https://github.com/nostr-protocol/nips/blob/master/88.md">NIP-88&lt;/a> en Desktop (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3664">PR #3664&lt;/a>); la búsqueda NIP-50 ahora clasifica los resultados por relevancia BM25 mientras que los grandes observadores de etiquetas usan fusión acotada (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3663">PR #3663&lt;/a>). Una pasada independiente del almacenamiento de relay selecciona índices de consulta por coste medido, añade índices de etiqueta-autor-kind y serializa cada evento en vivo una vez por fanout (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3660">PR #3660&lt;/a>), con reducciones de benchmark informadas de 149 a 4 milisegundos para una forma de consulta y de 14,2 a 0,66 milisegundos para una consulta común de sala de DMs.&lt;/p>
&lt;hr>
&lt;h2 id="cambios-no-publicados">Cambios no publicados&lt;/h2>
&lt;h3 id="snort-reescribe-la-sincronización-de-consultas-en-torno-a-cobertura-probada-por-eose">Snort reescribe la sincronización de consultas en torno a cobertura probada por EOSE&lt;/h3>
&lt;p>&lt;a href="https://github.com/v0l/snort">Snort&lt;/a>, un cliente web de Nostr, reescribió su ruta de sincronización de consultas y caché en el &lt;a href="https://github.com/v0l/snort/commit/8a627700d8a5af9527cb68655d844dd14a3ac79d">commit 8a62770&lt;/a>. El cliente ahora registra qué ventanas de consulta alcanzaron EOSE, usa esas marcas de agua para omitir rangos de caché ya cubiertos, centraliza el despacho de eventos detrás de un listener del pool de relays y envía filtros de búsqueda solo a relays cuyos documentos NIP-11 anuncian &lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a>. Correcciones posteriores serializan actualizaciones simultáneas de marcas de agua y corrigen límites inclusivos de las cronologías, mientras que el &lt;a href="https://github.com/v0l/snort/commit/9d1721b8b5696a6f96f462170c469c232cabe672">commit 9d1721b&lt;/a> restaura una suscripción en vivo al feed de follows fragmentado para que los eventos que lleguen después de cargar la página no queden congelados fuera de sus ventanas en caché.&lt;/p>
&lt;h3 id="shopstr-vincula-la-validación-de-pagos-a-recibos-firmados-y-precios-del-lado-del-servidor">Shopstr vincula la validación de pagos a recibos firmados y precios del lado del servidor&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>, un cliente de marketplace de Nostr, cerró dos brechas de integridad de pagos. El &lt;a href="https://github.com/shopstr-eng/shopstr/pull/552">PR #552&lt;/a> hace que Zapsnag verifique la firma, el firmante, la solicitud de zap incorporada, las etiquetas de destinatario y producto, el importe BOLT11 y el preimage opcional de cada recibo kind 9735 frente al hash de pago de la factura antes de tratarlo como una compra. El &lt;a href="https://github.com/shopstr-eng/shopstr/pull/449">PR #449&lt;/a> traslada la creación de cotizaciones Cashu detrás de una ruta de la API de Shopstr que resuelve el anuncio y recalcula su precio del lado del servidor, de modo que un importe modificado en el navegador no puede determinar la factura de la mint.&lt;/p>
&lt;h3 id="mostr-conecta-chats-privados-de-activitypub-y-dms-de-nostr">Mostr conecta chats privados de ActivityPub y DMs de Nostr&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/mostr">Mostr&lt;/a>, un puente de ActivityPub a Nostr, ahora transporta objetos ChatMessage uno a uno de Pleroma y DMs cifrados de Nostr en ambas direcciones (&lt;a href="https://gitlab.com/soapbox-pub/mostr/-/commit/36ee547035f9287029f71656c472fe029a7ab31b">commit 36ee547&lt;/a>). Los chats privados de ActivityPub se convierten en eventos kind 4 dirigidos al destinatario de Nostr, mientras que los mensajes kind 4 enviados a usuarios federados conectados se descifran y federan como objetos ChatMessage. El puente limita estos eventos a relays de DM configurados y restringidos por &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> y se autentica con una clave de relay independiente. Esta ruta de interoperabilidad usa cifrado heredado &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a>. El gift wrapping de NIP-17 sigue fuera de esta implementación.&lt;/p>
&lt;h3 id="nostream-fusiona-ocho-prs-sin-cortar-un-release">nostream fusiona ocho PRs sin cortar un release&lt;/h3>
&lt;p>&lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a>, la implementación de relay TypeScript, fusionó ocho PRs esta semana sin cortar un release. El par principal es el &lt;a href="https://github.com/Cameri/nostream/pull/702">PR #702&lt;/a> y el &lt;a href="https://github.com/Cameri/nostream/pull/676">PR #676&lt;/a>, que juntos ofrecen a los operadores de relays un stack funcional de control de acceso de autenticación más membresía; el Deep Dive de NIP de esta semana recorre exactamente ese handshake. El &lt;a href="https://github.com/Cameri/nostream/pull/694">PR #694&lt;/a> corrige filtros de etiquetas genéricas &lt;code>#e&lt;/code>, &lt;code>#p&lt;/code>, &lt;code>#g&lt;/code> y similares que podían devolver una copia de un evento por cada fila de etiqueta coincidente, reduciendo tráfico de protocolo duplicado dentro de una suscripción.&lt;/p>
&lt;h3 id="fips-v041-endurece-el-transporte-sobre-el-que-construye-el-ecosistema-iris">FIPS v0.4.1 endurece el transporte sobre el que construye el ecosistema Iris&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">jmcorgan/fips&lt;/a> entregó &lt;a href="https://github.com/jmcorgan/fips/releases/tag/v0.4.1">v0.4.1&lt;/a>, un release de mantenimiento que acota el estado antipoison, corrige el manejo de convergencia y MTU, y reduce el uso de CPU. Por sí solo esto es fontanería, pero esta semana es tejido conectivo: el runtime TypeScript de navegador &lt;a href="https://github.com/mmalmi/fips-ts">fips-ts&lt;/a> del clúster del ecosistema Iris en la sección de noticias de esta edición es compatible a nivel de wire con este transporte Rust, así que las correcciones aquí se propagan directamente a aquello con lo que interopera el runtime del navegador.&lt;/p>
&lt;hr>
&lt;h2 id="trabajo-de-protocolo-y-actualizaciones-de-nips">Trabajo de protocolo y actualizaciones de NIPs&lt;/h2>
&lt;p>Cambios recientes en el &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Fusionados:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> (Relay-based Groups): Subgrupos&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2319">PR #2319&lt;/a>, fusionado 2026-07-16): NIP-29 define grupos alojados en relays donde la membresía, los roles y el historial de chat viven en un único relay como eventos direccionables de la serie &lt;code>kind:39000&lt;/code>, con acciones de moderación transportadas por eventos admin de la serie &lt;code>kind:9000&lt;/code>. Este PR permite que un grupo se declare subgrupo añadiendo una etiqueta &lt;code>parent&lt;/code> a sus metadatos, apuntando al identificador &lt;code>d&lt;/code> de otro grupo en el mismo relay. Los subgrupos son grupos ordinarios en todo lo demás: la membresía no cascada (unirse a un padre no otorga membresía en ningún hijo), los roles de admin no se heredan (la lista de admins &lt;code>kind:39001&lt;/code> de cada subgrupo es autoritativa para su propio ámbito), y cada subgrupo mantiene sus propios eventos de miembros &lt;code>kind:9000&lt;/code>/&lt;code>kind:9001&lt;/code> independientes. Los relays que soportan la jerarquía lo anuncian en su documento de información de relay NIP-11 bajo un objeto &lt;code>nip29&lt;/code> con &lt;code>&amp;quot;subgroups&amp;quot;: true&lt;/code>, de modo que los clientes puedan descubrir la capacidad antes de intentar crear comunidades anidadas.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a>: Fijado de mensajes&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2379">PR #2379&lt;/a>, fusionado 2026-07-15; &lt;a href="https://github.com/nostr-protocol/nips/pull/2416">PR #2416&lt;/a>, fusionado 2026-07-17): Los admins de grupo ahora pueden fijar mensajes dentro de un grupo basado en relay. El mecanismo añade un nuevo evento de moderación, &lt;code>kind:9010&lt;/code> &lt;code>update-pin-list&lt;/code>, que transporta la lista completa y ordenada de fijados como etiquetas &lt;code>e&lt;/code> que referencian ids de eventos regulares, y un nuevo evento opcional a nivel de grupo, &lt;code>kind:39005&lt;/code> &lt;em>group pinned events&lt;/em>, que el relay regenera para reflejar la lista de fijados aceptada más reciente. Como cada &lt;code>kind:9010&lt;/code> reemplaza la lista entera en lugar de alternar entradas individuales, fijar, desfijar, reordenar y limpiar los fijados se expresan todos enviando una lista nueva. El PR de seguimiento #2416 extiende el formato para que también se acepten etiquetas &lt;code>a&lt;/code> en la lista de fijados, permitiendo a los admins fijar eventos direccionables (posts de formato largo, páginas wiki y otro contenido reemplazable parametrizado) junto a mensajes de chat ordinarios. Los relays pueden limitar el número de fijados, y el texto de la spec fusionada recomienda mostrar los fijados en el orden en que aparecen las etiquetas.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a>: Etiqueta banner y sufijo de código de invitación&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2383">PR #2383&lt;/a>, fusionado 2026-07-16; &lt;a href="https://github.com/nostr-protocol/nips/pull/2380">PR #2380&lt;/a>, fusionado 2026-07-16): Dos adiciones de visualización e incorporación a los metadatos de grupo. El PR #2383 añade una etiqueta &lt;code>banner&lt;/code> opcional al evento de metadatos de grupo &lt;code>kind:39000&lt;/code>, uniéndose a los campos existentes &lt;code>name&lt;/code>, &lt;code>picture&lt;/code> y &lt;code>about&lt;/code> para que los clientes puedan renderizar una imagen de cabecera para la página de un grupo. El PR #2380 define un sufijo de código de invitación para los enlaces de compartir de grupo: un código de invitación puede añadirse al identificador &lt;code>naddr&lt;/code> del grupo como &lt;code>naddr1...?invite=&amp;lt;code&amp;gt;&lt;/code>. Como el conjunto de caracteres bech32 no incluye &lt;code>?&lt;/code>, la parte anterior al sufijo sigue siendo un naddr válido por sí sola, de modo que los clientes que no entienden la extensión aún pueden resolver el grupo. Los clientes que sí la entienden pre-rellenan la etiqueta &lt;code>code&lt;/code> en la solicitud de unión &lt;code>kind:9021&lt;/code>, que se combina con el evento de moderación &lt;code>kind:9009&lt;/code> &lt;code>create-invite&lt;/code> existente para simplificar la admisión a grupos cerrados.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a> (Listas): Favorite follow sets, kind:10011&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2413">PR #2413&lt;/a>, fusionado 2026-07-15): NIP-51 define los kinds de lista estándar, divididos entre listas reemplazables de la serie &lt;code>kind:10000&lt;/code> (una por usuario) y conjuntos direccionables de la serie &lt;code>kind:30000&lt;/code> (muchos por usuario, claveados por etiqueta &lt;code>d&lt;/code>). Este PR añade &lt;code>kind:10011&lt;/code>, &lt;em>favorite follow sets&lt;/em>, una lista reemplazable estándar cuyas etiquetas &lt;code>a&lt;/code> apuntan a follow sets &lt;code>kind:30000&lt;/code>. Como espejo de &lt;code>kind:10012&lt;/code> (relay feeds), que contiene etiquetas &lt;code>a&lt;/code> que referencian relay sets &lt;code>kind:30002&lt;/code>, el nuevo kind permite a un usuario marcar con nombre follow sets curados —como listas curadas de colecciones de pubkeys publicadas por él mismo o por otros— y hacer que los clientes los muestren para seguir con un toque o cambiar de feed. Nótese que este número de kind ya está disputado: véase el PR de renumeración abierto más abajo.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (Nostr Connect): Guía de timeout silencioso&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2375">PR #2375&lt;/a>, fusionado 2026-07-15): NIP-46 es el protocolo de firma remota donde un cliente envía solicitudes cifradas estilo JSON-RPC a un firmante (bunker) a través de relays y espera una respuesta cifrada. El cambio fusionado es una frase de comportamiento de wire: las solicitudes hechas con métodos desconocidos o no soportados DEBEN responderse con un error. Antes, un firmante que recibía un método que no implementaba podía no responder nunca, dejando al cliente colgado hasta que su propio timeout saltara sin forma de distinguir &amp;ldquo;método no soportado&amp;rdquo; de &amp;ldquo;firmante desconectado&amp;rdquo;. La respuesta de error obligatoria permite a los clientes fallar rápido y mostrar un mensaje significativo al usuario en lugar de girar indefinidamente.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs abiertos y discusiones:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Renumeración de kind:10011 a kind:10021&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2417">PR #2417&lt;/a>): Mueve la lista favorite follow sets recién fusionada de &lt;code>kind:10011&lt;/code> a &lt;code>kind:10021&lt;/code>, porque &lt;code>10011&lt;/code> ya está en uso en otra parte. El PR de renumeración se abrió a los pocos días del merge original, así que los clientes que implementen favorite follow sets deberían seguir este PR y apuntar al número final, no a &lt;code>10011&lt;/code>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect): Simplificación del núcleo&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2419">PR #2419&lt;/a>): Propone estrechar NIP-47, el protocolo wallet-connect que permite a las apps solicitar pagos Lightning desde una billetera remota vía Nostr, en una spec de núcleo más pequeña. La funcionalidad opcional y más especializada saldría de &lt;code>47.md&lt;/code> hacia un repositorio de extensiones dedicado, &lt;a href="https://github.com/nostr-wallet-connect/nwc">nostr-wallet-connect/nwc&lt;/a>, donde las specs de extensión pueden evolucionar independientemente del núcleo. El objetivo declarado es mantener el núcleo pequeño, estable y fácil de implementar, siguiendo la dirección acordada en llamadas anteriores de NWC de separar una capa mínima de wallet-connect de comportamientos opcionales más ricos. Dado lo ampliamente desplegado que está NIP-47 en billeteras y apps, cualquiera que hable NWC debería seguir la discusión de reestructuración.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Trusted Relay Assertions (borrador, sin número asignado)&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2418">PR #2418&lt;/a>): Propone un estándar para publicar evaluaciones de confianza sobre relays Nostr, posicionado como la capa de &amp;ldquo;lo que concluimos&amp;rdquo; junto a &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> (lo que un relay afirma sobre sí mismo) y &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a> (lo que los monitores midieron). Los proveedores de assertions calcularían puntuaciones de confianza a partir de métricas observadas, reputación del operador e informes de usuarios; los clientes consultarían estas assertions al elegir a qué relays conectarse. El borrador introduce &lt;code>kind:30385&lt;/code> (Trusted Relay Assertion direccionable, con etiquetas de puntuación, fiabilidad, calidad, accesibilidad, operador, política y jurisdicción), &lt;code>kind:10385&lt;/code> (Trusted Provider List reemplazable, los proveedores de assertions elegidos por el usuario), y reutiliza las etiquetas &lt;a href="https://nostrcompass.org/es/topics/nip-32/">NIP-32&lt;/a> para informes de relays y operadores. Aún no se ha asignado ningún número de NIP; es un borrador en etapa temprana.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Operador AND para filtros (&amp;ldquo;NIP-91&amp;rdquo;, propuesto, número aún no en el repo)&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2252">PR #2252&lt;/a>): Bajo NIP-01, los filtros de etiquetas son solo OR: un filtro &lt;code>&amp;quot;#t&amp;quot;: [&amp;quot;meme&amp;quot;, &amp;quot;cat&amp;quot;]&lt;/code> coincide con eventos que tengan cualquiera de las dos etiquetas. Esta propuesta añade un modificador &lt;code>&amp;amp;&lt;/code> para etiquetas indexables, de modo que &lt;code>&amp;quot;&amp;amp;t&amp;quot;: [&amp;quot;meme&amp;quot;, &amp;quot;cat&amp;quot;]&lt;/code> devuelve solo eventos que lleven ambas etiquetas, permitiendo a los relays hacer la intersección del lado del servidor en lugar de que los clientes sobre-descarguen y filtren localmente. Las reglas especifican que AND tiene precedencia sobre OR, que los valores de etiqueta usados en AND deberían ignorarse en OR por los relays que lo soportan, y que los clientes DEBEN incluir también las etiquetas OR estándar &lt;code>#&lt;/code> por compatibilidad con relays que no soportan la extensión (esos relays devuelven el resultado OR más amplio, que el cliente interseca localmente). El PR es una continuación reabierta de una propuesta anterior y lista implementaciones de relay, incluida una imagen docker de nostr-rs-relay, netstr y un relay worker de Snort. El número NIP-91 aparece solo en la rama del PR; todavía no está en el índice de NIPs del README del repositorio, así que trátalo como provisional.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Nostr web applets (&amp;ldquo;NIP-5D&amp;rdquo;, propuesto, número aún no en el repo)&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2303">PR #2303&lt;/a>): Define un protocolo &lt;code>postMessage&lt;/code> para que aplicaciones web en sandbox (&amp;ldquo;napplets&amp;rdquo;) que corren en iframes o webviews se comuniquen con una aplicación anfitriona (&amp;ldquo;shell&amp;rdquo;). La spec es deliberadamente un núcleo delgado: especifica el sobre de mensajes, reglas de sandbox (los iframes de napplet DEBEN usar &lt;code>sandbox=&amp;quot;allow-scripts&amp;quot;&lt;/code> sin &lt;code>allow-same-origin&lt;/code>, y las shells NO DEBEN exponer &lt;code>window.nostr&lt;/code> NIP-07 dentro del iframe), identificación del emisor vía la referencia de ventana infalsificable &lt;code>MessageEvent.source&lt;/code>, no &lt;code>event.origin&lt;/code>, y negociación de capacidades basada en manifiesto. Los mensajes de protocolo reales para firma, acceso a relays, almacenamiento y comunicación entre napplets se delegan a specs de extensión NAP (Nostr Applet Protocol), cada una dueña de un dominio de capacidad, con la firma y el cifrado siempre mediados por la shell para que las claves nunca entren en el sandbox. La propuesta depende de la spec de manifiesto de napplet NIP-5A y es oportuna esta semana: el trabajo pre-release de v1.13.0 de Amethyst incluye aislamiento de cuentas de napplet, convirtiendo el alojamiento de napplets del lado del cliente en un área activa de implementación. Como con &amp;ldquo;NIP-91&amp;rdquo; arriba, el número 5D es provisional.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="nip-deep-dive-nip-42-y-nip-43">NIP Deep Dive: NIP-42 y NIP-43&lt;/h2>
&lt;p>Operar un relay que no está abierto a todos solía significar inventarlo todo uno mismo. El operador de un relay de pago o solo por invitación tenía que mantener una whitelist fuera de banda, normalmente un archivo de texto de pubkeys recogidos por DMs, sin forma estándar de decirle a un cliente conectado &amp;ldquo;demuestra quién eres&amp;rdquo; y sin forma estándar de que un usuario pidiera admisión o supiera si era miembro. Cada relay que quería lecturas o escrituras restringidas construía su propio mecanismo privado, y los clientes no podían interoperar con ninguno de ellos. &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> estandariza la mitad de prueba de identidad de ese problema, y &lt;a href="https://nostrcompass.org/es/topics/nip-43/">NIP-43&lt;/a> estandariza la mitad de membresía. Esta semana nostream, el relay TypeScript, fusionó la pareja de extremo a extremo: el &lt;a href="https://github.com/Cameri/nostream/pull/702">PR #702&lt;/a> restringe las lecturas de kinds cifrados a destinatarios autenticados, y el &lt;a href="https://github.com/Cameri/nostream/pull/676">PR #676&lt;/a> añade estrategias de eventos de solicitud de unión y salida, ambos fusionados el 20 de julio.&lt;/p>
&lt;h3 id="nip-42-autenticación-de-clientes-ante-relays">NIP-42: Autenticación de clientes ante relays&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> responde una pregunta: ¿quién está en esta conexión? Un relay que quiere restringir lecturas o escrituras envía un mensaje &lt;code>AUTH&lt;/code> con una cadena de desafío, al conectarse o bajo demanda cuando una solicitud necesita autenticación. El cliente responde con su propio mensaje &lt;code>AUTH&lt;/code> que contiene un evento efímero firmado, kind 22242, y el relay contesta con un mensaje &lt;code>OK&lt;/code> exactamente como si el evento de autenticación fuera una escritura ordinaria. La sesión autenticada se mantiene entonces durante la conexión, y un cliente puede autenticar varios pubkeys en una conexión con una secuencia de mensajes &lt;code>AUTH&lt;/code>, cada uno de los cuales el relay trata como autenticado.&lt;/p>
&lt;p>El evento de autenticación firmado es un objeto compacto: un &lt;code>pubkey&lt;/code>, un &lt;code>created_at&lt;/code>, kind 22242, una etiqueta &lt;code>relay&lt;/code>, una etiqueta &lt;code>challenge&lt;/code>, un &lt;code>content&lt;/code> vacío y una &lt;code>sig&lt;/code> sobre el &lt;code>id&lt;/code> del evento. Como kind 22242 es efímero —los relays nunca deben almacenarlo ni retransmitirlo— no existe ningún ejemplo publicado que incrustar; el recorrido por los campos de abajo cubre lo que contiene.&lt;/p>
&lt;p>El &lt;code>pubkey&lt;/code> es la identidad que se está probando, ya que el relay verifica la &lt;code>sig&lt;/code> sobre el &lt;code>id&lt;/code> del evento contra él. El &lt;code>kind&lt;/code> 22242 se sitúa en el rango efímero: el evento es una credencial a nivel de conexión, y los relays nunca deben almacenarlo ni difundirlo a otros clientes. La etiqueta &lt;code>relay&lt;/code> vincula la firma a una URL de relay para que un evento de autenticación capturado no pueda reproducirse contra otro relay, y la etiqueta &lt;code>challenge&lt;/code> lo vincula a la cadena de desafío concreta que el relay emitió en esta conexión, bloqueando la reproducción de una autenticación capturada en una conexión posterior. El &lt;code>created_at&lt;/code> debe estar cerca de la hora actual, dentro de una ventana de unos diez minutos, de modo que un evento de autenticación viejo expire por sí solo. El campo &lt;code>content&lt;/code> está vacío; no se publica nada.&lt;/p>
&lt;p>La spec también define dos prefijos legibles por máquina que hacen visible la restricción a los clientes. Un relay que rechaza una suscripción porque el cliente aún no se ha autenticado responde con un mensaje &lt;code>CLOSED&lt;/code> que empieza por &lt;code>auth-required:&lt;/code>, y una escritura rechazada recibe un &lt;code>OK&lt;/code> con el mismo prefijo. Un cliente que se autenticó pero aún carece de permiso para la acción recibe &lt;code>restricted:&lt;/code> en su lugar. Esa distinción es sobre la que construye el &lt;a href="https://github.com/Cameri/nostream/pull/702">PR #702 de nostream&lt;/a>: las lecturas de kinds cifrados ahora pueden cerrarse con &lt;code>auth-required:&lt;/code> hasta que el pubkey solicitante pruebe que es el destinatario.&lt;/p>
&lt;h3 id="nip-43-relay-access-metadata-and-requests">NIP-43: Relay Access Metadata and Requests&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-43/">NIP-43&lt;/a> responde la pregunta siguiente: ahora que el relay sabe quién eres, ¿qué puedes hacer? Donde NIP-42 es un handshake en una conexión viva, NIP-43 es un conjunto de eventos publicados que describen el estado de membresía y permiten a los usuarios pedir cambiarlo. En el lado del relay, un evento kind 13534, firmado por el pubkey del campo &lt;code>self&lt;/code> del documento &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> del relay, lista una etiqueta &lt;code>member&lt;/code> por pubkey, con argumentos de rol opcionales que apuntan a definiciones de rol publicadas como kind 33534. El kind 8000 anuncia la incorporación de un miembro y el kind 8001 anuncia una baja, ambos firmados por la misma clave del relay con una etiqueta &lt;code>p&lt;/code> para el miembro afectado. En el lado del usuario, el kind 28934 es una solicitud de unión que lleva un código de invitación en una etiqueta &lt;code>claim&lt;/code>, el kind 28935 es un evento efímero de código de invitación que el relay genera al vuelo cuando un usuario solicita un claim, y el kind 28936 es una solicitud de salida.&lt;/p>
&lt;p>Una solicitud de unión es un objeto igualmente pequeño, y todavía ningún relay público implementa NIP-43, por lo que no hay ningún evento kind 28934 real que incrustar; el recorrido por los campos de abajo cubre lo que contiene.&lt;/p>
&lt;p>El &lt;code>pubkey&lt;/code> es el usuario que pide admisión, y el kind 28934 marca el evento como solicitud de unión. La etiqueta &lt;code>-&lt;/code> es el marcador de evento protegido &lt;a href="https://nostrcompass.org/es/topics/nip-70/">NIP-70&lt;/a>, que indica a los relays que no acepten este evento de nadie salvo de su autor. La etiqueta &lt;code>claim&lt;/code> lleva el código de invitación que el usuario obtuvo fuera de banda, y &lt;code>created_at&lt;/code> debe ser ahora, más o menos unos minutos, de modo que una solicitud vieja no pueda reproducirse. El relay responde al claim con un mensaje &lt;code>OK&lt;/code>, reutilizando el prefijo &lt;code>restricted:&lt;/code> de NIP-42 para fallos como un código expirado o inválido, y debería entonces actualizar su lista kind 13534 y puede publicar un evento kind 8000 de incorporación de miembro. La membresía deliberadamente no se deriva de un único evento: la spec dice que la lista firmada por el relay no debería considerarse exhaustiva ni autoritativa, y un cliente que decida si alguien es actualmente miembro debería consultar tanto el kind 13534 del relay como los propios eventos del miembro. Los clientes solo deben enviar solicitudes de unión, invitación o salida a relays que anuncien este NIP en la sección &lt;code>supported_nips&lt;/code> de su documento NIP-11, y el &lt;a href="https://github.com/Cameri/nostream/pull/676">PR #676 de nostream&lt;/a> es la maquinaria del lado del relay que convierte esos kinds de solicitud en cambios reales de membresía.&lt;/p>
&lt;h3 id="historia">Historia&lt;/h3>
&lt;p>NIP-42 es el más antiguo de los dos por amplio margen. Entró en el repositorio de NIPs el 2 de enero de 2023, en el &lt;a href="https://github.com/nostr-protocol/nips/commit/c80be21c">commit c80be21c&lt;/a>, donde fiatjaf simplificó drásticamente un NIP de autenticación de relay anterior redactado por semisol, colapsando un esquema de desafío más complejo en el único evento efímero firmado que la spec sigue usando hoy. NIP-43 llegó mucho después, el 30 de octubre de 2025, cuando se fusionó el &lt;a href="https://github.com/nostr-protocol/nips/pull/1079">PR #1079&lt;/a> de hodlbod, añadiendo metadatos y solicitudes de acceso a relays construidos directamente sobre el prefijo &lt;code>restricted:&lt;/code> de NIP-42. La brecha de dos años y medio refleja cuánto tiempo el ecosistema operó relays de pago y privados sobre whitelists ad hoc antes de que la capa de membresía obtuviera un estándar.&lt;/p>
&lt;h3 id="implementaciones">Implementaciones&lt;/h3>
&lt;p>En el lado del relay, &lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a> ahora entrega ambas mitades tras las fusiones de esta semana. &lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a> implementa NIP-42, validando eventos de autenticación kind 22242 en su ingester y emitiendo desafíos desde su configuración. &lt;a href="https://github.com/scsibug/nostr-rs-relay">nostr-rs-relay&lt;/a> maneja el handshake AUTH en su capa de conexión con pruebas que cubren la ventana de desafío y marca de tiempo. &lt;a href="https://github.com/fiatjaf/khatru">khatru&lt;/a>, el framework de relay en Go, rastrea el pubkey autenticado por conexión para que las políticas puedan restringir lecturas y escrituras sobre él. En el lado del cliente, &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> firma respuestas kind 22242 a los desafíos de los relays, incluida autenticación por stream para sus comunidades cifradas Concord. Los dos NIPs dividen el control de acceso a lo largo de una línea limpia: NIP-42 es prueba de identidad, limitada a una conexión, un desafío y unos minutos de validez, y no dice nada sobre política. NIP-43 es política, expresada como eventos ordinarios de relay: quién es miembro, quién fue añadido o eliminado, y cómo un usuario solicita esas transiciones. La brecha que los implementadores deberían tener en cuenta es que nada estandariza aún permisos más finos más allá de los metadatos de rol opcionales de NIP-43, así que cualquier relay que haga más que una división binaria miembro/no-miembro está diseñando esa capa por su cuenta.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. ¿Construyendo algo o tienes noticias que compartir? Escríbenos por DM NIP-17 o encuéntranos en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #31</title><link>https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/</link><pubDate>Wed, 15 Jul 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/</guid><description>&lt;p>Bienvenidos de vuelta a Nostr Compass, su guía semanal sobre Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#vector-v040-moves-group-chats-from-marmot-to-concord-and-amethyst-ships-its-own-concord-client-days-later">Vector v0.4.0&lt;/a> retira &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> como transporte predeterminado para Chats Grupales a favor de &lt;a href="https://nostrcompass.org/es/topics/concord-protocol/">Concord&lt;/a>, un protocolo de comunidad abierto con licencia MIT también utilizado por Armada de Soapbox, y lanza Concord v2 cuatro días después con un selector de comandos con barra para bots, un temporizador de autodestrucción y badges NIP-58. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#amethyst-ships-a-clean-room-concord-implementation-for-end-to-end-encrypted-communities">Amethyst fusiona su propia implementación limpia de Concord, compatible a nivel de protocolo&lt;/a>, la misma semana. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#sonar-splits-off-from-bitchat-with-a-cross-platform-alpha-and-a-sticker-pack-spec">Sonar&lt;/a> se separa de Bitchat con una alpha multiplataforma y es la fuente de especificación citada para la propuesta de kinds de paquetes de stickers de esta semana. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#divine-mobile-1016-ships-a-deeper-video-editor-at-rest-encryption-and-proofmode-provenance">Divine Mobile 1.0.16&lt;/a> incorpora un editor de video más profundo, cifrado en reposo y procedencia ProofMode que sobrevive a las descargas de clips con marca de agua. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#bitchat-v170-adds-live-push-to-talk-voice-for-dms-and-the-public-mesh">Bitchat v1.7.0&lt;/a> añade voz push-to-talk en vivo para DMs y push-to-talk firmado en la malla pública. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#mdk-v094-bounds-external-signer-login-and-adds-draft-persistence">MDK v0.9.4&lt;/a> acota el inicio de sesión con firmante externo y añade persistencia de borradores, continuando su pase de endurecimiento la misma semana en que Vector se aleja de la especificación para chat grupal.&lt;/p></description><content:encoded>&lt;p>Bienvenidos de vuelta a Nostr Compass, su guía semanal sobre Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#vector-v040-moves-group-chats-from-marmot-to-concord-and-amethyst-ships-its-own-concord-client-days-later">Vector v0.4.0&lt;/a> retira &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> como transporte predeterminado para Chats Grupales a favor de &lt;a href="https://nostrcompass.org/es/topics/concord-protocol/">Concord&lt;/a>, un protocolo de comunidad abierto con licencia MIT también utilizado por Armada de Soapbox, y lanza Concord v2 cuatro días después con un selector de comandos con barra para bots, un temporizador de autodestrucción y badges NIP-58. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#amethyst-ships-a-clean-room-concord-implementation-for-end-to-end-encrypted-communities">Amethyst fusiona su propia implementación limpia de Concord, compatible a nivel de protocolo&lt;/a>, la misma semana. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#sonar-splits-off-from-bitchat-with-a-cross-platform-alpha-and-a-sticker-pack-spec">Sonar&lt;/a> se separa de Bitchat con una alpha multiplataforma y es la fuente de especificación citada para la propuesta de kinds de paquetes de stickers de esta semana. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#divine-mobile-1016-ships-a-deeper-video-editor-at-rest-encryption-and-proofmode-provenance">Divine Mobile 1.0.16&lt;/a> incorpora un editor de video más profundo, cifrado en reposo y procedencia ProofMode que sobrevive a las descargas de clips con marca de agua. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#bitchat-v170-adds-live-push-to-talk-voice-for-dms-and-the-public-mesh">Bitchat v1.7.0&lt;/a> añade voz push-to-talk en vivo para DMs y push-to-talk firmado en la malla pública. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#mdk-v094-bounds-external-signer-login-and-adds-draft-persistence">MDK v0.9.4&lt;/a> acota el inicio de sesión con firmante externo y añade persistencia de borradores, continuando su pase de endurecimiento la misma semana en que Vector se aleja de la especificación para chat grupal.&lt;/p>
&lt;p>Los lanzamientos etiquetados traen &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#n_cord-v11-adds-nsec-bunker-support">n_cord v1.1&lt;/a> con soporte para NSEC Bunker, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#cdk-v0173-adds-nip-47-wallet-service-support-across-cdk-cdk-nwc-and-cdk-ffi">cdk v0.17.3&lt;/a> con soporte de servicio de billetera NIP-47 en cdk, cdk-nwc y cdk-ffi, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#coop-mobile-v024-improves-nostr-connect-and-adds-ncryptsec1-import">Coop Mobile v0.2.4&lt;/a> con mejoras en Nostr Connect e importación ncryptsec1, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#nmail-v0140-ships-on-macos-with-scheduled-send-and-push-notifications">Nmail v0.14.0&lt;/a> llegando a macOS con envío programado, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#nostrord-v220-adds-a-dm-master-toggle-and-richer-direct-messages">Nostrord v2.2.0&lt;/a> con un interruptor maestro de DM, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#nostr-wot-0386-hardens-key-backups-and-signing-prompts">Nostr WoT 0.3.86&lt;/a> endureciendo respaldos de claves al formato NIP-49, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#keep-android-v118-adds-first-run-frost-onboarding">Keep Android v1.1.8&lt;/a> con incorporación FROST de primer uso, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#noscall-v060-adds-a-cashu-wallet-and-relay-based-push-notifications">Noscall v0.6.0&lt;/a> con una billetera Cashu y notificaciones push basadas en relay, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#kubo-ships-tablet-mode-and-group-chat-photos">Kubo&lt;/a> con modo tableta y fotos en chats grupales, y &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#nostr-codex-phone-v029-adds-gitdiffread-file-helper-requests">Nostr Codex Phone v0.2.9&lt;/a> con solicitudes auxiliares de git, diff y lectura de archivos.&lt;/p>
&lt;p>En el lado no publicado, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#amethyst-lets-accounts-nickname-contacts-with-encrypted-nip-85-cards">Amethyst&lt;/a> permite a las cuentas asignar apodos a contactos con tarjetas NIP-85 cifradas en 54 PRs fusionados, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#zap-cooking-ships-my-kitchen-phase-3-and-fixes-an-ndk-pool-quorum-bug">Zap Cooking&lt;/a> lanza la Fase 3 de My Kitchen y corrige un error de quórum del pool NDK, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#kehto-streams-outbox-reads-before-relay-discovery">Kehto&lt;/a> transmite lecturas de outbox antes de que termine el descubrimiento de relay, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#wired-and-tao-add-nip-57-creator-revenue-sharing">Wired y TAO&lt;/a> añaden reparto de ingresos de creador con NIP-57, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#conduit-mono-rebuilds-the-merchant-orders-inbox-around-ephemeral-guest-checkout">Conduit Mono&lt;/a> reconstruye su bandeja de pedidos del comerciante alrededor de pago efímero como invitado, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#buzz-hardens-channel-creator-provisioning-around-kind-39002">Buzz&lt;/a> endurece el aprovisionamiento del creador de canal en 240 PRs fusionados, y &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#nostr-docs-adopts-a-nip-49-signer-with-multi-account-and-qr-pairing">Nostr Docs&lt;/a> adopta un firmante NIP-49 con múltiples cuentas y emparejamiento QR. Recién rastreados esta semana: &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#opendiscord-v101-launches-as-a-discord-style-client-on-nostr">OpenDiscord v1.0.1&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#auditable-voting-v01140-aligns-organiser-voter-and-audit-proxy-roles">Auditable Voting v0.1.140&lt;/a>, y la selección Discovery &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#cambium-v032-pairs-with-heartwood-as-a-keyless-nip-55-signer">Cambium v0.3.2&lt;/a>, un firmante NIP-55 sin claves que redirige a un compañero de hardware Heartwood.&lt;/p>
&lt;p>El repositorio de NIPs no fusiona nada en la última semana y abre seis propuestas: &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#open-kind10011-favorite-follow-sets">kind:10011 conjuntos de seguimiento favoritos&lt;/a>, una &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#open-private-encrypted-drive-extends-nip-4e">unidad cifrada privada que extiende NIP-4E&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#open-nip-da-permissioned-private-data-sharing">NIP-DA compartición privada de datos con permisos&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#open-sticker-pack-kinds-10031-and-30031">kinds de paquetes de stickers 10031 y 30031&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#open-nip-29-message-pinning-with-kind9010-and-kind39005">fijación de mensajes NIP-29&lt;/a>, y una &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#open-nip-66-relay-discovery-restructure">reestructuración del descubrimiento de relay NIP-66&lt;/a>. El Deep Dive cubre &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#nip-deep-dive-nip-99-and-the-gamma-markets-commerce-extension">NIP-99 y la extensión de comercio Gamma Markets&lt;/a>.&lt;/p>
&lt;hr>
&lt;h2 id="historias-principales">Historias principales&lt;/h2>
&lt;h3 id="vector-v040-mueve-los-chats-grupales-de-marmot-a-concord-y-amethyst-lanza-su-propio-cliente-concord-días-después">Vector v0.4.0 mueve los Chats Grupales de Marmot a Concord, y Amethyst lanza su propio cliente Concord días después&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> es un mensajero Nostr construido alrededor de un cliente de binario único enfocado en privacidad para DMs y chats grupales. &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.0">Vector v0.4.0&lt;/a> reescribe el motor de mensajería de la aplicación en una biblioteca compartida &lt;code>vector-core&lt;/code> y, en el mismo lanzamiento, retira &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> (MLS-sobre-Nostr) como transporte predeterminado para Chats Grupales a favor de &lt;a href="https://nostrcompass.org/es/topics/concord-protocol/">Concord&lt;/a>, un protocolo de comunidad cifrado de extremo a extremo; el historial existente de grupos Marmot no se transfiere, y las notas del lanzamiento indican a los usuarios respaldar cualquier dato de grupo Marmot antes de actualizar. Las propias notas de lanzamiento de Vector describen Concord como &amp;ldquo;nuestro protocolo de mensajería personalizado&amp;rdquo;, pero las &lt;a href="https://github.com/concord-protocol/concord">especificaciones CORD-01 a CORD-07&lt;/a> subyacentes se publican por separado, con licencia MIT, y ya están implementadas fuera de Vector: el cliente estilo Discord de Soapbox, &lt;a href="https://gitlab.com/soapbox-pub/armada">Armada&lt;/a>, construye su función de Comunidades sobre la misma especificación Concord, y un día después, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3566">Amethyst fusionó su propia implementación limpia y compatible a nivel de protocolo&lt;/a>, cubierta en detalle a continuación. El mismo lanzamiento de Vector añade enrutamiento opcional por Tor para todo el tráfico, inicio de sesión con firmante remoto &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> por QR o URI bunker pegada, múltiples cuentas con un conmutador dentro de la aplicación, y paquetes de emojis personalizados compartidos entre clientes. La eliminación de mensajes remueve un mensaje para ambos lados en DMs y chats grupales, y Vector deliberadamente mantiene la clave de firma efímera en lugar de seguir el flujo estándar de eliminación &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>, una desviación motivada por privacidad que el proyecto señala explícitamente en las notas del lanzamiento. Cuatro días después, &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.1">v0.4.1&lt;/a> lanza &lt;strong>Concord v2&lt;/strong>, descrito como una versión con mejoras importantes de privacidad y estabilidad para Comunidades manteniendo las existentes funcionando, junto con un selector de comandos con barra estilo Discord para bots con parámetros tipados, un temporizador de autodestrucción por chat, y un sistema de badges NIP-58 para cazadores de errores. El alejamiento de Marmot para chat grupal ocurre la misma semana en que &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#mdk-v094-bounds-external-signer-login-and-adds-draft-persistence">MDK v0.9.4&lt;/a> a continuación continúa invirtiendo en la especificación.&lt;/p>
&lt;h3 id="amethyst-lanza-una-implementación-limpia-de-concord-para-comunidades-cifradas-de-extremo-a-extremo">Amethyst lanza una implementación limpia de Concord para comunidades cifradas de extremo a extremo&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> es un cliente Nostr rico en funciones para Android y multiplataforma. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3566">PR #3566&lt;/a> añade una implementación completa de &lt;a href="https://nostrcompass.org/es/topics/concord-protocol/">Concord&lt;/a> (CORD-01 a CORD-07) cubriendo comunidades sin servidor y cifradas de extremo a extremo: planos de control, chat e invitados envueltos con gift-wrap, sobre relay ordinarios, con cumplimiento de roles, expulsiones y baneos enraizados en el propietario que cada cliente verifica localmente en lugar de confiar en un servidor, y re-cifrado para cortar acceso a miembros eliminados. El código de protocolo y criptografía reside en &lt;code>quartz/&lt;/code>, los modelos de estado y vista en &lt;code>commons/&lt;/code>, y las pantallas y navegación en &lt;code>amethyst/&lt;/code> para Android, con verbos CLI delgados bajo &lt;code>cli/&lt;/code>; todavía no hay interfaz de escritorio, ya que la lógica compartida reside en &lt;code>quartz&lt;/code>/&lt;code>commons&lt;/code> para que Desktop la adopte después. La implementación es de sala limpia: construida a partir de las especificaciones CORD públicas y constantes de protocolo observadas, bajo la propia licencia MIT de Amethyst, distinta del código base AGPL-3.0 de Armada. Los valores de vectores de prueba propios de Armada fueron portados a las pruebas unitarias de Quartz para confirmar que ambos clientes realmente interoperan a nivel de protocolo, dando a Concord tres implementaciones independientes en días: Vector lanzando primero, Armada como cliente de referencia de Soapbox, y ahora la construcción desde la especificación de Amethyst.&lt;/p>
&lt;h3 id="sonar-se-separa-de-bitchat-con-una-alpha-multiplataforma-y-una-especificación-de-paquetes-de-stickers">Sonar se separa de Bitchat con una alpha multiplataforma y una especificación de paquetes de stickers&lt;/h3>
&lt;p>&lt;a href="https://sonarprivacy.xyz/">Sonar&lt;/a> es un mensajero y billetera con malla Bluetooth más Nostr desarrollado a partir de Bitchat, con DMs grupales Marmot interoperables con White Noise. El código vive en &lt;a href="https://github.com/hedwig-corp/bitchat-to-sonar">hedwig-corp/bitchat-to-sonar&lt;/a>. &lt;a href="https://github.com/hedwig-corp/bitchat-to-sonar/releases/tag/v0.1-alpha.7">v0.1-alpha.7&lt;/a> añade ventaneo acotado de transcripción estilo Signal para que el rendimiento de apertura y desplazamiento se mantenga local-first, sincroniza el estado de descubrimiento cercano entre pares, y corrige subidas de medios Blossom que fallaban por manejo de content-type y estado HTTP; la precedente &lt;a href="https://github.com/hedwig-corp/bitchat-to-sonar/releases/tag/v0.1-alpha.6">alpha.6&lt;/a> drenó eventos Marmot en vivo para una actualización más rápida del chat y cerró brechas de paridad de funciones entre Android e iOS en llamadas, mensajería, billetera y push. Sonar también es la fuente de especificación citada para &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#open-sticker-pack-kinds-10031-and-30031">PR #2410&lt;/a>, que registra kinds de eventos de paquetes de stickers bajo la propia especificación &amp;ldquo;Sonar Stickers&amp;rdquo; del proyecto, dando a este lanzamiento un enlace directo al trabajo de protocolo de esta semana.&lt;/p>
&lt;h3 id="divine-mobile-1016-incorpora-un-editor-de-video-más-profundo-cifrado-en-reposo-y-procedencia-proofmode">Divine Mobile 1.0.16 incorpora un editor de video más profundo, cifrado en reposo y procedencia ProofMode&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">Divine&lt;/a> es un cliente de videos cortos construido sobre Nostr con curación de feed por Web-of-Trust. &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.16">v1.0.16&lt;/a>, el primer lanzamiento etiquetado desde el #30, añade transiciones de clips, reproducción inversa, un grabador de voz en off y marcadores de ritmo en la línea de tiempo al editor de video, junto con un control de ajuste de feed que permite al usuario deslizar para ajustar recomendaciones directamente en lugar de dejarlas a señales opacas de interacción. El lanzamiento también activa el cifrado en reposo para datos locales, añade subidas en segundo plano que sobreviven a la suspensión de la aplicación, y lleva los datos de procedencia &lt;a href="https://nostrcompass.org/es/topics/proofmode/">ProofMode&lt;/a> al descargar un clip con marca de agua para que la atestación de creación humana no se pierda en tránsito. Divine también incluye nuevas protecciones para cuentas de menores de 16 años y expande la localización a 17 idiomas y 284 cadenas traducidas.&lt;/p>
&lt;h3 id="bitchat-v170-añade-voz-push-to-talk-en-vivo-para-dms-y-la-malla-pública">Bitchat v1.7.0 añade voz push-to-talk en vivo para DMs y la malla pública&lt;/h3>
&lt;p>&lt;a href="https://github.com/permissionlesstech/bitchat">Bitchat&lt;/a> es una aplicación de chat con malla Bluetooth con una pasarela opcional hacia relay Nostr. &lt;a href="https://github.com/permissionlesstech/bitchat/releases/tag/v1.7.0">v1.7.0&lt;/a>, lanzado la noche que se publicó el #30, añade voz push-to-talk en vivo en &lt;a href="https://github.com/permissionlesstech/bitchat/pull/1403">PR #1403&lt;/a> que transmite audio mientras el remitente mantiene presionado el botón y retrocede a una nota de voz si el flujo se interrumpe, más push-to-talk firmado en la malla pública en &lt;a href="https://github.com/permissionlesstech/bitchat/pull/1406">PR #1406&lt;/a> para que las ráfagas de voz en vivo en el canal compartido de la malla lleven autenticación del remitente. El lanzamiento también repara la rotación de peer-ID reenlazando el vínculo en un re-anuncio verificado, reconociendo al mismo par bajo su nuevo ID (&lt;a href="https://github.com/permissionlesstech/bitchat/pull/1401">PR #1401&lt;/a>), y los mensajes directos a un par actualmente inalcanzable ahora se ponen en cola con entrega store-and-forward en lugar de fallar directamente (&lt;a href="https://github.com/permissionlesstech/bitchat/pull/1415">PR #1415&lt;/a>). Esto continúa directamente desde la cobertura del #30 del trabajo de &lt;a href="https://nostrcompass.org/es/topics/nip-13/">NIP-13&lt;/a> proof-of-work y pasarela mesh-a-Nostr de v1.6.0.&lt;/p>
&lt;h3 id="mdk-v094-acota-el-inicio-de-sesión-con-firmante-externo-y-añade-persistencia-de-borradores">MDK v0.9.4 acota el inicio de sesión con firmante externo y añade persistencia de borradores&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> es el SDK de referencia para el protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, la capa de mensajería MLS-sobre-Nostr que el #30 cubrió marcando su especificación como adoptada. &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.9.4">v0.9.4&lt;/a> acota los pasos de directorio consultivo que un cliente recorre durante el inicio de sesión con firmante externo en &lt;a href="https://github.com/marmot-protocol/mdk/pull/793">PR #793&lt;/a>, previniendo un bucle de reintento sin límite cuando un firmante remoto es lento o no responde. El mismo lanzamiento añade persistencia de borradores de mensajes y enlaces de perfil a sitio web en &lt;a href="https://github.com/marmot-protocol/mdk/pull/812">PR #812&lt;/a>, continuando el pase de endurecimiento incremental que MDK ha ejecutado desde el corte de v0.9.0.&lt;/p>
&lt;hr>
&lt;h2 id="lanzamientos-etiquetados">Lanzamientos etiquetados&lt;/h2>
&lt;h3 id="n_cord-v11-añade-soporte-para-nsec-bunker">n_cord v1.1 añade soporte para NSEC Bunker&lt;/h3>
&lt;p>&lt;a href="https://github.com/0n4t3/n_cord">n_cord&lt;/a> es un cliente de chat con tecnología Nostr inspirado en Discord e IRC. &lt;a href="https://github.com/0n4t3/n_cord/releases/tag/v1.1">v1.1&lt;/a> añade soporte para NSEC Bunker &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> junto con una corrección de error en el manejo de respuestas.&lt;/p>
&lt;h3 id="cdk-v0173-añade-soporte-de-servicio-de-billetera-nip-47-en-cdk-cdk-nwc-y-cdk-ffi">cdk v0.17.3 añade soporte de servicio de billetera NIP-47 en cdk, cdk-nwc y cdk-ffi&lt;/h3>
&lt;p>&lt;a href="https://github.com/cashubtc/cdk">cdk&lt;/a> es un kit de desarrollo de Cashu; este lanzamiento es solo Bitcoin/Lightning en la mayoría de aspectos, pero &lt;a href="https://github.com/cashubtc/cdk/releases/tag/v0.17.3">v0.17.3&lt;/a> añade soporte de servicio &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect) con un crate de servicio NWC dedicado, integración de billetera, enlaces FFI para &lt;code>cdk-ffi&lt;/code>, y cobertura de pruebas de extremo a extremo, dando a las billeteras Cashu construidas sobre cdk una superficie estándar de Nostr Wallet Connect.&lt;/p>
&lt;h3 id="coop-mobile-v024-mejora-nostr-connect-y-añade-importación-ncryptsec1">Coop Mobile v0.2.4 mejora Nostr Connect y añade importación ncryptsec1&lt;/h3>
&lt;p>&lt;a href="https://git.reya.su/reya/coop-mobile">Coop Mobile&lt;/a> es un cliente de mensajería privada &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> para plataformas móviles. &lt;a href="https://git.reya.su/reya/coop-mobile/releases/tag/v0.2.4">v0.2.4&lt;/a> mejora su flujo de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> Nostr Connect, corrige un indicador de carga que se quedaba permanentemente en algunas conexiones, y añade soporte de importación para el formato de clave cifrada &lt;a href="https://nostrcompass.org/es/topics/nip-49/">NIP-49&lt;/a> &lt;code>ncryptsec1&lt;/code> junto con una pantalla de importación de identidad rediseñada.&lt;/p>
&lt;h3 id="nmail-v0140-llega-a-macos-con-envío-programado-y-notificaciones-push">Nmail v0.14.0 llega a macOS con envío programado y notificaciones push&lt;/h3>
&lt;p>&lt;a href="https://github.com/nogringo/nostr-mail-client">Nmail&lt;/a> es un cliente de correo construido sobre Nostr; &lt;a href="https://github.com/nogringo/nostr-mail-client/releases/tag/v0.14.0">v0.14.0&lt;/a> lleva la aplicación a macOS, añade envío programado con un buzón de Programados dedicado para mensajes en cola, y añade notificaciones push. El lanzamiento también cambia la resolución de identificadores Nostr de la libreta de direcciones al resolutor &lt;a href="https://nostrcompass.org/es/topics/nip-05/">NIP-05&lt;/a> de NDK en lugar de una implementación propia.&lt;/p>
&lt;h3 id="nostrord-v220-añade-un-interruptor-maestro-de-dm-y-mensajes-directos-más-ricos">Nostrord v2.2.0 añade un interruptor maestro de DM y mensajes directos más ricos&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrord/nostrord">Nostrord&lt;/a> es un cliente de chat grupal basado en relay &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> para Android, iOS, web y escritorio. &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v2.2.0">v2.2.0&lt;/a> añade un interruptor maestro para deshabilitar todas las funciones de mensajes directos a la vez (&lt;a href="https://github.com/nostrord/nostrord/pull/175">PR #175&lt;/a>) y lanza &amp;ldquo;mensajes directos más ricos&amp;rdquo; (&lt;a href="https://github.com/nostrord/nostrord/pull/186">PR #186&lt;/a>), continuando desde la cobertura del #30 sobre el lanzamiento que consolidó el pool de relay y detectó WebSockets zombi.&lt;/p>
&lt;h3 id="nostr-wot-0386-endurece-los-respaldos-de-claves-y-las-solicitudes-de-firma">Nostr WoT 0.3.86 endurece los respaldos de claves y las solicitudes de firma&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-wot/nostr-wot-extension">Nostr WoT&lt;/a> es una extensión de navegador que vincula una identidad Nostr con una billetera Lightning. &lt;a href="https://github.com/nostr-wot/nostr-wot-extension/releases/tag/v0.3.86">v0.3.86&lt;/a> mueve los respaldos de claves cifradas al formato estándar &lt;a href="https://nostrcompass.org/es/topics/nip-49/">NIP-49&lt;/a>, hace que las solicitudes de firma muestren el evento completo y todas las etiquetas en lugar de un resumen, verifica los datos del relay contra su firma, y deja de exponer la identidad activa al cambiar de cuenta. La extensión también elimina el permiso de navegador &lt;code>scripting&lt;/code> no utilizado.&lt;/p>
&lt;h3 id="keep-android-v118-añade-incorporación-frost-de-primer-uso">Keep Android v1.1.8 añade incorporación FROST de primer uso&lt;/h3>
&lt;p>&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a> es un firmante Android construido sobre fragmentos de clave FROST de umbral. &lt;a href="https://github.com/privkeyio/keep-android/releases/tag/v1.1.8">v1.1.8&lt;/a> añade un flujo de primer uso que explica los fragmentos de clave FROST y permite al nuevo usuario elegir una política de firma de Manual, Básica o Automática antes de que llegue la primera solicitud de firma, la primera incorporación del lado Android para el modelo de firma de umbral del crate keep-mobile subyacente.&lt;/p>
&lt;h3 id="noscall-v060-añade-una-billetera-cashu-y-notificaciones-push-basadas-en-relay">Noscall v0.6.0 añade una billetera Cashu y notificaciones push basadas en relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/sanah9/noscall">Noscall&lt;/a> es una aplicación de llamadas de audio y video seguras construida sobre Nostr. &lt;a href="https://github.com/sanah9/noscall/releases/tag/v0.6.0-release">v0.6.0&lt;/a> añade una billetera Cashu con alcance de cuenta con saldos multi-mint, envío y recepción de ecash, y pago y recepción Lightning con persistencia de cotizaciones. El lanzamiento también migra las notificaciones push de Android de Firebase Cloud Messaging a una ruta de entrega basada en relay Nostr a través de UnifiedPush, y mejora la fiabilidad de VoIP de iOS y push APNs durante reintentos de inicio de sesión.&lt;/p>
&lt;h3 id="kubo-lanza-modo-tableta-y-fotos-en-chats-grupales">Kubo lanza modo tableta y fotos en chats grupales&lt;/h3>
&lt;p>&lt;a href="https://github.com/JeroenOnNostr/kubo">Kubo&lt;/a> es una plataforma de video Nostr segura para niños con curación de feed por Web-of-Trust. &lt;a href="https://github.com/JeroenOnNostr/kubo/releases/tag/kubo-v2026.07.05">kubo-v2026.07.05&lt;/a> añade un diseño de cuadrícula para tableta opcional para el feed infantil y soporte para adjuntar fotos a mensajes de chat grupal, además de correcciones para el botón de registro que se ocultaba detrás del teclado en pantalla en Android.&lt;/p>
&lt;h3 id="nostr-codex-phone-v029-añade-solicitudes-auxiliares-de-gitdifflectura-de-archivos">Nostr Codex Phone v0.2.9 añade solicitudes auxiliares de git/diff/lectura de archivos&lt;/h3>
&lt;p>&lt;a href="https://github.com/tidley/nostr-codex-phone">Nostr Codex Phone&lt;/a> es una superficie de control móvil para un trabajador de asistente de codificación local que se comunica a través de DMs cifrados de Nostr. &lt;a href="https://github.com/tidley/nostr-codex-phone/releases/tag/v0.2.9">v0.2.9&lt;/a> añade acciones de herramientas OpenCode móviles incluyendo solicitudes auxiliares de git, diff, lectura de archivos, estado e historial, mejoras de fijación y búsqueda de sesión, y un control de detención de tareas, junto con un envoltorio de subida cifrada a &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> que se lanzó en la v0.2.8 anterior.&lt;/p>
&lt;h3 id="gitworkshop-v303-corrige-refs-recién-anunciadas-en-el-explorador-de-repositorios-y-lanza-su-primera-compilación-para-android">GitWorkshop v3.0.3 corrige refs recién anunciadas en el explorador de repositorios, y lanza su primera compilación para Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/DanConwayDev/gitworkshop">GitWorkshop&lt;/a> es una interfaz web git-sobre-Nostr para explorar y revisar repositorios NIP-34. &lt;a href="https://github.com/DanConwayDev/gitworkshop/releases/tag/v3.0.3">v3.0.3&lt;/a> corrige las vistas de ramas, etiquetas, commits y exploración de código que fallaban al resolver una ref que un repositorio anuncia después de que el explorador ya la ha cargado, junto con limpieza de tiempos de flujo de CI, confirmado directamente contra la etiqueta y el historial de commits. La misma semana, GitWorkshop publicó su primera compilación nativa para Android en &lt;a href="https://zapstore.dev">Zapstore&lt;/a>, comenzando en v3.0.0 y alcanzando v3.0.3 en horas; la interfaz web sigue siendo la interfaz principal, y el paquete Android trae la misma exploración de repositorios NIP-34 a un teléfono por primera vez.&lt;/p>
&lt;h3 id="bitcoin-safe-llega-a-flathub-destacando-su-plugin-nostr-sync--chat">Bitcoin-Safe llega a Flathub, destacando su plugin Nostr Sync &amp;amp; Chat&lt;/h3>
&lt;p>&lt;a href="https://bitcoin-safe.org">Bitcoin-Safe&lt;/a> es una billetera Bitcoin de autocustodia construida alrededor de flujos de trabajo con firmantes de hardware. El proyecto &lt;a href="https://flathub.org/apps/org.bitcoin_safe.BitcoinSafe">publicó un paquete en Flathub&lt;/a> esta semana, su primera lista en una tienda de aplicaciones Linux convencional. El lanzamiento en Flathub pone el plugin Sync &amp;amp; Chat de Bitcoin-Safe frente a una audiencia más amplia: el plugin usa mensajes directos &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>, a través de la propia biblioteca &lt;a href="https://github.com/andreasgriffin/bitcoin-nostr-chat">bitcoin-nostr-chat&lt;/a> del proyecto, para sincronizar etiquetas de billetera entre los dispositivos de un usuario y para enviar y recibir PSBTs para co-firma multisig remota entre participantes de confianza. La capa Nostr en sí se lanzó antes, en &lt;a href="https://github.com/andreasgriffin/bitcoin-safe/releases/tag/2.0.0">2.0.0&lt;/a> (2026-06-29), que rediseñó la firma de transacciones alrededor de un tipo de conexión &amp;ldquo;Compartir via Chat &amp;amp; Sync&amp;rdquo; junto con QR, USB y Bluetooth. La noticia de esta semana es el empaquetado en Flathub que pone esa función existente frente a una audiencia Linux convencional por primera vez.&lt;/p>
&lt;hr>
&lt;h2 id="cambios-no-publicados">Cambios no publicados&lt;/h2>
&lt;h3 id="amethyst-permite-a-las-cuentas-asignar-apodos-a-contactos-con-tarjetas-nip-85-cifradas">Amethyst permite a las cuentas asignar apodos a contactos con tarjetas NIP-85 cifradas&lt;/h3>
&lt;p>Más allá de la &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#amethyst-ships-a-clean-room-concord-implementation-for-end-to-end-encrypted-communities">implementación de Concord&lt;/a> cubierta anteriormente, Amethyst fusionó 54 otros PRs en la última semana. El principal entre ellos es &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3548">PR #3548&lt;/a>, que permite a una cuenta asignar un apodo a cualquier otro usuario publicando su propia tarjeta de contacto kind 30382 &lt;a href="https://nostrcompass.org/es/topics/nip-85/">NIP-85&lt;/a> sobre ellos. El apodo, una nota privada, y cualquier mapeo personalizado de código corto de emoji &lt;a href="https://nostrcompass.org/es/topics/nip-30/">NIP-30&lt;/a> viven dentro del contenido cifrado con &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> de la tarjeta, de modo que solo la cuenta firmante puede leerlos, y las tarjetas se sincronizan a través del conjunto extendido de relay outbox de la cuenta al iniciar sesión e incrementalmente después. Los feeds, chats y menciones renderizan el apodo en lugar del nombre de visualización público, con una tarjeta de apodo accesible al tocar en la página de perfil encima del nombre real del usuario.&lt;/p>
&lt;h3 id="zap-cooking-lanza-la-fase-3-de-my-kitchen-y-corrige-un-error-de-quórum-del-pool-ndk">Zap Cooking lanza la Fase 3 de My Kitchen y corrige un error de quórum del pool NDK&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a> es una aplicación de compartición de recetas y comunidad culinaria construida sobre Nostr. Fusionó 43 PRs continuando su función de planificación de comidas &amp;ldquo;My Kitchen&amp;rdquo;, incorporando generación de listas de compras, un selector de recetas y una cuadrícula de planificación semanal en esta fase. El mismo conjunto de cambios corrige un error de quórum de preparación del pool de conexiones de &lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a> (Nostr Development Kit) que podía dejar lecturas de relay esperando más allá del punto en que un quórum de relay ya había respondido.&lt;/p>
&lt;h3 id="kehto-transmite-lecturas-de-outbox-antes-del-descubrimiento-de-relay">Kehto transmite lecturas de outbox antes del descubrimiento de relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/kehto/web">Kehto&lt;/a> es un runtime web temprano para applets Nostr &lt;a href="https://nostrcompass.org/es/topics/nip-5d/">NIP-5D&lt;/a>, o &amp;ldquo;napplets&amp;rdquo;. Fusionó 26 PRs. &lt;a href="https://github.com/kehto/web/pull/193">PR #193&lt;/a> corrige lecturas de outbox que anteriormente esperaban a que la carga de listas de relay &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> terminara antes de abrir cualquier relay, de modo que una carga de lista de relay que nunca se resolvía podía bloquear tanto la entrega de eventos como los tiempos de espera de consulta; la corrección abre hints de relay validados inmediatamente y transmite resultados mientras se descubren los relay de escritura. Un segundo cambio (&lt;a href="https://github.com/kehto/web/pull/196">PR #196&lt;/a>) alinea la página de auditoría de identidad del proyecto con NAP-SHELL, el contrato de ciclo de vida de la plataforma Napplet, parte del mismo trabajo de alineación de protocolo visible en otros lugares del lanzamiento &lt;code>napplet/web&lt;/code> de esta semana.&lt;/p>
&lt;h3 id="wired-y-tao-añaden-reparto-de-ingresos-de-creador-con-nip-57">Wired y TAO añaden reparto de ingresos de creador con NIP-57&lt;/h3>
&lt;p>&lt;a href="https://github.com/smolgrrr/Wired">Wired&lt;/a> y &lt;a href="https://github.com/smolgrrr/TAO">TAO&lt;/a> son clientes gemelos de redes sociales enfocados en libertad de expresión construidos sobre Nostr, compartiendo la misma lista de PRs; ambos fusionaron &lt;a href="https://github.com/smolgrrr/Wired/pull/121">PR #121&lt;/a>, que implementa reparto de ingresos de creador &lt;a href="https://nostrcompass.org/es/topics/nip-57/">NIP-57&lt;/a> para que los zaps enviados a una publicación puedan dividirse automáticamente entre contribuyentes más allá del autor original. Esto continúa la cobertura del #30 del par elevando su señal de proof-of-work a 21 bits como trabajo no publicado.&lt;/p>
&lt;h3 id="conduit-mono-reconstruye-la-bandeja-de-pedidos-del-comerciante-alrededor-de-pago-efímero-como-invitado">Conduit Mono reconstruye la bandeja de pedidos del comerciante alrededor de pago efímero como invitado&lt;/h3>
&lt;p>&lt;a href="https://github.com/Conduit-BTC/conduit-mono">Conduit Mono&lt;/a> es un protocolo de mercado adyacente a las listas de clasificados &lt;a href="https://nostrcompass.org/es/topics/nip-99/">NIP-99&lt;/a>. &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/174">PR #174&lt;/a> añade pago como invitado usando una clave efímera generada por el navegador: el invitado envía un pedido cifrado y un reporte de pago al comerciante usando esa clave de un solo uso, y el comerciante hace seguimiento fuera de banda por teléfono o correo, de modo que el comprador nunca necesita una identidad de bandeja de entrada durable. &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/175">PR #175&lt;/a> reconstruye la bandeja de pedidos del comerciante alrededor de un modelo único de estado de pedido compartido, separando roles de comprador y comerciante y requiriendo un código de seguimiento y transportista antes de que un pedido físico o mixto pueda pasar a enviado. El flujo de pago del proyecto se basa en mensajes privados &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>, cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> y gift wrap &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a>. El &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#nip-deep-dive-nip-99-and-the-gamma-markets-commerce-extension">NIP Deep Dive&lt;/a> de esta semana cubre las convenciones de &lt;a href="https://nostrcompass.org/es/topics/gamma-markets/">Gamma Markets&lt;/a> hacia las que este mismo problema de estado de pedido apunta.&lt;/p>
&lt;h3 id="buzz-endurece-el-aprovisionamiento-del-creador-de-canal-alrededor-de-kind-39002">Buzz endurece el aprovisionamiento del creador de canal alrededor de kind 39002&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/buzz">Buzz&lt;/a> es una plataforma de comunicación de mente colectiva que conecta agentes de IA y humanos sobre Nostr. Fusionó 240 PRs en la última semana, continuando su arco de endurecimiento de la capa de relay desde la cobertura del #30 sobre métricas de turno de agente kind 44200. La corrección de esta semana (&lt;a href="https://github.com/block/buzz/pull/1830">PR #1830&lt;/a>) trata al creador de un canal como miembro antes de que la lógica de aprovisionamiento de canal kind 39002 se ejecute, cerrando una condición de carrera donde el propio canal del creador podía rechazarlo durante la configuración.&lt;/p>
&lt;h3 id="nostr-docs-adopta-un-firmante-nip-49-con-múltiples-cuentas-y-emparejamiento-qr">Nostr Docs adopta un firmante NIP-49 con múltiples cuentas y emparejamiento QR&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-docs">Nostr Docs&lt;/a> es una aplicación de documentos colaborativos nativa de Nostr. Fusionó 5 PRs, el notable (&lt;a href="https://github.com/formstr-hq/nostr-docs/pull/50">PR #50&lt;/a>) adoptando el paquete &lt;code>@formstr/signer&lt;/code> para autenticación completa &lt;a href="https://nostrcompass.org/es/topics/nip-49/">NIP-49&lt;/a> con cambio de múltiples cuentas y emparejamiento QR, reemplazando una ruta de firma propia anterior.&lt;/p>
&lt;h3 id="también-publicado">También publicado&lt;/h3>
&lt;p>Correcciones menores de interoperabilidad de firmantes y fiabilidad aterrizaron en varios proyectos rastreados en la última semana sin suficiente superficie nueva para sus propios párrafos: &lt;a href="https://github.com/DanConwayDev/ngit-cli">ngit-cli&lt;/a>, un cliente de línea de comandos para una alternativa a GitHub basada en Nostr, lanza &lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.6.3">v2.6.3&lt;/a> haciendo que &lt;code>ngit init&lt;/code> dé orientación de configuración accionable en lugar de pedir repetidamente un nsec; &lt;a href="https://github.com/dtonon/manent">Manent&lt;/a>, una aplicación privada de notas y archivos cifrados construida sobre Nostr, lanza &lt;a href="https://github.com/dtonon/manent/releases/tag/v1.4.1">v1.4.1&lt;/a> corrigiendo el inicio de sesión con firmante Android roto cuando Amber devuelve un pubkey hexadecimal y mejorando el desplazamiento del inicio de sesión bunker; &lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a>, un cliente Nostr delgado y libre de servicios Google, lanza &lt;a href="https://github.com/77elements/noornote/releases/tag/v1.2.8">v1.2.8&lt;/a> corrigiendo notificaciones perdidas de grupos Nostrord y añadiendo un interruptor de alerta de publicación propia; &lt;a href="https://github.com/forgesworn/bray">Bray&lt;/a>, un servidor MCP Nostr consciente de confianza para agentes de IA y humanos, lanza &lt;a href="https://github.com/forgesworn/bray/releases/tag/v1.34.0">v1.34.0&lt;/a> enviando metadatos de nombre de cliente en conexiones bunker &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>; &lt;a href="https://github.com/TsukemonoGit/lumilumi">Lumilumi&lt;/a>, un cliente web Nostr, cachea listas de relay &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> en almacenamiento local para respaldo sin conexión; &lt;a href="https://github.com/moogmodular/earthly">Earthly&lt;/a>, una aplicación de ciudad y comunidad local basada en Nostr, añade búsqueda geográfica &lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a>; y &lt;a href="https://github.com/lnbits/lnbits">lnbits&lt;/a>, un sistema de billetera y cuentas Lightning gratuito y de código abierto, lanza &lt;a href="https://github.com/lnbits/lnbits/pull/3925">PR #3925&lt;/a> haciendo que &lt;code>send_nostr_dm&lt;/code> publique de forma no bloqueante dentro de un lanzamiento por lo demás enfocado en Lightning.&lt;/p>
&lt;hr>
&lt;h2 id="recién-rastreados-y-descubiertos">Recién rastreados y descubiertos&lt;/h2>
&lt;h3 id="opendiscord-v101-se-lanza-como-un-cliente-estilo-discord-sobre-nostr">OpenDiscord v1.0.1 se lanza como un cliente estilo Discord sobre Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/sofia-gros/open-discord">OpenDiscord&lt;/a> es un cliente de servidores y canales estilo Discord construido sobre Nostr con permisos basados en roles y lobbies de voz WebRTC/SFU. &lt;a href="https://github.com/sofia-gros/open-discord/releases/tag/v1.0.1">v1.0.1&lt;/a> es el primer lanzamiento con instalador etiquetado del proyecto.&lt;/p>
&lt;h3 id="auditable-voting-v01140-alinea-los-roles-de-organizador-votante-y-proxy-de-auditoría">Auditable Voting v0.1.140 alinea los roles de organizador, votante y proxy de auditoría&lt;/h3>
&lt;p>&lt;a href="https://github.com/tidley/auditable-voting">Auditable Voting&lt;/a> es un shell de votación solo de cliente sobre Nostr. &lt;a href="https://github.com/tidley/auditable-voting/releases/tag/v0.1.140">v0.1.140&lt;/a> alinea los roles de organizador, votante y proxy de auditoría con el evento exacto de definición de cuestionario público firmado por el organizador, cerrando una brecha donde un proxy de auditoría podía actuar sobre cuentas generadas obsoletas o estado persistido de un trabajador u organizador diferente.&lt;/p>
&lt;h3 id="cambium-v032-se-empareja-con-heartwood-como-un-firmante-nip-55-sin-claves">Cambium v0.3.2 se empareja con Heartwood como un firmante NIP-55 sin claves&lt;/h3>
&lt;p>&lt;a href="https://github.com/forgesworn/cambium">Cambium&lt;/a> es la selección Discovery de este número: un firmante Android &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> que no guarda material de clave privada propio, redirigiendo cada solicitud de firma sobre &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> a un firmante de hardware Heartwood compañero. El proyecto comparte la organización de GitHub &lt;code>forgesworn&lt;/code> con el proyecto rastreado Bray, y el propio Heartwood fue cubierto en el #30 lanzando el puente de firma relay-a-serial con el que ahora habla el lado Android de Cambium. &lt;a href="https://github.com/forgesworn/cambium">v0.3.2&lt;/a> pule la hoja de aprobación para advertir en vivo cuando la identidad seleccionada difiere del enlace existente de la aplicación y mueve las escrituras del registro de actividad a una única cola no bloqueante.&lt;/p>
&lt;h3 id="también-lanzados-esta-semana-echoes-dispatch-y-linky">También lanzados esta semana: echoes, Dispatch y Linky&lt;/h3>
&lt;p>Tres lanzamientos más merecen mención esta semana. &lt;a href="https://github.com/Lwb89dev/echoes">echoes&lt;/a> es una aplicación de notas offline-first y cifrada de extremo a extremo que se sincroniza privadamente sobre Nostr. &lt;a href="https://github.com/freecritter/dispatch">Dispatch&lt;/a> es un organizador de viajes local-first donde cada guardado se cifra con &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> y se respalda sobre Nostr bajo una clave dedicada y no vinculable, y su lanzamiento &lt;a href="https://github.com/freecritter/dispatch">v0.3.0&lt;/a> añade inicio de sesión Amber &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> para que la aplicación nunca toque la clave privada del usuario directamente. &lt;a href="https://github.com/hynek-jina/linky">Linky&lt;/a> combina contactos y DMs de Nostr con pagos Lightning y Cashu en una sola aplicación web progresiva.&lt;/p>
&lt;hr>
&lt;h2 id="trabajo-de-protocolo-y-actualizaciones-de-nip">Trabajo de protocolo y actualizaciones de NIP&lt;/h2>
&lt;p>No se fusionaron PRs en el &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a> en la última semana. Se abrieron seis propuestas.&lt;/p>
&lt;h3 id="abierta-kind10011-conjuntos-de-seguimiento-favoritos">Abierta: kind:10011 conjuntos de seguimiento favoritos&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2413">PR #2413&lt;/a>, de fiatjaf, añade kind:10011 conjuntos de seguimiento favoritos. Refleja el patrón existente donde kind:10012 (conjuntos de relay favoritos) tiene etiquetas &lt;code>a&lt;/code> apuntando a conjuntos de relay kind:30002, extendiendo el mismo mecanismo de favoritos a conjuntos de seguimiento kind:30000 para que un cliente pueda marcar una lista de seguimiento curada sin reemplazar su propia lista de contactos.&lt;/p>
&lt;h3 id="abierta-unidad-cifrada-privada-que-extiende-nip-4e">Abierta: unidad cifrada privada que extiende NIP-4E&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2412">PR #2412&lt;/a>, del equipo Form*, propone un evento genérico de Metadata, kind 34578, distinguido por una etiqueta de identificador &lt;code>d&lt;/code> y una etiqueta de subtipo &lt;code>t&lt;/code>, junto con un sistema de archivos cifrado privado construido encima que ya está implementado en el propio cliente Form* Drive, todavía experimental. Un registro de archivo es un evento de Metadata con &lt;code>t=files&lt;/code>: los blobs de archivo viven en servidores &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> mientras que solo un índice cifrado reside en relay, y cada fragmento de archivo obtiene su propio par de claves efímero con cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> v2 derivado por HKDF. Un evento compañero de Clave de Cifrado Desacoplada guarda una clave simétrica por unidad contra la que se descifran los metadatos de cada archivo, y se basa explícitamente en &lt;a href="https://nostrcompass.org/es/topics/nip-4e/">NIP-4E&lt;/a>, el borrador de abstracción de almacenamiento aún abierto de fiatjaf (&lt;a href="https://github.com/nostr-protocol/nips/pull/1647">PR #1647&lt;/a>, abierto desde diciembre de 2024).&lt;/p>
&lt;p>Esa única clave por unidad significa que una clave filtrada expone los metadatos de cada archivo en la unidad, no solo uno, ya que los pares de claves efímeros por archivo solo varían la clave de cifrado de fragmento, no la clave de descifrado de metadatos; no existe todavía ninguna ruta de rotación o revocación más allá de publicar un nuevo evento de Metadata advirtiendo que eventos más antiguos pueden perderse. Una segunda propuesta más estrecha alcanza la misma idea subyacente de NIP-4E desde un ángulo diferente: &lt;a href="https://github.com/nostr-protocol/nips/pull/2361">PR #2361&lt;/a>, de fiatjaf, desacopla claves de identidad y cifrado dentro de la mensajería &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> específicamente, abierto desde el 1 de junio. Ambos PRs están sin fusionar, dejando esto como una esquina activa y disputada del espacio de diseño. Form* dice que el cliente Drive es experimental con una actualización próxima.&lt;/p>
&lt;h3 id="abierta-nip-da-compartición-privada-de-datos-con-permisos">Abierta: NIP-DA compartición privada de datos con permisos&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2411">PR #2411&lt;/a>, de JAFairweather, es un nuevo borrador NIP-DA para compartición privada de datos con permisos a través de concesiones de datos con alcance. Cada usuario mantiene un registro cifrado y autoritativo por alcance en relay, y el acceso se otorga entregando privadamente la clave simétrica de ese alcance dentro de un gift wrap &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a>, de modo que los relay almacenan solo texto cifrado y nunca saben quién otorgó acceso a quién; una revocación es simplemente una rotación de clave, sin necesidad de reescribir la copia de cada consumidor. El autor lo posiciona como distinto de los DMs &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (que pueden llevar una instantánea de datos pero no actualizaciones en vivo ni revocación) y de las listas privadas NIP-51 (que no llevan material de clave), y cita dos implementaciones independientes, una biblioteca de referencia en JavaScript y un CLI en Go sobre go-nostr, probadas cruzadas contra relay.damus.io, nos.lol y relay.primal.net.&lt;/p>
&lt;h3 id="abierta-kinds-de-paquetes-de-stickers-10031-y-30031">Abierta: kinds de paquetes de stickers 10031 y 30031&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2410">PR #2410&lt;/a>, de vincenzopalazzo, registra kind 30031 (paquetes de stickers direccionables) y kind 10031 (la lista de paquetes de stickers de un usuario) en la tabla de Event Kinds, especificados por el formato &amp;ldquo;Sonar Stickers&amp;rdquo; que &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#sonar-splits-off-from-bitchat-with-a-cross-platform-alpha-and-a-sticker-pack-spec">Sonar&lt;/a> lanza esta semana. Los kinds se sitúan deliberadamente un espacio por encima de los kinds de emoji personalizados &lt;a href="https://nostrcompass.org/es/topics/nip-30/">NIP-30&lt;/a> 30030 y 10030 para que un cliente no pueda confundir un paquete de stickers con un conjunto de emojis; los bytes de imagen de stickers viven en servidores HTTPS compatibles con &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>, y las referencias de stickers enviados llevan un hash en texto plano para que un paquete direccionable editado no pueda cambiar silenciosamente la apariencia de stickers ya enviados en mensajes antiguos. Un PR compañero registra los mismos kinds en el proyecto separado &lt;code>registry-of-kinds&lt;/code>.&lt;/p>
&lt;h3 id="abierta-fijación-de-mensajes-nip-29-con-kind9010-y-kind39005">Abierta: fijación de mensajes NIP-29 con kind:9010 y kind:39005&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2379">PR #2379&lt;/a>, de Anderson-Juhasc, añade fijación de mensajes a grupos basados en relay &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a>: kind:9010 &lt;code>update-pin-list&lt;/code> es un evento de moderación que lleva la lista completa de eventos fijados como etiquetas &lt;code>e&lt;/code> en orden de visualización, de modo que un solo evento puede fijar, desfijar, reordenar o limpiar el conjunto fijado, y kind:39005 es un espejo generado por el relay que expone la última lista aceptada. El diseño reemplaza un enfoque anterior de pares agregar/eliminar de &lt;a href="https://github.com/nostr-protocol/nips/pull/1163">PR #1163&lt;/a> después de retroalimentación de revisión, y elige los números de kind 9010/39005 porque 9009 y 39003 han sido reclamados desde entonces por &lt;code>create-invite&lt;/code> y roles de grupo. Anderson-Juhasc también mantiene &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#nostrord-v220-adds-a-dm-master-toggle-and-richer-direct-messages">Nostrord&lt;/a>, cuyo &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v2.2.0">v2.2.0&lt;/a> se lanza esta misma semana.&lt;/p>
&lt;h3 id="abierta-reestructuración-del-descubrimiento-de-relay-nip-66">Abierta: reestructuración del descubrimiento de relay NIP-66&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2241">PR #2241&lt;/a>, de VincenzoImp, es una reestructuración sustancial del descubrimiento de relay &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a>. Reemplaza la prosa suelta de &amp;ldquo;Otras etiquetas incluyen&amp;rdquo; con una sección estructurada de Etiquetas Indexadas, añade una etiqueta &lt;code>W&lt;/code> que refleja el campo &lt;code>attributes&lt;/code> de NIP-11 para filtrado de descubrimiento de relay, añade una etiqueta de etiqueta &lt;code>l&lt;/code> usando espacios de nombres estandarizados (&lt;code>ISO-639-1&lt;/code>, &lt;code>ISO-3166-1&lt;/code>, &lt;code>IANA-asn&lt;/code>, &lt;code>IANA-tz&lt;/code>, &lt;code>nip66.label.city&lt;/code>), y organiza etiquetas de RTT, SSL/TLS, red, geográficas, DNS y HTTP en secciones dedicadas junto con una nueva tabla de Tipos de Verificación. También corrige eventos de ejemplo rotos que tenían nombres de campo incorrectos, un &lt;code>kind&lt;/code> faltante y nombres de tipo de verificación inválidos, y cierra el &lt;a href="https://github.com/nostr-protocol/nips/issues/2171">issue #2171&lt;/a>. Todos los cambios mantienen compatibilidad hacia atrás ya que cada etiqueta añadida es opcional.&lt;/p>
&lt;hr>
&lt;h2 id="nip-deep-dive-nip-99-y-la-extensión-de-comercio-gamma-markets">NIP Deep Dive: NIP-99 y la extensión de comercio Gamma Markets&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-15/">NIP-15&lt;/a>, la especificación original del Mercado Nostr, es heredada a estas alturas: modelaba un puesto de comerciante (kind 30017) con productos (kind 30018) archivados debajo, y los clientes que alguna vez corrieron sobre ella, Shopstr entre ellos, se han trasladado desde entonces a las listas de clasificados &lt;a href="https://nostrcompass.org/es/topics/nip-99/">NIP-99&lt;/a> como la especificación activa. NIP-99 en sí es un solo evento direccionable, kind 30402 para una lista activa o kind 30403 para un borrador, sin necesidad de crear un puesto primero. Deja todo más allá de la lista indefinido: costo de envío, estado del pedido, recibos, reseñas, y una forma de agrupar varias listas bajo una sola tienda, exactamente las partes de NIP-15 que nunca se transfirieron. &lt;a href="https://nostrcompass.org/es/topics/gamma-markets/">Gamma Markets&lt;/a> llena ese vacío, y es la capa de comercio moderna que vale la pena entender hoy.&lt;/p>
&lt;h3 id="el-vacío-que-nip-99-deja-abierto">El vacío que NIP-99 deja abierto&lt;/h3>
&lt;p>El campo &lt;code>content&lt;/code> de una lista NIP-99 lleva una descripción en Markdown, &lt;code>price&lt;/code> y &lt;code>location&lt;/code> están directamente en el evento, y las etiquetas &lt;code>t&lt;/code> la hacen buscable como contenido ordinario de hashtag. Como es direccionable por la tupla pubkey, kind y etiqueta &lt;code>d&lt;/code>, un vendedor edita una lista en su lugar publicando una nueva versión con la misma etiqueta &lt;code>d&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30402&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Vintage mechanical keyboard, Cherry MX Blue switches, barely used.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;keyboard-mx-blue-01&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Vintage Mechanical Keyboard&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;summary&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Cherry MX Blue, barely used&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;published_at&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1752537600&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;location&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;NYC&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;price&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;100&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;USD&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;electronics&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Esa es la especificación completa: un anuncio clasificado firmado y actualizable. Cada cliente que implementa NIP-99 para comercio electrónico real, más allá de un clasificado puntual, terminó inventando sus propias convenciones privadas para envío, mensajes de pedido y reseñas. Dos clientes NIP-99 podían renderizar correctamente una lista y aun así no tener una forma compartida de completar un pago entre ellos.&lt;/p>
&lt;h3 id="gamma-markets-estandarizando-lo-que-nip-99-dejó-fuera">Gamma Markets: estandarizando lo que NIP-99 dejó fuera&lt;/h3>
&lt;p>Gamma Markets es el nombre que un grupo de trabajo de desarrolladores de mercados Nostr, los equipos detrás de Shopstr, Cypher, Plebeian Market y Conduit Market, dieron a un conjunto compartido de convenciones de comercio electrónico construidas sobre el evento kind 30402 existente de NIP-99. La especificación está enlazada desde el documento canónico de NIP-99 a través de &lt;a href="https://github.com/nostr-protocol/nips/pull/1784">PR #1784&lt;/a> y se mantiene en su propio repositorio, &lt;a href="https://github.com/GammaMarkets/market-spec">GammaMarkets/market-spec&lt;/a>.&lt;/p>
&lt;p>Gamma Markets añade dos kinds independientes adyacentes a las listas. Kind 30405 agrupa múltiples listas en una colección de productos, referenciando cada una con una etiqueta &lt;code>a&lt;/code> explícita:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30405&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Summer sale picks&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;summer-picks&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Summer Sale&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30402:&amp;lt;merchant-pubkey&amp;gt;:keyboard-mx-blue-01&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;shipping_option&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30406:&amp;lt;merchant-pubkey&amp;gt;:standard-regional&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Kind 30406 define una opción de envío con precios por país y reglas opcionales de costo basadas en peso o distancia:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30406&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Standard Regional Shipping&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;standard-regional&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Standard Shipping&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;price&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;5.99&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;USD&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;country&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;US&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;service&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;standard&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;duration&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;24&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;72&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;H&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;weight-max&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;kg&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>La creación de pedidos, solicitudes de pago, actualizaciones de estado y envío, y recibos de pago viajan como mensajes privados ordinarios envueltos con gift-wrap &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>, divididos en tres kinds por rol, no por re-envolver el transporte: kind 14 lleva comunicación libre entre comprador y comerciante, kind 16 lleva cada transición de estado del pedido (una etiqueta &lt;code>type&lt;/code> de 1 a 4 marca creación de pedido, solicitud de pago, actualización de estado o actualización de envío), y kind 17 lleva el recibo de pago del comprador. Un mensaje de creación de pedido se ve así antes del gift-wrapping:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">16&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Please leave the package with the doorman.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;merchant-pubkey&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;subject&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;New order&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;type&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;order&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;order-8f21&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;amount&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;115000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;item&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30402:&amp;lt;merchant-pubkey&amp;gt;:keyboard-mx-blue-01&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;shipping&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30406:&amp;lt;merchant-pubkey&amp;gt;:standard-regional&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Calificar una compra completada es un kind direccionable separado, 31555, que apunta a la lista que reseña:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">31555&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Arrived fast, exactly as described.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;a:30402:&amp;lt;merchant-pubkey&amp;gt;:keyboard-mx-blue-01&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rating&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;thumb&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rating&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1.0&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;quality&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rating&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;0.9&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;delivery&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Llevar los mensajes de pedido sobre NIP-17 significa que un pago de Gamma Markets usa el mismo transporte de mensajes privados que los clientes ya tienen para DMs, en lugar de un kind de mensaje de pedido a medida.&lt;/p>
&lt;p>La decisión de diseño central de la especificación es que nada se hereda en cascada. Una lista que pertenece a una colección la referencia explícitamente con una etiqueta &lt;code>a&lt;/code> en lugar de heredar automáticamente las opciones de envío o la descripción de la colección, y una opción de envío que una lista usa se referencia de la misma forma explícita. Esa es una reversión deliberada del modelo de puesto de NIP-15, donde un producto heredaba silenciosamente la moneda y la tabla de envío que su puesto padre definía. La compensación es más etiquetado explícito en cada lista, a cambio de que la configuración completa de una lista sea siempre legible desde el evento mismo, sin necesidad de resolver primero un objeto padre.&lt;/p>
&lt;h3 id="dónde-aparece-esto-en-la-práctica">Dónde aparece esto en la práctica&lt;/h3>
&lt;p>El trabajo de &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-15-newsletter/#conduit-mono-rebuilds-the-merchant-orders-inbox-around-ephemeral-guest-checkout">Conduit Mono&lt;/a> de esta semana se sitúa en el mismo territorio de mensajes de pedido que Gamma Markets estandariza: el pago como invitado con clave efímera de &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/174">PR #174&lt;/a> y la reconstrucción de la bandeja de pedidos del comerciante de &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/175">PR #175&lt;/a> resuelven el problema de estado de pedido comprador/comerciante que los mensajes kind 14, 16 y 17 de Gamma Markets formalizan; Conduit Mono ejecuta su propio modelo de estado de pedido junto a esos kinds, sin adoptarlos directamente. Shopstr, uno de los cuatro proyectos que escribieron la especificación, también mantuvo su propia plomería de comercio en movimiento la última semana: &lt;a href="https://github.com/shopstr-eng/shopstr/pull/568">PR #568&lt;/a> extrae la lógica duplicada de gift-wrap NIP-17 en un módulo compartido, y &lt;a href="https://github.com/shopstr-eng/shopstr/pull/567">PR #567&lt;/a> lleva su parser de autenticación HTTP &lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98&lt;/a> a cobertura completa de pruebas, mantenimiento en exactamente las capas de mensajería y autenticación de las que un flujo de pedidos de Gamma Markets depende para llegar al comprador y comerciante de forma segura.&lt;/p>
&lt;p>NIP-15 perdió el rol de tienda al estandarizar un puesto y un producto, y luego dejó pagos, envío, reseñas y estado de pedido como problema de la aplicación. Gamma Markets llena la mayor parte de esa superficie faltante sin tocar la forma de lista única de NIP-99, construyendo sobre la pila de DM existente de Nostr, NIP-17, en lugar de inventar una nueva capa de mensajería.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. Si estás construyendo algo o tienes noticias para compartir, contáctanos via DM NIP-17 o encuéntranos en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #30</title><link>https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/</link><pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/</guid><description>&lt;p>Bienvenidos de nuevo a Nostr Compass, vuestra guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> la &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#marmot-marks-the-spec-adopted-and-mdk-cuts-v09x">especificación de Marmot queda marcada como adoptada&lt;/a> en 42 archivos mientras MDK publica de v0.9.0 a v0.9.3 con avatares de grupo cifrados, soporte para firmantes externos y bindings de MarmotKit para iOS y Android. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#mostro-v0180-and-mobile-v130-ship-transport-v2-on-nip-44">Mostro lanza Transport v2&lt;/a> sobre mensajes directos NIP-44, con barreras antispam y una ventana de coexistencia tanto en mostrod v0.18.0 como en Mobile v1.3.0. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#bitchat-160-adds-nip-13-proof-of-work-and-an-opt-in-mesh-to-nostr-gateway">Bitchat 1.6.0 añade prueba de trabajo NIP-13&lt;/a> a los mensajes de canales geohash, un gateway opcional de malla a Nostr que permite a un solo teléfono conectado enlazar a toda una multitud, bundles de prekeys, verificación transitiva y grupos privados cifrados gestionados por su creador. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#amber-v623-scopes-profile-subscriptions-and-adds-a-tor-status-notification">Amber&lt;/a> limita las suscripciones de perfil por cuenta, obtiene las listas de relays NIP-65 antes que los metadatos del perfil y añade una notificación en vivo del estado de Tor con una acción de reinicio. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#rust-nostr-adds-nip-40-expiration-to-gift-wrap-and-private-dm-builders">rust-nostr&lt;/a> añade expiración NIP-40 a los builders de gift wrap y DM NIP-17, anclada al timestamp aleatorio del wrap. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#amethyst-spends-the-week-hardening-negentropy-sync-and-adding-nip-50-search">Amethyst&lt;/a> integra 43 PR de refuerzo de la sincronización negentropy, infraestructura de búsqueda de texto completo NIP-50 y kinds para sectores especializados. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#nostrord-v200-and-v210-fold-the-relay-pool-and-heal-zombie-websockets">Nostrord publica v2.0.0 y v2.1.0&lt;/a> con un pool de relays unificado, detección de WebSockets zombis y una separación completa de caché con disco primero. También llegan &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#ngit-v262-stops-duplicate-pr-status-events-on-default-branch-push">Ngit v2.6.2&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#jumble-v2671-makes-blossom-the-default-upload-service-in-a-dm-focused-cut">Jumble v26.7.1&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#applesauce-signers-622-drops-an-nbunksec-dependency">Applesauce signers 6.2.2&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#bray-v1330-cli-picks-up-a-bunker-profile-persona-and-tor-outbound">Bray v1.33.0&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#deepmarks-100-hardens-the-nostr-bookmarking-surface">Deepmarks 1.0.0&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#bitcredit-core-v0513-unencrypts-block-metadata-on-the-nostr-wire">Bitcredit Core v0.5.13&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#coop-mobile-v023-and-v024">Coop Mobile v0.2.4&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#granary-v110-adds-nip-71-video-event-support">Granary v11.0&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#nostr-relay-v00244-adds-a-firestore-backend">Nostr-relay v0.0.244&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#manent-v140-fixes-nip-42-auth-and-adds-media-clipboard-flows">Manent v1.4.0&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#routstrd-v037-makes-the-nostr-event-store-the-persistent-source-of-truth">Routstrd v0.3.7&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#nymchat-101-launches-as-a-progressive-web-app-on-nip-17">Nymchat 1.0.1&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#21meetup-110-launches-nostr-signed-attendance-badges">21Meetup 1.1.0&lt;/a>, mientras &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#safebox-publishes-a-phase-3-progress-report-and-a-freebsd-jail-runbook">SafeBox da la Fase 3 por prácticamente terminada&lt;/a>, junto con una guía de despliegue en una jail de FreeBSD y OpenETR, un spin-off para documentos electrónicos transferibles. El repositorio de NIPs integra una &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#merged-nip-51-and-nip-37-align-the-kind-10013-name">armonización del nombre entre NIP-51 y NIP-37&lt;/a> y abre cinco propuestas: &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#open-nip-ad-nostr-web-addresses-via-well-known-lookup">NIP-AD Nostr Web Addresses&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#open-nip-86-claim-management-for-invite-codes">gestión de claims de códigos de invitación en NIP-86&lt;/a>, un &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#open-role-color-as-h-s-l-tuple">formato de color HSL para roles&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#open-nip-80-hardware-attested-media-provenance">procedencia de medios acreditada por hardware en NIP-80&lt;/a> y una &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#open-nip-01-pagination-hardening">corrección de la paginación en NIP-01&lt;/a>. Los análisis en profundidad cubren &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#nip-deep-dive-nip-13-proof-of-work">NIP-13 (prueba de trabajo)&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#nip-deep-dive-nip-40-expiration-timestamp">NIP-40 (timestamp de expiración)&lt;/a>.&lt;/p></description><content:encoded>&lt;p>Bienvenidos de nuevo a Nostr Compass, vuestra guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> la &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#marmot-marks-the-spec-adopted-and-mdk-cuts-v09x">especificación de Marmot queda marcada como adoptada&lt;/a> en 42 archivos mientras MDK publica de v0.9.0 a v0.9.3 con avatares de grupo cifrados, soporte para firmantes externos y bindings de MarmotKit para iOS y Android. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#mostro-v0180-and-mobile-v130-ship-transport-v2-on-nip-44">Mostro lanza Transport v2&lt;/a> sobre mensajes directos NIP-44, con barreras antispam y una ventana de coexistencia tanto en mostrod v0.18.0 como en Mobile v1.3.0. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#bitchat-160-adds-nip-13-proof-of-work-and-an-opt-in-mesh-to-nostr-gateway">Bitchat 1.6.0 añade prueba de trabajo NIP-13&lt;/a> a los mensajes de canales geohash, un gateway opcional de malla a Nostr que permite a un solo teléfono conectado enlazar a toda una multitud, bundles de prekeys, verificación transitiva y grupos privados cifrados gestionados por su creador. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#amber-v623-scopes-profile-subscriptions-and-adds-a-tor-status-notification">Amber&lt;/a> limita las suscripciones de perfil por cuenta, obtiene las listas de relays NIP-65 antes que los metadatos del perfil y añade una notificación en vivo del estado de Tor con una acción de reinicio. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#rust-nostr-adds-nip-40-expiration-to-gift-wrap-and-private-dm-builders">rust-nostr&lt;/a> añade expiración NIP-40 a los builders de gift wrap y DM NIP-17, anclada al timestamp aleatorio del wrap. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#amethyst-spends-the-week-hardening-negentropy-sync-and-adding-nip-50-search">Amethyst&lt;/a> integra 43 PR de refuerzo de la sincronización negentropy, infraestructura de búsqueda de texto completo NIP-50 y kinds para sectores especializados. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#nostrord-v200-and-v210-fold-the-relay-pool-and-heal-zombie-websockets">Nostrord publica v2.0.0 y v2.1.0&lt;/a> con un pool de relays unificado, detección de WebSockets zombis y una separación completa de caché con disco primero. También llegan &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#ngit-v262-stops-duplicate-pr-status-events-on-default-branch-push">Ngit v2.6.2&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#jumble-v2671-makes-blossom-the-default-upload-service-in-a-dm-focused-cut">Jumble v26.7.1&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#applesauce-signers-622-drops-an-nbunksec-dependency">Applesauce signers 6.2.2&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#bray-v1330-cli-picks-up-a-bunker-profile-persona-and-tor-outbound">Bray v1.33.0&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#deepmarks-100-hardens-the-nostr-bookmarking-surface">Deepmarks 1.0.0&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#bitcredit-core-v0513-unencrypts-block-metadata-on-the-nostr-wire">Bitcredit Core v0.5.13&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#coop-mobile-v023-and-v024">Coop Mobile v0.2.4&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#granary-v110-adds-nip-71-video-event-support">Granary v11.0&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#nostr-relay-v00244-adds-a-firestore-backend">Nostr-relay v0.0.244&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#manent-v140-fixes-nip-42-auth-and-adds-media-clipboard-flows">Manent v1.4.0&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#routstrd-v037-makes-the-nostr-event-store-the-persistent-source-of-truth">Routstrd v0.3.7&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#nymchat-101-launches-as-a-progressive-web-app-on-nip-17">Nymchat 1.0.1&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#21meetup-110-launches-nostr-signed-attendance-badges">21Meetup 1.1.0&lt;/a>, mientras &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#safebox-publishes-a-phase-3-progress-report-and-a-freebsd-jail-runbook">SafeBox da la Fase 3 por prácticamente terminada&lt;/a>, junto con una guía de despliegue en una jail de FreeBSD y OpenETR, un spin-off para documentos electrónicos transferibles. El repositorio de NIPs integra una &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#merged-nip-51-and-nip-37-align-the-kind-10013-name">armonización del nombre entre NIP-51 y NIP-37&lt;/a> y abre cinco propuestas: &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#open-nip-ad-nostr-web-addresses-via-well-known-lookup">NIP-AD Nostr Web Addresses&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#open-nip-86-claim-management-for-invite-codes">gestión de claims de códigos de invitación en NIP-86&lt;/a>, un &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#open-role-color-as-h-s-l-tuple">formato de color HSL para roles&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#open-nip-80-hardware-attested-media-provenance">procedencia de medios acreditada por hardware en NIP-80&lt;/a> y una &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#open-nip-01-pagination-hardening">corrección de la paginación en NIP-01&lt;/a>. Los análisis en profundidad cubren &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#nip-deep-dive-nip-13-proof-of-work">NIP-13 (prueba de trabajo)&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-08-newsletter/#nip-deep-dive-nip-40-expiration-timestamp">NIP-40 (timestamp de expiración)&lt;/a>.&lt;/p>
&lt;hr>
&lt;h2 id="historias-principales">Historias principales&lt;/h2>
&lt;h3 id="marmot-marca-la-especificación-como-adoptada-y-mdk-publica-v09x">Marmot marca la especificación como adoptada y MDK publica v0.9.x&lt;/h3>
&lt;p>El &lt;a href="https://github.com/marmot-protocol/marmot">repositorio del protocolo Marmot&lt;/a> integró la &lt;a href="https://github.com/marmot-protocol/marmot/pull/170">PR #170&lt;/a> el 3 de julio y cambió 42 archivos de &lt;code>Status: draft for internal review&lt;/code> (y &lt;code>experimental draft&lt;/code>) a &lt;code>Status: adopted&lt;/code>. El título del README dejó de presentar el repositorio como un trabajo en curso y pasó a ser &amp;ldquo;Marmot Protocol&amp;rdquo; como texto adoptado; los documentos de la era MIP se replantearon como la versión obsoleta del protocolo; y la sección &amp;ldquo;Review Status&amp;rdquo; (&amp;ldquo;This is not adopted spec text yet&amp;rdquo;) se convirtió en &amp;ldquo;Review Guidance&amp;rdquo; para editar la especificación vigente. La etiqueta &lt;code>v2&lt;/code> desaparece: expresiones de contraste con MIP como &amp;ldquo;new in v2&amp;rdquo; y &amp;ldquo;the v2 spec keeps&amp;rdquo; pasan a ser &amp;ldquo;this spec&amp;rdquo; y &amp;ldquo;under this spec&amp;rdquo;. Dos documentos conservan deliberadamente el estado de borrador: &lt;code>implementation-model.md&lt;/code> sigue siendo no normativo y el documento de la función multidispositivo continúa como borrador.&lt;/p>
&lt;p>El mismo repositorio incorporó la &lt;a href="https://github.com/marmot-protocol/marmot/pull/171">PR #171&lt;/a>, que alinea las invariantes de política de administración, membresía y cambios de rol. La comprobación transversal que impide que un Remove deje al grupo sin admin se expresa ahora como propiedad de cada epoch resultante, evaluada respecto al conjunto de admins del epoch anterior cuando un commit no incluye una actualización de la política. La regla de ramas candidatas de Convergence se endurece: &amp;ldquo;validates&amp;rdquo; significa la validez completa del commit, incluidas las comprobaciones transversales del epoch resultante, por lo que un commit que viola una invariante no puede crear una arista candidata en ninguna rama. Las notificaciones de estado derivadas de un commit sustituido DEBEN retirarse cuando la selección de rama lo reemplaza, cerrando en la especificación el fallo por el que un cambio de nombre perdedor aparecía como mensaje de sistema correcto. Una nueva sección &amp;ldquo;Realizing removal&amp;rdquo; de &lt;code>member-departure.md&lt;/code> define la entrada primaria (el commit canónico aceptado que elimina tu última leaf) y la alternativa para clientes que nunca aplicaron ese commit: la evidencia autenticada posterior a la expulsión produce ahora &lt;code>SelfEvicted&lt;/code>, conservando como inactiva la copia del grupo eliminado. Después, la &lt;a href="https://github.com/marmot-protocol/marmot/pull/236">PR #236&lt;/a> endureció la validación en el límite de wire: fija la vida aceptable de KeyPackage en 84 días más una hora de margen, añade una tabla de cardinalidad de tags Nostr para &lt;code>h&lt;/code> de grupo, &lt;code>p&lt;/code> de gift wrap, &lt;code>e&lt;/code> y &lt;code>relays&lt;/code> de welcome y tags de KeyPackage, y aclara que ids y metadatos de eventos Nostr no verificados no constituyen evidencia fiable de routing, replay ni telemetría.&lt;/p>
&lt;p>Más abajo en la cadena, el &lt;a href="https://github.com/marmot-protocol/mdk">workspace de MDK&lt;/a> publicó &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.9.0">v0.9.0&lt;/a> el 6 de julio con una actualización de versión de todo el workspace, seguida de &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.9.1">v0.9.1&lt;/a>, &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.9.2">v0.9.2&lt;/a> y &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.9.3">v0.9.3&lt;/a> durante los dos días siguientes. v0.9.0 rota entradas obsoletas del keyring al crear una nueva base SQLite e impone validar antes de mutar en toda la capa de almacenamiento. v0.9.1 encamina cada conexión saliente por un único punto de control de seguridad del host mediante la &lt;a href="https://github.com/marmot-protocol/mdk/pull/732">PR #732&lt;/a>, cerrando los fallos en los que distintos call sites alcanzaban la red con validaciones diferentes. v0.9.3 expone avatares de grupo cifrados en los bindings uniffi mediante &lt;code>download_group_image&lt;/code> e &lt;code>image_hash_hex&lt;/code> en la &lt;a href="https://github.com/marmot-protocol/mdk/pull/771">PR #771&lt;/a>, añade soporte para firmantes externos y declara &lt;code>wn-opencode&lt;/code> listo para producción mediante la &lt;a href="https://github.com/marmot-protocol/mdk/pull/781">PR #781&lt;/a>. Junto a estas versiones, MarmotKit publica bindings de iOS y Android para cada versión: MarmotKit.xcframework y bindings Swift en iOS, y bindings Kotlin con bibliotecas JNI en Android, generados a partir de un hash de commit fijo de MDK. Un nuevo canal de versiones de wn-agent ofrece instaladores de shell que fijan WN Agent a un tag inmutable para que las apps obtengan el agente actual con un solo comando &lt;code>curl&lt;/code>.&lt;/p>
&lt;h3 id="mostro-v0180-y-mobile-v130-lanzan-transport-v2-sobre-nip-44">Mostro v0.18.0 y Mobile v1.3.0 lanzan Transport v2 sobre NIP-44&lt;/h3>
&lt;p>Mostro es el protocolo de compraventa peer-to-peer de Bitcoin que ejecuta libros de órdenes, escrow y resolución de disputas sobre eventos Nostr, coordinado por un daemon (&lt;code>mostrod&lt;/code>) con el que los clientes se comunican mediante DM cifrados. Hasta esta semana, el protocolo wire entre clientes y mostrod era Transport v1. &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.18.0">Mostro v0.18.0&lt;/a> incorpora Transport v2 sobre mensajes directos &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>, con barreras antispam y recepción dual en el servidor. La &lt;a href="https://github.com/MostroP2P/mostro/pull/776">PR #776&lt;/a> contiene el cambio wire de la Fase 1; la &lt;a href="https://github.com/MostroP2P/mostro/pull/780">PR #780&lt;/a> añade las barreras antispam de la Fase 2; y la &lt;a href="https://github.com/MostroP2P/mostro/pull/785">PR #785&lt;/a> hace que la versión interna siga al transporte activo, permitiendo que clientes v2 y v1 coexistan durante la migración. La &lt;a href="https://github.com/MostroP2P/mostro/pull/782">PR #782&lt;/a> corrige además un tag informativo NIP-33 al renombrar &lt;code>protocol_versions&lt;/code> como &lt;code>protocol_version&lt;/code>. La versión incorpora también una ruta unificada de cotización en vivo de Fase 4 con caché y control de antigüedad (&lt;a href="https://github.com/MostroP2P/mostro/pull/783">PR #783&lt;/a>), y El Toque como proveedor de cruces fiat para los pares cubanos CUP y MLC (&lt;a href="https://github.com/MostroP2P/mostro/pull/778">PR #778&lt;/a>). La &lt;a href="https://github.com/MostroP2P/mostro/pull/779">PR #779&lt;/a> notifica a la parte penalizada cuando una disputa le quita la fianza; antes el usuario solo veía que faltaba saldo.&lt;/p>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.3.0">Mostro Mobile v1.3.0&lt;/a> es la mitad cliente de la migración. La &lt;a href="https://github.com/MostroP2P/mobile/pull/613">PR #613&lt;/a> migra la app a Riverpod 3.x; la Fase A (&lt;a href="https://github.com/MostroP2P/mobile/pull/620">PR #620&lt;/a>) añade recepción dual de mensajes NIP-44 en el isolate principal y en segundo plano; la Fase B de la &lt;a href="https://github.com/MostroP2P/mobile/pull/624">PR #624&lt;/a> añade envío dual; la &lt;a href="https://github.com/MostroP2P/mobile/pull/632">PR #632&lt;/a> lo vuelve a aplicar tras el cambio a Riverpod 3.x; y la Fase C de la &lt;a href="https://github.com/MostroP2P/mobile/pull/637">PR #637&lt;/a> finaliza la migración. La versión amplía también los métodos de pago africanos: la &lt;a href="https://github.com/MostroP2P/mobile/pull/625">PR #625&lt;/a> añade la kwacha malauí y la &lt;a href="https://github.com/MostroP2P/mobile/pull/627">PR #627&lt;/a> incorpora KES, MZN, TZS, UGX, ZAR y ZMW, además de ampliar NGN. El flujo de restauración espera ahora a que el nodo tenga conectividad, y el tratamiento según la causa distingue entre pérdida de fianza por disputa y por timeout.&lt;/p>
&lt;h3 id="bitchat-160-añade-prueba-de-trabajo-nip-13-y-un-gateway-opcional-de-malla-a-nostr">Bitchat 1.6.0 añade prueba de trabajo NIP-13 y un gateway opcional de malla a Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/permissionlesstech/bitchat/releases/tag/v1.6.0">Bitchat 1.6.0&lt;/a> es la app de chat en malla Bluetooth que usa Nostr para sus canales geohash y la entrega de DM. La &lt;a href="https://github.com/permissionlesstech/bitchat/pull/1382">PR #1382&lt;/a> añade &lt;a href="https://nostrcompass.org/es/topics/nip-13/">NIP-13 (prueba de trabajo)&lt;/a> a los mensajes salientes de canales geohash, eventos efímeros kind 20000: cada envío mina un tag &lt;code>[&amp;quot;nonce&amp;quot;, &amp;quot;&amp;lt;value&amp;gt;&amp;quot;, &amp;quot;&amp;lt;target&amp;gt;&amp;quot;]&lt;/code> antes de publicar, con un objetivo de 8 bits cero iniciales. Eso supone una media de 256 hashes y tarda menos de un milisegundo en un Mac serie M. Los eventos entrantes con PoW validada relajan el límite por remitente, de modo que el spammer paga cómputo por mensaje sin que un remitente normal perciba el coste. El alcance es deliberadamente estrecho: solo los mensajes kind 20000 minan PoW; los heartbeats de presencia kind 20001, las notas de ubicación kind 1 y los DM no cambian.&lt;/p>
&lt;p>La &lt;a href="https://github.com/permissionlesstech/bitchat/pull/1384">PR #1384&lt;/a> añade el modo gateway, un enlace ascendente opcional de la malla a Nostr para canales geohash. Cuando un usuario solo en malla, sin internet ni relay accesible, envía un mensaje y otro peer anuncia la capacidad &lt;code>.gateway&lt;/code>, el evento kind 20000 firmado se envuelve en un nuevo sobre TLV &lt;code>MessageType.nostrCarrier = 0x28&lt;/code> y se dirige a un gateway. Ese peer publica el evento en Nostr por cuenta del remitente y retransmite a la malla el tráfico entrante con el TTL predeterminado. El uplink usa la ruta del sobre courier, dirigida y retransmitida en varios saltos; el downlink usa broadcast. El evento se firma antes de salir del remitente, por lo que el gateway decide si publicarlo pero no puede falsificar la atribución. La motivación son desastres y protestas donde basta un teléfono conectado para dar a toda la multitud un uplink Nostr operativo.&lt;/p>
&lt;p>La misma versión incorpora otro bloque de trabajo relacionado. La &lt;a href="https://github.com/permissionlesstech/bitchat/pull/1381">PR #1381&lt;/a> añade bundles de prekeys para un primer contacto asíncrono con forward secrecy mediante courier mail: se puede escribir a un peer offline y entregar el mensaje a la malla sin un handshake Noise en vivo. La &lt;a href="https://github.com/permissionlesstech/bitchat/pull/1380">PR #1380&lt;/a> añade verificación transitiva: alguien que ha completado el handshake Noise con un contacto ya verificado queda avalado sobre esa sesión, propagando la confianza un salto cada vez. La &lt;a href="https://github.com/permissionlesstech/bitchat/pull/1383">PR #1383&lt;/a> añade grupos privados cifrados gestionados por su creador; la &lt;a href="https://github.com/permissionlesstech/bitchat/pull/1376">PR #1376&lt;/a> detecta, muestra y canjea tokens ecash Cashu con &lt;code>/pay&lt;/code>; y la &lt;a href="https://github.com/permissionlesstech/bitchat/pull/1379">PR #1379&lt;/a> añade un tablón geohash persistente y firmado sobre la sincronización de malla. La &lt;a href="https://github.com/permissionlesstech/bitchat/pull/1372">PR #1372&lt;/a> amplía store-and-forward con couriers abiertos, routing spray-and-wait, outbox persistente y seis horas de historial público. Bitchat 1.5.4 se publicó &lt;a href="https://github.com/permissionlesstech/bitchat/releases/tag/v1.5.4">al principio de la semana&lt;/a> con la corrección integral de favoritos de la &lt;a href="https://github.com/permissionlesstech/bitchat/pull/1367">PR #1367&lt;/a>, que limpia duplicados en la lista de peers, la sincronización Nostr y la corrupción de claves &lt;code>/fav&lt;/code>.&lt;/p>
&lt;hr>
&lt;h2 id="versiones-etiquetadas">Versiones etiquetadas&lt;/h2>
&lt;h3 id="amber-v623-limita-las-suscripciones-de-perfil-y-añade-una-notificación-del-estado-de-tor">Amber v6.2.3 limita las suscripciones de perfil y añade una notificación del estado de Tor&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.2.3">Amber v6.2.3&lt;/a> mejora rendimiento y corrección en el firmante Android &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>. Añade un intervalo configurable para obtener perfiles, con opciones nunca y siempre (&lt;a href="https://github.com/greenart7c3/Amber/pull/492">PR #492&lt;/a>); muestra la foto en el selector de cuenta; y limita las suscripciones de perfil a la cuenta actual, evitando que un firmante multicuentas mantenga suscripciones para cuentas inactivas. El parser de permisos bunker trata explícitamente los errores. Corrige además varias infracciones de StrictMode: DiskReadViolation en el log &lt;code>onSuccess&lt;/code> de Coil, acceso al keystore al cargar la cuenta en el hilo principal, lecturas del nombre y foto de la cuenta y construcción anticipada de &lt;code>KeyPair()&lt;/code> en login y registro. Tras v6.2.3, la &lt;a href="https://github.com/greenart7c3/Amber/pull/493">PR #493&lt;/a> reordenó el arranque para obtener la lista de relays &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> antes de los metadatos del perfil; la &lt;a href="https://github.com/greenart7c3/Amber/pull/494">PR #494&lt;/a> convirtió la notificación de Tor en un indicador vivo con reinicio; y la &lt;a href="https://github.com/greenart7c3/Amber/pull/495">PR #495&lt;/a> activó Android Lint con warnings como errores en todo el código.&lt;/p>
&lt;h3 id="jumble-v2671-convierte-blossom-en-el-servicio-de-subida-predeterminado-en-una-versión-centrada-en-dm">Jumble v26.7.1 convierte Blossom en el servicio de subida predeterminado en una versión centrada en DM&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble/releases/tag/v26.7.1">Jumble v26.7.1&lt;/a> es una versión del cliente web centrada en mensajes directos y medios. Rediseña los ajustes de subida y establece &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> como servicio predeterminado en lugar de NIP-96. Los DM reciben menú móvil, mejores acciones en escritorio, botón para ir al último mensaje, reacciones por pulsación larga y reintento de envíos fallidos. También mejora el editor de emojis personalizados, el tamaño de burbujas para facturas y contenido incrustado, el orden y scroll de DM, la inserción de emojis, la copia de texto y el arrastre de archivos. Corrige la orientación de imágenes al eliminar metadatos y añade descargas Linux ARM64.&lt;/p>
&lt;h3 id="applesauce-signers-622-elimina-una-dependencia-de-nbunksec">Applesauce signers 6.2.2 elimina una dependencia de nbunksec&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-signers%406.2.2">applesauce-signers@6.2.2&lt;/a> sustituye la dependencia &lt;code>@sandwichfarm/encoded-entities&lt;/code> por un helper integrado de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">nbunksec&lt;/a> mediante el &lt;a href="https://github.com/hzrd149/applesauce/commit/d654349">commit d654349&lt;/a>. La codificación de sesiones bunker &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> ya no necesita la biblioteca externa, reduciendo una superficie de supply chain para clientes que consumen el paquete.&lt;/p>
&lt;h3 id="ngit-v262-evita-eventos-de-estado-de-pr-duplicados-al-hacer-push-a-la-rama-predeterminada">Ngit v2.6.2 evita eventos de estado de PR duplicados al hacer push a la rama predeterminada&lt;/h3>
&lt;p>&lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.6.2">Ngit v2.6.2&lt;/a> corrige el CLI git-over-Nostr. &lt;code>git push&lt;/code> a la rama predeterminada deja de publicar estados duplicados de merge/applied para PR ya aplicadas, porque la detección consulta ahora el estado Nostr del repositorio anterior al push, fuente de verdad en el lado &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a>. El heurístico previo dependía de internals de git. Los repositorios activos dejan así de emitir eventos kind 1621 duplicados.&lt;/p>
&lt;h3 id="el-cli-bray-v1330-incorpora-perfil-bunker-persona-y-salida-por-tor">El CLI Bray v1.33.0 incorpora perfil bunker, persona y salida por Tor&lt;/h3>
&lt;p>&lt;a href="https://github.com/forgesworn/bray/releases/tag/v1.33.0">Bray v1.33.0&lt;/a> añade a &lt;code>bunker --profile &amp;lt;name&amp;gt;&lt;/code> una clave de conexión estable automática y fallback de relay; &lt;code>bunker --persona &amp;lt;name&amp;gt;&lt;/code> firma como una identidad derivada de un árbol nsec; y todas las peticiones HTTP pueden pasar por un proxy SOCKS de Tor. La versión suma subcomandos de wallet para NWC &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a>, operaciones de administración de grupos &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a>, verbos NIP-86 y helpers de outbox &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a>. Los verbos de publicación incorporan &lt;code>--jsonl&lt;/code>, &lt;code>--csv&lt;/code>, &lt;code>--tsv&lt;/code>, &lt;code>req&lt;/code>, &lt;code>event&lt;/code>, &lt;code>publish-raw&lt;/code>, &lt;code>bunker sign&lt;/code> y &lt;code>--relay&lt;/code> por comando. El trabajo de seguridad cubre zeroisation de secretos, bearer auth y rate limits HTTP, y validación SSRF de URLs de relays. El tarball npm ocupa 533.844 bytes y su build reproducible idéntico se verificó en dos runners CI independientes.&lt;/p>
&lt;h3 id="deepmarks-100-endurece-la-superficie-de-marcadores-nostr">Deepmarks 1.0.0 endurece la superficie de marcadores Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/ostermayer/deepmarks-public/releases/tag/v1.0.0">Deepmarks 1.0.0&lt;/a> es un hito de seguridad para un servicio público de marcadores Nostr, donde cada marcador sigue siendo un evento firmado. La API y el worker pueden alcanzar Redis interno, el relay del bunker y metadatos cloud, por lo que la defensa SSRF es crítica. La versión corrige un bypass con literales IPv6 en &lt;code>isPrivateIp&lt;/code>: &lt;code>[::1]&lt;/code>, &lt;code>[fd00::1]&lt;/code> y &lt;code>[::ffff:10.0.0.4]&lt;/code> se clasificaban como públicos. Ahora elimina corchetes y reduce IPv6 compatible o mapeado a IPv4 antes de comprobar rangos privados. Los perfiles &lt;code>kind:0&lt;/code> externos se verifican en el sink para impedir que un relay hostil falsifique &lt;code>nip05&lt;/code> o &lt;code>lud16&lt;/code>; las URLs se validan por esquema en cada render para bloquear tags &lt;code>d&lt;/code> &lt;code>javascript:&lt;/code> o &lt;code>data:&lt;/code> en marcadores &lt;code>kind:39701&lt;/code>. Los recibos de zap sobreviven a una caída temporal del bunker: el handler reclama el zap pendiente atómicamente, finaliza tras firmar y libera el claim si falla. El drenaje de &lt;code>/publish&lt;/code> usa &lt;code>BLMOVE&lt;/code> hacia una lista por worker con recuperación condicionada por heartbeat, preservando eventos firmados aunque el worker caiga tras responder 202.&lt;/p>
&lt;h3 id="bitcredit-core-v0513-deja-sin-cifrar-los-metadatos-de-bloque-en-el-wire-de-nostr">Bitcredit Core v0.5.13 deja sin cifrar los metadatos de bloque en el wire de Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/releases/tag/v0.5.13">Bitcredit Core v0.5.13&lt;/a> elimina una capa de cifrado de los eventos públicos del protocolo de letras de crédito. Los metadatos de bloque (id, hash y firma) quedan sin cifrar; solo los datos del bloque siguen cifrados con la clave de la letra. Las apps nuevas procesan cadenas antiguas, pero las antiguas no procesan cadenas nuevas. Añade una función para obtener la cadena y publicación con umbral optimista: al aceptar un relay, por defecto, los demás reciben el evento asíncronamente, sin bloquear por el más lento.&lt;/p>
&lt;h3 id="coop-mobile-v023-y-v024">Coop Mobile v0.2.3 y v0.2.4&lt;/h3>
&lt;p>&lt;a href="https://git.reya.su/reya/coop-mobile">Coop Mobile&lt;/a> publicó &lt;a href="https://git.reya.su/reya/coop-mobile/releases/tag/v0.2.3">v0.2.3&lt;/a> el 4 de julio y &lt;a href="https://git.reya.su/reya/coop-mobile/releases/tag/v0.2.4">v0.2.4&lt;/a> el 7. El cliente Android de DM &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> añade imágenes y enlaces inline, adjuntos, dictado y confirmación al eliminar contactos. v0.2.4 corrige un indicador bloqueado, mejora el handshake Nostr Connect y añade importación &lt;code>ncryptsec1&lt;/code>, el formato de clave privada cifrada &lt;a href="https://nostrcompass.org/es/topics/nip-49/">NIP-49&lt;/a>, con una pantalla de importación rediseñada.&lt;/p>
&lt;h3 id="granary-v110-añade-soporte-para-eventos-de-vídeo-nip-71">Granary v11.0 añade soporte para eventos de vídeo NIP-71&lt;/h3>
&lt;p>&lt;a href="https://github.com/snarfed/granary/releases/tag/v11.0">Granary v11.0&lt;/a> es la biblioteca de conversión multiprotocolo que impulsa Bridgy Fed. Los eventos de vídeo &lt;a href="https://nostrcompass.org/es/topics/nip-71/">NIP-71&lt;/a> (kinds 21, 22, 34235 y 34236) se convierten ahora en notas ActivityStreams 1 con adjuntos; extrae &lt;code>imeta&lt;/code>, duración, &lt;code>published_at&lt;/code> y &lt;code>alt&lt;/code> como &lt;code>displayName&lt;/code> alternativo. En la API, &lt;code>sign&lt;/code> pasa a llamarse &lt;code>hash_and_sign&lt;/code>; &lt;code>verify&lt;/code> y el constructor &lt;code>Nostr&lt;/code> lanzan &lt;code>ValueError&lt;/code> al fallar; y &lt;code>Nostr.query&lt;/code> omite correctamente el desafío AUTH &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> sin &lt;code>privkey&lt;/code>. Otra corrección evita fallos cuando un objeto Nostr &lt;code>article&lt;/code> carece de &lt;code>id&lt;/code>.&lt;/p>
&lt;h3 id="nostr-relay-v00244-añade-un-backend-firestore">Nostr-relay v0.0.244 añade un backend Firestore&lt;/h3>
&lt;p>&lt;a href="https://github.com/mattn/nostr-relay/releases/tag/v0.0.244">mattn/nostr-relay v0.0.244&lt;/a> añade Firestore mediante la &lt;a href="https://github.com/mattn/nostr-relay/pull/12">PR #12&lt;/a>, ofreciendo a operadores del relay una base serverless gestionada de Google Cloud junto a los backends existentes.&lt;/p>
&lt;h3 id="manent-v140-corrige-auth-nip-42-y-añade-flujos-de-portapapeles-multimedia">Manent v1.4.0 corrige AUTH NIP-42 y añade flujos de portapapeles multimedia&lt;/h3>
&lt;p>&lt;a href="https://github.com/dtonon/manent/releases/tag/v1.4.0">Manent v1.4.0&lt;/a> es una app de notas y archivos cifrados sobre Nostr con cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>, firmantes &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>, routing outbox &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> y Blossom. Corrige AUTH &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a>, subidas Blossom a hosts &lt;code>http://&lt;/code> y el flujo de compresión. Ahora permite copiar y pegar imágenes, arrastrar archivos, recortar y girar imágenes, reproducir vídeos y gifs y grabar vídeo con una pulsación larga. En Linux, el portapapeles primario funciona con clic central. También optimiza carga y scroll.&lt;/p>
&lt;h3 id="routstrd-v037-convierte-el-almacén-de-eventos-nostr-en-la-fuente-de-verdad-persistente">Routstrd v0.3.7 convierte el almacén de eventos Nostr en la fuente de verdad persistente&lt;/h3>
&lt;p>&lt;a href="https://github.com/routstr/routstrd/releases/tag/v0.3.7">Routstrd v0.3.7&lt;/a> es el daemon local de la red descentralizada de inferencia de IA Routstr, que descubre proveedores con kind 38421 y reseñas LGTM con kind 38425. &lt;code>routstrd update&lt;/code> descarga binarios de routstrd y cocod y reinicia limpiamente los daemons. &lt;code>refreshNostrEvents()&lt;/code> se ejecuta al arrancar y cada 21 minutos. &lt;code>@routstr/sdk&lt;/code> pasa de 0.3.12 a 0.3.15, elimina ProviderRegistry en favor de &lt;code>DiscoveryAdapter&lt;/code>, limpia modelos de proveedores desaparecidos y trata el almacén de eventos como fuente persistente, eliminando el TTL erróneo de 210 minutos. En reembolsos Xcashu prueba primero los tokens de devolución, reintenta los 404 tres veces cada dos minutos y trata 425 Too Early sin lanzar error.&lt;/p>
&lt;h3 id="nymchat-101-se-lanza-como-progressive-web-app-sobre-nip-17">Nymchat 1.0.1 se lanza como Progressive Web App sobre NIP-17&lt;/h3>
&lt;p>&lt;a href="https://github.com/Spl0itable/NYM">Nymchat 1.0.1&lt;/a>, también NYM o Nostr Ynstant Messenger, es una PWA y app iOS/Android para chat efímero sobre Nostr conectada con Bitchat. Usa kind 20000 en canales geohash, kind 23333 en canales con nombre y gift wraps &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> kind 1059 para privados y grupos, con claves efímeras rotatorias y recuperación post-compromiso. Permite identidad efímera por sesión o persistente mediante extensiones &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a>, firmante remoto &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> o nsec. El cifrado local opcional usa contraseña, PIN, passkey o biometría mediante WebAuthn PRF o PBKDF2, sin escribir la clave en claro. Las llamadas usan gift wraps para señalización y WebRTC para medios. Las reacciones usan &lt;a href="https://github.com/nostr-protocol/nips/blob/master/25.md">NIP-25&lt;/a>, los emojis &lt;a href="https://nostrcompass.org/es/topics/nip-30/">NIP-30&lt;/a>, y Cloudflare Pages Functions actúa como proxy de privacidad.&lt;/p>
&lt;h3 id="21meetup-110-lanza-insignias-de-asistencia-firmadas-con-nostr">21Meetup 1.1.0 lanza insignias de asistencia firmadas con Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/louisthecat86/Einundzwanzig-Meetup-App">21Meetup 1.1.0&lt;/a> es una app Flutter para la comunidad alemana Einundzwanzig que registra asistencia con NFC y QR rotatorios. Cada insignia es un evento Nostr kind 21000 firmado por el organizador con Schnorr BIP-340. El QR cambia cada 10 segundos y el NFC exige proximidad, impidiendo acuñación remota. Una puntuación de confianza se calcula localmente y puede mostrarse como QR en intercambios peer-to-peer. Se orienta a reputación en comunidades Bitcoin, pero cualquier lector puede verificar los eventos.&lt;/p>
&lt;h3 id="nostrord-v200-y-v210-unifican-el-pool-de-relays-y-curan-websockets-zombis">Nostrord v2.0.0 y v2.1.0 unifican el pool de relays y curan WebSockets zombis&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrord/nostrord/releases/tag/v2.0.0">Nostrord v2.0.0&lt;/a> es una versión mayor del cliente KMP/WASM compatible con NIP-29, NIP-42, NIP-44, NIP-46, NIP-57, NIP-65 y NIP-98. &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v2.0.1">v2.0.1&lt;/a> llegó un día después mediante la &lt;a href="https://github.com/nostrord/nostrord/pull/166">PR #166&lt;/a>: los paquetes 2.0.0 fallaban al iniciar con &lt;code>NoClassDefFoundError: java/sql/DriverManager&lt;/code> porque la imagen jlink no incluía &lt;code>java.sql&lt;/code>, dependencia de SQLDelight. La corrección añade el módulo y encamina el envío optimista por la red en lugar de limitarse a cachearlo, además de mejorar teclado y scroll en web móvil.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostrord/nostrord/releases/tag/v2.1.0">v2.1.0&lt;/a> llegó el 7 de julio con la unificación del pool (&lt;a href="https://github.com/nostrord/nostrord/pull/176">PR #176&lt;/a>). El socket NIP-29 separado entra en el pool común; un scheduler reconecta todos los relays; AUTH &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> tiene reintentos acotados; la publicación falla de forma segura y reintenta cuando se exige auth; se cierran carreras de tormentas de peticiones; las listas kind 10009 se agrupan por relay; y &lt;code>mux_chat&lt;/code> cubre todos los grupos unidos y se recupera si un relay descarta la suscripción. La UI sustituye la fila &amp;ldquo;Sending&amp;hellip;&amp;rdquo; por iconos inline y ofrece Retry al atascarse el historial. La &lt;a href="https://github.com/nostrord/nostrord/pull/179">PR #179&lt;/a> detecta WebSockets zombis en Android: &lt;code>lastInboundAtMs&lt;/code> se actualiza con cada frame, &lt;code>markDead()&lt;/code> activa la ruta normal de reconexión y &lt;code>probeLiveness()&lt;/code> exige respuesta en cinco segundos. También impide escribir mensajes optimistas en caché persistente antes de confirmar la entrega. &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v2.1.1">v2.1.1&lt;/a> añadió actuals de iOS, tests nativos e iconos mediante la &lt;a href="https://github.com/nostrord/nostrord/pull/178">PR #178&lt;/a>.&lt;/p>
&lt;hr>
&lt;h2 id="cambios-aún-no-publicados">Cambios aún no publicados&lt;/h2>
&lt;h3 id="rust-nostr-añade-expiración-nip-40-a-builders-de-gift-wrap-y-dm-privados">rust-nostr añade expiración NIP-40 a builders de gift wrap y DM privados&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr/pull/1384">rust-nostr integró la PR #1384&lt;/a>, que añade una opción &lt;code>expiration&lt;/code> a &lt;code>GiftWrapBuilder&lt;/code> y &lt;code>PrivateDirectMessageBuilder&lt;/code>. La biblioteca recibe una &lt;code>Duration&lt;/code>: el tag &lt;a href="https://nostrcompass.org/es/topics/nip-40/">NIP-40&lt;/a> se ancla al &lt;code>created_at&lt;/code> aleatorio del gift wrap, desacoplándolo del envío real. Un timestamp absoluto filtraría la hora de envío al observador, por lo que la biblioteca construye el tag internamente. Va en el gift wrap, no en el seal kind 13, que &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> exige sin tags. NIP-17 transmite el mismo valor desde &lt;code>PrivateDirectMessageBuilder&lt;/code>. El cambio cierra el &lt;a href="https://github.com/rust-nostr/nostr/issues/1381">issue #1381&lt;/a> con el patrón de builder usado para &lt;code>extra_tags&lt;/code>. La &lt;a href="https://github.com/rust-nostr/nostr/pull/1387">PR #1387&lt;/a> integra además &lt;code>nostr-relay-builder&lt;/code> en &lt;code>nostr-sdk&lt;/code>.&lt;/p>
&lt;h3 id="amethyst-dedica-la-semana-a-reforzar-negentropy-y-añadir-búsqueda-nip-50">Amethyst dedica la semana a reforzar negentropy y añadir búsqueda NIP-50&lt;/h3>
&lt;p>La &lt;a href="https://github.com/vitorpamplona/amethyst">rama main de Amethyst&lt;/a> integró 43 PR en tres frentes. En sincronización negentropy entre geode y strfry, el fallo refused-window deja de provocar bucles de división y retrocede limpiamente (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3480">PR #3480&lt;/a>); &lt;code>negentropyKmp&lt;/code> pasa a v1.1.1 (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3475">PR #3475&lt;/a>); llega un benchmark de un millón de eventos con espejo de paridad strfry (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3478">PR #3478&lt;/a>); y benchmarks de producción entran en CI con más optimizaciones (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3458">PR #3458&lt;/a>, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3466">PR #3466&lt;/a>). Colecciones concurrentes lock-free sustituyen el mutex por relay y se corrige el threading UDP (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3459">PR #3459&lt;/a>).&lt;/p>
&lt;p>El segundo frente es la búsqueda de texto completo &lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a>. Una interfaz &lt;code>SearchableEvent&lt;/code> permite llevar metadatos de índice (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3452">PR #3452&lt;/a>); las extensiones NIP-50 se eliminan antes de consultar SQLite FTS para no pasar sintaxis del servidor al motor local (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3464">PR #3464&lt;/a>); y se centralizan los relays de búsqueda predeterminados (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3446">PR #3446&lt;/a>).&lt;/p>
&lt;p>El tercero integra sectores especializados: eventos Birdstar de detección de aves kind 2473 (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3473">PR #3473&lt;/a>) y estados de tarjetas de memoria PS1 como eventos firmados kind 38192 (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3482">PR #3482&lt;/a>). Completan la semana una firma personalizada automática (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3450">PR #3450&lt;/a>), notificaciones de escritorio rediseñadas (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3457">PR #3457&lt;/a>), bloqueo de privacidad en Messages (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3432">PR #3432&lt;/a>), escritura local en &lt;code>NostrServer.ingest&lt;/code> con omisión de verificación por envío (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3469">PR #3469&lt;/a>) y contratos &lt;code>equals&lt;/code>/&lt;code>hashCode&lt;/code> corregidos en OpenTimestamps (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3477">PR #3477&lt;/a>).&lt;/p>
&lt;h3 id="buzz-sigue-reforzando-el-relay-y-define-kind-44200-para-métricas-de-turnos-de-agentes">Buzz sigue reforzando el relay y define kind 44200 para métricas de turnos de agentes&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/buzz">Buzz&lt;/a>, antes Sprout, integró 123 PR entre el 1 y el 7 de julio. La &lt;a href="https://github.com/block/buzz/pull/1441">PR #1441&lt;/a> define métricas cifradas y duraderas NIP-AM de turnos de agentes como kind 44200, archivadas como eventos firmados en el relay del usuario. Le siguen un archivo local (&lt;a href="https://github.com/block/buzz/pull/1555">PR #1555&lt;/a>), eliminación atómica del kind (&lt;a href="https://github.com/block/buzz/pull/1562">PR #1562&lt;/a>) y el nombre del modelo en la emisión para distinguir cada turno (&lt;a href="https://github.com/block/buzz/pull/1564">PR #1564&lt;/a>).&lt;/p>
&lt;p>El segundo frente es el rendimiento del relay. Se aplaza el dispatch posterior al commit y se evita clonar para verificar (&lt;a href="https://github.com/block/buzz/pull/1453">PR #1453&lt;/a>); se agrupan round trips de ingest y fan-out, reduciendo p99 entre 7 y 16% y p999 entre 29 y 53% (&lt;a href="https://github.com/block/buzz/pull/1454">PR #1454&lt;/a>); las consultas multifiltro tienen concurrencia acotada (&lt;a href="https://github.com/block/buzz/pull/1457">PR #1457&lt;/a>); y los frames WebSocket salientes se agrupan (&lt;a href="https://github.com/block/buzz/pull/1464">PR #1464&lt;/a>). Los admins pueden configurar iconos por comunidad servidos mediante &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> (&lt;a href="https://github.com/block/buzz/pull/1463">PR #1463&lt;/a>); los propietarios borran mensajes de sus agentes con eventos kind 5 (&lt;a href="https://github.com/block/buzz/pull/1519">PR #1519&lt;/a>); OpenTelemetry acompaña a Prometheus (&lt;a href="https://github.com/block/buzz/pull/1398">PR #1398&lt;/a>); y el registro de nombres git pasa a Postgres (&lt;a href="https://github.com/block/buzz/pull/1432">PR #1432&lt;/a>).&lt;/p>
&lt;h3 id="divine-video-conecta-la-verificación-de-firmas-del-relay-y-extrae-nostrconnect">Divine Video conecta la verificación de firmas del relay y extrae NostrConnect&lt;/h3>
&lt;p>La &lt;a href="https://github.com/divinevideo/divine-mobile">app móvil de Divine Video&lt;/a> integró 97 PR. La &lt;a href="https://github.com/divinevideo/divine-mobile/pull/5774">PR #5774&lt;/a> verifica firmas de eventos entrantes; la &lt;a href="https://github.com/divinevideo/divine-mobile/pull/5828">PR #5828&lt;/a> cifra el token push FCM en el evento de baja kind 3080; y la &lt;a href="https://github.com/divinevideo/divine-mobile/pull/5831">PR #5831&lt;/a> fragmenta la REQ de borrado kind 5 para usuarios con mucho historial. La &lt;a href="https://github.com/divinevideo/divine-mobile/pull/5826">PR #5826&lt;/a> extrae &lt;code>NostrConnectCoordinator&lt;/code> para el flujo &lt;code>nostrconnect://&lt;/code>, limpiando la ruta del firmante remoto &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> y preparando la refactorización de auth del &lt;a href="https://github.com/divinevideo/divine-mobile/issues/4741">issue #4741&lt;/a>. La &lt;a href="https://github.com/divinevideo/divine-mobile/pull/5709">PR #5709&lt;/a> mapea reposts kind 16 cuando falta &lt;code>notification_type&lt;/code>.&lt;/p>
&lt;h3 id="zap-cooking-corrige-el-login-bunker-nip-46-y-añade-búsqueda-de-recetas-nip-50">Zap Cooking corrige el login bunker NIP-46 y añade búsqueda de recetas NIP-50&lt;/h3>
&lt;p>El &lt;a href="https://github.com/zapcooking/frontend">frontend de Zap Cooking&lt;/a> integró 18 PR. La &lt;a href="https://github.com/zapcooking/frontend/pull/503">PR #503&lt;/a> corrige el login bunker con handshake explícito, tratamiento de authUrl y errores visibles. La &lt;a href="https://github.com/zapcooking/frontend/pull/495">PR #495&lt;/a> añade auth NIP-98 a subidas de imagen y texto para atribuirlas a una pubkey. La &lt;a href="https://github.com/zapcooking/frontend/pull/483">PR #483&lt;/a> incorpora búsqueda NIP-50 mediante el relay nostrarchives sin índice del cliente. También muestra notas citadas y medios directamente (&lt;a href="https://github.com/zapcooking/frontend/pull/491">PR #491&lt;/a>), añade previews y tamaños de hashtags (&lt;a href="https://github.com/zapcooking/frontend/pull/492">PR #492&lt;/a>), consultas de varias palabras (&lt;a href="https://github.com/zapcooking/frontend/pull/482">PR #482&lt;/a>) y tarjetas sociales generadas en servidor (&lt;a href="https://github.com/zapcooking/frontend/pull/494">PR #494&lt;/a>).&lt;/p>
&lt;h3 id="swift-nostr-client-v060-avanza-hacia-una-primera-versión-estable">swift-nostr-client v0.6.0 avanza hacia una primera versión estable&lt;/h3>
&lt;p>&lt;a href="https://github.com/yysskk/swift-nostr-client">yysskk/swift-nostr-client&lt;/a> publicó &lt;a href="https://github.com/yysskk/swift-nostr-client/releases/tag/0.6.0">v0.6.0&lt;/a> junto a 30 PR. La biblioteca se acerca a una API estable para clientes Swift que no enlazan MDK ni MarmotKit.&lt;/p>
&lt;h3 id="nostr-applet-protocol-naps-endurece-el-routing-y-fanout-de-nap-outbox">Nostr Applet Protocol (NAPS) endurece el routing y fanout de NAP-OUTBOX&lt;/h3>
&lt;p>NAPS tuvo una semana de limpieza, sobre todo en &lt;a href="https://github.com/napplet/naps/pull/32">NAP-OUTBOX&lt;/a>: menos routing controlado por el caller, menos detalles de relays filtrados y un resultado de evento compartido con hints y sidecars de recursos, enlazado con &lt;a href="https://github.com/napplet/naps/pull/80">NAP-RESOURCE&lt;/a>. Las reglas explícitas de fanout a outbox, inbox y relay reducen la ambigüedad y mejoran la interoperabilidad.&lt;/p>
&lt;h3 id="el-toolchain-de-napplet-refuerza-la-alineación-con-el-protocolo-y-lanza-su-cli">El toolchain de Napplet refuerza la alineación con el protocolo y lanza su CLI&lt;/h3>
&lt;p>Los paquetes Napplet pasan de un SDK útil a un toolchain más cohesionado: soporte de consultas &lt;a href="https://github.com/napplet/web/pull/104">NAP-COUNT&lt;/a>, ciclo de vida de &lt;a href="https://github.com/napplet/web/pull/112">OUTBOX&lt;/a> controlado por runtime y sidecars &lt;a href="https://github.com/napplet/web/pull/108">RelayEventResult&lt;/a>. También mejoran el registro CVM, envelopes de error DM, contexto de sesión MEDIA, contadores LISTS, resultados COMMON y el esquema htree: RESOURCE. El nuevo &lt;a href="https://github.com/napplet/web/pull/103">@napplet/cli&lt;/a> añade descubrimiento de configuración, planes de despliegue, firma, subidas Blossom y manifiestos. El &lt;a href="https://github.com/napplet/web/pull/127">prelude inyectable por el host&lt;/a> y la &lt;a href="https://github.com/napplet/web/pull/145">preparación para JSR&lt;/a> facilitan inyectar, publicar y verificar el stack.&lt;/p>
&lt;h3 id="primal-android-amplía-la-superficie-del-firmante-remoto">primal-android amplía la superficie del firmante remoto&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> integró 18 PR. La &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1075">PR #1075&lt;/a> implementa &lt;code>switch_relays&lt;/code> y &lt;code>logout&lt;/code> para el rol de firmante remoto NIP-46. La &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1083">PR #1083&lt;/a> añade migraciones locales tras la splash y la &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1080">PR #1080&lt;/a> precarga el feed de notas. El resto pule barras de Home, hints de Explore y perfiles.&lt;/p>
&lt;h3 id="wisp-añade-selector-multicuentas-y-tests-del-parser-de-blossom">Wisp añade selector multicuentas y tests del parser de Blossom&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> integró 9 PR. La &lt;a href="https://github.com/barrydeen/wisp/pull/604">PR #604&lt;/a> añade selector multicuentas con cancelación explícita. La &lt;a href="https://github.com/barrydeen/wisp/pull/613">PR #613&lt;/a> prueba &lt;code>Blossom.parseServerList&lt;/code> y endurece el parser de listas de servidores &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>. La &lt;a href="https://github.com/barrydeen/wisp/pull/574">PR #574&lt;/a> rehace la hoja de zap para iOS; la &lt;a href="https://github.com/barrydeen/wisp/pull/605">PR #605&lt;/a> convierte el historial en una hoja deslizable; la &lt;a href="https://github.com/barrydeen/wisp/pull/611">PR #611&lt;/a> reconoce hashtags Unicode; la &lt;a href="https://github.com/barrydeen/wisp/pull/609">PR #609&lt;/a> mantiene la paginación del feed y muestra galerías inline; y la &lt;a href="https://github.com/barrydeen/wisp/pull/603">PR #603&lt;/a> conserva líneas vacías antes de perfiles y hashtags inline.&lt;/p>
&lt;h3 id="tao-y-wired-elevan-la-señal-pow-a-21-bits-y-muestran-raíces-con-pow-reciente">TAO y Wired elevan la señal PoW a 21 bits y muestran raíces con PoW reciente&lt;/h3>
&lt;p>&lt;a href="https://github.com/smolgrrr/TAO">smolgrrr/TAO&lt;/a> y &lt;a href="https://github.com/smolgrrr/Wired">smolgrrr/Wired&lt;/a> integraron los mismos 13 PR. La &lt;a href="https://github.com/smolgrrr/TAO/pull/84">PR #84&lt;/a> eleva el objetivo de prueba de trabajo predeterminado a 21 bits cero iniciales; la &lt;a href="https://github.com/smolgrrr/TAO/pull/80">PR #80&lt;/a> muestra raíces del feed con PoW reciente para ordenar por trabajo NIP-13, no solo por antigüedad. La &lt;a href="https://github.com/smolgrrr/TAO/pull/75">PR #75&lt;/a> recupera el selector de emojis y la &lt;a href="https://github.com/smolgrrr/TAO/pull/65">PR #65&lt;/a> añade previews del primer frame. Es el segundo cliente de la semana que usa NIP-13 como filtro principal, junto con Bitchat.&lt;/p>
&lt;h3 id="keep-android-pule-la-ux-nip-46-e-incorpora-una-corrección-toctou">keep-android pule la UX NIP-46 e incorpora una corrección TOCTOU&lt;/h3>
&lt;p>&lt;a href="https://github.com/privkeyio/keep-android">privkeyio/keep-android&lt;/a> publicó &lt;a href="https://github.com/privkeyio/keep-android/releases/tag/v1.1.5">v1.1.5&lt;/a> con 13 PR y &lt;a href="https://github.com/privkeyio/keep-android/releases/tag/v1.1.6">v1.1.6&lt;/a> el 8 de julio, fijando keep core v0.5.0. Keep es una bóveda de identidad móvil, descrita como CustID en el &lt;a href="https://nostrcompass.org/en/newsletters/2026-07-01-newsletter/#custid-launches-as-a-mobile-identity-vault-with-nip-46-and-nfc-challenge-flow">número #29&lt;/a>. v1.1.5 pule el desafío &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>. v1.1.6 cierra una carrera TOCTOU en &lt;code>set_active_share&lt;/code>, muestra URL y método en la aprobación HTTP &lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98&lt;/a> y hace que el chequeo RNG devuelva error en vez de panic. Un test instrumentado cubre el kill switch NIP-55. Las funciones CLI v0.5.0 (desbloqueo threshold-OPRF, DKG por software y wallets HD FROST) aún no se exponen en Android.&lt;/p>
&lt;h3 id="heartwood-lanza-el-puente-de-firma-de-relay-a-serial">Heartwood lanza el puente de firma de relay a serial&lt;/h3>
&lt;p>&lt;a href="https://github.com/forgesworn/heartwood/releases/tag/v0.7.0">forgesworn/heartwood v0.7.0&lt;/a> entrega el puente relay-a-serial para el data plane HSM del firmante serial de Bray. La &lt;a href="https://github.com/forgesworn/heartwood/pull/11">PR #11&lt;/a> contiene el puente; la &lt;a href="https://github.com/forgesworn/heartwood/pull/13">PR #13&lt;/a> añade cobertura de frames y corrige el offset de &lt;code>read_frame&lt;/code>; y la &lt;a href="https://github.com/forgesworn/heartwood/pull/14">PR #14&lt;/a> extrae el codec a la crate compartida &lt;code>heartwood-frame&lt;/code>.&lt;/p>
&lt;h3 id="safebox-publica-un-informe-de-fase-3-y-una-guía-para-jail-de-freebsd">SafeBox publica un informe de Fase 3 y una guía para jail de FreeBSD&lt;/h3>
&lt;p>&lt;a href="https://github.com/trbouma/safebox">SafeBox&lt;/a> es una bóveda privada portátil sobre Nostr que combina Nostr Wallet Connect &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a>, nAuth, nembed y transferencia de registros mediada por relays mediante QR y NFC. Un &lt;a href="https://github.com/trbouma/safebox/blob/main/docs/PROGRESS-REPORT-2026-07.md">informe de julio de 2026&lt;/a> publicado el día 6 marca la Fase 3 como prácticamente terminada: 49 commits desde abril, hasta 1.136 en total, y cuatro compromisos de ingeniería mayormente cumplidos. El siguiente paso es un piloto acotado; un proveedor de telecomunicaciones bajo NDA estudia un piloto de historiales médicos.&lt;/p>
&lt;p>El trabajo concreto incluye colas para acciones NWC mutables que evitan carreras de proofs, protección de proofs tras melts Lightning fallidos, renovación proactiva de listeners NWC y callbacks LNURL con orígenes canónicos, JSON y CORS explícitos. El intercambio QR/NFC ganó un flujo unificado para modos presentados por receptor, remitente y entre dispositivos, con KEM y protección replay mediante Open Quantum Safe. El commit &lt;a href="https://github.com/trbouma/safebox/commit/6866dae">&lt;code>6866dae&lt;/code>&lt;/a> añade una &lt;a href="https://github.com/trbouma/safebox/blob/main/docs/devops/freebsd-jail-from-scratch.md">guía de jail FreeBSD y build de liboqs&lt;/a> y una &lt;a href="https://github.com/trbouma/safebox/blob/main/docs/devops/SAFEBOX-FREEBSD-APPLIANCE-SPEC.md">especificación de appliance FreeBSD&lt;/a>, con snapshots ZFS, aislamiento, servicios &lt;code>rc.d&lt;/code>, proxy inverso y rollback en FreeBSD/ARM.&lt;/p>
&lt;p>El informe anuncia además &lt;a href="https://github.com/trbouma/openetr">OpenETR&lt;/a>, un spin-off que aplica control criptográfico y registros portátiles a conocimientos de embarque, recibos de almacén, pagarés y certificados electrónicos transferibles. El repositorio sumó 7 commits el 7 de julio: &lt;a href="https://github.com/trbouma/openetr/commit/ea612a9">&lt;code>ea612a9&lt;/code>&lt;/a> separa attestation del registro; &lt;a href="https://github.com/trbouma/openetr/commit/ca153a3">&lt;code>ca153a3&lt;/code>&lt;/a> trata mandato frente a efecto; y &lt;a href="https://github.com/trbouma/openetr/commit/ba84b61">&lt;code>ba84b61&lt;/code>&lt;/a> compara formatos de credenciales verificables.&lt;/p>
&lt;hr>
&lt;h2 id="trabajo-de-protocolo-y-actualizaciones-de-nips">Trabajo de protocolo y actualizaciones de NIPs&lt;/h2>
&lt;h3 id="integrado-nip-51-y-nip-37-alinean-el-nombre-del-kind-10013">Integrado: NIP-51 y NIP-37 alinean el nombre del kind 10013&lt;/h3>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/pull/2404">PR #2404&lt;/a> corrige solo la prosa. En &lt;a href="https://nostrcompass.org/es/topics/nip-37/">NIP-37&lt;/a>, kind 10013 se llama &lt;code>Relay List for Private Content&lt;/code>; en &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a> bajo &lt;code>Draft relays&lt;/code> tenía otro nombre. NIP-51 adopta ahora el de NIP-37. No cambia el wire ni los tags, pero evita ocultar que ambas especificaciones describen el mismo kind.&lt;/p>
&lt;h3 id="abierto-nip-ad-nostr-web-addresses-mediante-consulta-well-known">Abierto: NIP-AD Nostr Web Addresses mediante consulta .well-known&lt;/h3>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/pull/2406">PR #2406&lt;/a> sucede a la cerrada #2393 con un borrador completo en &lt;a href="https://github.com/nostr-protocol/nips/blob/2f4b09335c54a993d483bc220195e3f4a33df1ec/AD.md">&lt;code>AD.md&lt;/code>&lt;/a>. NIP-AD define URLs web con contraparte Nostr opcional. Ante &lt;code>https://golf.com/players&lt;/code>, un cliente pide &lt;code>https://golf.com/.well-known/nostr.json?ad=/players&lt;/code>, que devuelve un objeto JSON que asigna rutas a pares &lt;code>{filter, relays}&lt;/code>. El filtro es NIP-01 y la lista indica qué relays consultar. Con &lt;code>&amp;quot;limit&amp;quot;: 1&lt;/code> resuelve a un evento; sin él, a una lista. Un navegador sigue mostrando HTML en la misma ruta canónica. Los casos de uso incluyen nombres de grupos &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> que resuelven a kind 39000, búsquedas nsite &lt;a href="https://nostrcompass.org/es/topics/nip-5a/">NIP-5A&lt;/a>, feeds con &lt;code>{&amp;quot;ids&amp;quot;: [...]}&lt;/code>, render nativo de URLs de eventos y blogs Nostr accesibles dentro y fuera del protocolo. El diseño permite que el resolver sea un archivo estático.&lt;/p>
&lt;h3 id="abierto-gestión-de-claims-nip-86-para-códigos-de-invitación">Abierto: gestión de claims NIP-86 para códigos de invitación&lt;/h3>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/pull/2408">PR #2408&lt;/a> propone tres métodos para &lt;a href="https://nostrcompass.org/es/topics/nip-86/">NIP-86&lt;/a>: &lt;code>listclaims&lt;/code> (params &lt;code>[]&lt;/code>, devuelve códigos &lt;a href="https://nostrcompass.org/es/topics/nip-43/">NIP-43&lt;/a>), &lt;code>createclaim&lt;/code> (params &lt;code>[claim]&lt;/code>, devuelve &lt;code>true&lt;/code>) y &lt;code>deleteclaim&lt;/code> (params &lt;code>[claim]&lt;/code>, devuelve &lt;code>true&lt;/code>). NIP-86 permite administrar usuarios y roles, pero no invitaciones. Un admin podría crear un código ligado a un rol, cobrar antes de crear la identidad, entregarlo y dejar que un bot escuche el evento claim kind 28935 para asignar automáticamente el rol. Todo el flujo quedaría dentro del RPC de gestión del relay.&lt;/p>
&lt;h3 id="abierto-color-de-rol-como-tupla-h-s-l">Abierto: color de rol como tupla (h, s, l)&lt;/h3>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/pull/2402">PR #2402&lt;/a> cambia el color de rol de &lt;a href="https://nostrcompass.org/es/topics/nip-43/">NIP-43&lt;/a> de un único &lt;code>hue&lt;/code> a una tupla &lt;code>hue&lt;/code>, &lt;code>saturation&lt;/code> y &lt;code>lightness&lt;/code>. Se admiten strings vacíos para que los clientes elijan valores coherentes; se recomienda indicar solo &lt;code>hue&lt;/code> salvo colores específicos. En NIP-86, &lt;code>createrole&lt;/code> y &lt;code>editrole&lt;/code> reciben ahora &lt;code>[id, label, description, [h, s, l], order]&lt;/code>. Con solo hue, distintos clientes escogían saturación y luminosidad diferentes y mostraban el mismo rol con intensidades distintas.&lt;/p>
&lt;h3 id="abierto-procedencia-multimedia-acreditada-por-hardware-en-nip-80">Abierto: procedencia multimedia acreditada por hardware en NIP-80&lt;/h3>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/pull/2409">PR #2409&lt;/a> abre NIP-80, un formato de procedencia anclado al hardware de captura. La cámara firma cada foto y publica la prueba identificada por el contenido, de modo que sobrevive a la eliminación de metadatos, el realojamiento y las retiradas. Define kind 1080 para attestations de captura; 1081 para derivaciones como resize, crop, recompresión o redacción; 1082 para revocaciones; 11080 para anuncios de dispositivos; 31080 para endorsements; y 31081 para conjuntos de dispositivos anónimos, experimental. Reutiliza tags &lt;code>x&lt;/code> NIP-94, &lt;code>imeta&lt;/code> &lt;a href="https://nostrcompass.org/es/topics/nip-92/">NIP-92&lt;/a>, descubrimiento &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a>, almacenamiento &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> y anclaje temporal opcional &lt;a href="https://github.com/nostr-protocol/nips/blob/master/03.md">NIP-03&lt;/a>. Empareja una clave BIP-340 con ECDSA de hardware porque los secure elements habituales aún no generan BIP-340. La attestation no prueba que la escena sea real, sino que esa imagen procede de ese dispositivo aproximadamente a esa hora y solo sufrió cambios declarados. La especificación prohíbe reducir el resultado a una insignia &amp;ldquo;auténtico&amp;rdquo;. El prototipo &lt;a href="https://github.com/PrarthanaPurohit/OpenVeilCam">OpenVeilCam&lt;/a>, runtime Rust para Raspberry Pi con ATECC608, se actualiza para publicar estos kinds y verificarlos.&lt;/p>
&lt;h3 id="abierto-endurecimiento-de-la-paginación-nip-01">Abierto: endurecimiento de la paginación NIP-01&lt;/h3>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/pull/2407">PR #2407&lt;/a> añade &amp;ldquo;Pagination &amp;amp; limits&amp;rdquo; a NIP-01. Un relay que imponga &lt;code>limit&lt;/code> máximo DEBE fijarlo por encima del mayor número de eventos con un mismo &lt;code>created_at&lt;/code>, evitando que un segundo llene la página. Los clientes que paginan hacia atrás DEBEN repetir con &lt;code>until = oldest&lt;/code>, inclusive, y deduplicar por &lt;code>id&lt;/code>; terminan cuando una ronda no aporta ids nuevos. Si toda la página comparte timestamp, DEBEN reintentar ese segundo con mayor &lt;code>limit&lt;/code>. Si el relay lo recorta y sigue devolviendo un único segundo, DEBEN avanzar con &lt;code>until = oldest - 1&lt;/code>, aceptando pérdidas, o abortar. La paginación normal NO DEBE indicar &lt;code>limit&lt;/code>; elevarlo para vaciar un segundo atascado es la excepción. Esto evita omitir o reprocesar eventos con timestamps duplicados.&lt;/p>
&lt;hr>
&lt;h2 id="análisis-en-profundidad-nip-13-prueba-de-trabajo">Análisis en profundidad: NIP-13 (prueba de trabajo)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-13/">NIP-13&lt;/a> define una prueba de trabajo para eventos Nostr. El spam es trivial en una red pública de relays: cualquiera genera un keypair e inunda un tema sin coste económico. NIP-13 permite imponer un coste computacional por evento que un spammer paga en conjunto, mientras un remitente normal lo paga una vez por mensaje. Relays y clientes pueden exigir o favorecer eventos con cierta dificultad.&lt;/p>
&lt;h3 id="el-mecanismo">El mecanismo&lt;/h3>
&lt;p>El autor elige una dificultad en bits y mina el id del evento, el hash sha256 del evento serializado, hasta obtener al menos ese número de bits cero iniciales. Como el id incluye &lt;code>created_at&lt;/code>, tags y contenido, hay que cambiar algo para recorrer el espacio de hashes. NIP-13 define el tag &lt;code>nonce&lt;/code>:&lt;/p>
&lt;pre tabindex="0">&lt;code>[&amp;#34;nonce&amp;#34;, &amp;#34;&amp;lt;nonce_value&amp;gt;&amp;#34;, &amp;#34;&amp;lt;target_bits&amp;gt;&amp;#34;]
&lt;/code>&lt;/pre>&lt;p>&lt;code>nonce_value&lt;/code> es cualquier string elegido por el minero; &lt;code>target_bits&lt;/code> es la dificultad comprometida. El verificador cuenta los bits cero iniciales del id y los compara con &lt;code>target_bits&lt;/code>. El tag formula una afirmación; el conteo real la confirma.&lt;/p>
&lt;p>La cantidad de bits cero de una salida sha256 aleatoria sigue una distribución geométrica: cada bit duplica el trabajo esperado. 8 bits promedian 256 hashes, 20 bits cerca de un millón y 28 bits unos 268 millones. El objetivo de 8 bits de Bitchat tarda menos de un milisegundo. Los 21 bits de TAO y Wired rondan dos millones de hashes por post, rápidos en un portátil pero caros para una granja de bots. NIP-13 no impone dificultad; cada relay y cliente decide.&lt;/p>
&lt;h3 id="evento-de-ejemplo">Evento de ejemplo&lt;/h3>
&lt;p>Una nota kind 1 mínima minada con NIP-13 es:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;000000000e9d97a1ab09fc381030b346cdd7a1a8a6f27c9c88f68c8b9d0f6c8a&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;82341f882b6eabcd2ba7f1ef90aad961cf074af15b9ef44a09f9d2a8fbfbe6a2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1720368000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;nonce&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;72847&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;28&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;hello, this cost me 28 bits of PoW&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;b1a5c9c74cff59f8a48e5c3b3d8e1c8e7e2c1d4a8e2b9f7d1c3e8b4f6a2c8d1e9f4b3c7a1d8e5b2f9c6a3d7e1b8f4c9a2d6e3b7f1c8a4d9e2b5f8c1a7d4e6b9f3c2&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El &lt;code>id&lt;/code> comienza por siete ceros hexadecimales, 28 bits, igual que &lt;code>target_bits&lt;/code>. El minero varió &lt;code>nonce_value&lt;/code> hasta cumplir el objetivo. El verificador hashea el evento serializado, confirma los bits y verifica la firma. NIP-13 no añade campos, sino el tag y la restricción sobre el id.&lt;/p>
&lt;h3 id="dónde-se-utiliza">Dónde se utiliza&lt;/h3>
&lt;p>Bitchat 1.5.4 usa PoW de 8 bits en mensajes geohash kind 20000: mina antes de publicar y relaja el rate limit para eventos entrantes válidos. TAO y Wired usan 21 bits como umbral y muestran raíces con PoW reciente para ordenar el timeline. &lt;a href="https://github.com/mattn/algia">cagliostr&lt;/a> lo exige en el relay. NoStrudel ofrece minado en cliente. Damus y Amethyst calculan los bits al mostrar eventos. Coracle permite minar y filtrar. NDK y nostr-tools ofrecen helpers a bibliotecas.&lt;/p>
&lt;p>La propiedad decisiva es que PoW no puede falsificarse: &lt;code>target_bits&lt;/code> solo prueba algo si el id tiene esos ceros, y falsificarlo exige repetir el trabajo. Por eso Bitchat puede relajar límites sin confiar en el remitente. PoW tampoco compromete al minero con una pubkey o contenido concretos; un spammer aún puede minar 8 bits, pero paga un coste real. NIP-13 convierte el problema de spam de &amp;ldquo;imposible&amp;rdquo; en &amp;ldquo;cuantificable&amp;rdquo; y deja que cada cliente fije su precio.&lt;/p>
&lt;hr>
&lt;h2 id="análisis-en-profundidad-nip-40-timestamp-de-expiración">Análisis en profundidad: NIP-40 (timestamp de expiración)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-40/">NIP-40&lt;/a> define un tag &lt;code>expiration&lt;/code> que indica a relays y clientes que un evento debe considerarse caducado tras un timestamp Unix. Los eventos Nostr son por lo demás permanentes: incluso un borrado NIP-09 puede no retirar el original. NIP-40 deja al autor declarar al publicar que el evento tendrá vida corta y pide a relays y clientes dejar de servirlo o mostrarlo.&lt;/p>
&lt;h3 id="el-mecanismo-1">El mecanismo&lt;/h3>
&lt;p>El autor añade un tag &lt;code>expiration&lt;/code>:&lt;/p>
&lt;pre tabindex="0">&lt;code>[&amp;#34;expiration&amp;#34;, &amp;#34;&amp;lt;unix_timestamp&amp;gt;&amp;#34;]
&lt;/code>&lt;/pre>&lt;p>El timestamp está en segundos Unix. Un relay PUEDE rechazar al ingerir eventos ya caducados, PUEDE dejar de servirlos y DEBERÍA respetar la expiración. Un cliente DEBERÍA ocultarlos. NIP-40 no obliga a borrar ni invalida la semántica de eventos protegidos NIP-70; es una indicación y un contrato blando.&lt;/p>
&lt;p>El tag vive en el propio evento o, en mensajería envuelta, en el wrap externo. El evento sigue firmado y quien lo tenga puede leerlo. NIP-40 coordina la expectativa de que deje de aparecer tras el plazo, útil para posts efímeros, anuncios temporales, notas de eventos en vivo y DM NIP-17 que no deberían permanecer.&lt;/p>
&lt;h3 id="interacción-con-gift-wrap">Interacción con gift wrap&lt;/h3>
&lt;p>La &lt;a href="https://github.com/rust-nostr/nostr/pull/1384">PR #1384&lt;/a> de rust-nostr muestra cómo interactúa NIP-40 con gift wrap &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a>. NIP-59 define dos capas: un seal kind 13 firmado por la clave real del remitente y un gift wrap kind 1059 firmado por una clave efímera. Ambas usan &lt;code>created_at&lt;/code> aleatorio hasta 48 horas anterior al envío real para ocultar el momento exacto. El seal debe tener tags vacíos.&lt;/p>
&lt;p>Por eso &lt;code>expiration&lt;/code> debe ir en el gift wrap, no en el seal, y anclarlo al envío real rompería la privacidad temporal: si el caller pasa un timestamp absoluto, un observador resta el TTL y recupera la hora real. rust-nostr recibe una &lt;code>Duration&lt;/code> y calcula &lt;code>expiration = wrap.created_at + duration&lt;/code> dentro de la biblioteca. Como &lt;code>created_at&lt;/code> ya está aleatorizado, la expiración hereda esa aleatoriedad.&lt;/p>
&lt;h3 id="evento-de-ejemplo-1">Evento de ejemplo&lt;/h3>
&lt;p>Un ejemplo mínimo NIP-40 en una nota kind 1:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;82341f882b6eabcd2ba7f1ef90aad961cf074af15b9ef44a09f9d2a8fbfbe6a2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1720368000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;expiration&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1720454400&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;this note expires in 24 hours&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;d2e5b8a1c4f7b0d3e6a9c2f5b8d1e4a7c0f3b6d9e2a5c8f1b4d7e0a3c6f9b2d5e8a1c4f7b0d3e6a9c2f5b8d1e4a7c0f3b6d9e2a5c8f1b4d7e0a3c6f9b2d5e8a1&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>created_at&lt;/code> es la publicación; el tag indica dejar de servir el evento 86.400 segundos después. Un relay compatible deja de devolverlo en REQs tras &lt;code>1720454400&lt;/code> y un cliente lo oculta.&lt;/p>
&lt;h3 id="dónde-se-utiliza-1">Dónde se utiliza&lt;/h3>
&lt;p>Los builders de rust-nostr (&lt;code>GiftWrapBuilder&lt;/code>, &lt;code>PrivateDirectMessageBuilder&lt;/code>) exponen expiración como &lt;code>Duration&lt;/code>. NDK ofrece un helper para notas y DM. nostr-tools incluye &lt;code>getExpiration&lt;/code> e &lt;code>isExpired&lt;/code>. strfry, nostr-rs-relay, khatru y otros relays respetan NIP-40 al procesar REQ. Damus, Amethyst, noStrudel, Coracle y Primal filtran eventos caducados. Clientes en vivo como zap.stream usan NIP-40 en chats kind 1311 para que no persistan tras el stream.&lt;/p>
&lt;p>NIP-40 encaja porque es opcional por evento y no exige despliegue coordinado. El autor puede añadirlo hoy; un relay que lo respeta mantiene un conjunto más limpio; uno que lo ignora no empeora; y un cliente compatible cumple la voluntad del autor. El cambio de rust-nostr recalca que la ubicación importa tanto como la presencia: en un gift wrap NIP-59, el tag va en la capa cuyo timestamp ya está aleatorizado y la API impide filtrar accidentalmente el momento real.&lt;/p>
&lt;hr>
&lt;p>Esto es todo por esta semana. ¿Estáis construyendo algo o tenéis noticias que compartir? Contactad por DM NIP-17 o encontradnos en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #29</title><link>https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/</guid><description>&lt;p>Bienvenidos de nuevo a Nostr Compass, vuestra guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#fips-v040-ships-nym-mixnet-transport-mdns-discovery-and-a-data-plane-overhaul">FIPS v0.4.0&lt;/a> incorpora transporte mediante la mixnet de Nym, descubrimiento mDNS opcional en la LAN, cambio de claves sin interrupciones pese a pérdidas y una renovación del plano de datos, todo compatible a nivel de wire con v0.3.0. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#whitenoise-linux-surfaces-as-a-desktop-marmot-client">Whitenoise Linux&lt;/a> aparece como cliente Marmot de escritorio en Rust y Slint, con una propuesta de protocolo para trasladar los efectos de mensaje a un event kind 9 específico. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#custid-launches-as-a-mobile-identity-vault-with-nip-46-and-nfc-challenge-flow">CustID v0.1.10-beta&lt;/a> se lanza como bóveda de identidad móvil respaldada por hardware que actúa como firmante remoto NIP-46 y responde por NFC a desafíos de acceso físico. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#myco-launches-peer-to-peer-nsite-sharing-over-the-fips-mesh">myco&lt;/a> estrena el intercambio entre pares de nsites sobre la malla FIPS, con un nuevo transporte BLE L2CAP en v0.1.0. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#nostr-codex-phone-launches-as-a-mobile-control-surface-for-a-local-codex-worker-over-nostr">Nostr Codex Phone&lt;/a> se lanza como superficie de control para Android de un asistente de programación Codex local mediante DMs cifrados de Nostr. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#amethyst-builds-nip-89-aware-ui-a-git-repositories-feed-and-a-napplet-browser-discover-section">La línea aún no publicada de Amethyst&lt;/a> añade análisis de handlers de aplicaciones NIP-89, un feed de repositorios Git para NIP-34 y una sección Discover para nSites y napplets. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#notedeck-implements-nip-37-private-sync-relays-nip-52-calendar-and-nip-22-comments">Notedeck&lt;/a> incorpora NIP-37, NIP-52 y NIP-22 en una semana. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#applesauce-ships-12-sub-packages-in-a-coordinated-62x-cut">Applesauce&lt;/a> publica 12 versiones coordinadas de subpaquetes con helpers nbunksec para NIP-46 y una actualización de cartera a Cashu-ts v4. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#meiso-v140-ships-shared-key-collaborative-lists-that-replace-mls-for-task-sharing">Meiso v1.4.0&lt;/a> incorpora listas colaborativas con clave compartida sobre el kind 35000 direccionable. El repositorio de NIPs fusionó cinco PRs, incluidos un event de roles de relay, la eliminación del límite de 65.535 bytes de NIP-44, la semántica de forks de NIP-34, los metadatos de cliente NIP-46 y un método &lt;code>signevent&lt;/code> de NIP-86. Los análisis detallados abordan &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#nip-deep-dive-nip-86-relay-management-api">NIP-86 (API de gestión de relays)&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#nip-deep-dive-nip-89-recommended-application-handlers">NIP-89 (handlers de aplicaciones recomendados)&lt;/a>.&lt;/p></description><content:encoded>&lt;p>Bienvenidos de nuevo a Nostr Compass, vuestra guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#fips-v040-ships-nym-mixnet-transport-mdns-discovery-and-a-data-plane-overhaul">FIPS v0.4.0&lt;/a> incorpora transporte mediante la mixnet de Nym, descubrimiento mDNS opcional en la LAN, cambio de claves sin interrupciones pese a pérdidas y una renovación del plano de datos, todo compatible a nivel de wire con v0.3.0. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#whitenoise-linux-surfaces-as-a-desktop-marmot-client">Whitenoise Linux&lt;/a> aparece como cliente Marmot de escritorio en Rust y Slint, con una propuesta de protocolo para trasladar los efectos de mensaje a un event kind 9 específico. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#custid-launches-as-a-mobile-identity-vault-with-nip-46-and-nfc-challenge-flow">CustID v0.1.10-beta&lt;/a> se lanza como bóveda de identidad móvil respaldada por hardware que actúa como firmante remoto NIP-46 y responde por NFC a desafíos de acceso físico. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#myco-launches-peer-to-peer-nsite-sharing-over-the-fips-mesh">myco&lt;/a> estrena el intercambio entre pares de nsites sobre la malla FIPS, con un nuevo transporte BLE L2CAP en v0.1.0. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#nostr-codex-phone-launches-as-a-mobile-control-surface-for-a-local-codex-worker-over-nostr">Nostr Codex Phone&lt;/a> se lanza como superficie de control para Android de un asistente de programación Codex local mediante DMs cifrados de Nostr. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#amethyst-builds-nip-89-aware-ui-a-git-repositories-feed-and-a-napplet-browser-discover-section">La línea aún no publicada de Amethyst&lt;/a> añade análisis de handlers de aplicaciones NIP-89, un feed de repositorios Git para NIP-34 y una sección Discover para nSites y napplets. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#notedeck-implements-nip-37-private-sync-relays-nip-52-calendar-and-nip-22-comments">Notedeck&lt;/a> incorpora NIP-37, NIP-52 y NIP-22 en una semana. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#applesauce-ships-12-sub-packages-in-a-coordinated-62x-cut">Applesauce&lt;/a> publica 12 versiones coordinadas de subpaquetes con helpers nbunksec para NIP-46 y una actualización de cartera a Cashu-ts v4. &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#meiso-v140-ships-shared-key-collaborative-lists-that-replace-mls-for-task-sharing">Meiso v1.4.0&lt;/a> incorpora listas colaborativas con clave compartida sobre el kind 35000 direccionable. El repositorio de NIPs fusionó cinco PRs, incluidos un event de roles de relay, la eliminación del límite de 65.535 bytes de NIP-44, la semántica de forks de NIP-34, los metadatos de cliente NIP-46 y un método &lt;code>signevent&lt;/code> de NIP-86. Los análisis detallados abordan &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#nip-deep-dive-nip-86-relay-management-api">NIP-86 (API de gestión de relays)&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-07-01-newsletter/#nip-deep-dive-nip-89-recommended-application-handlers">NIP-89 (handlers de aplicaciones recomendados)&lt;/a>.&lt;/p>
&lt;hr>
&lt;h2 id="historias-principales">Historias principales&lt;/h2>
&lt;h3 id="fips-v040-incorpora-transporte-por-la-mixnet-de-nym-descubrimiento-mdns-y-una-renovación-del-plano-de-datos">FIPS v0.4.0 incorpora transporte por la mixnet de Nym, descubrimiento mDNS y una renovación del plano de datos&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> es una red en malla privada, autoorganizada y entre pares para Nostr, donde los nodos se descubren y enrutan tráfico sin infraestructura central. &lt;a href="https://github.com/jmcorgan/fips/releases/tag/v0.4.0">FIPS v0.4.0&lt;/a> incorpora transporte mediante la mixnet de Nym, descubrimiento mDNS opcional en la LAN, una renovación del plano de datos, cambio de claves sin interrupciones pese a la pérdida de paquetes, una TUI &lt;code>fipstop&lt;/code> reescrita sobre un harness de snapshots de renderizado, un plano de observabilidad fuera de la ruta crítica, y nuevos objetivos de empaquetado apk para OpenWrt y flake para Nix. Todo mantiene compatibilidad a nivel de wire con v0.3.0, de modo que las mallas mixtas interoperan durante una actualización gradual. Dos nuevos transportes para el descubrimiento de peers vertebran la versión. Un nuevo &lt;a href="https://github.com/jmcorgan/fips/releases/tag/v0.4.0">transporte saliente por la mixnet de Nym&lt;/a> enruta el tráfico FIPS mediante un proxy SOCKS5 &lt;code>nym-socks5-client&lt;/code> y lo mezcla en la red de tráfico de cobertura de &lt;a href="https://nymtech.net/">Nym&lt;/a>, para impedir que observadores de nivel de enlace correlacionen qué peers de la malla se comunican. Un directorio &lt;code>examples/sidecar-nostr-mixnet-relay/&lt;/code> demuestra un relay Nostr accesible mediante un enlace FIPS conectado de extremo a extremo a través de la mixnet. El descubrimiento mDNS / DNS-SD opcional en la LAN permite que los nodos del mismo enlace local se encuentren sin configurar direcciones ni usar STUN; anuncian y adoptan peers mediante un registro de servicio estándar cuando &lt;code>node.discovery.lan.enabled: true&lt;/code>.&lt;/p>
&lt;p>El plano de datos se rediseñó para aumentar el rendimiento de un solo nodo. El cifrado y descifrado de cada peer se ejecutan ahora en tareas worker específicas fuera del bucle de recepción, por lo que un peer ocupado no puede serializar la criptografía de todo el nodo. La ruta de envío de Linux usa generic segmentation offload y un socket UDP conectado cuando están disponibles; la ruta crítica de recepción evita las copias de buffer que antes hacía por paquete; y macOS incorpora recepción por lotes con &lt;code>recvmsg_x&lt;/code>, equivalente al procesamiento por lotes con &lt;code>recvmmsg&lt;/code> de Linux introducido en v0.3.0. Toda la superficie de lectura &lt;code>show_*&lt;/code> de &lt;code>fipsctl&lt;/code> y &lt;code>fipstop&lt;/code> sirve ahora desde un snapshot por tick, publicado en un &lt;code>ArcSwap&lt;/code> sin locks desde la tarea de aceptación de control, así que las consultas de operadores responden con rapidez aunque el bucle de recepción del nodo esté ocupado. Una nueva consulta &lt;code>show_metrics&lt;/code> limitada a contadores, expuesta como &lt;code>fipsctl stats metrics&lt;/code>, permite que Prometheus recopile métricas sin coste en la ruta crítica.&lt;/p>
&lt;p>El cambio de claves de sesión FMP y FSP ya no causa interrupciones ante pérdida y reordenación de paquetes en ninguna dirección: los frames entrantes se autentican contra la sesión pendiente antes de que el cambio marcado por el bit K la promueva, de modo que un frame obsoleto o falsificado no puede desbaratar el cambio; la retransmisión del mensaje 1 de rekey queda acotada; el heartbeat que detecta enlaces caídos tiene en cuenta el rekey; y las carreras por iniciación simultánea en enlaces de alta latencia se desincronizan mediante jitter simétrico. La TUI &lt;code>fipstop&lt;/code> se reconstruyó sobre un harness de snapshots de renderizado que compara la cuadrícula de texto exacta y el estilo de cada celda de todas las vistas con salidas preparadas del socket de control. También llegan nuevos objetivos de empaquetado: un &lt;code>.apk&lt;/code> de OpenWrt para OpenWrt 25+ —compilado sin SDK, reutilizando la compilación cruzada &lt;code>.ipk&lt;/code> existente y el payload del sistema de archivos instalado— y un &lt;code>flake.nix&lt;/code> en la raíz del proyecto que compila desde el código fuente los cuatro binarios (&lt;code>fips&lt;/code>, &lt;code>fipsctl&lt;/code>, &lt;code>fips-gateway&lt;/code>, &lt;code>fipstop&lt;/code>) en Nix/NixOS con el toolchain fijado.&lt;/p>
&lt;h3 id="whitenoise-linux-aparece-como-cliente-marmot-de-escritorio">Whitenoise Linux aparece como cliente Marmot de escritorio&lt;/h3>
&lt;p>&lt;a href="https://relay.ngit.dev/npub1ven4zk8xxw873876gx8y9g9l9fazkye9qnwnglcptgvfwxmygscqsxddfh/darkmatter-linux.git">Whitenoise Linux&lt;/a> es un cliente &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> de escritorio: mensajería de grupos MLS sobre relays Nostr, empaquetada como un único binario Rust con una interfaz Slint que guarda todos los secretos en una bóveda cifrada con contraseña.&lt;/p>
&lt;p>El hilo más relevante de esta semana propone transportar los efectos de mensaje de Whitenoise como un event kind 9 específico que referencia el mensaje padre. El formato de wire actual añade al final del cuerpo del mensaje un marcador como &lt;code>dmfx:sparkle&lt;/code>, lo que contamina el texto para cualquier renderer que desconozca la convención. Trasladar los efectos a su propio event mantiene limpio el texto del mensaje y abre una cuestión de diseño que afrontará toda la pila Marmot: convenciones dentro del cuerpo o events sidecar para funciones enriquecidas opcionales.&lt;/p>
&lt;h3 id="custid-se-lanza-como-bóveda-de-identidad-móvil-con-nip-46-y-un-flujo-de-desafíos-nfc">CustID se lanza como bóveda de identidad móvil con NIP-46 y un flujo de desafíos NFC&lt;/h3>
&lt;p>&lt;a href="https://zapstore.dev/apps/naddr1qq9rzqtdwfshxwf0wccsygqv94d2qg37755z67q9yjz6q60lcejldsc3ttak83333gjqgyvf3aqpsgqqqyf6w24n0c">CustID v0.1.10-beta&lt;/a> es la primera beta pública de CustID, una bóveda de identidad móvil construida sobre Nostr y el protocolo SISTR. CustID almacena varias identidades Nostr en almacenamiento seguro respaldado por hardware, actúa como firmante remoto &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> para otros clientes y responde a desafíos de acceso físico y en línea mediante NFC y códigos QR.&lt;/p>
&lt;p>La beta ofrece todas las funciones previstas para el firmante NIP-46 y el flujo de desafío-respuesta NFC; los flujos de acceso con pruebas de conocimiento cero quedan como objetivo futuro. Esta versión también elimina la capa keep-alive &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> en segundo plano de la app, que abría un WebSocket por perfil y por relay de lectura e ingería kinds que el cliente descartaba inmediatamente. Ahora solo se mantienen activos en segundo plano los sockets NIP-46 que transportan notificaciones de solicitudes de firma, la corrección que hace viable ejecutar CustID como bunker para otros clientes en un teléfono.&lt;/p>
&lt;h3 id="myco-se-lanza-para-compartir-nsites-entre-pares-sobre-la-malla-fips">myco se lanza para compartir nsites entre pares sobre la malla FIPS&lt;/h3>
&lt;p>&lt;a href="https://github.com/Origami74/myco/releases/tag/v0.1.0">myco v0.1.0&lt;/a> abrió esta semana, el 27 de junio, y alcanzó v0.1.0 el 1 de julio. myco es una app Android en Rust que instala aplicaciones de personas cercanas: intercambio entre pares de &lt;a href="https://nostrcompass.org/es/topics/nip-5a/">nsites&lt;/a> sobre una malla FIPS, mediante cualquier transporte que admita la malla (UDP, TCP, Tor, Bluetooth) y con funcionamiento totalmente offline. El diseño empareja directamente FIPS como sustrato de transporte con el formato de events de sitios web estáticos de NIP-5A como payload, lo que permite que una app distribuida como nsite pase entre peers de la malla sin depender de relays ni HTTP.&lt;/p>
&lt;p>v0.1.0 añade una ruta de radio Bluetooth L2CAP para que dos teléfonos con FIPS instalado puedan conectarse como peers por BLE sin ninguna red, además de una prueba de velocidad por peer y el intercambio activado por NFC desde el bottom sheet Circle de la app. myco también está publicada en Zapstore para su instalación directa.&lt;/p>
&lt;h3 id="nostr-codex-phone-se-lanza-como-superficie-de-control-móvil-de-un-worker-codex-local-mediante-nostr">Nostr Codex Phone se lanza como superficie de control móvil de un worker Codex local mediante Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/tidley/nostr-codex-phone">Nostr Codex Phone v0.1.122&lt;/a> se lanza esta semana como cliente Android que controla un worker local del asistente de programación Codex mediante mensajes directos cifrados de Nostr. La app admite varias sesiones de repositorios, transcripción de voz, sesiones enrutadas de workers, subidas de medios a Blossom y respuestas habladas opcionales, de modo que un desarrollador que ejecute un worker Codex en casa pueda enviar solicitudes desde el teléfono allí donde este tenga acceso a relays.&lt;/p>
&lt;p>El proyecto es hermano directo de &lt;a href="https://nostrcompass.org/en/newsletters/2026-06-24-newsletter/#codedeck-remote-agentic-coding-over-nostr">CodeDeck&lt;/a>, lanzado en el número 28. Ambos llevan los flujos de programación agéntica al transporte de Nostr mediante DMs cifrados, y ambos tratan Nostr como la capa de emparejamiento y mensajería que permite a un teléfono acceder a un worker doméstico sin abrir agujeros en la red. Nostr como plano de control para agentes locales se está convirtiendo en un patrón consolidado.&lt;/p>
&lt;h3 id="coop-mobile-publica-sus-primeras-builds-versionadas">Coop Mobile publica sus primeras builds versionadas&lt;/h3>
&lt;p>&lt;a href="https://git.reya.su/reya/coop-mobile/releases/tag/v0.2.1">Coop Mobile v0.2.1&lt;/a> y &lt;a href="https://git.reya.su/reya/coop-mobile/releases/tag/v0.2.2">v0.2.2&lt;/a> llegaron esta semana como las primeras builds versionadas de Coop Mobile, un cliente Android de mensajes directos cifrados &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>. Las dos versiones refuerzan la resistencia a fallos al analizar mensajes y manejar códigos QR, y borran todos los datos almacenados al cerrar sesión.&lt;/p>
&lt;h3 id="amethyst-desarrolla-una-interfaz-compatible-con-nip-89-un-feed-de-repositorios-git-y-una-sección-discover-de-napplets">Amethyst desarrolla una interfaz compatible con NIP-89, un feed de repositorios Git y una sección Discover de napplets&lt;/h3>
&lt;p>La rama principal de &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> incorporó varias superficies nuevas esta semana. Un &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3406">feed de repositorios Git&lt;/a> convierte los repos &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> en una categoría navegable del timeline de Android, filtrable por comunidad y autor, junto con un &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3415">navegador git smart-HTTP&lt;/a> que lee el contenido y los commits del repo sin salir de la app. El host de napplets recibió una &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3409">sección Discover&lt;/a> que enumera aplicaciones web seleccionadas, además de nSites y napplets seguidos, a partir de events de handlers &lt;a href="https://nostrcompass.org/es/topics/nip-89/">NIP-89&lt;/a> y events de sitios &lt;a href="https://nostrcompass.org/es/topics/nip-5a/">NIP-5A&lt;/a>. La visualización de notas ahora &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3422">revela qué app Nostr creó un event&lt;/a> mediante tags NIP-89. En sincronización, llega la &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3434">compatibilidad con negentropy NIP-77&lt;/a>, con reconciliación en streaming y ventanas automáticas de &lt;code>created_at&lt;/code> para sortear los límites de resultados de los relays, reduciendo el ancho de banda necesario para mantener sincronizados grandes conjuntos locales de events con un relay.&lt;/p>
&lt;h3 id="buzz-v0338-refuerza-la-superficie-de-ataque-del-relay-y-añade-selección-de-modelos-independiente-del-proveedor">Buzz v0.3.38 refuerza la superficie de ataque del relay y añade selección de modelos independiente del proveedor&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/buzz/releases/tag/v0.3.38">Buzz v0.3.38&lt;/a> refuerza la &lt;a href="https://github.com/block/buzz/pull/1369">superficie de ataque del relay&lt;/a> que Buzz expone al publicar personas, equipos, agentes gestionados y declaraciones de propietario NIP-OA como events Nostr firmados. Un relay de Buzz es un registro público de las identidades Nostr del equipo y de su estado; esta versión endurece la validación de entradas y la protección contra replay en los kinds conocidos que define Buzz. También generaliza la selección de modelos para que un equipo de Buzz pueda usar cualquier proveedor para el que Buzz disponga de adaptadores, incluido un nuevo backend Databricks AI Gateway v2.&lt;/p>
&lt;h3 id="notedeck-implementa-relays-de-sincronización-privada-nip-37-calendario-nip-52-y-comentarios-nip-22">Notedeck implementa relays de sincronización privada NIP-37, calendario NIP-52 y comentarios NIP-22&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>, el cliente de escritorio nativo en Rust del equipo de Damus, incorporó tres implementaciones de protocolo en una semana. Los relays de sincronización privada ahora persisten como una lista &lt;a href="https://nostrcompass.org/es/topics/nip-37/">NIP-37&lt;/a> de kind &lt;code>10013&lt;/code>, que separa el conjunto de relays de contenido privado del usuario de su outbox público NIP-65. El panel de calendario &lt;code>horizon&lt;/code> lee events &lt;a href="https://nostrcompass.org/es/topics/nip-52/">NIP-52&lt;/a> desde nostrdb y recibió un rediseño de tres paneles. El panel &lt;code>headway&lt;/code> añadió un modelo de event de comentarios &lt;a href="https://nostrcompass.org/es/topics/nip-22/">NIP-22&lt;/a> en el kind &lt;code>1111&lt;/code>, el kind que NIP-22 define para la superficie unificada de comentarios que sustituye el encadenado de respuestas NIP-10.&lt;/p>
&lt;h3 id="applesauce-incorpora-sesiones-nip-46-nbunksec-y-actualiza-la-cartera-a-cashu-v4">Applesauce incorpora sesiones NIP-46 nbunksec y actualiza la cartera a Cashu v4&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/applesauce">Applesauce&lt;/a>, el toolkit modular de Nostr para firmantes, relays, carteras y contenido, publicó una &lt;a href="https://github.com/hzrd149/applesauce/releases">versión coordinada 6.2.x&lt;/a> de sus subpaquetes. El paquete de firmantes obtuvo helpers para importar y exportar &lt;code>nbunksec&lt;/code>, tratando una sesión bunker &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> como artefacto portable que puede trasladarse entre clientes. El paquete de cartera actualizó sus bindings de &lt;a href="https://nostrcompass.org/es/topics/nip-60/">Cashu&lt;/a> a &lt;code>@cashu/cashu-ts&lt;/code> v4, donde los importes de proofs pasan a ser objetos de valor &lt;code>Amount&lt;/code> y cambia la API de decodificación de tokens.&lt;/p>
&lt;hr>
&lt;h2 id="versiones-etiquetadas">Versiones etiquetadas&lt;/h2>
&lt;h3 id="mostro-core-v0140">mostro-core v0.14.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.14.0">mostro-core v0.14.0&lt;/a> incorpora la siguiente iteración del protocolo de la red de intercambio P2P de dinero fiat &lt;a href="https://nostrcompass.org/es/topics/nip-69/">Mostro&lt;/a>. La versión sucede a &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.13.2">v0.13.2&lt;/a> y llega junto con &lt;a href="https://github.com/MostroP2P/mostro-cli/releases/tag/v0.16.0">mostro-cli v0.16.0&lt;/a>, que adopta el nuevo core. Tres PRs fusionados llegaron al repositorio core esta semana; el resto de la pila —el daemon mostro y Mostro mobile— sigue la versión v0.14.0 del crate de tipos compartidos.&lt;/p>
&lt;h3 id="ngit-v261">ngit v2.6.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/DanConwayDev/ngit-cli">ngit v2.6.1&lt;/a>, la CLI canónica de git sobre Nostr para repositorios &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a>, implementa la &lt;a href="https://github.com/nostr-protocol/nips/pull/2395">semántica de forks GRASP-06 de NIP-34&lt;/a> fusionada esta semana, que sustituye el tag &lt;code>personal-fork&lt;/code> por un tag &lt;code>u&lt;/code> en los events de estado del repo.&lt;/p>
&lt;h3 id="mesh-llm-v0720-y-v0721">mesh-llm v0.72.0 y v0.72.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/Mesh-LLM/mesh-llm">mesh-llm&lt;/a>, el componente de inferencia de la pila ContextVM que ejecuta LLMs de código abierto tras una superficie JSON-RPC direccionable por Nostr, publicó &lt;a href="https://github.com/Mesh-LLM/mesh-llm/releases/tag/v0.72.0">v0.72.0&lt;/a> y &lt;a href="https://github.com/Mesh-LLM/mesh-llm/releases/tag/v0.72.1">v0.72.1&lt;/a>, con una corrección para un fallo del procesamiento por lotes ante prompts individuales grandes y la migración del puente MCP para abandonar helpers obsoletos.&lt;/p>
&lt;h3 id="meiso-v140-incorpora-listas-colaborativas-con-clave-compartida-que-sustituyen-mls-para-compartir-tareas">Meiso v1.4.0 incorpora listas colaborativas con clave compartida que sustituyen MLS para compartir tareas&lt;/h3>
&lt;p>&lt;a href="https://github.com/higedamc/meiso/releases/tag/v1.4.0">Meiso v1.4.0&lt;/a> introduce un modelo de listas colaborativas con clave compartida que sustituye el anterior intercambio de tareas basado en MLS por un diseño más sencillo de events direccionables. Cada lista compartida genera una clave Nostr específica que se distribuye a sus miembros; las tareas son events direccionables de kind &lt;code>35000&lt;/code>, identificados por &lt;code>d=task-id&lt;/code> y con contenido autocifrado mediante &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>; y los relays aplican Last-Write-Wins por tarea. El diseño renuncia al forward secrecy y a la seguridad posterior al compromiso de MLS a cambio de una implementación de cliente más sencilla y resolución de conflictos a nivel de relay.&lt;/p>
&lt;h3 id="cordn-032">Cordn 0.3.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/Cordn-msg/cordn">Cordn 0.3.2&lt;/a> incorpora una línea «more-private-coordinator» que elimina las pubkeys efímeras de remitentes al publicar mensajes de grupo y refuerza el flujo de solicitudes de ingreso frente a nuevas solicitudes obsoletas. Cordn es la pila de mensajería basada en MLS tratada en el &lt;a href="https://nostrcompass.org/en/newsletters/2026-06-24-newsletter/#cordn-ad-hoc-cvm-a-browser-based-mls-coordinator">lanzamiento del CVM ad hoc de Cordn del número 28&lt;/a>; esta versión es la actualización correspondiente del lado del coordinador.&lt;/p>
&lt;hr>
&lt;h2 id="cambios-aún-no-publicados">Cambios aún no publicados&lt;/h2>
&lt;h3 id="divine-impulsa-108-prs-fusionados-de-pulido-posterior-al-lanzamiento">diVine impulsa 108 PRs fusionados de pulido posterior al lanzamiento&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>, el cliente de vídeos breves en bucle que recupera Vine, atraviesa una intensa etapa de pulido posterior al lanzamiento. El trabajo visible para Nostr esta semana es una ronda de estabilidad del flujo de conexión &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> que traslada los fallos de &lt;code>nostrconnect://&lt;/code> a códigos de motivo estructurados.&lt;/p>
&lt;h3 id="zap-cooking-continúa-la-corrección-transversal-de-nip-46-y-la-renovación-del-compositor">Zap Cooking continúa la corrección transversal de NIP-46 y la renovación del compositor&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a> es un cliente para compartir recetas en Nostr, donde las recetas se publican como events Nostr de formato largo. El trabajo de esta semana continúa la corrección transversal de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> y la renovación del compositor tratadas como trabajo aún no publicado en el &lt;a href="https://nostrcompass.org/en/newsletters/2026-06-24-newsletter/#unreleased-changes">número 28&lt;/a>.&lt;/p>
&lt;h3 id="conduit-refuerza-el-flujo-de-anuncios-y-la-corrección-del-marketplace">Conduit refuerza el flujo de anuncios y la corrección del marketplace&lt;/h3>
&lt;p>&lt;a href="https://github.com/Conduit-BTC/conduit-mono">Conduit&lt;/a> es un monorepo de marketplace con tres aplicaciones sobre Nostr: mercado de compradores, portal de comerciantes y creador de tiendas. El trabajo de esta semana continúa el impulso a la corrección del marketplace tratado en la &lt;a href="https://nostrcompass.org/en/newsletters/2026-06-24-newsletter/#conduit-hardens-the-marketplace-mvp-and-switches-to-its-public-relay-by-default">cobertura del lanzamiento del número 28&lt;/a>, sobre la &lt;a href="https://nostrcompass.org/es/topics/nip-99/">oleada comercial de NIP-99&lt;/a> que protagonizó la vertiente de protocolo del número anterior.&lt;/p>
&lt;h3 id="pollerama-v112-a-v1131-añaden-selección-del-client-tag-pestañas-de-perfil-y-límites-a-los-hilos">Pollerama v1.12 a v1.13.1 añaden selección del client tag, pestañas de perfil y límites a los hilos&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-polls">Pollerama&lt;/a>, un cliente Nostr para Android centrado en encuestas y notas con una potente capa de descubrimiento basada en la web of trust, publicó v1.12.0, v1.13.0 y v1.13.1 en Zapstore esta semana. Los usuarios ya pueden elegir qué client tag se adjunta a las notas y encuestas que crean, ya sea de una lista predeterminada o introduciendo uno propio. Las cadenas de comentarios y respuestas muy anidadas se detienen ahora tras varios niveles y enlazan al hilo completo en la página de la nota. Las páginas de perfil abren de forma predeterminada en Notes, divididas en una pestaña Posts y otra Conversations. Se corrigió un fallo de persistencia de follows por el que las cuentas recién seguidas desaparecían al reiniciar la app, y los botones para seguir ahora muestran el progreso.&lt;/p>
&lt;h3 id="getwiredapp-y-get-taoapp-corrigen-el-flujo-de-envío-confess-de-nip-13">getwired.app y get-tao.app corrigen el flujo de envío confess de NIP-13&lt;/h3>
&lt;p>&lt;a href="https://github.com/smolgrrr/Wired">getwired.app&lt;/a> y &lt;a href="https://github.com/smolgrrr/TAO">get-tao.app&lt;/a>, que comparten un flujo de publicación anónima que añade proof-of-work NIP-13 para frenar el spam en el momento del envío, corrigieron el &lt;a href="https://github.com/smolgrrr/Wired/pull/57">flujo de envío confess&lt;/a> para que la UX durante el minado de PoW sea coherente.&lt;/p>
&lt;h3 id="nostui-añade-una-pestaña-de-timeline-de-menciones">nostui añade una pestaña de timeline de menciones&lt;/h3>
&lt;p>&lt;a href="https://github.com/akiomik/nostui">nostui&lt;/a>, un cliente Nostr de terminal en Rust, añadió una &lt;a href="https://github.com/akiomik/nostui/pull/463">pestaña de timeline de menciones&lt;/a> que presenta en una vista específica de la TUI los events de kind 1 que incluyen un tag con la pubkey activa.&lt;/p>
&lt;h3 id="heartwood-incorpora-uris-bunker-nip-46-por-identidad-y-un-puente-de-firma-en-modo-hsm">Heartwood incorpora URIs bunker NIP-46 por identidad y un puente de firma en modo HSM&lt;/h3>
&lt;p>&lt;a href="https://github.com/forgesworn/heartwood">Heartwood&lt;/a> es un firmante &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> en el que la clave de firma nunca llega al cliente: este se comunica mediante NIP-46 con un pequeño relay, y el relay usa un protocolo de frames serie para comunicarse con un dispositivo de hardware conectado que realiza la firma. Esta semana el proyecto incorporó un &lt;a href="https://github.com/forgesworn/heartwood/pull/11">puente de firma entre relay y puerto serie&lt;/a> y &lt;a href="https://github.com/forgesworn/heartwood/pull/16">conexiones bunker por identidad&lt;/a>, de modo que un solo dispositivo de hardware con varias identidades expone una URI bunker distinta para cada una.&lt;/p>
&lt;h3 id="refactorización-de-autenticación-y-firmantes-de-nostter">Refactorización de autenticación y firmantes de Nostter&lt;/h3>
&lt;p>&lt;a href="https://github.com/SnowCait/nostter">Nostter&lt;/a> rediseñó esta semana su &lt;a href="https://github.com/SnowCait/nostter/pulls?q=is%3Amerged&amp;#43;auth">capa de autenticación y firmantes&lt;/a>, trasladando el estado de sesión a una única signal y extrayendo el despacho de firmantes a módulos de estrategia. La dirección es una abstracción limpia de firmantes donde la extensión web NIP-07, el bunker remoto NIP-46 y el nsec sin procesar comparten una sola ruta de código.&lt;/p>
&lt;h3 id="dart-ndk-extrae-el-firmante-nip-07-y-aleatoriza-las-marcas-de-tiempo-nip-59">Dart NDK extrae el firmante NIP-07 y aleatoriza las marcas de tiempo NIP-59&lt;/h3>
&lt;p>&lt;a href="https://github.com/relaystr/dart_ndk">Dart NDK&lt;/a> trasladó su firmante &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a> fuera del paquete core y a &lt;code>ndk_flutter&lt;/code> —donde reside el WebView de Flutter—, y &lt;a href="https://github.com/relaystr/dart_ndk/pull/667">aleatorizó las marcas de tiempo de sus gift wraps NIP-59&lt;/a> para reforzar la protección de los mensajes cifrados frente a la correlación temporal.&lt;/p>
&lt;h3 id="milk-market-añade-páginas-de-tienda-nip-23-y-procesamiento-de-pagos-con-square">Milk Market añade páginas de tienda NIP-23 y procesamiento de pagos con Square&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a>, el escaparate de marketplace del equipo de Shopstr, añadió a cada tienda una página de blog respaldada por los events de formato largo &lt;a href="https://nostrcompass.org/es/topics/nip-23/">NIP-23&lt;/a> del vendedor, con secciones editables y una ruta directa a la configuración del blog. Esa misma semana incorporó &lt;a href="https://github.com/shopstr-eng/milk-market/pull/30">Square&lt;/a> como procesador de pagos alternativo para vendedores y la compra automática de etiquetas de envío para pedidos pagados.&lt;/p>
&lt;h3 id="calendar-by-formstr-publica-una-app-para-ios">Calendar by Formstr publica una app para iOS&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Formstr&lt;/a> fusionó esta semana el &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/159">PR #159 IOS App&lt;/a>, llevando a iOS el cliente de calendario &lt;a href="https://nostrcompass.org/es/topics/nip-52/">NIP-52&lt;/a>. El &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/197">PR #197&lt;/a> corrige el análisis de fechas de calendario en hora local, y el &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/201">PR #201&lt;/a> añade un flujo E2E de Playwright activado mediante una etiqueta &lt;code>run-tests&lt;/code>.&lt;/p>
&lt;h3 id="cagliostr-aplica-nip-22-nip-09-por-coordenada-y-proof-of-work-nip-13">cagliostr aplica NIP-22, NIP-09 por coordenada y proof-of-work NIP-13&lt;/h3>
&lt;p>&lt;a href="https://github.com/mattn/cagliostr">cagliostr&lt;/a>, una implementación de relay en Go, reforzó esta semana tres rutas de aplicación de reglas: &lt;a href="https://github.com/mattn/cagliostr/pull/7">proof-of-work NIP-13 configurable&lt;/a> para events entrantes, &lt;a href="https://github.com/mattn/cagliostr/pull/8">eliminación NIP-09 por coordenada direccionable&lt;/a> para que los events reemplazables puedan eliminarse mediante su tag &lt;code>a&lt;/code> —algo inaccesible solo con la eliminación por id del event—, y &lt;a href="https://github.com/mattn/cagliostr/pull/9">límites configurables de timestamp NIP-22&lt;/a> que rechazan events fechados demasiado lejos en el pasado o el futuro.&lt;/p>
&lt;hr>
&lt;h2 id="proyectos-recién-rastreados-y-descubiertos">Proyectos recién rastreados y descubiertos&lt;/h2>
&lt;p>La &lt;a href="https://git.vanderwarker.family/wellbeing">suite de bienestar Vanderwarker&lt;/a> publica telemetría del mundo físico como events Nostr bajo una clave de firma compartida del publicador. Consta de cinco apps hermanas: &lt;a href="https://git.vanderwarker.family/wellbeing/holyfit-android">Holy Fit&lt;/a> es un contador de pasos que ancla datos de actividad física en Nostr como &lt;code>kind:30078&lt;/code>; &lt;a href="https://git.vanderwarker.family/wellbeing/nunlock-android">Nunlock&lt;/a> publica un contador diario de desbloqueos del teléfono; &lt;a href="https://git.vanderwarker.family/wellbeing/saintstream-android">Saint Stream&lt;/a> publica la reproducción multimedia actual como User Status; &lt;a href="https://git.vanderwarker.family/wellbeing/sistercharge-android">Sister Charge&lt;/a> publica el nivel, voltaje y temperatura de la batería cada 15 minutos; y &lt;a href="https://git.vanderwarker.family/wellbeing/cellibacy-android">Cellibacy&lt;/a> publica el uso diario de datos. Las cinco aparecieron en Zapstore entre el 24 y el 30 de junio.&lt;/p>
&lt;p>&lt;a href="https://github.com/f321x/ntrack/releases/tag/v0.1.9">ntrack v0.1.9&lt;/a> es una app Android serverless para compartir ubicación en directo de forma cifrada, construida en Rust y Slint y publicada el 29 de junio. Es hermana de &lt;a href="https://github.com/mehmetefeumit/Haven-App">Haven&lt;/a>, la app para compartir ubicaciones basada en &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> tratada en el &lt;a href="https://nostrcompass.org/en/newsletters/2026-06-24-newsletter/#haven-launches-private-location-sharing-on-marmot">número 28&lt;/a>, pero usa una arquitectura de transporte distinta: DMs cifrados de Nostr transportan las actualizaciones de ubicación, mientras Haven emplea mensajes de grupo Marmot.&lt;/p>
&lt;p>&lt;a href="https://git.nostrdev.com/stuff/NostrAppShell">NostrAppShell&lt;/a> es un scaffold incipiente de shell de aplicaciones para construir apps Nostr. El proyecto publicó esta semana su primera documentación dirigida a usuarios.&lt;/p>
&lt;p>&lt;a href="https://nips.pollerama.fun">NIPs by Pollerama&lt;/a> —repositorio &lt;a href="https://github.com/abh3po/better-nips">abh3po/better-nips&lt;/a>, creado el 2026-06-29— es un nuevo cliente para los NIPs &lt;code>kind:30817&lt;/code> creados por la comunidad de &lt;a href="https://nostrhub.io">NostrHub&lt;/a>, presentado como una superficie alternativa a nostrhub.io ponderada por confianza. Cada NIP &lt;code>kind:30817&lt;/code> tiene su propia URL compartible (&lt;code>#/nip/&amp;lt;naddr&amp;gt;&lt;/code>), con renderizado Markdown completo y los event kinds que define. El cliente ofrece tres feeds: Following, Web of Trust —follows de follows— y Global, cada uno ordenable por aprobaciones ponderadas por confianza o por novedad. Las aprobaciones se publican como labels &lt;a href="https://nostrcompass.org/es/topics/nip-32/">NIP-32&lt;/a> en el kind &lt;code>1985&lt;/code>, con tags &lt;code>[&amp;quot;L&amp;quot;,&amp;quot;nostrhub&amp;quot;]&lt;/code> y &lt;code>[&amp;quot;l&amp;quot;,&amp;quot;approve&amp;quot;,&amp;quot;nostrhub&amp;quot;]&lt;/code>, además de un tag &lt;code>a&lt;/code> que apunta a la dirección del NIP objetivo y un tag &lt;code>client&lt;/code> que anuncia &lt;code>better-nips&lt;/code>. Es exactamente la forma de event que firma NostrHub, por lo que las aprobaciones son compatibles entre ambos clientes. La aprobación de un follow directo pesa más en el ranking que la de un follow de segundo grado.&lt;/p>
&lt;p>La pila de firma usa &lt;a href="https://www.npmjs.com/package/@formstr/signer">&lt;code>@formstr/signer&lt;/code>&lt;/a>, con un modal de inicio de sesión completo que cubre &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a>, bunker y nostrconnect de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>, ncryptsec de &lt;a href="https://nostrcompass.org/es/topics/nip-49/">NIP-49&lt;/a> y firmante Android &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>; las sesiones vuelven a conectarse silenciosamente al recargar. La capa de red se ejecuta mediante &lt;a href="https://www.npmjs.com/package/@formstr/local-relay">&lt;code>@formstr/local-relay&lt;/code>&lt;/a>, un Web Worker que reparte el outbox &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> del usuario entre relays para que un gran conjunto de web of trust no se propague a un único relay. La posición de diseño es que todos los NIPs comunitarios —alojados en NostrHub, en &lt;code>better-nips&lt;/code> o en futuros clientes— son iguales a nivel de protocolo; el ranking procede del grafo social, no de la selección de moderadores. Esto encaja directamente con el flujo de labels NIP-32 que abordó el análisis detallado del &lt;a href="https://nostrcompass.org/en/newsletters/2026-06-03-newsletter/#nip-deep-dive-nip-32-labeling">número 25&lt;/a>.&lt;/p>
&lt;p>Esta semana aparecieron dos nuevos grupos de repos &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a>. &lt;a href="https://git.shakespeare.diy/npub14rg4vrt2v374q95ezeeydu3hkdhmzglcj950mggacap4x0lv0gyq04wun7/vidstr.git">Vidstr&lt;/a> es un cliente Nostr centrado en vídeo, y un &lt;a href="#ZgotmplZ">grupo de nostrapps.com&lt;/a> publica tres proyectos hermanos: &lt;a href="https://gitnostr.com/npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6/verdana.git">verdana&lt;/a>, una VM de napps para escritorio; &lt;a href="https://gitnostr.com/npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6/hallway.git">hallway&lt;/a>, un cliente de comunidades personalizable; y &lt;a href="https://gitnostr.com/npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6/napps.git">napps&lt;/a>, una especificación y runtime de microapps HTML. El grupo discurre en paralelo al trabajo de &lt;a href="https://nostrcompass.org/es/topics/nip-5d/">napplets&lt;/a> tratado en la historia principal del número anterior.&lt;/p>
&lt;hr>
&lt;h2 id="trabajo-de-protocolo-y-actualizaciones-de-nips">Trabajo de protocolo y actualizaciones de NIPs&lt;/h2>
&lt;h3 id="fusionado-nip-44-elimina-el-límite-de-payload-de-65535-bytes">Fusionado: NIP-44 elimina el límite de payload de 65.535 bytes&lt;/h3>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/pull/1907">PR #1907&lt;/a> se fusionó el 28 de junio tras permanecer abierto desde 2024-09. El cambio elimina el límite superior de 65.535 bytes para el payload en texto plano de un sobre de cifrado versionado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> y lo eleva a un máximo de 4 GiB (&lt;code>uint32_max&lt;/code>). NIP-44 codifica la longitud del payload como un &lt;code>uint16&lt;/code> en el formato de wire, algo que la especificación original exigía estrictamente para la interoperabilidad; el cambio fusionado adopta un campo de longitud mayor indicado en el byte de versión, de modo que las implementaciones v2 conservan la compatibilidad a nivel de wire y las v3+ transportan la longitud ampliada. Los clientes que usan NIP-44 para mensajes directos &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>, gift wraps &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a>, payloads de firmantes remotos &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> o cualquier otro mensaje Nostr cifrado con NIP-44 ya pueden intercambiar events individuales mayores de 64 KiB sin dividirlos en la capa de aplicación.&lt;/p>
&lt;h3 id="fusionado-nip-86-obtiene-un-método-signevent-y-un-event-de-roles-de-relay">Fusionado: NIP-86 obtiene un método signevent y un event de roles de relay&lt;/h3>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/pull/2389">PR #2389&lt;/a> añade un método &lt;code>signevent&lt;/code> a la API JSON-RPC de gestión de relays &lt;a href="https://nostrcompass.org/es/topics/nip-86/">NIP-86&lt;/a>, que permite a un administrador pedir al relay que firme un event con la propia pubkey del relay. El &lt;a href="https://github.com/nostr-protocol/nips/pull/2390">PR #2390&lt;/a> complementario define un event de roles de relay: un event reemplazable que publica un relay para declarar sus administradores y moderadores. Juntos permiten que los clientes NIP-86 consulten la lista de administradores de un relay y verifiquen que una solicitud autenticada procede de un administrador vigente, sin confianza fuera de banda. Más abajo se analizan ambos cambios en detalle.&lt;/p>
&lt;h3 id="fusionado-nip-34-sustituye-personal-fork-por-u-para-grasp-06">Fusionado: NIP-34 sustituye personal-fork por &lt;code>u&lt;/code> para GRASP-06&lt;/h3>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/pull/2395">PR #2395&lt;/a> se fusionó el 24 de junio y sustituye el tag &lt;code>personal-fork&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> en los events de estado de repos (&lt;code>kind:30618&lt;/code>) por un tag &lt;code>u&lt;/code> —de «upstream»—, alineando el formato de wire con la semántica de forks GRASP-06 que implementa la suite GitWorkshop. El cambio cierra el &lt;a href="https://github.com/nostr-protocol/nips/pull/2384">PR #2384&lt;/a> (&lt;code>NIP-34: remove maintainers to solve expiry issues&lt;/code>), que proponía otra corrección de la semántica de forks. La dirección fusionada es la que implementa ngit v2.6.x, por lo que la especificación fusionada y la CLI de referencia quedan alineadas. Los repos existentes que usan &lt;code>personal-fork&lt;/code> siguen interoperando; los nuevos repos y la línea ngit v2.6 publican el tag &lt;code>u&lt;/code>.&lt;/p>
&lt;h3 id="fusionado-metadatos-de-cliente-nip-46-ya-en-upstream-tras-su-llegada-a-amber">Fusionado: metadatos de cliente NIP-46, ya en upstream tras su llegada a Amber&lt;/h3>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/pull/2381">PR #2381&lt;/a> se fusionó el 23 de junio y añade metadatos opcionales de cliente a la solicitud &lt;code>connect&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>, lo que permite que un cliente publique su nombre, una URL de icono y una URL de página principal al conectar con el firmante. &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.2.2">Amber v6.2.2&lt;/a> incorporó la extensión de metadatos la semana anterior, según la &lt;a href="https://nostrcompass.org/en/newsletters/2026-06-24-newsletter/#amber-v622-implements-nip-46-client-metadata">cobertura del número 28&lt;/a>; esta semana el NIP upstream alcanza a la implementación ya publicada.&lt;/p>
&lt;h3 id="abierto-claves-deterministas-de-wrapper-nip-17-basadas-en-epochs">Abierto: claves deterministas de wrapper NIP-17 basadas en epochs&lt;/h3>
&lt;p>Los &lt;a href="https://github.com/nostr-protocol/nips/pull/2397">PR #2397&lt;/a> y &lt;a href="https://github.com/nostr-protocol/nips/pull/2396">PR #2396&lt;/a> abordan dos propuestas convergentes de claves de wrap NIP-17. El PR #2397 propone que la clave de firma efímera usada para crear un gift wrap &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> se derive de forma determinista de una seed por conversación vinculada a un epoch temporal aproximado, de modo que un destinatario que conozca la clave de conversación pueda predecir a qué pubkeys suscribirse. La especificación actual exige una clave aleatoria nueva por wrap, lo que imposibilita esa predicción. El PR #2396 es el cambio complementario: los wraps de una conversación dada deberían firmarse directamente con la clave de conversación para que la pubkey del wrap sirva también como identificador de la conversación. Juntos trazan un camino hacia conversaciones NIP-17 filtrables sin filtrar metadatos. Ambos siguen abiertos y en discusión.&lt;/p>
&lt;h3 id="abierto-nip-59-debería-rechazar-en-el-relay-los-events-seal-de-kind-13">Abierto: NIP-59 debería rechazar en el relay los events seal de kind 13&lt;/h3>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/pull/2399">PR #2399&lt;/a> propone que los relays rechacen los events de kind 13 —el seal interno de un gift wrap &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a>— cuando aparezcan en el nivel superior de una solicitud de publicación, porque un event seal solo tiene sentido dentro de un wrap y un seal filtrado expone la pubkey del destinatario. El &lt;a href="https://github.com/nostr-protocol/nips/issues/2398">issue #2398&lt;/a> complementario va más lejos y sostiene que el seal debería redefinirse como kind efímero —los kinds efímeros NIP-01 no se almacenan en relays—, lo que reforzaría la regla a nivel de protocolo y eliminaría la dependencia de la política de cada relay.&lt;/p>
&lt;h3 id="abierto-estados-de-grupos-nip-29">Abierto: estados de grupos NIP-29&lt;/h3>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/pull/2372">PR #2372&lt;/a> añade a &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> —grupos basados en relays— una semántica explícita de estados de grupo, que define qué significa que un grupo sea abierto, cerrado, público, privado o archivado, y cómo interactúan las transiciones de estado con los events de miembros. La propuesta incorpora a la especificación del relay semánticas que hasta ahora eran específicas de cada cliente.&lt;/p>
&lt;h3 id="abierto-compatibilidad-opcional-con-varios-maintainers-en-nip-34">Abierto: compatibilidad opcional con varios maintainers en NIP-34&lt;/h3>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/pull/2324">PR #2324&lt;/a> es la propuesta complementaria al &lt;a href="https://github.com/nostr-protocol/nips/pull/2395">PR #2395&lt;/a> fusionado —la semántica de forks GRASP-06 tratada arriba—. El PR #2324 añade compatibilidad opcional con varios maintainers a los events de anuncio de repos &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> (&lt;code>kind:30617&lt;/code>), permitiendo que un repositorio declare más de una pubkey de maintainer canónico mediante tags &lt;code>maintainer&lt;/code> repetidos. Los clientes consideran entonces oficiales los patches e issues firmados por cualquier maintainer declarado, lo que resuelve la carencia histórica por la que los repos NIP-34 con varios maintainers deben canalizarlo todo por una sola pubkey o recurrir a coordinación fuera del protocolo.&lt;/p>
&lt;h3 id="abierto-operador-and-de-nip-91-para-filtros-propuesta-abierta-y-no-fusionada">Abierto: operador AND de NIP-91 para filtros, propuesta abierta y no fusionada&lt;/h3>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/pull/2252">PR #2252&lt;/a> es la propuesta de operador AND para los &lt;a href="https://nostrcompass.org/es/topics/nip-01/">filtros&lt;/a> de Nostr, que reabre un diseño debatido por primera vez en el anterior &lt;a href="https://github.com/nostr-protocol/nips/pull/1365">PR #1365&lt;/a>, ya cerrado. Ya existen implementaciones en &lt;a href="https://github.com/v0l/nostr-rs-relay">nostr-rs-relay&lt;/a>, applesauce, &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> y worker-relay, pero el PR de la especificación sigue abierto.&lt;/p>
&lt;h3 id="cerradas-cuatro-nips-comerciales-de-pats2sats">Cerradas: cuatro NIPs comerciales de pats2sats&lt;/h3>
&lt;p>Esta semana se cerraron cuatro propuestas comerciales sobre Nostr: Escrow (&lt;a href="https://github.com/nostr-protocol/nips/pull/2334">#2334&lt;/a>), Reservations (&lt;a href="https://github.com/nostr-protocol/nips/pull/2335">#2335&lt;/a>), una extensión de anuncios de marketplace &lt;a href="https://nostrcompass.org/es/topics/nip-99/">NIP-99&lt;/a> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2346">#2346&lt;/a>) y un perfil de anuncios de alojamiento (&lt;a href="https://github.com/nostr-protocol/nips/pull/2333">#2333&lt;/a>). Esa misma superficie comercial se consolida ahora en &lt;a href="https://github.com/GammaMarkets/market-spec">Gamma Market Spec&lt;/a>, un repositorio de extensiones propio del proyecto que se compone sobre los anuncios de marketplace NIP-99 con semánticas de pedidos, checkout, escrow y disputas. Compass ya rastrea este repositorio junto con Marmot y Blossom como repo de especificación de protocolo externo al propio repositorio de NIPs; entre sus PRs abiertos esta semana están la aclaración de atribución de clientes (&lt;a href="https://github.com/GammaMarkets/market-spec/pull/11">#11&lt;/a>), un tag supersedes para cambios en la identidad de productos (&lt;a href="https://github.com/GammaMarkets/market-spec/pull/8">#8&lt;/a>) y semántica para reseñas de comerciantes (&lt;a href="https://github.com/GammaMarkets/market-spec/pull/7">#7&lt;/a>).&lt;/p>
&lt;h3 id="abierto-vinculación-de-identidades-bitcoin">Abierto: vinculación de identidades Bitcoin&lt;/h3>
&lt;p>Esta semana se abrieron dos propuestas para vincular identidades Bitcoin con identidades Nostr: una &lt;a href="https://github.com/nostr-protocol/nips/pull/2392">dirección de pago silencioso de Bitcoin NIP-352&lt;/a> y una &lt;a href="https://github.com/nostr-protocol/nips/pull/2401">prueba de vinculación de identidad Bitcoin-OTC&lt;/a>.&lt;/p>
&lt;hr>
&lt;h2 id="análisis-detallado-de-nip-nip-86-api-de-gestión-de-relays">Análisis detallado de NIP: NIP-86 (API de gestión de relays)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-86/">NIP-86&lt;/a> define una interfaz JSON-RPC para gestionar relays, que permite a clientes autorizados enviar comandos administrativos a relays mediante una API estandarizada. Un único cliente puede gestionar cualquier relay compatible con NIP-86 sin herramientas específicas para cada uno. Dos fusiones de la especificación esta semana —&lt;a href="https://github.com/nostr-protocol/nips/pull/2389">PR #2389&lt;/a> y &lt;a href="https://github.com/nostr-protocol/nips/pull/2390">PR #2390&lt;/a>— cierran el círculo entre events firmados por relays y administradores declarados por relays.&lt;/p>
&lt;h3 id="el-transporte">El transporte&lt;/h3>
&lt;p>Una solicitud de gestión NIP-86 es un HTTP POST dirigido a la misma URI desde la que el relay sirve conexiones WebSocket, con &lt;code>Content-Type: application/nostr+json+rpc&lt;/code>. El cuerpo de la solicitud es un documento JSON con esta forma:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;method&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;method-name&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;params&amp;#34;&lt;/span>: [&lt;span style="color:#960050;background-color:#1e0010">&amp;lt;arg&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">&amp;gt;&lt;/span>, &lt;span style="color:#960050;background-color:#1e0010">&amp;lt;arg&lt;/span>&lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#960050;background-color:#1e0010">&amp;gt;&lt;/span>, &lt;span style="color:#960050;background-color:#1e0010">...&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>La autenticación usa en el header &lt;code>Authorization&lt;/code> un event firmado de autenticación HTTP &lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98&lt;/a>. El relay verifica que la pubkey firmante esté en su lista de administradores antes de ejecutar el método. La respuesta del relay es un documento JSON con esta forma:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;result&amp;#34;&lt;/span>: &lt;span style="color:#960050;background-color:#1e0010">&amp;lt;return-value&amp;gt;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;error&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;error-string-if-any&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="los-métodos-que-existían-antes-de-esta-semana">Los métodos que existían antes de esta semana&lt;/h3>
&lt;p>El conjunto de métodos preexistente cubre bloqueos de pubkeys (&lt;code>banpubkey&lt;/code>, &lt;code>allowpubkey&lt;/code>, &lt;code>listbannedpubkeys&lt;/code>), bloqueos de events (&lt;code>banevent&lt;/code>, &lt;code>allowevent&lt;/code>, &lt;code>listbannedevents&lt;/code>), metadatos del relay (&lt;code>changerelayname&lt;/code>, &lt;code>changerelaydescription&lt;/code>, &lt;code>changerelayicon&lt;/code>), gestión de la lista de pubkeys permitidas (&lt;code>allowkind&lt;/code>, &lt;code>disallowkind&lt;/code>, &lt;code>listallowedkinds&lt;/code>) y un método &lt;code>stats&lt;/code> que devuelve estadísticas del relay. La forma se aproxima deliberadamente a un servicio JSON-RPC estándar, para que un cliente pueda superponer bindings tipados.&lt;/p>
&lt;h3 id="qué-cambió-esta-semana">Qué cambió esta semana&lt;/h3>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/pull/2389">PR #2389&lt;/a> añade un método &lt;code>signevent&lt;/code> a la especificación. El método recibe como argumento una plantilla parcial de event —kind, tags y content— y pide al relay que firme y devuelva un event completo con la propia pubkey del relay en el campo &lt;code>pubkey&lt;/code>. Es la condición previa para que un relay publique events sobre sí mismo a nivel de protocolo: los anuncios de pubkeys bloqueadas, los metadatos del relay y el nuevo event de roles de relay descrito a continuación exigen que el relay firme con la clave controlada por su operador, pero la mayoría de los operadores no quieren guardar una clave privada en su cliente administrativo.&lt;/p>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/pull/2390">PR #2390&lt;/a> define un event de roles de relay: un event reemplazable parametrizado que publica un relay —firmado con su propia pubkey mediante &lt;code>signevent&lt;/code>— para declarar las pubkeys de sus administradores y moderadores con semánticas de roles explícitas. Un cliente compatible con NIP-86 puede obtener el event de roles de cualquier relay rastreado, construir la lista de administradores a partir de los tags del event y validar que una solicitud NIP-86 autenticada procede de un administrador actual, sin confianza fuera de banda ni configuración específica del relay. Los dos PRs cierran juntos el círculo: &lt;code>signevent&lt;/code> es el mecanismo y los roles de relay son el primer event kind construido sobre él.&lt;/p>
&lt;h3 id="ejemplo-de-solicitud-nip-86">Ejemplo de solicitud NIP-86&lt;/h3>
&lt;p>Una solicitud completa &lt;code>banpubkey&lt;/code> de NIP-86 tiene este aspecto:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;method&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;banpubkey&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;params&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;&amp;lt;64-char-hex-pubkey-to-ban&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;spam&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>con un header &lt;code>Authorization&lt;/code> que transporta un event firmado NIP-98:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;5e1c2f9e1d3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1782824400&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">27235&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;u&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://relay.example.com/&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;method&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;POST&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;payload&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;sha256-of-request-body&amp;gt;&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1e2d3c4b5a697887766554433221100ffeeddccbbaa99887766554433221100f1e2d3c4b5a697887766554433221100ffeeddccbbaa99887766554433221100&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>La pubkey firmante debe figurar en el conjunto de administradores del relay —ahora declarado en el event de roles del relay—; el tag &lt;code>u&lt;/code> debe coincidir con la URL HTTPS del relay; y el tag &lt;code>payload&lt;/code> debe coincidir con el SHA-256 del cuerpo JSON de la solicitud. El relay devuelve:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;result&amp;#34;&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;error&amp;#34;&lt;/span>: &lt;span style="color:#66d9ef">null&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="implementaciones">Implementaciones&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> incluye una interfaz de gestión de relays NIP-86 en Android (v1.07.0+).&lt;/li>
&lt;li>Entre los relays de referencia que implementan la especificación están &lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a>, &lt;a href="https://github.com/fiatjaf/khatru">khatru&lt;/a> y varias implementaciones menores enlazadas por la especificación desde su sección &lt;code>Implementation Status&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>Los clientes compatibles con NIP-86 empezarán a tratar el event de roles de relay como fuente canónica de la lista de administradores del relay cuando las implementaciones adopten los cambios &lt;code>signevent&lt;/code> y Relay Roles.&lt;/p>
&lt;hr>
&lt;h2 id="análisis-detallado-de-nip-nip-89-handlers-de-aplicaciones-recomendados">Análisis detallado de NIP: NIP-89 (handlers de aplicaciones recomendados)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-89/">NIP-89&lt;/a> define dos event kinds reemplazables parametrizados: &lt;code>kind:31990&lt;/code>, el handler de aplicación que publica el desarrollador de una app, y &lt;code>kind:31989&lt;/code>, la recomendación que publica un usuario sobre una app que utiliza. Juntos permiten que los clientes descubran aplicaciones capaces de manejar un event kind desconocido sin coordinación fuera de banda: un lector de formato largo que encuentre un event &lt;code>kind:30030&lt;/code> que no maneje de forma nativa puede consultar el grafo NIP-89 en busca de handlers y ofrecer al usuario un flujo «Open in&amp;hellip;» hacia una app publicada que sí lo haga. NIP-89 es la infraestructura original para el mismo problema de enrutamiento entre apps que el trabajo de napplets/napps presente en este número amplía ahora hacia applets componibles nativos de Nostr.&lt;/p>
&lt;h3 id="el-event-de-handler-de-aplicación-kind31990">El event de handler de aplicación (&lt;code>kind:31990&lt;/code>)&lt;/h3>
&lt;p>El desarrollador de una app publica uno o varios events de handler que describen qué event kinds admite la app y cómo abrir una entidad Nostr en ella:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1782824400&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">31990&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;longform-reader-v1&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;k&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30023&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;k&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30024&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;web&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://reader.example.com/a/&amp;lt;bech32&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;naddr&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;ios&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;longformreader://open/&amp;lt;bech32&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;android&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;longformreader://open/&amp;lt;bech32&amp;gt;&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;name\&amp;#34;: \&amp;#34;Longform Reader\&amp;#34;, \&amp;#34;picture\&amp;#34;: \&amp;#34;https://reader.example.com/icon.png\&amp;#34;, \&amp;#34;about\&amp;#34;: \&amp;#34;A native reader for NIP-23 longform.\&amp;#34;}&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;1f2e3d4c5b6a798877665544332211000ffeeddccbbaa99887766554433221100ffeeddccbbaa99887766554433221100ffeeddccbbaa9988776655443322110a&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El tag &lt;code>d&lt;/code> identifica el handler —para que pueda reemplazarse—, cada tag &lt;code>k&lt;/code> declara un event kind que maneja la app, y cada tag de plataforma (&lt;code>web&lt;/code>, &lt;code>ios&lt;/code>, &lt;code>android&lt;/code>, &amp;hellip;) proporciona una plantilla de URL con &lt;code>&amp;lt;bech32&amp;gt;&lt;/code> como placeholder de una entidad codificada mediante &lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19&lt;/a> que el cliente llamante sustituye al abrirla. Un solo event de handler puede anunciar varios kinds compatibles si comparten el mismo patrón de enrutamiento, lo que mantiene compacto el descubrimiento de apps y evita un event de handler por kind.&lt;/p>
&lt;h3 id="el-event-de-recomendación-de-usuario-kind31989">El event de recomendación de usuario (&lt;code>kind:31989&lt;/code>)&lt;/h3>
&lt;p>Un usuario publica una recomendación que declara qué apps utiliza para un event kind determinado:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1782824500&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">31989&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30023&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;31990:c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2:longform-reader-v1&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;web&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;31990:e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6:reader-pro&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;ios&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El tag &lt;code>d&lt;/code> contiene el event kind recomendado. Cada tag &lt;code>a&lt;/code> es un puntero de dirección NIP-01 a un event de handler &lt;code>kind:31990&lt;/code>, junto con el relay sugerido y la plataforma a la que se aplica la recomendación. Una misma recomendación puede enumerar varias apps para distintas plataformas.&lt;/p>
&lt;h3 id="el-client-tag-y-el-compromiso-de-privacidad">El client tag y el compromiso de privacidad&lt;/h3>
&lt;p>NIP-89 también define un tag &lt;code>client&lt;/code> opcional que cualquier app publicadora puede adjuntar a los events que crea:&lt;/p>
&lt;pre tabindex="0">&lt;code>[&amp;#34;client&amp;#34;, &amp;#34;Longform Reader&amp;#34;, &amp;#34;31990:c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2:longform-reader-v1&amp;#34;, &amp;#34;wss://relay.example.com&amp;#34;]
&lt;/code>&lt;/pre>&lt;p>Esto permite que cualquier cliente que muestre el event revele de qué app procede, consulte metadatos más completos del handler y respete las indicaciones de renderizado declaradas por este. La especificación también señala explícitamente el coste de privacidad: un cliente que emite un tag &lt;code>client&lt;/code> en cada event publica la identidad del software del usuario, lo que revela patrones de uso con el tiempo. La especificación recomienda que los clientes permitan desactivarlo.&lt;/p>
&lt;p>El &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3422">PR #3422&lt;/a> de Amethyst analiza y muestra los tags &lt;code>t&lt;/code>, &lt;code>i&lt;/code>, &lt;code>a&lt;/code> y &lt;code>client&lt;/code> de NIP-89 al presentar events, revelando directamente en el timeline qué app creó una nota.&lt;/p>
&lt;h3 id="cómo-funciona-en-la-práctica-el-flujo-de-descubrimiento">Cómo funciona en la práctica el flujo de descubrimiento&lt;/h3>
&lt;p>Un cliente que recibe un event kind desconocido sigue estos pasos. (1) Consulta en el grafo de follows del usuario events &lt;code>kind:31989&lt;/code> con un tag &lt;code>d&lt;/code> que coincida con el event kind. (2) Resuelve cada tag &lt;code>a&lt;/code> recomendado hasta su event de handler &lt;code>kind:31990&lt;/code>. (3) Elige el handler cuya plantilla de URL &lt;code>web&lt;/code>, &lt;code>ios&lt;/code> o &lt;code>android&lt;/code> coincida con la plataforma actual. (4) Sustituye en la plantilla de URL la codificación &lt;code>bech32&lt;/code> de la entidad. (5) Ofrece al usuario la URL resultante como opción «Open in&amp;hellip;». El flujo está filtrado socialmente: un cliente que consulte events de handlers arbitrarios en relays no confiables podría redirigir a los usuarios a apps maliciosas, así que partir de personas a las que sigue el usuario es una opción predeterminada más segura que tratar por igual a todos los handlers publicados.&lt;/p>
&lt;h3 id="nip-89-y-la-capa-napplet">NIP-89 y la capa napplet&lt;/h3>
&lt;p>La sección Discover de Amethyst, el runtime host de napplets y la visualización de client tags construyen juntos una superficie completa de consumo de NIP-89 en Android. La especificación napplet, lanzada en el número anterior, amplía los posibles destinos de esos events de handlers NIP-89: applets en sandbox que ejecutan un runtime componible nativo de Nostr sobre Nostr y Blossom. NIP-89 es el grafo de descubrimiento y enrutamiento; el runtime napplet es uno de los objetivos de ejecución a los que puede apuntar.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Comentarios, correcciones y proyectos que se nos hayan escapado: abrid un issue en &lt;a href="https://github.com/andotherstuff/nostr-compass">github.com/andotherstuff/nostr-compass&lt;/a> o contactad con nosotros mediante un DM NIP-17 en npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923.&lt;/em>&lt;/p></content:encoded></item><item><title>Nostr Compass #28</title><link>https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/</link><pubDate>Wed, 24 Jun 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/</guid><description>&lt;p>Bienvenidos de nuevo a Nostr Compass, vuestra guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#sprout-cambia-su-nombre-a-buzz-y-publica-personas-equipos-y-agentes-gestionados-como-eventos-de-relay">Sprout cambia su nombre a Buzz&lt;/a> y empieza a publicar personas, equipos y registros de agentes gestionados como eventos de relay de Nostr, con estado de lectura entre dispositivos y marcadores de lectura por mensaje que sustituyen al antiguo modelo de frontera de insignias. &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#napplets-aplicaciones-nostr-componibles-con-un-l%c3%admite-de-confianza-definido">Napplets&lt;/a>, de sandwich.farm, se lanza como protocolo de límite de confianza para aplicaciones Nostr componibles distribuidas mediante Nostr y Blossom. &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#conduit-endurece-el-mvp-del-marketplace-y-cambia-de-forma-predeterminada-a-su-relay-p%c3%bablico">Conduit&lt;/a>, un monorepo de marketplace con tres aplicaciones sobre Nostr (mercado para compradores, portal para comerciantes y constructor de tiendas, con sus propios directorios de NIPs y especificaciones), integra 17 PRs que endurecen el MVP del marketplace, cambia de forma predeterminada a su relay público y añade analítica respetuosa con la privacidad. &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#bitblik-lanza-un-protocolo-p2p-de-intercambio-de-blik-a-lightning-sobre-nostr">BitBlik&lt;/a> publica un protocolo de intercambio P2P de BLIK a Lightning mediante DMs cifrados de Nostr, con un coordinador que liquida de forma atómica entre fiat y facturas retenidas de Lightning. &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#amethyst-v1121-a-v1126-contin%c3%baan-el-lanzamiento-de-v1120">Amethyst&lt;/a> continúa el lanzamiento de la semana pasada de wallets, pódcasts y entrenamientos con Health Connect Workouts, Road Events, respuestas colapsables, seguimiento de la salud de latencia de relays con un clasificador y una corrección de notarización para macOS. &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#amber-v622-implementa-metadatos-de-cliente-nip-46">Amber&lt;/a> implementa la extensión de metadatos de cliente de NIP-46 propuesta la semana pasada y muestra iconos e identidad de aplicaciones nativas en las pantallas de solicitudes del firmante. &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#haven-lanza-la-compartici%c3%b3n-privada-de-ubicaci%c3%b3n-sobre-marmot">Haven&lt;/a> lanza la compartición privada de ubicación sobre el protocolo de mensajería cifrada Marmot. &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#codedeck-programaci%c3%b3n-remota-con-agentes-sobre-nostr">CodeDeck&lt;/a> permite controlar desde el teléfono sesiones de Claude Code ejecutadas en el portátil mediante relays cifrados de Nostr, después reduce el emparejamiento a un único escaneo QR y añade selección de modelo por sesión. &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#grain-v080-rc1-publica-un-motor-completo-de-cliente-nostr">Grain&lt;/a> publica una biblioteca Nostr importable para Go que implementa el modelo outbox. Mostro Core, Wisp y Dark Wisp, Citrine, FIPS, Kubo (canales de YouTube seleccionados por los padres y un feed infantil sujeto obligatoriamente a confianza) y Pollerama (una puntuación de web of trust, un motor de relay en el dispositivo y una sección «Personas que quizá conozcas») publican parches de seguimiento. El trabajo aún no publicado abarca un coordinador MLS en el navegador de sandwich.farm, el ciclo de iteración de UX de nostter, la corrección de NIP-46 entre proyectos y la renovación del compositor de Zap Cooking, el ciclo de escrow Cashu de Shopstr, divine.video y Nostur. Entre los nuevos proyectos seguidos están Social Agents Prototype, PRana para el triaje de incidencias de git sobre Nostr y routstr-chat. En el protocolo, NIP-99 recibe una propuesta de checkout y escrow dentro del grafo que encaja directamente con el trabajo comercial de Conduit, BitBlik y Shopstr. Como este es el último Compass de junio, el número termina con &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#seis-a%c3%b1os-de-junios-de-nostr">Seis años de junios de Nostr&lt;/a>.&lt;/p></description><content:encoded>&lt;p>Bienvenidos de nuevo a Nostr Compass, vuestra guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#sprout-cambia-su-nombre-a-buzz-y-publica-personas-equipos-y-agentes-gestionados-como-eventos-de-relay">Sprout cambia su nombre a Buzz&lt;/a> y empieza a publicar personas, equipos y registros de agentes gestionados como eventos de relay de Nostr, con estado de lectura entre dispositivos y marcadores de lectura por mensaje que sustituyen al antiguo modelo de frontera de insignias. &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#napplets-aplicaciones-nostr-componibles-con-un-l%c3%admite-de-confianza-definido">Napplets&lt;/a>, de sandwich.farm, se lanza como protocolo de límite de confianza para aplicaciones Nostr componibles distribuidas mediante Nostr y Blossom. &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#conduit-endurece-el-mvp-del-marketplace-y-cambia-de-forma-predeterminada-a-su-relay-p%c3%bablico">Conduit&lt;/a>, un monorepo de marketplace con tres aplicaciones sobre Nostr (mercado para compradores, portal para comerciantes y constructor de tiendas, con sus propios directorios de NIPs y especificaciones), integra 17 PRs que endurecen el MVP del marketplace, cambia de forma predeterminada a su relay público y añade analítica respetuosa con la privacidad. &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#bitblik-lanza-un-protocolo-p2p-de-intercambio-de-blik-a-lightning-sobre-nostr">BitBlik&lt;/a> publica un protocolo de intercambio P2P de BLIK a Lightning mediante DMs cifrados de Nostr, con un coordinador que liquida de forma atómica entre fiat y facturas retenidas de Lightning. &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#amethyst-v1121-a-v1126-contin%c3%baan-el-lanzamiento-de-v1120">Amethyst&lt;/a> continúa el lanzamiento de la semana pasada de wallets, pódcasts y entrenamientos con Health Connect Workouts, Road Events, respuestas colapsables, seguimiento de la salud de latencia de relays con un clasificador y una corrección de notarización para macOS. &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#amber-v622-implementa-metadatos-de-cliente-nip-46">Amber&lt;/a> implementa la extensión de metadatos de cliente de NIP-46 propuesta la semana pasada y muestra iconos e identidad de aplicaciones nativas en las pantallas de solicitudes del firmante. &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#haven-lanza-la-compartici%c3%b3n-privada-de-ubicaci%c3%b3n-sobre-marmot">Haven&lt;/a> lanza la compartición privada de ubicación sobre el protocolo de mensajería cifrada Marmot. &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#codedeck-programaci%c3%b3n-remota-con-agentes-sobre-nostr">CodeDeck&lt;/a> permite controlar desde el teléfono sesiones de Claude Code ejecutadas en el portátil mediante relays cifrados de Nostr, después reduce el emparejamiento a un único escaneo QR y añade selección de modelo por sesión. &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#grain-v080-rc1-publica-un-motor-completo-de-cliente-nostr">Grain&lt;/a> publica una biblioteca Nostr importable para Go que implementa el modelo outbox. Mostro Core, Wisp y Dark Wisp, Citrine, FIPS, Kubo (canales de YouTube seleccionados por los padres y un feed infantil sujeto obligatoriamente a confianza) y Pollerama (una puntuación de web of trust, un motor de relay en el dispositivo y una sección «Personas que quizá conozcas») publican parches de seguimiento. El trabajo aún no publicado abarca un coordinador MLS en el navegador de sandwich.farm, el ciclo de iteración de UX de nostter, la corrección de NIP-46 entre proyectos y la renovación del compositor de Zap Cooking, el ciclo de escrow Cashu de Shopstr, divine.video y Nostur. Entre los nuevos proyectos seguidos están Social Agents Prototype, PRana para el triaje de incidencias de git sobre Nostr y routstr-chat. En el protocolo, NIP-99 recibe una propuesta de checkout y escrow dentro del grafo que encaja directamente con el trabajo comercial de Conduit, BitBlik y Shopstr. Como este es el último Compass de junio, el número termina con &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-24-newsletter/#seis-a%c3%b1os-de-junios-de-nostr">Seis años de junios de Nostr&lt;/a>.&lt;/p>
&lt;hr>
&lt;h2 id="historias-principales">Historias principales&lt;/h2>
&lt;h3 id="amethyst-v1121-a-v1126-continúan-el-lanzamiento-de-v1120">Amethyst v1.12.1 a v1.12.6 continúan el lanzamiento de v1.12.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> continuó el &lt;a href="https://nostrcompass.org/en/newsletters/2026-06-17-newsletter/#amethyst-v1120-ships-cashu-wallets-nutzaps-a-clink-driver-and-tor-self-heal">lanzamiento de v1.12.0 de la semana pasada&lt;/a> con seis parches rápidos entre el miércoles y el viernes. &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.12.1">v1.12.1&lt;/a> añade Health Connect Workouts y una acción Share-as-Image, y hace determinista el flag &lt;code>Active&lt;/code> de Tor para que el callback de arranque no pueda competir con la puerta. &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.12.2">v1.12.2&lt;/a> añade Road Events y respuestas colapsables; &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.12.3">v1.12.3&lt;/a> incorpora seguimiento de la salud de latencia de relays con un clasificador y una interfaz de panel, además de corregir la notarización en macOS; y &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.12.4">v1.12.4&lt;/a> a &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.12.6">v1.12.6&lt;/a> incluyen rondas de traducción de Crowdin y automatización de créditos de traductores.&lt;/p>
&lt;h3 id="sprout-cambia-su-nombre-a-buzz-y-publica-personas-equipos-y-agentes-gestionados-como-eventos-de-relay">Sprout cambia su nombre a Buzz y publica personas, equipos y agentes gestionados como eventos de relay&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-04-29-newsletter/#sprout-adds-owner-attestation-and-multi-workspace-support">Sprout&lt;/a>, el workspace autoalojable de Block donde humanos y agentes de IA colaboran en los mismos canales y cada mensaje, reacción, paso de workflow, aprobación de revisión y evento git se escribe como evento Nostr firmado, pasó a llamarse &lt;a href="https://github.com/block/buzz">Buzz&lt;/a> esta semana. GitHub ahora redirige el antiguo slug &lt;code>block/sprout&lt;/code> a &lt;code>block/buzz&lt;/code>; el repositorio, la licencia y la dirección del producto no cambian. Toda la cobertura de Sprout en números anteriores se refiere al mismo proyecto.&lt;/p>
&lt;p>La semana trajo trabajo sustancial de producto junto con el cambio de nombre. Las personas, los equipos y los registros de agentes gestionados se publican ahora como eventos de relay de Nostr mediante &lt;a href="https://github.com/block/buzz/pull/1189">PR #1189&lt;/a>, lo que permite que una misma identidad de agente aparezca en varios workspaces y registros de auditoría sin duplicar estado. Un nuevo panel de escritorio muestra las attestations de propietario NIP-OA en los perfiles (&lt;a href="https://github.com/block/buzz/pull/1198">PR #1198&lt;/a>); la frontera de insignias no leídas de los hilos de canal se sustituyó por marcadores de lectura por mensaje para que los recuentos permanezcan correctos entre dispositivos (&lt;a href="https://github.com/block/buzz/pull/1178">PR #1178&lt;/a>); y la bandeja de entrada añade atribución de autor y origen en los eventos de recordatorio (&lt;a href="https://github.com/block/buzz/pull/1176">PR #1176&lt;/a>).&lt;/p>
&lt;p>Los canales temporales caducan ahora de forma predeterminada a los siete días (&lt;a href="https://github.com/block/buzz/pull/1182">PR #1182&lt;/a>); las sustituciones de relay por agente respetan el relay configurado antes de recurrir al predeterminado del workspace (&lt;a href="https://github.com/block/buzz/pull/1131">PR #1131&lt;/a>); y la compilación de Windows incluye ahora un toolchain completo de Git for Windows para la herramienta de shell (&lt;a href="https://github.com/block/buzz/pull/1145">PR #1145&lt;/a>).&lt;/p>
&lt;h3 id="napplets-aplicaciones-nostr-componibles-con-un-límite-de-confianza-definido">Napplets: aplicaciones Nostr componibles con un límite de confianza definido&lt;/h3>
&lt;p>Sandwich.farm anunció &lt;a href="https://napplet.run">napplet.run&lt;/a> esta semana como protocolo para applets componibles de Nostr, o napplets: pequeños programas que hacen una sola cosa, se ejecutan en entornos aislados y se resuelven mediante Nostr y Blossom con la misma forma de evento que los nsites. El proyecto se distribuye en tres repositorios: &lt;a href="https://github.com/napplet/web">napplet/web&lt;/a>, que contiene los paquetes web y publicó esta semana 51 tags de versión de subpaquetes en un lanzamiento coordinado (&lt;code>@napplet/core&lt;/code>, &lt;code>@napplet/sdk&lt;/code>, &lt;code>@napplet/nap&lt;/code>, &lt;code>@napplet/shim&lt;/code>, &lt;code>@napplet/conformance&lt;/code>); &lt;a href="https://github.com/napplet/naps">napplet/naps&lt;/a>, la vía de especificaciones NAPs con 15 PRs fusionados; y &lt;a href="https://github.com/kehto/web">kehto/web&lt;/a>, el runtime web con 41 PRs fusionados y un playground en &lt;a href="https://kehto.github.io/web/playground">kehto.github.io/web/playground&lt;/a>. El PR de especificación correspondiente es &lt;a href="https://github.com/nostr-protocol/nips/pull/2303">NIP-5D #2303&lt;/a>, abierto por dskvr (sandwich.farm).&lt;/p>
&lt;p>La premisa arquitectónica es un límite de confianza definido en la capa de protocolo. Un shell intermedia operaciones peligrosas (firma, acceso a claves y escrituras en relays), un runtime se ocupa de la implementación y de la UX de alto nivel, y los napplets siguen siendo portables, desechables y más difíciles de capturar por un único host. Los napplets pueden comunicarse entre sí dentro del mismo shell, y el diseño evita el bloqueo a un runtime. El autor sitúa los napplets en diálogo con NMP (de Pablof7z) y Tiles (de Soapbox) como enfoques paralelos al mismo problema, y señala que la compatibilidad de Amethyst v1.12.6 con &lt;a href="https://github.com/nostr-protocol/nips/blob/master/5A.md">NIP-5A&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-5d/">NIP-5D&lt;/a> da a los napplets al menos un cliente publicado desde el lanzamiento. También incluye un hilo histórico: el anterior &lt;code>napp.run&lt;/code> de sandwich.farm, un prototipo de aplicación nativa NIP-07, y el navegador &lt;code>dryft&lt;/code>, fork de Thorium, influyeron en el diseño actual antes de ser apartados.&lt;/p>
&lt;h3 id="conduit-endurece-el-mvp-del-marketplace-y-cambia-de-forma-predeterminada-a-su-relay-público">Conduit endurece el MVP del marketplace y cambia de forma predeterminada a su relay público&lt;/h3>
&lt;p>&lt;a href="https://github.com/Conduit-BTC/conduit-mono">Conduit&lt;/a> es el monorepo de tres aplicaciones de marketplace de &lt;a href="https://conduit.market">conduit.market&lt;/a> (Market para compradores, Merchant Portal y Store Builder) bajo la organización &lt;code>Conduit-BTC&lt;/code>, con directorios propios &lt;code>nips/&lt;/code> y &lt;code>specs/&lt;/code> que definen primitivas comerciales de Nostr específicas de Conduit, y con la extensión Scope-2 de &lt;a href="https://github.com/fiatjaf/khatru">khatru&lt;/a>, &lt;a href="https://github.com/Conduit-BTC/conduit-relay">Conduit-BTC/conduit-relay&lt;/a>, por debajo. Ambos repositorios se abrieron a comienzos de este año; esta semana el proyecto fusionó 17 PRs que endurecen el MVP del marketplace.&lt;/p>
&lt;p>Los PRs publicados se concentran en la corrección del marketplace: estados de seguridad de los anuncios (&lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/110">PR #110&lt;/a>) y endurecimiento de precios de productos y zonas de envío en el lado del comerciante (&lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/115">PR #115&lt;/a>). En el relay, &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/102">PR #102&lt;/a> corrige la detección de capacidades comerciales, &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/112">PR #112&lt;/a> ignora hints de relays inseguros de terceros y &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/128">PR #128&lt;/a> establece el dominio del relay público de Conduit como predeterminado para clientes nuevos. La analítica respetuosa con la privacidad llega en &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/109">PR #109&lt;/a> y &lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/129">PR #129&lt;/a>, y una actualización de &lt;code>dompurify&lt;/code> cierra un aviso OSV (&lt;a href="https://github.com/Conduit-BTC/conduit-mono/pull/116">PR #116&lt;/a>). El trabajo forma parte de una ola comercial más amplia de &lt;a href="https://nostrcompass.org/es/topics/nip-99/">NIP-99&lt;/a> esta semana: &lt;a href="https://github.com/nostr-protocol/nips/pull/2323">PR #2323&lt;/a> propone una capa de checkout dentro del grafo para mercados NIP-99 que cubre flujo de pedidos, escrow y disputas; la veterana &lt;a href="https://github.com/GammaMarkets/market-spec">Gamma Markets Market Spec&lt;/a>, que amplía NIP-99 para comercio electrónico completo, se convierte en la capa de especificación sobre la que construyen Conduit y otros; y Shopstr publicó esa misma semana un ciclo de escrow Cashu.&lt;/p>
&lt;h3 id="bitblik-lanza-un-protocolo-p2p-de-intercambio-de-blik-a-lightning-sobre-nostr">BitBlik lanza un protocolo P2P de intercambio de BLIK a Lightning sobre Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/bit-blik/bitblik">BitBlik&lt;/a> se abrió esta semana como protocolo P2P de intercambio BLIK ↔ Lightning construido sobre Nostr. BLIK es el sistema polaco de pagos instantáneos emitido por bancos; el coordinador de BitBlik liquida de forma atómica entre fiat BLIK, pagado por takers, y facturas retenidas de Lightning, financiadas por makers, mientras el ciclo de la operación se desarrolla sobre Nostr. La aplicación Flutter, la CLI y el coordinador comparten un paquete &lt;code>core&lt;/code>, y el proyecto se distribuye mediante el monorepo de GitHub &lt;code>bit-blik/bitblik&lt;/code>, la compilación web en &lt;a href="https://www.bitblik.app">www.bitblik.app&lt;/a> y la aplicación de Zapstore &lt;code>app.bitblik&lt;/code>.&lt;/p>
&lt;p>El protocolo usa mensajes directos cifrados de Nostr (&lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>) para el RPC entre cliente y coordinador. Las ofertas se publican como eventos reemplazables parametrizados de kind &lt;code>38383&lt;/code>, las solicitudes RPC en kind &lt;code>25195&lt;/code>, las respuestas RPC en kind &lt;code>25196&lt;/code> y las actualizaciones de estado en kind &lt;code>25197&lt;/code>. El coordinador retiene una factura Lightning mientras un taker envía un código BLIK, libera la preimagen cuando se confirma la transferencia BLIK y dirige la liquidación de la factura al maker.&lt;/p>
&lt;hr>
&lt;h2 id="versiones-etiquetadas">Versiones etiquetadas&lt;/h2>
&lt;h3 id="amber-v622-implementa-metadatos-de-cliente-nip-46">Amber v6.2.2 implementa metadatos de cliente NIP-46&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, el firmante remoto Android dominante de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> mantenido por greenart7c3, publicó &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.2.2">v6.2.2&lt;/a> la misma semana en que se fusionó el PR de especificación correspondiente. La versión muestra iconos de aplicaciones nativas y los nuevos campos de metadatos de cliente en las pantallas de solicitudes y la lista de aplicaciones, persiste los metadatos del cliente en cada conexión y captura el icono y el nombre de la aplicación nativa al conectar y aceptar. El cambio se empareja directamente con &lt;a href="https://github.com/nostr-protocol/nips/pull/2381">NIP-46 PR #2381&lt;/a>, de DocNR, que añade metadatos opcionales del cliente a la solicitud de conexión para que los firmantes puedan mostrar un nombre y un icono reconocibles del solicitante. Amber v6.2.2 también añade compatibilidad con el evento kind 30618 y separa los relays predeterminados y de conexión en la pantalla Active relays.&lt;/p>
&lt;p>La versión endurece la superficie de seguridad del firmante. Los cuerpos descifrados de solicitudes y respuestas NIP-46 ya no llegan a los logs, y los payloads de cifrado y descifrado se almacenan como ciphertext y se descifran bajo demanda. Toda salida de logcat queda detrás de &lt;code>BuildConfig.DEBUG&lt;/code>; los llamantes desde navegador, sin paquete, se fuerzan a preguntar siempre; y las copias de &lt;code>nsec&lt;/code>, &lt;code>ncryptsec&lt;/code> y palabras semilla al portapapeles se marcan como sensibles y se borran tras una demora. Se añaden exclusiones explícitas de copias de seguridad y extracción de datos como defensa en profundidad. La versión también corrige un fallo por scroll anidado en Active relays, un fallo de clave duplicada de &lt;code>LazyColumn&lt;/code> causado por una deduplicación con carreras de solicitudes bunker y una carrera de &lt;code>EOSE&lt;/code> en la comprobación de actualizaciones.&lt;/p>
&lt;h3 id="haven-lanza-la-compartición-privada-de-ubicación-sobre-marmot">Haven lanza la compartición privada de ubicación sobre Marmot&lt;/h3>
&lt;p>&lt;a href="https://github.com/mehmetefeumit/Haven-App">Haven&lt;/a> se abrió esta semana como aplicación privada y resistente a la censura para compartir ubicación en Android e iOS, ejecutada sobre Nostr mediante el protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>. El repositorio publicó cinco versiones entre &lt;a href="https://github.com/mehmetefeumit/Haven-App/releases/tag/v0.1.0">v0.1.0&lt;/a> y &lt;a href="https://github.com/mehmetefeumit/Haven-App/releases/tag/v0.1.4">v0.1.4&lt;/a> en cuatro días, las primeras versiones de un proyecto nuevo. Haven está construido en Dart y Flutter y se publica en Zapstore como aplicación firmada por el desarrollador. Marmot, la capa de mensajería cifrada de extremo a extremo basada en MLS para Nostr, aporta el estado de grupo y la distribución de ciphertext; Haven extiende ese patrón desde la mensajería hasta la ubicación compartida, y el estado cifrado de cada grupo transporta las actualizaciones de ubicación que el grupo ha consentido compartir.&lt;/p>
&lt;h3 id="codedeck-programación-remota-con-agentes-sobre-nostr">CodeDeck: programación remota con agentes sobre Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/JeroenOnNostr/codedeck">CodeDeck&lt;/a> se abrió esta semana como interfaz de programación con agentes y múltiples sesiones para Android y escritorio, construida con Tauri v2, React 19 y un backend en Rust, que permite controlar desde el teléfono sesiones de &lt;a href="https://www.anthropic.com/claude-code">Claude Code&lt;/a> ejecutadas en un portátil mediante relays cifrados de Nostr. El proyecto publicó &lt;a href="https://github.com/JeroenOnNostr/codedeck/releases/tag/v2026.06.17">v2026.06.17&lt;/a>, &lt;a href="https://github.com/JeroenOnNostr/codedeck/releases/tag/v2026.6.18">v2026.6.18&lt;/a> y &lt;a href="https://github.com/JeroenOnNostr/codedeck/releases/tag/v2026.6.20">v2026.6.20&lt;/a> en la misma ventana de cuatro días. El modelo de transporte usa Nostr como plano de control cifrado: un teléfono con CodeDeck publica comandos como eventos cifrados a los que se suscribe el bridge que se ejecuta junto al portátil, y este publica la salida de la sesión mediante los mismos relays.&lt;/p>
&lt;p>v2026.06.17 integra la malla FIPS de &lt;code>nostr-vpn&lt;/code> como servicio VPN Android de la aplicación para que un portátil pueda compilar, instalar, abrir y controlar builds de desarrollo de una aplicación en un teléfono físico de prueba desde cualquier lugar, con CodeDeck como único software instalado en el teléfono de prueba. v2026.6.18 reduce el emparejamiento y la invitación a la malla a un único escaneo QR, y v2026.6.20 añade selección de modelo por sesión para que cada sesión comience con el modelo elegido.&lt;/p>
&lt;h3 id="grain-v080-rc1-publica-un-motor-completo-de-cliente-nostr">Grain v0.8.0-rc1 publica un motor completo de cliente Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/0ceanSlim/grain">Grain&lt;/a>, el relay Go mantenido por 0ceanSlim, publicó &lt;a href="https://github.com/0ceanSlim/grain/releases/tag/v0.8.0-rc1">v0.8.0-rc1&lt;/a> y ahora es a la vez un relay de Nostr y la biblioteca cliente Go importable sobre la que está construido. Mientras v0.7.x se centraba en operar el relay desde un navegador, la línea v0.8 publica &lt;code>client/core&lt;/code>, un motor cliente Nostr independiente con modelo outbox, escrito en Go puro y sin dependencias de cgo ni HTTP. El motor posee un pool compartido de relays, resuelve las listas de relays de cada usuario y dirige cada lectura y publicación según el &lt;a href="https://mikedilger.com/gossip-model/">modelo gossip / outbox&lt;/a>: se leen las notas de un usuario desde sus relays outbox, y una respuesta publicada llega a los relays inbox del autor de la nota raíz. El frontend web de Grain es ahora el consumidor de referencia de esa biblioteca, por lo que la interfaz es una aplicación utilizable y un ejemplo práctico para proyectos Go derivados.&lt;/p>
&lt;p>La versión incorpora cifrado nativo &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> (v2 y v3), AUTH de relay &lt;a href="https://github.com/nostr-protocol/nips/blob/master/42.md">NIP-42&lt;/a>, listas de relays &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a>, &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>, &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a> y &lt;a href="https://github.com/nostr-protocol/nips/blob/master/37.md">NIP-37&lt;/a>, tags de cliente &lt;a href="https://nostrcompass.org/es/topics/nip-89/">NIP-89&lt;/a>, y soporte multimedia de &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-96/">NIP-96&lt;/a>. Las aplicaciones Go que antes tenían que volver a implementar el enrutamiento de relays ahora pueden hacer &lt;code>import&lt;/code> del motor directamente.&lt;/p>
&lt;h3 id="mostro-core-v0131-continúa-protocol-v2">Mostro Core v0.13.1 continúa Protocol v2&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro-core">Mostro Core&lt;/a> publicó &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.13.1">v0.13.1&lt;/a> como continuación del &lt;a href="https://nostrcompass.org/en/newsletters/2026-06-17-newsletter/#mostro-core-v0130-cuts-the-relay-middleman-with-protocol-v2">despliegue de Protocol v2 de la semana pasada&lt;/a>, e introdujo una variante de error &lt;code>PriceTooStale&lt;/code> para el contrato del feed de precios del protocolo. En el daemon, &lt;a href="https://github.com/MostroP2P/mostro/pull/752">PR #752&lt;/a> presenta a los clientes los ids de pedido no válidos como un error &lt;code>CantDo(NotFound)&lt;/code> en vez de descartarlos en silencio; &lt;a href="https://github.com/MostroP2P/mostro/pull/785">PR #785&lt;/a> hace que la versión interna del protocolo siga el transporte activo; &lt;a href="https://github.com/MostroP2P/mostro/pull/778">PR #778&lt;/a> incorpora la fase 3 del proveedor de cruce fiat El Toque para CUP y MLC; y &lt;a href="https://github.com/MostroP2P/mostro/pull/782">PR #782&lt;/a> cambia el nombre del tag informativo de &lt;a href="https://github.com/nostr-protocol/nips/blob/master/33.md">NIP-33&lt;/a>, &lt;code>protocol_versions&lt;/code>, a &lt;code>protocol_version&lt;/code> para ajustarlo a la especificación.&lt;/p>
&lt;h3 id="wisp-v112-y-la-variante-dark-wisp">Wisp v1.1.2 y la variante Dark Wisp&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>, el cliente Android de Barrydeen escrito con Kotlin y Jetpack Compose, publicó &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.1.2">v1.1.2&lt;/a>, que mantiene separadas las ramas de wallet autoenviadas dentro de un orden determinista de transacciones (&lt;a href="https://github.com/barrydeen/wisp/pull/586">PR #586&lt;/a>), crea de forma perezosa los reproductores de vídeo inline para resistir notas con muchos medios (&lt;a href="https://github.com/barrydeen/wisp/pull/592">PR #592&lt;/a>), corrige una &lt;code>ConcurrentModificationException&lt;/code> en el conjunto de relays de eventos (&lt;a href="https://github.com/barrydeen/wisp/pull/595">PR #595&lt;/a>) y corrige la medición intrínseca del contenido de las burbujas de chat para evitar un fallo de &lt;code>SubcomposeLayout&lt;/code> (&lt;a href="https://github.com/barrydeen/wisp/pull/596">PR #596&lt;/a>). La versión también incorpora un filtro incremental del feed con puntuación de spam fuera del lock. El equipo de Wisp publicó además Dark Wisp v1.1.0 en Zapstore esta semana como variante multidivisa que añade objetivos de zap en ZEC, DASH, BCH y LTC, además de un modo anónimo.&lt;/p>
&lt;h3 id="citrine-v301">Citrine v3.0.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a>, el relay local Android de Nostr de greenart7c3, publicó &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v3.0.1">v3.0.1&lt;/a> con una única corrección: cancelar el registro de un receptor Pokey no registrado ya no provoca un fallo que derribe el relay.&lt;/p>
&lt;h3 id="fips-v040-rc2">FIPS v0.4.0-rc2&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a>, el Free Internetworking Peering System, etiquetó &lt;a href="https://github.com/jmcorgan/fips/releases/tag/v0.4.0-rc2">v0.4.0-rc2&lt;/a> como release candidate de validación de empaquetado sobre el formato de cable v0.3.x. La línea v0.4.0 añade un transporte de mixnet Nym y descubrimiento LAN opcional por mDNS para la accesibilidad de peers, renueva el plano de datos para aumentar el rendimiento de un solo nodo y reducir la CPU por paquete, saca la superficie de lectura del operador de la ruta crítica del plano de datos para que la observabilidad siga respondiendo bajo carga, publica una TUI &lt;code>fipstop&lt;/code> renovada y endurece el rekey de FMP y FSP para que no interrumpa el tráfico bajo pérdida de paquetes. Es una release candidate; la versión estable v0.4.0 estaba prevista provisionalmente para el 2026-06-21.&lt;/p>
&lt;h3 id="kubo-v20260612-y-v20260620-fijan-el-feed-infantil-sujeto-a-confianza-y-añaden-youtube-seleccionado-por-los-padres">Kubo v2026.06.12 y v2026.06.20 fijan el feed infantil sujeto a confianza y añaden YouTube seleccionado por los padres&lt;/h3>
&lt;p>&lt;a href="https://github.com/JeroenOnNostr/kubo">Kubo&lt;/a>, la alternativa nativa de Nostr a YouTube Kids de JeroenOnNostr, construida sobre Trust Extended Permissions Protocol (TEPP), publicó dos versiones esta semana. &lt;a href="https://zapstore.dev/apps/com.kubo.app">v2026.06.12&lt;/a>, con versionado de calendario y &lt;code>versionCode&lt;/code> derivado &lt;code>YYYYMMDD&lt;/code>, hace obligatorio el feed infantil sujeto a confianza: toda publicación, perfil, reacción y repost que el menor pueda ver o con el que pueda interactuar pasa ahora por TEPP, limitado a las personas admitidas por el progenitor. Las instalaciones nuevas comienzan con la puerta de confianza activada y el círculo del menor se inicializa durante el onboarding, de modo que el feed queda protegido desde la primera apertura. La versión también incorpora chat de grupo gestionado para progenitores, dirige los eventos de confianza al conjunto privado de relays de la familia y falla de forma cerrada, sin mostrar nada, en lugar de filtrar contenido no verificado si no puede cargar los datos de confianza.&lt;/p>
&lt;p>&lt;a href="https://zapstore.dev/apps/com.kubo.app">v2026.06.20&lt;/a> añade canales de YouTube seleccionados por los progenitores: estos pueden buscar un canal y añadirlo al feed infantil para que los menores solo vean vídeos de canales aprobados, con una vía rápida HTTP y una interfaz optimista que sustituyen al proceso de añadir de unos diez segundos. La versión también elimina la opción de desactivar Trust Extended Permissions, pues el proyecto se basa en confianza obligatoria y el interruptor queda siempre activo; añade una página específica de soporte; corrige las &lt;code>@mentions&lt;/code> en el chat de grupo para que etiquetar a alguien muestre el &lt;code>@nombre&lt;/code> clicable en vez de un &lt;code>nostr:npub1…&lt;/code> sin procesar; añade autocompletado de menciones; y corrige la publicación de confianza para que dependa del estado real de aplicación, no de un flag espejo. Ambas versiones se siguen mediante Zapstore como la aplicación Android &lt;code>com.kubo.app&lt;/code> firmada por el desarrollador.&lt;/p>
&lt;h3 id="pollerama-v190-a-v194-añaden-puntuación-de-web-of-trust-un-motor-de-relay-en-el-dispositivo-y-una-sección-personas-que-quizá-conozcas">Pollerama v1.9.0 a v1.9.4 añaden puntuación de web of trust, un motor de relay en el dispositivo y una sección «Personas que quizá conozcas»&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-polls">Pollerama&lt;/a>, de abh3po, el cliente de encuestas y feeds Nostr de la familia Form* en &lt;a href="https://pollerama.fun">pollerama.fun&lt;/a>, publicó cinco versiones en Zapstore esta semana. v1.9.0 incorpora un nuevo motor de relay en el dispositivo: un relay local integrado guarda todo lo que el usuario ha visto y responde primero desde la caché local, por lo que feeds, perfiles e hilos cargan al instante, incluso sin conexión, y se mantienen sincronizados con la red en segundo plano. Todo el tráfico de relays, lecturas y escrituras, atraviesa este motor fuera del hilo principal, y las notas, perfiles, reacciones y zaps ya cargados salen directamente del almacenamiento local en lugar de volver a obtenerse.&lt;/p>
&lt;p>v1.9.2 corrige que Home y los feeds de notas, así como cualquier vista Following/Network, aparezcan a veces vacíos al abrir o reanudar, mediante el cacheo de la lista de seguidos con independencia del motor de sincronización; hace que las notas compartidas dentro de DMs carguen de forma fiable al obtener la nota referenciada desde los hints de relay aunque el usuario no siga al autor; y añade un panel de ajustes Network que muestra conexiones de relay, tamaño de caché y estado de sincronización, con controles para reconectar o borrar la caché local. v1.9.3 corrige un fallo al arrancar y una regresión de carga del feed Home.&lt;/p>
&lt;p>v1.9.4 introduce una puntuación de confianza de web of trust en los perfiles, que indica cuántas de las personas seguidas por el usuario siguen también a esa persona y se muestra como un chip de red, y una sección «Personas que quizá conozcas», con sugerencias obtenidas de la web of trust y ordenadas por cuántos seguidos las siguen. Los ajustes Network muestran ahora el tamaño de la web of trust y la hora del último cálculo, con un botón para recalcular bajo demanda. El worker de web of trust calcula en segundo plano las puntuaciones y recomendaciones para no bloquear la aplicación.&lt;/p>
&lt;h3 id="versiones-etiquetadas-menores">Versiones etiquetadas menores&lt;/h3>
&lt;p>&lt;a href="https://github.com/nogringo/nostr-mail-client/releases/tag/v0.13.1">nogringo/nostr-mail-client v0.13.1&lt;/a> restaura el inicio de sesión mediante aplicaciones firmantes &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> para Amber, Aegis y Primal, y deja de pedir repetidamente a las aplicaciones firmantes que firmen contactos. &lt;a href="https://github.com/Cameri/nostream/releases/tag/v3.0.0">Cameri/nostream v3.0.0&lt;/a> elimina &lt;code>unsafe-inline&lt;/code> de la factoría de aplicaciones web e implementa nonces de scripts. &lt;a href="https://github.com/lawalletio/lawallet-nwc/releases/tag/v1.0.0">LaWallet NWC v1.0.0&lt;/a> publica la primera versión 1.0 del proyecto con activación mediante tarjeta con enlace QR compartible, reconocimiento de Remote Wallet y aprovisionamiento automático de Lightning Address. &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v2.0.2">Formstr Nostr Calendar v2.0.0 a v2.0.2&lt;/a> añaden una PWA, corrigen eventos reemplazables offline (&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/194">PR #194&lt;/a>) y vinculan los métodos del firmante para que funcione el envío de formularios privados (&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/199">PR #199&lt;/a>). Completan la semana versiones menores de &lt;a href="https://github.com/Spl0itable/NYM">Spl0itable/NYM&lt;/a>, &lt;a href="https://github.com/codeswot/ZapBook">codeswot/ZapBook&lt;/a>, &lt;a href="https://github.com/77elements/noornote">77elements/noornote&lt;/a>, &lt;a href="https://github.com/mattn/nostr-relay">mattn/nostr-relay&lt;/a>, &lt;a href="https://github.com/mattn/algia">mattn/algia&lt;/a>, &lt;a href="https://github.com/mouse484/astraea">mouse484/astraea&lt;/a>, &lt;a href="https://github.com/dergigi/boris">dergigi/boris&lt;/a>, &lt;a href="https://github.com/fiatjaf/nak">fiatjaf/nak&lt;/a>, &lt;a href="https://github.com/Spl0itable/nosflare">Spl0itable/nosflare&lt;/a> y &lt;a href="https://github.com/nostrord/nostrord">nostrord/nostrord&lt;/a>.&lt;/p>
&lt;hr>
&lt;h2 id="cambios-aún-no-publicados">Cambios aún no publicados&lt;/h2>
&lt;h3 id="cordn-ad-hoc-cvm-un-coordinador-mls-en-el-navegador">Cordn Ad-hoc CVM: un coordinador MLS en el navegador&lt;/h3>
&lt;p>&lt;a href="https://github.com/sandwichfarm/cordn-adhoc-cvm">Cordn Ad-hoc&lt;/a>, la nueva aplicación web de sandwich.farm, se abre públicamente esta semana como coordinador MLS que se ejecuta en una pestaña del navegador para grupos &lt;a href="https://github.com/Cordn-msg/cordn">Cordn&lt;/a> ad hoc. El patrón es poco habitual: una pestaña ejecuta el proceso coordinador Nostr de &lt;a href="https://nostrcompass.org/es/topics/contextvm/">ContextVM&lt;/a>, publica la pubkey del coordinador, recibe solicitudes MCP mediante relays de Nostr y almacena paquetes de claves MLS, welcomes, solicitudes de unión y mensajes de grupo en el almacenamiento del navegador, sin backend. La aplicación impide que se ejecuten a la vez varios coordinadores con la misma pubkey y ofrece al operador un log de depuración para eventos Nostr sin procesar, solicitudes decodificadas y heartbeats de instancia.&lt;/p>
&lt;h3 id="snowcaitnostter-publica-19-prs-de-iteración-de-ux">SnowCait/nostter publica 19 PRs de iteración de UX&lt;/h3>
&lt;p>&lt;a href="https://github.com/SnowCait/nostter">nostter&lt;/a>, el cliente web Nostr de SnowCait, fusionó 19 PRs esta semana sin publicar una versión. La sustitución de &lt;code>nostrapp.link&lt;/code> por &lt;code>app-manager.nostter.app&lt;/code> (&lt;a href="https://github.com/SnowCait/nostter/pull/2234">PR #2234&lt;/a>) y la adición de &lt;code>deck.nostter.app&lt;/code> a la allowlist &lt;code>frame-ancestors&lt;/code> (&lt;a href="https://github.com/SnowCait/nostter/pull/2233">PR #2233&lt;/a>) consolidan la superficie del proyecto bajo el dominio &lt;code>nostter.app&lt;/code>. Los eventos reemplazables de las cuentas seguidas se cachean en IndexedDB (&lt;a href="https://github.com/SnowCait/nostter/pull/2231">PR #2231&lt;/a>), y el estado seen-on del relay recupera reactividad con opciones separadas para seen-on y via (&lt;a href="https://github.com/SnowCait/nostter/pull/2230">PR #2230&lt;/a>).&lt;/p>
&lt;h3 id="zap-cooking-corrige-un-error-de-nip-46-entre-proyectos-y-renueva-el-compositor">Zap Cooking corrige un error de NIP-46 entre proyectos y renueva el compositor&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a>, el cliente para compartir recetas sobre Nostr, fusionó 16 PRs esta semana. El cambio de mayor alcance es &lt;a href="https://github.com/zapcooking/frontend/pull/452">PR #452&lt;/a>: los firmantes remotos de Primal sellaban eventos con la pubkey del propio firmante, lo que rompía subidas, zaps y auth para cualquier cliente que pasara por Primal. Zap Cooking detectó y parcheó la ruta; la corrección es local al cliente, pero el error existe en todo el espacio &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>. El compositor se reconstruye en &lt;a href="https://github.com/zapcooking/frontend/pull/458">PR #458&lt;/a> con temporizador de cuenta atrás, una interfaz unificada de respuesta/comentario y pestañas Write/Preview. Tres correcciones SSR (&lt;a href="https://github.com/zapcooking/frontend/pull/460">PR #460&lt;/a>, &lt;a href="https://github.com/zapcooking/frontend/pull/461">PR #461&lt;/a>, &lt;a href="https://github.com/zapcooking/frontend/pull/462">PR #462&lt;/a>) y &lt;a href="https://github.com/zapcooking/frontend/pull/454">PR #454&lt;/a> estabilizan las rutas de perfiles y recetas. La experiencia de exploración añade filas desplazables mediante arrastre, un cursor de avatar con enlace al perfil y una corrección de pestañas fijas para comunidades (&lt;a href="https://github.com/zapcooking/frontend/pull/456">PR #456&lt;/a>).&lt;/p>
&lt;h3 id="shopstr-publica-un-ciclo-de-escrow-cashu-y-herramientas-para-escaparates">Shopstr publica un ciclo de escrow Cashu y herramientas para escaparates&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>, el marketplace &lt;a href="https://nostrcompass.org/es/topics/nip-99/">NIP-99&lt;/a>, fusionó esta semana una serie de PRs sustanciales. &lt;a href="https://github.com/shopstr-eng/shopstr/pull/512">PR #512&lt;/a> implementa un ciclo completo de escrow Cashu P2PK para el marketplace, conectado con la ola comercial más amplia de esa semana mediante &lt;a href="https://github.com/nostr-protocol/nips/pull/2323">NIP-99 PR #2323&lt;/a>, la propuesta de capa de checkout dentro del grafo, y el lanzamiento de Conduit. Las herramientas de lectura llegan en &lt;a href="https://github.com/shopstr-eng/shopstr/pull/543">PR #543&lt;/a> para listar empresas, obtener sus detalles, recuperar un escaparate y consultar la reputación del vendedor. &lt;a href="https://github.com/shopstr-eng/shopstr/pull/229">PR #229&lt;/a> incorpora soporte para pegar URLs de imágenes de perfil y tienda, y &lt;a href="https://github.com/shopstr-eng/shopstr/pull/359">PR #359&lt;/a> actualiza la obtención de estadísticas del marketplace para incluir una marca de tiempo.&lt;/p>
&lt;h3 id="trabajo-de-divinevideo-para-móvil-y-escritorio">Trabajo de divine.video para móvil y escritorio&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">divine.video&lt;/a>, el cliente de vídeos cortos en bucle de rabble que restaura los archivos de Vine, fusionó esta semana PRs centrados en reproducción y edición: los vídeos direccionables se deduplican en el feed (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/5465">PR #5465&lt;/a>); los filtros locales de tags Nostr ahora exigen coincidencia exacta para evitar resultados espurios (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/5463">PR #5463&lt;/a>); el editor de vídeo recupera borradores con capas de stickers sin fallar (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/5474">PR #5474&lt;/a>); y la insignia Messages cuenta los chats no leídos de cuentas seguidas a los que aún no se ha respondido (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/5473">PR #5473&lt;/a>).&lt;/p>
&lt;h3 id="nostur-incorpora-metadatos-de-cliente-nip-46-y-correcciones-de-refresco-de-dms">Nostur incorpora metadatos de cliente NIP-46 y correcciones de refresco de DMs&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>, el cliente iOS de Fabian, fusionó cuatro PRs en el repositorio canónico después de la &lt;a href="https://nostrcompass.org/en/newsletters/2026-06-17-newsletter/#nostur-1290-ships-anonymous-replies-and-remote-signer-logout">versión 1.29.0 de la semana pasada&lt;/a>. &lt;a href="https://github.com/nostur-com/nostur-ios-public/pull/74">PR #74&lt;/a> añade metadatos de cliente a las solicitudes de conexión bunker NIP-46, la misma forma propuesta por DocNR y publicada esta semana por Amber v6.2.2. &lt;a href="https://github.com/nostur-com/nostur-ios-public/pull/75">PR #75&lt;/a> y &lt;a href="https://github.com/nostur-com/nostur-ios-public/pull/76">PR #76&lt;/a> corrigen las rutas de refresco de DMs y recuperación al primer plano tras una transición de iPhone, y &lt;a href="https://github.com/nostur-com/nostur-ios-public/pull/78">PR #78&lt;/a> añade escaneo QR a la configuración NWC personalizada.&lt;/p>
&lt;hr>
&lt;h2 id="nuevos-proyectos-seguidos-y-descubiertos">Nuevos proyectos seguidos y descubiertos&lt;/h2>
&lt;h3 id="social-agents-prototype-colaboración-entre-agentes-de-ia-nativa-de-nostr-con-aprobación-humana">Social Agents Prototype: colaboración entre agentes de IA nativa de Nostr con aprobación humana&lt;/h3>
&lt;p>&lt;a href="https://github.com/SrulyRosenblat/social_agents_prototype_nostr">Social Agents Prototype&lt;/a> es una herramienta experimental de IA construida sobre Nostr que explora la comunicación descentralizada entre agentes. Los agentes emiten preguntas atómicas por la red, solo responden los agentes pertinentes y cada mensaje enviado o recibido pasa por una puerta de aprobación humana antes del tránsito. Su autor es Sruly Rosenblat. El proyecto ocupa el mismo espacio de colaboración entre agentes que Buzz y NIP-100 SNIN esta semana, pero adopta otra forma: Social Agents Prototype modela los agentes como participantes que emiten y escuchan, y exige que una persona apruebe cada mensaje. Esta semana se ven varios enfoques paralelos al mismo problema.&lt;/p>
&lt;h3 id="prana-una-lista-de-trabajo-para-incidencias-nip-34">PRana: una lista de trabajo para incidencias NIP-34&lt;/h3>
&lt;p>&lt;a href="https://github.com/DocNR/prana">PRana&lt;/a>, de DocNR, es una lista de trabajo de incidencias &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> abiertas correctamente en repositorios de git sobre Nostr que optan por participar. La herramienta se sitúa una capa por encima del stack de git sobre Nostr: consume los eventos de incidencias NIP-34 de los repositorios participantes y los presenta como cola de triaje. El lanzamiento llega la misma semana en que &lt;a href="https://github.com/nostr-protocol/nips/pull/2384">NIP-34 PR #2384&lt;/a> propone eliminar el tag maintainers para resolver problemas de caducidad, lo que afecta directamente a cómo herramientas como PRana resuelven la autoridad sobre incidencias entre repositorios.&lt;/p>
&lt;h3 id="routstr-chat-acceso-local-a-llms-mediante-el-protocolo-routstr-sobre-nostr">routstr-chat: acceso local a LLMs mediante el protocolo Routstr sobre Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/Routstr/routstr-chat">routstr-chat&lt;/a>, del equipo de Routstr, es una interfaz de chat totalmente local que usa el protocolo Routstr para acceder a cualquier modelo LLM mediante Nostr. Routstr dirige solicitudes de inferencia a través de anuncios de proveedores publicados en Nostr, kind &lt;code>38421&lt;/code>, y liquida con Cashu, como se explicó en el &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-29-newsletter/#routstrd-launches-a-local-router-for-inference-over-nostr">Boletín #20&lt;/a>. El cliente de chat es la superficie orientada al usuario sobre ese protocolo; el daemon de enrutamiento Routstrd gestiona el descubrimiento y el pago, y la aplicación de chat aporta la interfaz de conversación.&lt;/p>
&lt;hr>
&lt;h2 id="trabajo-de-protocolo">Trabajo de protocolo&lt;/h2>
&lt;h3 id="actualizaciones-de-nips">Actualizaciones de NIPs&lt;/h3>
&lt;p>La actividad de NIPs de la semana fue especialmente intensa: dos fusiones y una oleada de propuestas abiertas sustanciales.&lt;/p>
&lt;h4 id="los-metadatos-de-cliente-nip-46-llegan-a-amber-y-nostur">Los metadatos de cliente NIP-46 llegan a Amber y Nostur&lt;/h4>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2381">NIP-46 PR #2381&lt;/a>, que &lt;a href="https://nostrcompass.org/en/newsletters/2026-06-17-newsletter/#clave-10-ships-to-the-app-store-with-push-woken-background-signing">Clave propuso la semana pasada&lt;/a>, ya tiene implementaciones publicadas en ambos lados. &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.2.2">Amber v6.2.2&lt;/a> lee el nuevo campo opcional &lt;code>optional_client_metadata&lt;/code> de las solicitudes de conexión bunker y muestra iconos y metadatos de aplicaciones nativas en las pantallas de solicitudes y la lista de aplicaciones. &lt;a href="https://github.com/nostur-com/nostur-ios-public/pull/74">Nostur PR #74&lt;/a> añade el campo en el lado del cliente. Los tres proyectos cierran juntos la brecha de identidad en el emparejamiento bunker: un emparejamiento &lt;code>bunker://&lt;/code> transporta ahora los mismos &lt;code>name&lt;/code>, &lt;code>url&lt;/code> e &lt;code>image&lt;/code> que una aplicación ya podía anunciar mediante &lt;code>nostrconnect://&lt;/code>.&lt;/p>
&lt;h4 id="nip-86-signevent-y-un-evento-complementario-de-roles-de-relay">NIP-86 signevent y un evento complementario de roles de relay&lt;/h4>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2389">PR #2389 de staab&lt;/a> fusionó una operación &lt;code>signevent&lt;/code> en &lt;a href="https://nostrcompass.org/es/topics/nip-86/">NIP-86&lt;/a>, la API de gestión de relays, lo que permite a sus administradores gestionar eventos &lt;a href="https://github.com/nostr-protocol/nips/blob/master/43.md">NIP-43&lt;/a> en nombre del relay. La propuesta complementaria abierta &lt;a href="https://github.com/nostr-protocol/nips/pull/2390">PR #2390 de staab&lt;/a> define un evento de roles de relay para que estos puedan declarar definiciones de roles y los administradores puedan asignar o retirar miembros de ellos. Los dos PRs están diseñados para componerse: NIP-86 da las operaciones a los administradores y el evento de roles les da el modelo de autorización.&lt;/p>
&lt;h4 id="nip-99-capa-de-checkout-dentro-del-grafo-para-marketplaces">NIP-99: capa de checkout dentro del grafo para marketplaces&lt;/h4>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2323">PR #2323 de Colabonate&lt;/a> es el vínculo central más fuerte de la semana. La propuesta se presenta como una solicitud de comentarios sobre el diseño e identifica dos brechas en el stack de &lt;a href="https://nostrcompass.org/es/topics/nip-99/">NIP-99&lt;/a> y Gamma Market Spec: un flujo de checkout que vive dentro del grafo, con estado posterior a buy-now, creación de pedido, pago y confirmación de entrega como eventos Nostr públicos y direccionables que cualquier cliente puede leer; y escrow más resolución de disputas para el subconjunto de transacciones en las que las señales de web of trust no bastan, como artículos de alto valor, contrapartes primerizas, marketplaces anónimos o entregas físicas. La propuesta cierra los silos entre clientes de los marketplaces del mismo modo que NIP-99 cerró los silos de anuncios. Llega la misma semana que el lanzamiento de &lt;a href="https://github.com/Conduit-BTC/conduit-mono">Conduit&lt;/a>, que incluye sus propios directorios &lt;code>nips/&lt;/code> y &lt;code>specs/&lt;/code>; &lt;a href="https://github.com/shopstr-eng/shopstr/pull/512">Shopstr PR #512&lt;/a>, con un ciclo completo de escrow Cashu; &lt;a href="https://github.com/bit-blik/bitblik">BitBlik&lt;/a>, intercambio P2P BLIK ↔ Lightning con primitivas propias de escrow; y la entrada en seguimiento activo del repositorio independiente &lt;a href="https://github.com/GammaMarkets/market-spec">Gamma Markets Market Spec&lt;/a>.&lt;/p>
&lt;h4 id="nip-34-eliminar-el-tag-maintainers-para-resolver-problemas-de-caducidad">NIP-34: eliminar el tag maintainers para resolver problemas de caducidad&lt;/h4>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2384">PR #2384 de dhalsim&lt;/a> elimina el tag maintainers de los anuncios de repositorios &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> y aborda la &lt;a href="https://github.com/nostr-protocol/nips/issues/2382">incidencia #2382&lt;/a>. El tag maintainers no tenía semántica de caducidad definida, lo que dificultaba a las herramientas posteriores saber cuándo seguía siendo válida una asignación de mantenedor. El cambio tiene un alcance amplio: afecta a los parches de flotilla-budabit, el único repositorio NIP-34 seguido con actividad sustancial de parches esta semana; la distribución NIP-34 en ocho repositorios del equipo de Iris; el mirror NIP-34 de BitBlik; el nuevo mirror NIP-34 de Amber; y la herramienta PRana de DocNR para listas de incidencias. Entre los revisores cruzados del PR están DanConwayDev (ngit), vitorpamplona (Amethyst), TheAwiteb y chebizarro.&lt;/p>
&lt;h4 id="estados-de-grupos-de-nip-29-trabajo-en-curso">Estados de grupos de NIP-29 (trabajo en curso)&lt;/h4>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2372">PR #2372 de dtonon&lt;/a> propone un marco de estados de grupos para &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a>, compartido como trabajo en curso para recibir comentarios. Continúa la &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-17-newsletter/">evolución de NIP-29 cubierta en el #27&lt;/a>, ahora mediante un nuevo marco.&lt;/p>
&lt;h4 id="stories-de-nip-79-y-reels-feed-de-nip-76-ambos-de-anaskmh">Stories de NIP-79 y Reels Feed de NIP-76 (ambos de anaskmh)&lt;/h4>
&lt;p>Esta semana llegaron dos especificaciones de medios cortos del mismo autor. &lt;a href="https://github.com/nostr-protocol/nips/pull/2386">PR #2386&lt;/a> propone Stories de NIP-79: diapositivas efímeras a pantalla completa de fotos, vídeos y texto que caducan tras 24 horas, con kind &lt;code>19&lt;/code> para diapositivas individuales, kind &lt;code>34237&lt;/code> como evento direccionable que contiene tags &lt;code>e&lt;/code> ordenados para secuenciar stories de varias diapositivas, y un recibo opcional de visto por que preserva la privacidad en kind &lt;code>15750&lt;/code>. &lt;a href="https://github.com/nostr-protocol/nips/pull/2385">PR #2385&lt;/a> propone NIP-76 para un Reels Feed de vídeo corto. Ambas son especificaciones paralelas a lo que publican clientes de vídeo existentes como divine.video, no implementaciones de ello.&lt;/p>
&lt;h4 id="kind-1111-como-respuesta-a-notas-kind-1">kind 1111 como respuesta a notas kind 1&lt;/h4>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2358">PR #2358 de zhoreeq&lt;/a> elimina la línea del corpus de NIPs que antes desaconsejaba usar respuestas de hilos de comentarios kind &lt;code>1111&lt;/code>, &lt;a href="https://nostrcompass.org/es/topics/nip-22/">NIP-22&lt;/a>, sobre notas kind &lt;code>1&lt;/code> (&lt;a href="https://github.com/nostr-protocol/nips/issues/2250">incidencia #2250&lt;/a>). El diff es pequeño, pero el efecto es amplio: cualquier cliente que quiera usar la forma de comentario en hilo de NIP-22 contra notas ordinarias kind 1 del timeline tiene ahora respaldo explícito para hacerlo.&lt;/p>
&lt;hr>
&lt;h2 id="seis-años-de-junios-de-nostr">Seis años de junios de Nostr&lt;/h2>
&lt;p>La &lt;a href="https://github.com/nostr-protocol/nips/commits/master/">historia del repositorio&lt;/a> en junio sigue a Nostr desde la infancia del protocolo hasta convertirse en un sustrato de aplicaciones componibles. En 2021 el trabajo todavía cabía en un único repositorio de protocolo. En 2022 el proceso de estándares y los primeros clientes serios se convirtieron en proyectos separados. La ola pública de 2023 hizo urgentes los relays, los pagos y las identidades más ricas; 2024 sustituyó los atajos iniciales de firma y mensajería; 2025 llevó esos contratos a grupos privados, colaboración git, medios y comercio; y 2026 lanzó productos que usan Nostr como una capa dentro de workspaces de agentes, intercambios y herramientas para desarrolladores. La progresión va desde demostrar que los eventos firmados pueden circular por relays hasta convertir ese hecho en un detalle de implementación.&lt;/p>
&lt;h3 id="junio-de-2021-infancia-del-protocolo">Junio de 2021: infancia del protocolo&lt;/h3>
&lt;p>Nostr tenía unos siete meses. La &lt;a href="https://fiatjaf.com/nostr.html">publicación original del protocolo&lt;/a> de fiatjaf y el repositorio &lt;a href="https://github.com/fiatjaf/nostr">&lt;code>fiatjaf/nostr&lt;/code>&lt;/a> todavía contenían casi todo el proyecto público. Un puñado de desarrolladores podía revisar cada cambio y la implementación de referencia era un script de Python. Aún no era un ecosistema de clientes; era la afirmación de que los usuarios podían firmar eventos y elegir relays sin que una plataforma les asignara su identidad.&lt;/p>
&lt;p>No había un repositorio específico de NIPs, por lo que las propuestas y los ejemplos de implementación aún compartían el &lt;a href="https://github.com/nostr-protocol/nostr/commits?since=2021-06-01&amp;amp;until=2021-07-01">historial principal del protocolo&lt;/a>. Ese alcance compacto era una ventaja en esa etapa: un nuevo implementador podía comprender el protocolo de extremo a extremo. El coste era que cada comportamiento nuevo seguía dependiendo del mismo grupo pequeño, un límite que la separación del repositorio y la ola de clientes de 2022 empezarían a eliminar.&lt;/p>
&lt;h3 id="junio-de-2022-se-forma-el-repositorio-de-nips">Junio de 2022: se forma el repositorio de NIPs&lt;/h3>
&lt;p>A mediados de 2022 Nostr tenía suficientes proponentes para justificar el repositorio separado &lt;a href="https://github.com/nostr-protocol/nips">&lt;code>nostr-protocol/nips&lt;/code>&lt;/a>, creado en mayo. Unas veinte especificaciones cubrían ya el formato básico de eventos, listas de seguidos, DMs cifrados, metadatos de relays e identificadores bech32. Sacar los documentos del repositorio de código original cambió la gobernanza del proyecto: los clientes podían evolucionar con independencia mientras el comportamiento de cable compartido recibía propuestas y revisión explícitas.&lt;/p>
&lt;p>Los primeros clientes web públicos, incluidos Astral y Anigma, funcionaban en formas iniciales, y el &lt;a href="https://github.com/damus-io/damus/commits?since=2022-06-01&amp;amp;until=2022-07-01">repositorio de Damus&lt;/a>, de William Casarin, avanzaba hacia la distribución mediante TestFlight. La base de usuarios aún era pequeña y estaba dominada por desarrolladores, pero el sistema contaba ya con dos superficies multiplicadoras: más personas podían construir aplicaciones sin mantener la especificación, y más personas podían mejorarla sin poseer el cliente original.&lt;/p>
&lt;h3 id="junio-de-2023-auge-de-adopción-tras-damus">Junio de 2023: auge de adopción tras Damus&lt;/h3>
&lt;p>Para junio de 2023, la ola pública posterior al lanzamiento de Damus en la App Store había cambiado el problema de ingeniería. &lt;a href="https://github.com/PrimalHQ">Primal&lt;/a> e Iris construían para personas que no habían seguido las primeras conversaciones del protocolo, mientras &lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a> ofrecía un relay de alto rendimiento a operadores con más tráfico. La red ya no necesitaba solo más implementaciones; necesitaba clientes y relays capaces de seguir respondiendo a medida que crecían usuarios, seguidos e historiales de eventos.&lt;/p>
&lt;p>Por eso el trabajo de protocolo se concentró en enrutamiento y transferencia de valor. Las &lt;a href="https://github.com/nostr-protocol/nips/blob/master/65.md">listas de relays NIP-65&lt;/a> dieron al modelo outbox emergente una fuente de verdad portable, mientras los &lt;a href="https://github.com/nostr-protocol/nips/blob/master/57.md">zaps NIP-57&lt;/a> conectaron eventos e identidades con recibos Lightning. El cambio de etapa fue práctico: la identidad y la publicación habían atraído usuarios, pero el enrutamiento selectivo de relays y la interoperabilidad de wallets fueron lo que permitió a la red ampliada comportarse como algo más que un único feed público sobrecargado.&lt;/p>
&lt;h3 id="junio-de-2024-firmantes-gift-wrap-y-la-mejora-de-la-mensajería">Junio de 2024: firmantes, gift wrap y la mejora de la mensajería&lt;/h3>
&lt;p>Para junio de 2024, la firma había empezado a salir de los clientes individuales. La &lt;a href="https://github.com/nostr-protocol/nips/blob/master/46.md">especificación NIP-46&lt;/a>, &lt;a href="https://github.com/kind-0/nsecbunkerd">nsecBunker&lt;/a> y &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> dieron a las aplicaciones web y Android formas de solicitar firmas sin importar la clave secreta del usuario. Esto invirtió una suposición inicial: la portabilidad ya no significaba copiar un nsec en cada cliente, sino permitir que firmantes especializados impusieran un límite a su alrededor.&lt;/p>
&lt;p>La mensajería cambió por el mismo motivo. &lt;a href="https://github.com/nostr-protocol/nips/blob/master/17.md">NIP-17&lt;/a> combinó el cifrado NIP-44 con el gift wrap de NIP-59 para reducir los metadatos expuestos por NIP-04, mientras &lt;a href="https://github.com/nostr-protocol/nips/blob/master/89.md">NIP-89&lt;/a> permitió que los clientes recomendaran handlers para tipos de eventos que no renderizaban. Las conversaciones sobre MLS sobre Nostr comenzaron en este entorno. La privacidad y el descubrimiento de aplicaciones se convertían en contratos entre clientes, preparando el terreno para grupos privados y aplicaciones más ricas y específicas de cada evento, en vez de que un solo cliente intentara contener todas las funciones.&lt;/p>
&lt;h3 id="junio-de-2025-marmot-madurez-de-git-sobre-nostr-y-la-larga-cola-de-clientes">Junio de 2025: Marmot, madurez de git sobre Nostr y la larga cola de clientes&lt;/h3>
&lt;p>Para junio de 2025, MLS sobre Nostr contaba con la &lt;a href="https://github.com/marmot-protocol/marmot">especificación formal Marmot&lt;/a> y &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> como implementación pública. Los &lt;a href="https://github.com/nostr-protocol/nips/blob/master/34.md">eventos git NIP-34&lt;/a>, ngit y GitWorkshop también habían madurado hasta formar un flujo de revisión de código utilizable. Estos proyectos compartían una etapa de diseño: usaban relays para la coordinación mientras movían el estado sensible de grupos o los objetos de repositorios a capas especializadas, en lugar de tratar un cliente de notas de texto como toda la aplicación.&lt;/p>
&lt;p>El comercio y los medios siguieron el mismo patrón. Las wallets &lt;a href="https://github.com/nostr-protocol/nips/blob/master/60.md">NIP-60&lt;/a> y los nutzaps NIP-61 llevaron el estado Cashu a eventos portables; Wavlake, Divine y las &lt;a href="https://github.com/nostr-protocol/nips/blob/master/99.md">implementaciones de marketplace NIP-99&lt;/a> usaron kinds específicos para música, vídeo y anuncios. Nostr parecía cada vez menos «una red social» a medida que las aplicaciones mantenían el sustrato de identidad y relays, pero introducían almacenamiento, pagos, moderación y presentación específicos de cada dominio.&lt;/p>
&lt;h3 id="junio-de-2026-un-mes-cargado-de-lanzamientos">Junio de 2026: un mes cargado de lanzamientos&lt;/h3>
&lt;p>Junio de 2026 trajo lanzamientos que trataban Nostr como un componente dentro de productos mayores. &lt;a href="https://github.com/block/buzz">Buzz&lt;/a> abrió un patrón de workspace autoalojado como relay para humanos y agentes; &lt;a href="https://napplet.run">Napplets&lt;/a> definió un límite de confianza para aplicaciones componibles sobre Nostr y Blossom; y &lt;a href="https://conduit.market">Conduit&lt;/a> situó aplicaciones de marketplace junto a sus propios documentos de protocolo. Estos proyectos ya no preguntaban si los eventos firmados podían sostener la colaboración. Decidían qué trabajo debía vivir en eventos, cuál en blobs o estado local y qué permisos debía conservar un host.&lt;/p>
&lt;p>&lt;a href="https://www.bitblik.app">BitBlik&lt;/a> usó Nostr en un intercambio P2P entre fiat y Lightning, &lt;a href="https://github.com/JeroenOnNostr/codedeck">CodeDeck&lt;/a> transportó sesiones de programación mediante relays cifrados y &lt;a href="https://github.com/mehmetefeumit/Haven-App">Haven&lt;/a> aplicó Marmot fuera de un mensajero convencional. La distancia respecto al &lt;a href="https://github.com/nostr-protocol/nostr">repositorio prototipo de 2021&lt;/a> no consiste solo en que haya más proyectos. Es un cambio de abstracción: los equipos podían empezar con identidad portable, descubrimiento de relays, cifrado y pagos como piezas ya existentes, y dedicar después su esfuerzo de diseño al límite específico de la aplicación por encima de ellas.&lt;/p></content:encoded></item><item><title>Nostr Compass #27</title><link>https://nostrcompass.org/es/newsletters/2026-06-17-newsletter/</link><pubDate>Wed, 17 Jun 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-06-17-newsletter/</guid><description>&lt;p>Esta semana estuvo marcada por el trabajo en firmantes, los protocolos de comercio P2P y las versiones de clientes destacados. &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.12.0">Amethyst v1.12.0&lt;/a> incorpora más de 170 PRs que añaden carteras Cashu de &lt;a href="https://nostrcompass.org/es/topics/nip-60/">NIP-60&lt;/a>, nutzaps de &lt;a href="https://nostrcompass.org/es/topics/nip-61/">NIP-61&lt;/a>, feeds de aplicaciones de software de &lt;a href="https://github.com/nostr-protocol/nips/blob/master/82.md">NIP-82&lt;/a>, soporte de pódcasts de &lt;a href="https://nostrcompass.org/es/topics/nip-f4/">NIP-F4&lt;/a>, verificación de zaps on-chain con CLINK, la migración de iOS a las fases 1 y 2 de KMP y un driver de autorrecuperación para Tor. &lt;a href="https://github.com/DocNR/clave/releases/tag/v1.0.0">Clave v1.0.0 (build 102)&lt;/a> se presentó a la App Store y lleva a iOS la firma en segundo plano activada mediante push y la verificación de firmas entrantes. &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.13.0">Mostro Core v0.13.0&lt;/a> incorpora Protocol v2, que sustituye la comunicación de órdenes basada en relays por mensajes directos gift wrap de &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>, y &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.17.5">Mostro v0.17.5&lt;/a> hizo opcional y configurable la fianza antiabuso del operador. &lt;a href="https://github.com/Letdown2491/signet/releases/tag/v1.11.0">Signet v1.11.0&lt;/a> corrige una omisión de verificación de firmas en comandos administrativos de &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (mensajes directos privados gift wrap) que permitía a cualquiera con información pública falsificar comandos de apagado de emergencia. &lt;a href="https://github.com/jesuspirate/chama">Chama&lt;/a> publicó siete versiones de escrow en seis días y convirtió la sala de intercambio, antes repleta de controles, en una conversación específica para cada participante. En el ámbito de los firmantes, &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.2.1">Amber v6.2.1&lt;/a>, Clave (builds &lt;a href="https://github.com/DocNR/clave/releases/tag/v0.2.0-build100">100&lt;/a>, &lt;a href="https://github.com/DocNR/clave/releases/tag/v0.2.0-build101">101&lt;/a> y &lt;a href="https://github.com/DocNR/clave/releases/tag/v1.0.0">102&lt;/a>) y &lt;a href="https://github.com/nostur-com/nostur-ios-public/releases/tag/1.29.0-desktop">Nostur 1.29.0&lt;/a> implementan el nuevo método &lt;code>logout&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>, fusionado esta semana (&lt;a href="https://github.com/nostr-protocol/nips/pull/2373">PR #2373&lt;/a>). &lt;a href="https://github.com/ZeusLN/zeus/releases/tag/v13.1.0-rc1">Zeus v13.1.0-rc1&lt;/a> y Amethyst incorporan soporte de noffers CLINK, la interfaz común de Lightning propuesta para claves Nostr. Los grupos de relay de &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> recibieron cinco propuestas abiertas sobre tags de banner, códigos de invitación, fijado de mensajes, denuncias en grupos mediante DMs de &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> y control de acceso basado en roles.&lt;/p></description><content:encoded>&lt;p>Esta semana estuvo marcada por el trabajo en firmantes, los protocolos de comercio P2P y las versiones de clientes destacados. &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.12.0">Amethyst v1.12.0&lt;/a> incorpora más de 170 PRs que añaden carteras Cashu de &lt;a href="https://nostrcompass.org/es/topics/nip-60/">NIP-60&lt;/a>, nutzaps de &lt;a href="https://nostrcompass.org/es/topics/nip-61/">NIP-61&lt;/a>, feeds de aplicaciones de software de &lt;a href="https://github.com/nostr-protocol/nips/blob/master/82.md">NIP-82&lt;/a>, soporte de pódcasts de &lt;a href="https://nostrcompass.org/es/topics/nip-f4/">NIP-F4&lt;/a>, verificación de zaps on-chain con CLINK, la migración de iOS a las fases 1 y 2 de KMP y un driver de autorrecuperación para Tor. &lt;a href="https://github.com/DocNR/clave/releases/tag/v1.0.0">Clave v1.0.0 (build 102)&lt;/a> se presentó a la App Store y lleva a iOS la firma en segundo plano activada mediante push y la verificación de firmas entrantes. &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.13.0">Mostro Core v0.13.0&lt;/a> incorpora Protocol v2, que sustituye la comunicación de órdenes basada en relays por mensajes directos gift wrap de &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>, y &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.17.5">Mostro v0.17.5&lt;/a> hizo opcional y configurable la fianza antiabuso del operador. &lt;a href="https://github.com/Letdown2491/signet/releases/tag/v1.11.0">Signet v1.11.0&lt;/a> corrige una omisión de verificación de firmas en comandos administrativos de &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (mensajes directos privados gift wrap) que permitía a cualquiera con información pública falsificar comandos de apagado de emergencia. &lt;a href="https://github.com/jesuspirate/chama">Chama&lt;/a> publicó siete versiones de escrow en seis días y convirtió la sala de intercambio, antes repleta de controles, en una conversación específica para cada participante. En el ámbito de los firmantes, &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.2.1">Amber v6.2.1&lt;/a>, Clave (builds &lt;a href="https://github.com/DocNR/clave/releases/tag/v0.2.0-build100">100&lt;/a>, &lt;a href="https://github.com/DocNR/clave/releases/tag/v0.2.0-build101">101&lt;/a> y &lt;a href="https://github.com/DocNR/clave/releases/tag/v1.0.0">102&lt;/a>) y &lt;a href="https://github.com/nostur-com/nostur-ios-public/releases/tag/1.29.0-desktop">Nostur 1.29.0&lt;/a> implementan el nuevo método &lt;code>logout&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>, fusionado esta semana (&lt;a href="https://github.com/nostr-protocol/nips/pull/2373">PR #2373&lt;/a>). &lt;a href="https://github.com/ZeusLN/zeus/releases/tag/v13.1.0-rc1">Zeus v13.1.0-rc1&lt;/a> y Amethyst incorporan soporte de noffers CLINK, la interfaz común de Lightning propuesta para claves Nostr. Los grupos de relay de &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> recibieron cinco propuestas abiertas sobre tags de banner, códigos de invitación, fijado de mensajes, denuncias en grupos mediante DMs de &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> y control de acceso basado en roles.&lt;/p>
&lt;h2 id="historias-principales">Historias principales&lt;/h2>
&lt;h3 id="amethyst-v1120-incorpora-carteras-cashu-nutzaps-un-driver-clink-y-autorrecuperación-de-tor">Amethyst v1.12.0 incorpora carteras Cashu, nutzaps, un driver CLINK y autorrecuperación de Tor&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> es el cliente Nostr dominante para Android de Vitor Pamplona. &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.12.0">v1.12.0&lt;/a> agrupa los 93 PRs cubiertos como trabajo aún no publicado en el boletín #25 (etiquetado de hashtags de &lt;a href="https://nostrcompass.org/es/topics/nip-32/">NIP-32&lt;/a>, pantalla de pódcasts NIP-F4, pistas musicales, firmantes efímeros y zaps on-chain con filtro NIP-05) y el boletín #26 (continuación de &lt;a href="https://nostrcompass.org/es/topics/nip-f4/">NIP-F4&lt;/a> y bases del watchdog de Tor), además de un nuevo lote considerable esta semana. El trabajo nuevo se centra en la superficie de Cashu y nutzaps, un driver CLINK para zaps on-chain, un conjunto de autorrecuperación de Tor y la migración KMP para iOS.&lt;/p>
&lt;p>El soporte de carteras Cashu de &lt;a href="https://nostrcompass.org/es/topics/nip-60/">NIP-60&lt;/a> y el renderizado de nutzaps de &lt;a href="https://nostrcompass.org/es/topics/nip-61/">NIP-61&lt;/a> llegan en el &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3075">PR #3075&lt;/a>, junto con una vista de saldo por mint (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3115">PR #3115&lt;/a>) y una interfaz unificada de tarjeta de pago (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3191">PR #3191&lt;/a>) que reúne direcciones Lightning, zaps on-chain, mints Cashu y NWC en una sola pantalla de pagos del perfil (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3185">PR #3185&lt;/a>). Un driver CLINK para verificar zaps on-chain llega en los &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3039">PR #3039&lt;/a>, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3177">PR #3177&lt;/a> y &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3182">PR #3182&lt;/a>. CLINK es Common Lightning Interface for Nostr Keys, la misma interfaz noffer que incorpora esta semana &lt;a href="https://github.com/ZeusLN/zeus/releases/tag/v13.1.0-rc1">Zeus v13.1.0-rc1&lt;/a>; Amethyst añade además una máquina de estados de verificación, un driver de reverificación y un importe mínimo para zaps on-chain (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3030">PR #3030&lt;/a>). El &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3201">PR #3201&lt;/a> introduce notas privadas al envolver como gift wrap respuestas kind 1 destinadas a usuarios mediante p-tags conforme a &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>, de modo que el compositor produce una nota pública o una respuesta de grupo sellada según el destinatario.&lt;/p>
&lt;p>Un conjunto de fiabilidad para Tor llega como una pila completa de autorrecuperación: el &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3053">PR #3053&lt;/a> actualiza Arti a v2.3.0 con un watchdog y pruebas de integración; el &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3223">PR #3223&lt;/a> impide las conexiones a relays enrutadas por Tor hasta que Tor esté listo; el &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3224">PR #3224&lt;/a> limita el arranque de Arti a 60 segundos para que una red hostil no pueda bloquear el bucle; y el &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3231">PR #3231&lt;/a> se autorrecupera cuando Tor está activo pero todos los circuitos están muertos. El resultado es una pila de Tor que se recupera de cambios de red y ciclos de suspensión y reanudación sin intervención manual. Las fases 1 y 2 de la migración KMP para iOS llegan en los &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3047">PR #3047&lt;/a> y &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3050">PR #3050&lt;/a>, desbloquean la integración continua de iOS para los módulos &lt;code>quartz&lt;/code> y &lt;code>commons&lt;/code> y sientan las bases de una versión de Amethyst para iOS.&lt;/p>
&lt;h3 id="mostro-core-v0130-elimina-al-intermediario-relay-con-protocol-v2">Mostro Core v0.13.0 elimina al intermediario relay con Protocol v2&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> es un exchange P2P de Bitcoin liquidado mediante Lightning que usa Nostr como libro de órdenes y capa de comunicación de las operaciones. &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.13.0">v0.13.0 de mostro-core&lt;/a>, la biblioteca Rust que define el protocolo de cable, sustituye el modelo de mensajería enrutada por relays por lo que el changelog denomina Protocol v2: un transporte directo NIP-44 sobre eventos kind 14. Las acciones específicas de cada operación viajan ahora como mensajes kind 14 envueltos conforme a &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> y vinculados a la clave de la operación que el participante generó al crear la orden, sin hacer pasar toda la conversación por eventos públicos direccionables.&lt;/p>
&lt;p>Con el modelo anterior, toda la superficie de conversación de la operación quedaba expuesta a cada relay que transportaba los eventos. El transporte directo kind 14 mantiene la preparación de la orden, el flujo de disputas y los metadatos de liquidación entre las dos partes y el daemon de Mostro; los relays solo ven sobres cifrados. Junto con el cambio de transporte, v0.13.0 también vincula la prueba de identidad v2 a la clave de la operación (&lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.13.0">registro de commits&lt;/a>), lo que cierra una clase de riesgos de replay contra el protocolo nuevo. En el daemon, &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.17.5">Mostro v0.17.5&lt;/a> hizo opcional y configurable por el operador la fianza antiabuso: antes de iniciar determinadas operaciones, cada parte puede tener que bloquear una pequeña fianza que se devuelve al completar la operación normalmente y se pierde si se demora, no se presenta o entorpece el proceso. La fianza se habilita a nivel del operador del nodo, no en toda la red, por lo que Mostro sigue sin custodia y cada operador elige el equilibrio entre fricción del mercado y resistencia al abuso. En el cliente, &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.8">Mostro Mobile v1.2.8&lt;/a> incorporó 17 funciones que respaldan la nueva ruta, entre ellas el descubrimiento de relays de arranque en lugar de relays predeterminados fijados (&lt;a href="https://github.com/MostroP2P/mobile/pull/610">PR #610&lt;/a>), la fianza antiabuso del maker al crear la orden como fase 5 del despliegue de la fianza (&lt;a href="https://github.com/MostroP2P/mobile/pull/608">PR #608&lt;/a>) y la persistencia en el historial de notificaciones de las cancelaciones de órdenes con su contexto (&lt;a href="https://github.com/MostroP2P/mobile/pull/602">PR #602&lt;/a>). &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.9">v1.2.9&lt;/a> llegó dos días después y muestra la política de fianza antiabuso del evento de información del nodo, para que el usuario pueda conocer las reglas de la instancia de Mostro antes de abrir una orden (&lt;a href="https://github.com/MostroP2P/mobile/pull/617">PR #617&lt;/a>).&lt;/p>
&lt;h3 id="signet-v1110-corrige-una-omisión-de-firma-en-comandos-administrativos-nip-17">Signet v1.11.0 corrige una omisión de firma en comandos administrativos NIP-17&lt;/h3>
&lt;p>&lt;a href="https://github.com/Letdown2491/signet">Signet&lt;/a> es un firmante bunker remoto con una superficie de apagado de emergencia que permite al administrador detener, reactivar o comprobar el firmante a través de Nostr sin tocar la máquina anfitriona. &lt;a href="https://github.com/Letdown2491/signet/releases/tag/v1.11.0">v1.11.0&lt;/a> corrige un fallo de seguridad en esa superficie: la ruta de comandos administrativos gift wrap de &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> solo comprobaba el supuesto autor del rumor interno sin firmar y nunca verificaba el seal firmado. Como las claves de conversación de &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> son simétricas, un atacante que solo tuviera información pública —la pubkey del firmante, el npub del administrador y un relay administrativo— podía falsificar desde fuera un gift wrap y ejecutar cualquier comando de apagado de emergencia, incluidos &lt;code>panic&lt;/code>, &lt;code>resumeall&lt;/code> o &lt;code>alive&lt;/code>. La corrección llama a &lt;code>verifyEvent&lt;/code> sobre el seal y vincula el autor del rumor a la firma del seal, por lo que las falsificaciones sin firmar se rechazan ahora en la entrada. Los operadores de Signet deberían actualizar cuanto antes; la especificación y la ruta de código corregida ofrecen juntas al atacante una receta clara para reproducir el fallo.&lt;/p>
&lt;h3 id="chama-v320-a-v350-rediseñan-la-sala-de-intercambio-y-endurecen-la-ruta-del-dinero">Chama v3.2.0 a v3.5.0 rediseñan la sala de intercambio y endurecen la ruta del dinero&lt;/h3>
&lt;p>&lt;a href="https://github.com/jesuspirate/chama">Chama&lt;/a> es un cliente de escrow P2P nativo de Nostr que combina ecash de Fedimint con reparto de secretos Shamir 2 de 3 para liquidar operaciones sin servidor. El boletín #26 cubrió la serie de v2.0.0 a v3.1.0, que convirtió el proyecto en una aplicación independiente y añadió escaparates por vendedor. Las seis versiones posteriores de esta semana comienzan en &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.2.0">v3.2.0&lt;/a> y terminan en &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.5.0">v3.5.0&lt;/a>, publicada el 15 de junio; rediseñan la interfaz de la sala de intercambio alrededor de una sola pregunta por participante —qué debo hacer ahora— y endurecen la ruta del dinero frente a fallos parciales. &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.2.0">v3.2.0&lt;/a> dio a comprador, vendedor y árbitro sus propias indicaciones de acción codificadas por colores, para que cada participante vea su siguiente paso en todos los estados de la operación. &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.3.0">v3.3.0&lt;/a> endureció dos reglas de consenso del motor de operaciones y exigió una adopción coordinada por parte de los clientes para que surtieran efecto. &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.3.1">v3.3.1&lt;/a> adaptó precios y métodos de pago a la moneda de la comunidad del operador. &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.4.0">v3.4.0&lt;/a> añadió cinco correcciones de endurecimiento a la ruta del dinero para que un contratiempo, una condición de carrera o una pestaña cerrada no puedan costarle sats al usuario sin avisar. &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.5.0">v3.5.0&lt;/a> añadió dos salvaguardas del lado del cliente en torno al papel del árbitro, el único participante que, de otro modo, podría inclinar discretamente una operación.&lt;/p>
&lt;h3 id="clave-10-llega-a-la-app-store-con-firma-en-segundo-plano-activada-mediante-push">Clave 1.0 llega a la App Store con firma en segundo plano activada mediante push&lt;/h3>
&lt;p>&lt;a href="https://github.com/DocNR/clave">Clave&lt;/a> es un firmante remoto &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> para iOS que mantiene la clave privada Nostr del usuario en el Keychain del iPhone. Las aplicaciones solicitan firmas mediante un canal cifrado de extremo a extremo y nunca reciben la propia clave. &lt;a href="https://github.com/DocNR/clave/releases/tag/v1.0.0">v1.0.0 build 102&lt;/a> se presentó esta semana a la App Store y marca el hito 1.0 tras ocho meses de betas en TestFlight. La versión incorpora firma en segundo plano activada mediante push: Clave puede descifrar una petición, comprobar los permisos, firmar y responder con la aplicación cerrada, por lo que desaparece el requisito de mantenerla en primer plano en iOS que antes limitaba la capacidad de respuesta del firmante. La verificación de firmas entrantes se aplica con Schnorr BIP-340 sobre el formato canónico de serialización de eventos de &lt;a href="https://nostrcompass.org/es/topics/nip-01/">NIP-01&lt;/a> —la especificación base que define cómo se calcula el hash de cada evento Nostr firmado— más una protección de frescura frente a replay, por lo que una aplicación maliciosa no puede introducir de contrabando un evento vuelto a firmar por el canal de respuesta.&lt;/p>
&lt;p>La versión también incorpora la capa de cifrado actualizada de &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> con un modelo de permisos por kind y tres niveles de sensibilidad, corrige el caso límite de firma de baja confianza en el que una petición «preguntar siempre» devolvía un error antes de que el usuario pudiera aprobarla y añade emparejamiento multicuenta para que una sola vinculación de aplicación pueda pasar por varias identidades. Los emparejamientos bunker muestran ahora la identidad real de la aplicación mediante la extensión de metadatos de conexión de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> que Clave propuso en el &lt;a href="https://github.com/nostr-protocol/nips/pull/2381">PR #2381&lt;/a>. El flujo de desconexión limpia usa el nuevo método &lt;code>logout&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>, fusionado en el &lt;a href="https://github.com/nostr-protocol/nips/pull/2373">PR #2373&lt;/a>, para que una aplicación emparejada pueda cerrar su sesión correctamente sin desemparejarse a mano. Los niveles de confianza por aplicación —Full, Medium y Low— con excepciones por kind de evento, un registro de actividad para cada firma y la posibilidad de usar un proxy push propio completan la superficie; la pila del proxy tiene licencia MIT y la matriz de interoperabilidad por cliente se mantiene en &lt;a href="https://github.com/DocNR/clave/blob/main/docs/nip46-compatibility.md">&lt;code>docs/nip46-compatibility.md&lt;/code>&lt;/a>.&lt;/p>
&lt;h2 id="versiones">Versiones&lt;/h2>
&lt;h3 id="amber-v621-añade-logout-de-nip-46-y-reduce-el-consumo-de-batería-del-firmante">Amber v6.2.1 añade logout de NIP-46 y reduce el consumo de batería del firmante&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> es el firmante Nostr dominante para Android. &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.2.1">v6.2.1&lt;/a> reduce el consumo de batería de las reconexiones a relays y los pings de websocket, elimina los relays inactivos del conjunto de suscripciones y deja de despertar el dispositivo al actualizar la notificación del relay. La versión también añade soporte para el método &lt;code>logout&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>, con el que los clientes pueden cerrar correctamente las sesiones del firmante remoto —el mismo método fusionado esta semana en la especificación como &lt;a href="https://github.com/nostr-protocol/nips/pull/2373">PR #2373&lt;/a>—, y añade el análisis del evento kind 39701 —marcador web público— para que los usuarios puedan firmar eventos de marcadores directamente desde Amber. Los ajustes se reconstruyeron con tarjetas Material 3 agrupadas e iconos diferenciados, se corrigió un fallo de navegación en la pantalla de permisos de aplicaciones y se cerró una fuga de conexiones a la base de datos por cuenta al construir las bases de datos de forma atómica.&lt;/p>
&lt;h3 id="nostur-1290-incorpora-respuestas-anónimas-y-logout-del-firmante-remoto">Nostur 1.29.0 incorpora respuestas anónimas y logout del firmante remoto&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a> es un cliente Nostr para iOS de Fabian. &lt;a href="https://github.com/nostur-com/nostur-ios-public/releases/tag/1.29.0-desktop">1.29.0-desktop&lt;/a> añade soporte para responder a recibos de zap y enviar respuestas anónimas. En el lado del firmante, la versión mejora el flujo de conexión al bunker remoto, envía un &lt;code>logout&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> al firmante remoto cuando el usuario cierra sesión en una cuenta y corrige un indicador de carga bloqueado si falla la conexión a un firmante remoto. También corrige problemas al cargar DMs causados por conflictos entre relays de DMs y relays de la aplicación, publicaciones duplicadas al navegar a una respuesta y volver atrás, y muestra una miniatura del contenido multimedia en las filas de notificaciones.&lt;/p>
&lt;h3 id="citrine-v300-incorpora-negentropy-auth-de-nip-42-y-filtrado-de-relays-onion">Citrine v3.0.0 incorpora Negentropy, AUTH de NIP-42 y filtrado de relays onion&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a> es un agregador de relays locales para Android. &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v3.0.0">v3.0.0&lt;/a> es un salto de versión mayor que añade soporte de Negentropy de &lt;a href="https://nostrcompass.org/es/topics/nip-77/">NIP-77&lt;/a> para sincronizaciones por reconciliación de conjuntos, soporte de firmante externo y AUTH de &lt;a href="https://github.com/nostr-protocol/nips/blob/master/42.md">NIP-42&lt;/a> en el agregador de relays, y aplicación de listas de silencios de &lt;a href="https://github.com/nostr-protocol/nips/blob/master/51.md">NIP-51&lt;/a> en las consultas del agregador. El agregador limita las consultas a tres relays por autor, con relays de origen e indexación configurables; reutiliza seguidores, silencios y metadatos almacenados en caché tras reinicios y cambios de red; se pausa en redes limitadas o restringidas; y filtra las URLs de relays onion cuando el proxy de salida está desactivado. Se rechazan los reposts que incrustan eventos protegidos y, de forma predeterminada, las listas de silencios quedan excluidas del borrado por antigüedad.&lt;/p>
&lt;h3 id="fips-v040-rc1-añade-transporte-por-mixnet-nym-y-descubrimiento-mdns-en-la-lan">FIPS v0.4.0-rc1 añade transporte por mixnet Nym y descubrimiento mDNS en la LAN&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> es la implementación del protocolo de sincronización en malla FIPS. &lt;a href="https://github.com/jmcorgan/fips/releases/tag/v0.4.0-rc1">v0.4.0-rc1&lt;/a> es compatible por cable con v0.3.0, por lo que las mallas con versiones mezcladas interoperan y no requieren una actualización coordinada. La versión añade dos formas nuevas para que los nodos se encuentren y conecten: un transporte de salida por la mixnet Nym, con una demostración en un solo contenedor y un ejemplo de relay de mixnet, y descubrimiento opcional mDNS / DNS-SD en el enlace local. Una nueva consulta &lt;code>show_metrics&lt;/code> solo de contadores permite usar un scraper de Prometheus sin coste en la ruta crítica, y el rekey de FMP y FSP se endureció para que no produzca interrupciones con pérdida de paquetes en ambas direcciones.&lt;/p>
&lt;h3 id="calendar-by-formstr-v161-y-v162-añaden-notificaciones-por-evento">Calendar by Formstr v1.6.1 y v1.6.2 añaden notificaciones por evento&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Formstr&lt;/a> es un cliente de calendario de &lt;a href="https://nostrcompass.org/es/topics/nip-52/">NIP-52&lt;/a>. &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.6.1">v1.6.1&lt;/a> añade preferencias de notificación por evento (&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/109">PR #109&lt;/a>), para que el usuario pueda activar o desactivar recordatorios en cada evento de calendario. &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.6.2">v1.6.2&lt;/a> corrige el inicio de sesión con Amber (&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/185">PR #185&lt;/a>), de modo que el nuevo handshake de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> de Amber 6.2.x funcione de extremo a extremo.&lt;/p>
&lt;h3 id="bitchat-v152-y-v153-endurecen-el-transporte-por-nostr-y-ble">Bitchat v1.5.2 y v1.5.3 endurecen el transporte por Nostr y BLE&lt;/h3>
&lt;p>&lt;a href="https://github.com/permissionlesstech/bitchat">Bitchat&lt;/a> es un cliente de chat en malla por Bluetooth y Nostr. &lt;a href="https://github.com/permissionlesstech/bitchat/releases/tag/v1.5.2">v1.5.2&lt;/a> limita la frecuencia de notificaciones de peers en iOS para evitar inundaciones (&lt;a href="https://github.com/permissionlesstech/bitchat/pull/972">PR #972&lt;/a>) y endurece la validación de Nostr y las comprobaciones de anuncios BLE (&lt;a href="https://github.com/permissionlesstech/bitchat/pull/1012">PR #1012&lt;/a>), por lo que la ruta de entrada Nostr del lado del relay rechaza ahora los mensajes malformados antes de que lleguen al manejador de la malla local. &lt;a href="https://github.com/permissionlesstech/bitchat/releases/tag/v1.5.3">v1.5.3&lt;/a> corrige de urgencia un fallo al arrancar causado por un &lt;code>dispatch_once&lt;/code> recursivo entre &lt;code>NostrRelayManager&lt;/code> y &lt;code>NetworkActivationService&lt;/code> (&lt;a href="https://github.com/permissionlesstech/bitchat/pull/1343">PR #1343&lt;/a>).&lt;/p>
&lt;h3 id="keep-v105-traslada-la-política-del-firmante-al-núcleo-rust-auditado">Keep v1.0.5 traslada la política del firmante al núcleo Rust auditado&lt;/h3>
&lt;p>&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a> es un firmante para Android que envuelve el núcleo Rust &lt;a href="https://github.com/privkeyio/keep">keep&lt;/a>. &lt;a href="https://github.com/privkeyio/keep-android/releases/tag/v1.0.5">v1.0.5&lt;/a> fija la dependencia en &lt;a href="https://github.com/privkeyio/keep/releases/tag/v0.4.8">keep v0.4.8&lt;/a> e incorpora una corrección de una condición de carrera al iniciar el bunker (&lt;a href="https://github.com/privkeyio/keep-android/pull/296">PR #296&lt;/a>), para que el handshake ya no pierda el primer evento bajo carga; rellena la pantalla Authorized Clients desde el callback &lt;code>onConnect&lt;/code> del bunker (&lt;a href="https://github.com/privkeyio/keep-android/pull/291">PR #291&lt;/a>); y consolida el apagado de emergencia en una única fuente de verdad en keep-mobile (&lt;a href="https://github.com/privkeyio/keep-android/pull/284">PR #284&lt;/a>). El núcleo Rust publicó &lt;a href="https://github.com/privkeyio/keep/releases/tag/v0.4.9">v0.4.9&lt;/a> el 13 de junio, que traslada la superficie de políticas de firmante de &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> —decisión de permisos, límite de duración para kinds sensibles, caducidad, cadena de auditoría resistente a manipulaciones mediante HMAC con clave, confianza en el llamante en el primer uso y limitador persistente de frecuencia de firma— al núcleo Rust auditado, en lugar de duplicar la lógica en Kotlin, y añade una implementación del cifrado v3 de &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>; ese núcleo llegará en la próxima actualización de keep-mobile.&lt;/p>
&lt;h3 id="ants-v045-añade-enlaces-a-portales-de-artículos-y-recupera-habla">ants v0.4.5 añade enlaces a portales de artículos y recupera Habla&lt;/h3>
&lt;p>&lt;a href="https://github.com/dergigi/ants">ants&lt;/a> es la herramienta de búsqueda y lectura de Nostr de dergigi. &lt;a href="https://github.com/dergigi/ants/releases/tag/v0.4.5">v0.4.5&lt;/a> añade acciones en las tarjetas de publicaciones de formato largo, como enlaces a portales de artículos, compartición de &lt;code>naddr&lt;/code> específicos del artículo, copia de &lt;code>nevent&lt;/code> y acceso al JSON sin procesar. El conjunto de portales de artículos se renovó restaurando Habla, sustituyendo destinos desaparecidos y eliminando el portal imwald. La versión también recupera el renderizado de notas al pie con navegación por anchors dentro del artículo y espera a que haya conexión con un relay antes de obtener el perfil al restaurar el inicio de sesión, para que el avatar de la cabecera se resuelva correctamente.&lt;/p>
&lt;h3 id="morganite-v003-incorpora-una-caché-blossom-local-para-android-con-tor-bajo-demanda">Morganite v0.0.3 incorpora una caché Blossom local para Android con Tor bajo demanda&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Morganite">Morganite&lt;/a> es una nueva caché Blossom local para Android de greenart7c3, autor de Amber y Citrine. La caché actúa como un espejo local de &lt;a href="https://github.com/hzrd149/blossom/blob/master/buds/08.md">BUD-08&lt;/a> que elimina los blobs menos usados al superar 1 GB. &lt;a href="https://github.com/greenart7c3/Morganite/releases/tag/v0.0.3">v0.0.3&lt;/a> inicia Tor bajo demanda y lo detiene cuando está inactivo para ahorrar batería, desconecta el relay Nostr tras buscar al autor para evitar consumo en segundo plano, corrige el consumo de batería provocado por un flujo logcat sin filtrar y clientes HTTP filtrados, y libera los clientes &lt;code>OkHttp&lt;/code> sustituidos fuera del hilo principal. La versión también obtiene los relays de bandeja de entrada del usuario antes de consultar la lista de servidores Blossom —para que el descubrimiento de blobs siga el modelo outbox— y descarga el blob en las peticiones &lt;code>HEAD&lt;/code> cuando no está en la caché local, con lo que el precalentamiento de la caché queda ligado a la demanda real del cliente.&lt;/p>
&lt;h3 id="coracle-0634-y-0635-corrigen-el-login-nip-46-feeds-obsoletos-y-el-selector-de-respuestas">Coracle 0.6.34 y 0.6.35 corrigen el login NIP-46, feeds obsoletos y el selector de respuestas&lt;/h3>
&lt;p>&lt;a href="https://github.com/coracle-social/coracle">Coracle&lt;/a> es un cliente web de Nostr de hodlbod. &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.34">0.6.34&lt;/a> corrige el inicio de sesión con &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>, un estado de feed obsoleto que impedía actualizar la cronología de inicio tras cambiar de vista y un selector de respuestas que, al activarse, lo filtraba todo. La versión también reconstruye las vistas de feeds y listas, corrige un problema con el margen de área segura de los toast y mejora la carga de imágenes. &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.35">0.6.35&lt;/a> es una pequeña continuación que evita ocultar los reposts cuando las respuestas están desactivadas, para que el filtro de reposts no aplique en exceso el filtro de respuestas.&lt;/p>
&lt;h3 id="zeus-v1310-rc1-incorpora-noffers-clink-y-nwc-sin-cola">Zeus v13.1.0-rc1 incorpora noffers CLINK y NWC sin cola&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a> es una cartera de autocustodia de Bitcoin y Lightning con una superficie Nostr para wallet connect y pagos mediante noffers. &lt;a href="https://github.com/ZeusLN/zeus/releases/tag/v13.1.0-rc1">v13.1.0-rc1&lt;/a> añade pagos Nostr Wallet Connect de &lt;a href="https://github.com/nostr-protocol/nips/blob/master/47.md">NIP-47&lt;/a> sin cola en iOS —en colaboración con Primal—, de modo que una factura NWC pagada ya no espera en una cola en segundo plano; incorpora pagos mediante noffers CLINK, con Zeus Pay generando un noffer CLINK para cada cuenta para que un remitente pueda pagar a cualquier usuario de Zeus solo con su clave Nostr; y añade la posibilidad de desactivar los zaps Nostr en Zeus Pay, para que el receptor pueda deshabilitar la ruta de recibos kind 9735 sin desactivar NWC.&lt;/p>
&lt;h3 id="alby-extension-v3143-migra-las-pilas-criptográficas-noblescure-que-usa-el-firmante-nip-07">Alby Extension v3.14.3 migra las pilas criptográficas noble/scure que usa el firmante NIP-07&lt;/h3>
&lt;p>&lt;a href="https://github.com/getAlby/lightning-browser-extension">Alby Extension&lt;/a> es la extensión de navegador que ofrece firma de &lt;a href="https://github.com/nostr-protocol/nips/blob/master/07.md">NIP-07&lt;/a> y Nostr Wallet Connect junto a su superficie Lightning. &lt;a href="https://github.com/getAlby/lightning-browser-extension/releases/tag/v3.14.3">v3.14.3&lt;/a> migra las pilas &lt;code>@noble/curves&lt;/code>, &lt;code>@noble/hashes&lt;/code>, &lt;code>@noble/ciphers&lt;/code>, &lt;code>@noble/secp256k1&lt;/code>, &lt;code>@scure/bip32&lt;/code> y &lt;code>@scure/base&lt;/code> a las versiones mayores v2 y v3. Son las bibliotecas criptográficas en las que se apoya la ruta del firmante &lt;a href="https://github.com/nostr-protocol/nips/blob/master/07.md">NIP-07&lt;/a> para firmar eventos y cifrar con &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>, por lo que un salto de versión mayor afecta al formato de cable que la extensión produce para cada petición de firma de eventos de un cliente web Nostr.&lt;/p>
&lt;h3 id="mostro-mobile-v128-y-v129-admiten-protocol-v2-y-muestran-la-política-de-fianzas">Mostro Mobile v1.2.8 y v1.2.9 admiten Protocol v2 y muestran la política de fianzas&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a> es el cliente móvil de Mostro. &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.8">v1.2.8&lt;/a> incorpora el soporte en el cliente para &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.13.0">Protocol v2 de mostro-core v0.13.0&lt;/a>, cubierto en la historia principal anterior, y añade 17 funciones en total, entre ellas la fianza antiabuso del maker del &lt;a href="https://github.com/MostroP2P/mobile/pull/608">PR #608&lt;/a>, descubrimiento de relays de arranque del &lt;a href="https://github.com/MostroP2P/mobile/pull/610">PR #610&lt;/a>, persistencia de las cancelaciones de órdenes en el historial de notificaciones del &lt;a href="https://github.com/MostroP2P/mobile/pull/602">PR #602&lt;/a> y límites de importe fiat en la pantalla de creación de órdenes del &lt;a href="https://github.com/MostroP2P/mobile/pull/605">PR #605&lt;/a>. &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.9">v1.2.9&lt;/a> muestra la política de fianza antiabuso del evento de información del nodo (&lt;a href="https://github.com/MostroP2P/mobile/pull/617">PR #617&lt;/a>), para que el usuario pueda ver las reglas de fianza de la instancia de Mostro antes de abrir una orden.&lt;/p>
&lt;h3 id="zapbook-builds-4-a-27-incorporan-multicuenta-publicación-de-claves-marmot-y-reinvitaciones-a-círculos">ZapBook builds 4 a 27 incorporan multicuenta, publicación de claves Marmot y reinvitaciones a círculos&lt;/h3>
&lt;p>&lt;a href="https://github.com/codeswot/ZapBook">ZapBook&lt;/a> es una aplicación de lectura social nativa de Nostr de codeswot para iOS y Android, organizada en torno a círculos de lectura de 1 a 100 personas que comparten hitos y se envían zaps en sats como estímulo. Entre el &lt;a href="https://github.com/codeswot/ZapBook/releases/tag/v1.0.0-build.4">build 4&lt;/a> del 11 de junio y el &lt;a href="https://github.com/codeswot/ZapBook/releases/tag/v1.0.0-build.27">build 27&lt;/a> del 15 de junio, el proyecto publicó 17 builds etiquetados y fusionó 7 PRs. El soporte multicuenta con cambio fluido de cuenta llegó en el &lt;a href="https://github.com/codeswot/ZapBook/pull/25">PR #25&lt;/a>, para que el usuario pueda mantener varias identidades Nostr en la aplicación y migrar sesiones entre ellas. La publicación inicial de key packages de &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> —kind 443— se activa ahora automáticamente al completar la incorporación (&lt;a href="https://github.com/codeswot/ZapBook/pull/20">PR #20&lt;/a>), requisito previo para la mensajería de grupo solo por invitación en los círculos de lectura. El manejo de miembros eliminados de círculos procesa ahora correctamente las reinvitaciones nuevas (&lt;a href="https://github.com/codeswot/ZapBook/pull/24">PR #24&lt;/a>), lo que cierra una clase de fallos por los que los miembros readmitidos no recibían invitaciones nuevas después de haber sido eliminados. La serie de versiones también descarga la inferencia de embeddings ONNX a un isolate en segundo plano (&lt;a href="https://github.com/codeswot/ZapBook/pull/19">PR #19&lt;/a>) para la búsqueda semántica dentro del lector e integra el servicio NWC con un &lt;code>APP_ID_SUFFIX&lt;/code> para configuraciones específicas del entorno, de modo que un solo hub pueda atender varios builds de ZapBook.&lt;/p>
&lt;h3 id="alby-hub-v1230-corrige-la-publicación-nip-47-para-aplicaciones-eliminadas-y-cambia-bitrefill-a-nwc">Alby Hub v1.23.0 corrige la publicación NIP-47 para aplicaciones eliminadas y cambia Bitrefill a NWC&lt;/h3>
&lt;p>&lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a> es un hub de Lightning y Nostr autoalojado. La superficie ajena a Nostr de &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.23.0">v1.23.0&lt;/a> es amplia —canales Just-in-Time, una página Cards para recargas de tarjetas de débito, un backend experimental de pagos Ark y una página de inicio con historias— y queda fuera del alcance de Compass. En cuanto a &lt;a href="https://github.com/nostr-protocol/nips/blob/master/47.md">NIP-47&lt;/a>, la versión deja de reintentar la publicación de información NIP-47 para aplicaciones eliminadas, de modo que una conexión retirada ya no sigue republicando su evento de información kind 13194 (&lt;a href="https://github.com/getAlby/hub/pull/2391">PR #2391&lt;/a>), y elimina la entrada de aplicación personalizada de Bitrefill en favor de una conexión NWC estándar (&lt;a href="https://github.com/getAlby/hub/pull/2420">PR #2420&lt;/a>). La opción de solo lectura para aplicaciones de la tienda (&lt;a href="https://github.com/getAlby/hub/pull/2415">PR #2415&lt;/a>) restringe los permisos de las aplicaciones NWC publicadas mediante la tienda integrada en el hub.&lt;/p>
&lt;h3 id="también-publicadas">También publicadas&lt;/h3>
&lt;p>Versiones más pequeñas de esta semana con contenido relevante para Nostr pero poca sustancia por versión: &lt;a href="https://github.com/nostria-app/nostria/releases">Nostria v3.1.48 a v3.1.50&lt;/a>, que continúa el despliegue de Web Bookmarks con mejoras de fiabilidad de notificaciones y optimización de la base de datos de hilos de eventos en v3.1.50; &lt;a href="https://github.com/ostermayer/deepmarks-public/releases">Deepmarks v0.7.0 a v0.7.5&lt;/a>, que itera sobre el cliente de marcadores sociales &lt;a href="https://github.com/nostr-protocol/nips/pull/2280">NIP-B0&lt;/a> —el proyecto también añadió esta semana el enlace a su web en el &lt;a href="https://github.com/andotherstuff/nostr-compass/pull/96">PR #96&lt;/a>—; &lt;a href="https://github.com/privkeyio/keep-android/releases">Keep v1.1.1 a v1.1.4&lt;/a>, con cuatro correcciones de builds reproducibles de F-Droid sobre la versión v1.0.5 del firmante cubierta antes; &lt;a href="https://github.com/77elements/noornote/releases">NoorNote v0.11.1, v0.12.0, v0.13.0 y v0.13.1&lt;/a>, del cliente de notas para escritorio; &lt;a href="https://github.com/dergigi/boris/releases/tag/v0.12.2">Boris v0.12.2&lt;/a>, del lector Boris; &lt;a href="https://github.com/nogringo/nostr-mail-client/releases/tag/v0.13.0">Nostr Mail Client v0.13.0&lt;/a>; &lt;a href="https://github.com/spacecowboy/Feeder/releases/tag/2.21.1">Feeder 2.21.1&lt;/a>; &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.13">nak v0.19.13&lt;/a>, una actualización de mantenimiento vacía de la CLI Nostr; &lt;a href="https://github.com/mmalmi/hashtree/releases">Hashtree v0.2.68 a v0.2.71&lt;/a>, que renueva las cachés de raíces mutables del gateway del publicador de versiones direccionado por árboles de hashes; &lt;a href="https://github.com/Spl0itable/NYM/releases">NYM v3.72.501 y v3.72.502&lt;/a>, que actualizan la implementación de relay basada en Nostrify; &lt;a href="https://github.com/yysskk/swift-nostr-client/releases">swift-nostr-client 0.3.0, 0.4.0 y 0.5.0&lt;/a>, tres versiones menores respaldadas por 85 PRs fusionados en el cliente Nostr para iOS; &lt;a href="https://github.com/lawalletio/lawallet-nwc/releases/tag/v0.11.0">lawallet-nwc v0.11.0&lt;/a>, con 18 PRs fusionados en el puente Nostr Wallet Connect de LaWallet; &lt;a href="https://github.com/mouse484/astraea/releases">Astraea v5.35.59 a v5.35.62&lt;/a>, que itera sobre el cliente Nostr Astraea; y los &lt;a href="https://github.com/andotherstuff/nostr-compass/pull/101">bots de DM Nostr con NIP-05 verificado de BTC Recharge y giftcardshop&lt;/a>, añadidos al directorio de proyectos bajo una nueva categoría Shops.&lt;/p>
&lt;h2 id="cambios-aún-no-publicados">Cambios aún no publicados&lt;/h2>
&lt;h3 id="divine-fusiona-119-prs-hacia-la-próxima-versión-de-vídeos-cortos">diVine fusiona 119 PRs hacia la próxima versión de vídeos cortos&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a> es un cliente de vídeos cortos en bucle nativo de Nostr que recupera el archivo de Vine sobre una base Nostr. El proyecto fusionó 119 PRs esta semana sin publicar una versión etiquetada. El trabajo sustancial en la superficie Nostr incluye una ruta de publicación de vídeos que prioriza REST para que la ausencia de un OK del relay ya no aparezca como fallo (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/5221">PR #5221&lt;/a> y &lt;a href="https://github.com/divinevideo/divine-mobile/pull/5220">PR #5220&lt;/a>); la reaplicación de la blocklist en cuadrículas curadas y de favoritos cuando cambia la blocklist general (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/5208">PR #5208&lt;/a>); la recuperación de la lista de conversaciones por DM tras una regresión al reinstalar (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/5202">PR #5202&lt;/a>); la restauración de insignias Nostr en los perfiles (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/5218">PR #5218&lt;/a>); y referencias &lt;code>nostr:&lt;/code> convertidas en enlaces en las citas de comentarios (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/5225">PR #5225&lt;/a>). La pila del editor de vídeo añadió selección múltiple para combinar o eliminar clips, un lienzo con zoom mediante gesto de pinza y un fondo letterbox que sigue el zoom, además de recorte, rotación y volteo de clips.&lt;/p>
&lt;h3 id="pollerama-fusiona-15-prs-en-la-ventana-con-una-revisión-del-firmante-y-una-oleada-de-funciones">Pollerama fusiona 15 PRs en la ventana con una revisión del firmante y una oleada de funciones&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-polls">Pollerama&lt;/a>, repositorio &lt;code>formstr-hq/nostr-polls&lt;/code>, es el cliente nativo de Nostr de encuestas y feeds de la familia Form*, hermano de &lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a>, que publicó v1.6.2 esta semana. La última versión etiquetada de &lt;code>nostr-polls&lt;/code> es &lt;a href="https://github.com/formstr-hq/nostr-polls/releases/tag/v1.6.4">v1.6.4&lt;/a>, de marzo, por lo que el trabajo de esta ventana está previsto para la próxima etiqueta y todavía no se ha publicado; aun así, el flujo de fusiones es intenso: quince pull requests llegaron entre el 9 y el 16 de junio, con aportaciones de abh3po, geralt-debugs y SIDDHANTCOOKIE. En el firmante, el proyecto sustituyó la superficie de firma existente en el &lt;a href="https://github.com/formstr-hq/nostr-polls/pull/198">PR #198&lt;/a> y actualizó la sustitución en el &lt;a href="https://github.com/formstr-hq/nostr-polls/pull/201">PR #201&lt;/a>; el &lt;a href="https://github.com/formstr-hq/nostr-polls/pull/200">PR #200&lt;/a> impide además que las actualizaciones de metadatos kind 0 se activen al iniciar sesión, para que una autenticación nueva no publique un evento de perfil que el usuario no solicitó. La oleada de funciones incluye un editor de perfiles con publicación desde la vista del perfil (&lt;a href="https://github.com/formstr-hq/nostr-polls/pull/205">PR #205&lt;/a>), un flujo de repost mejorado (&lt;a href="https://github.com/formstr-hq/nostr-polls/pull/209">PR #209&lt;/a>) y una ruta más sencilla para descubrir temas (&lt;a href="https://github.com/formstr-hq/nostr-polls/pull/202">PR #202&lt;/a>). La próxima versión etiquetada incorporará todo este trabajo.&lt;/p>
&lt;h3 id="trabajo-en-bibliotecas-y-herramientas">Trabajo en bibliotecas y herramientas&lt;/h3>
&lt;p>El &lt;a href="https://github.com/nostr-dev-kit/ndk/pull/375">PR #375 de NDK&lt;/a> y el trabajo fusionado en los repositorios &lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> y &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a> estuvieron tranquilos esta semana, con uno o dos PRs fusionados cada uno y ninguna versión etiquetada. Continuó la actividad en &lt;a href="https://github.com/contextvm/contextvm-sdk">ContextVM SDK&lt;/a>, con 1 PR fusionado; &lt;a href="https://github.com/agentvm/mesh-llm">mesh-llm&lt;/a>, con 37 PRs fusionados y 8 abiertos; &lt;a href="https://github.com/seth-for-real/zap-cooking">Zap Cooking&lt;/a>, con 26 PRs fusionados; y &lt;a href="https://github.com/routstrd/routstrd">Routstrd&lt;/a>, con 2 PRs fusionados, todos sin una etiqueta de versión en la ventana.&lt;/p>
&lt;h2 id="actualizaciones-de-nips-y-trabajo-en-especificaciones-de-protocolo">Actualizaciones de NIPs y trabajo en especificaciones de protocolo&lt;/h2>
&lt;p>El trabajo de protocolo de esta semana se concentra en dos áreas: el endurecimiento de firmantes y la gobernanza de grupos de &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a>.&lt;/p>
&lt;p>&lt;strong>Fusionado esta semana:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (Nostr Connect).&lt;/strong> El &lt;a href="https://github.com/nostr-protocol/nips/pull/2373">PR #2373&lt;/a> añade un método &lt;code>logout&lt;/code> que permite al cliente cerrar correctamente una sesión de firmante remoto. Amber, Clave y Nostur incorporaron soporte durante la misma semana.&lt;/li>
&lt;li>&lt;strong>NIP-CC (Community Chat).&lt;/strong> El &lt;a href="https://github.com/nostr-protocol/nips/pull/2365">PR #2365&lt;/a> actualiza NIP-CC para que haga referencia a la especificación moderna &lt;a href="https://github.com/nostr-protocol/nips/pull/2331">NIP-GC (Group Chat)&lt;/a> para la maquinaria del lado del cliente, alineando la especificación de salas comunitarias con la primitiva canónica de chat grupal.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Conjunto abierto de NIP-29 (gobernanza de grupos basada en relays):&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Tags de banner.&lt;/strong> El &lt;a href="https://github.com/nostr-protocol/nips/pull/2383">PR #2383&lt;/a> añade un tag &lt;code>banner&lt;/code> al evento kind 39000 de metadatos del grupo.&lt;/li>
&lt;li>&lt;strong>Sufijo de código de invitación.&lt;/strong> El &lt;a href="https://github.com/nostr-protocol/nips/pull/2380">PR #2380&lt;/a> introduce un sufijo de código de invitación en el identificador del grupo, para poder codificar una invitación de un solo uso en el propio ID del grupo.&lt;/li>
&lt;li>&lt;strong>Fijado de mensajes.&lt;/strong> El &lt;a href="https://github.com/nostr-protocol/nips/pull/2379">PR #2379&lt;/a> añade una acción de moderación para actualizar la lista de mensajes fijados y un evento kind 39005 que difunde el conjunto fijado.&lt;/li>
&lt;li>&lt;strong>Denuncias de grupo mediante DMs NIP-17.&lt;/strong> El &lt;a href="https://github.com/nostr-protocol/nips/pull/2377">PR #2377&lt;/a> define un flujo de denuncia por el que los miembros informan de abusos en el grupo al contacto administrativo del relay mediante DMs gift wrap de &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>, manteniendo el tráfico de moderación fuera del flujo público de eventos del grupo.&lt;/li>
&lt;li>&lt;strong>Control de acceso basado en roles.&lt;/strong> El &lt;a href="https://github.com/nostr-protocol/nips/pull/2376">PR #2376&lt;/a> añade una superficie RBAC sobre la separación existente entre administradores y miembros.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Continuaciones abiertas de NIP-46:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Metadatos del cliente en la petición de conexión.&lt;/strong> El &lt;a href="https://github.com/nostr-protocol/nips/pull/2381">PR #2381&lt;/a> permite que el cliente que se conecta envíe campos opcionales &lt;code>name&lt;/code>, &lt;code>url&lt;/code> e &lt;code>icon&lt;/code> en su petición, para que el firmante pueda mostrar la identidad de la aplicación en la pantalla de emparejamiento. Clave build 101 implementa la propuesta.&lt;/li>
&lt;li>&lt;strong>Evitar timeouts silenciosos.&lt;/strong> El &lt;a href="https://github.com/nostr-protocol/nips/pull/2375">PR #2375&lt;/a> endurece la especificación para que un firmante que necesite intervención del usuario mantenga abierta la petición hasta que este decida, corrigiendo el modo de fallo que Clave build 100 solucionó en la implementación.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Otro trabajo abierto:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>NIP-100 Sovereign Agent Identity Network (SNIN).&lt;/strong> El &lt;a href="https://github.com/nostr-protocol/nips/pull/2378">PR #2378&lt;/a> propone un protocolo entre agentes para descubrir identidades y capacidades de agentes autónomos. La propuesta es amplia y probablemente se dividirá en piezas más pequeñas durante la revisión.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Especificación Blossom.&lt;/strong> El &lt;a href="https://github.com/hzrd149/blossom/pull/108">PR #108 de BUD-00&lt;/a> se fusionó el 15 de junio y amplía la definición de BUD para abarcar convenciones del lado del cliente y formatos de datos construidos sobre blobs Blossom que los servidores no implementan. El cambio incorpora BUDs como BUD-10 —el esquema URI &lt;code>blossom:&lt;/code>— y BUD-08 —las convenciones de caché local que Morganite implementa esta semana— a la numeración canónica, donde antes se trataban como extensiones externas.&lt;/p>
&lt;h2 id="análisis-en-profundidad-nip-77-negentropy">Análisis en profundidad: NIP-77 (Negentropy)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-77/">NIP-77&lt;/a> define un protocolo de reconciliación de conjuntos para relays Nostr. Dos partes —un cliente y un relay, o dos relays en un puente— mantienen cada una un conjunto de eventos que coincide con un filtro y quieren converger en la unión sin reenviarlo todo. El enfoque ingenuo consiste en volcar por la red todos los ID de eventos y calcular la diferencia; para un filtro con mucha actividad, el coste crece con el tamaño del conjunto mayor sin importar cuánto difieran. NIP-77 reduce ese coste para que sea proporcional a la diferencia simétrica.&lt;/p>
&lt;p>La especificación se apoya en dos mensajes de relay, &lt;code>NEG-OPEN&lt;/code> y &lt;code>NEG-MSG&lt;/code>. El cliente abre una sesión de reconciliación con &lt;code>[&amp;quot;NEG-OPEN&amp;quot;, &amp;lt;subscription_id&amp;gt;, &amp;lt;filter&amp;gt;, &amp;lt;initial_message&amp;gt;]&lt;/code>, donde &lt;code>&amp;lt;initial_message&amp;gt;&lt;/code> es un payload Negentropy codificado en hexadecimal que describe la vista del conjunto del cliente. Las respuestas llegan como frames &lt;code>NEG-MSG&lt;/code> y ambas partes intercambian mensajes hasta alcanzar un punto fijo. Cada &lt;code>NEG-MSG&lt;/code> reduce el desacuerdo —dividiendo un rango en subrangos con sus propias huellas— o termina una hoja —enumerando los ID de un rango pequeño para que el receptor pueda calcular directamente la diferencia—. Cuando una parte determina que la otra tiene eventos que le faltan, envía un &lt;code>REQ&lt;/code> normal para esos ID; cuando posee eventos que le faltan a la otra, la especificación deja la ruta de subida a una publicación &lt;code>EVENT&lt;/code> normal en el otro extremo.&lt;/p>
&lt;p>La estructura de datos subyacente es una variante secuenciada de un árbol de Merkle. Cada evento del conjunto local se identifica mediante &lt;code>(created_at, id)&lt;/code> y se agrupa en rangos; cada rango lleva una pequeña huella calculada a partir de los ID que contiene. Cuando la huella coincide entre cliente y relay, el rango ha convergido y se omite. Cuando difiere, la parte que responde divide el rango en mitades —o subrangos— y envía las huellas de cada una, avanzando de forma recursiva por el desacuerdo. Los rangos hoja —por debajo de un umbral pequeño de eventos— se envían literalmente. La propiedad clave es que confirmar rangos convergentes cuesta casi nada, con independencia del número de eventos que contengan.&lt;/p>
&lt;p>El encuadre en orden de &lt;code>created_at&lt;/code> importa por dos motivos. Primero, la paginación existente de Nostr usa &lt;code>until&lt;/code> y &lt;code>since&lt;/code> con la misma marca de tiempo, por lo que un reconciliador puede reanudar entre sesiones sin volver a sincronizar todo el archivo: almacena en caché el límite superior y comienza allí la siguiente sincronización. Segundo, las divisiones de rango son deterministas dada una clave ordenada, de modo que cliente y relay siempre coinciden en el siguiente límite sin necesitar otro mensaje de negociación. El coste de una sincronización es aproximadamente O(d log n), donde d es el tamaño de la diferencia simétrica y n el del conjunto mayor, muy por debajo del coste O(n) de volcar ingenuamente los ID y de los O(n) viajes de ida y vuelta de emitir N peticiones &lt;code>REQ&lt;/code>.&lt;/p>
&lt;p>La implementación presenta tres compromisos. El tamaño de la huella —la especificación usa 32 bytes por rango— equilibra probabilidad de colisión y ancho de banda: las huellas menores ahorran bytes pero aumentan la posibilidad de una coincidencia espuria que descarte eventos. El umbral de hoja —cuándo dejar de dividir y volcar literalmente los ID— equilibra viajes de ida y vuelta y ancho de banda por mensaje: los umbrales menores requieren más rondas y los mayores producen mensajes hoja más grandes. Además, el protocolo supone que ambas partes pueden calcular la misma huella sobre el mismo rango; esto exige una serialización estable de los pares &lt;code>(created_at, id)&lt;/code> que compartan ambas implementaciones, de ahí la precisión de la especificación sobre el orden de bytes en la construcción de la huella.&lt;/p>
&lt;p>Un relay que anuncia NIP-77 en su campo &lt;code>supported_nips&lt;/code> de NIP-11 permite a los clientes reconciliar en lugar de —o junto a— una sincronización normal basada en &lt;code>REQ&lt;/code>. El cliente elige el protocolo según sus necesidades: una suscripción nueva que busca tráfico reciente usa &lt;code>REQ&lt;/code> porque no hay un estado anterior que reconciliar; un espejo de larga duración que necesita ponerse al día tras una interrupción usa &lt;code>NEG-OPEN&lt;/code> porque la diferencia simétrica es pequeña respecto al archivo. Ambas rutas se complementan en contextos de despliegue distintos.&lt;/p>
&lt;p>Ejemplo de intercambio &lt;code>NEG-OPEN&lt;/code>:&lt;/p>
&lt;pre tabindex="0">&lt;code>→ [&amp;#34;NEG-OPEN&amp;#34;, &amp;#34;sync-1&amp;#34;, {&amp;#34;kinds&amp;#34;:[1],&amp;#34;authors&amp;#34;:[&amp;#34;abc...&amp;#34;]}, &amp;#34;&amp;lt;hex initial Negentropy message&amp;gt;&amp;#34;]
← [&amp;#34;NEG-MSG&amp;#34;, &amp;#34;sync-1&amp;#34;, &amp;#34;&amp;lt;hex relay response&amp;gt;&amp;#34;]
→ [&amp;#34;NEG-MSG&amp;#34;, &amp;#34;sync-1&amp;#34;, &amp;#34;&amp;lt;hex client refinement&amp;gt;&amp;#34;]
← [&amp;#34;NEG-MSG&amp;#34;, &amp;#34;sync-1&amp;#34;, &amp;#34;&amp;lt;hex leaf with IDs the relay has and client lacks&amp;gt;&amp;#34;]
→ [&amp;#34;REQ&amp;#34;, &amp;#34;fetch-1&amp;#34;, {&amp;#34;ids&amp;#34;:[...]}]
← [...EVENT messages...]
← [&amp;#34;EOSE&amp;#34;, &amp;#34;fetch-1&amp;#34;]
→ [&amp;#34;CLOSE&amp;#34;, &amp;#34;sync-1&amp;#34;]
&lt;/code>&lt;/pre>&lt;p>&lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v3.0.0">Citrine v3.0.0&lt;/a> incorpora esta semana soporte de &lt;a href="https://nostrcompass.org/es/topics/nip-77/">NIP-77&lt;/a> en el agregador de relays, la primera vez que la superficie de relay local en Android puede reconciliar con relays externos en lugar de realizar consultas &lt;code>REQ&lt;/code> masivas.&lt;/p>
&lt;h2 id="análisis-en-profundidad-nip-61-nutzaps">Análisis en profundidad: NIP-61 (Nutzaps)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-61/">NIP-61&lt;/a> define pagos P2P con ecash Cashu entregados como eventos Nostr. El remitente publica un token Cashu bloqueado con la clave pública derivada de Nostr del destinatario, y este lo canjea en el mint cuando le convenga. A diferencia de los zaps NIP-57, que exigen que el receptor esté accesible mediante Lightning en el momento del pago, un nutzap es un token ecash autocontenido que el destinatario puede canjear cuando quiera.&lt;/p>
&lt;p>La especificación compone tres kinds de eventos con la primitiva de bloqueo P2PK de Cashu. Kind 10019 es la recomendación de mint del destinatario: un evento reemplazable que enumera uno o varios mints de los que acepta nutzaps, además de la clave pública Cashu usada para bloquear las proofs a su favor. Esta clave es distinta de la clave de identidad Nostr del destinatario; es una clave limitada a la cartera, derivada para recibir nutzaps, de forma que la clave de identidad nunca tenga que tocar secretos de ecash. Los remitentes leen el evento kind 10019 antes de enviar, para que el token que construyan pueda canjearse en un mint en el que el destinatario ya confía.&lt;/p>
&lt;p>Kind 9321 es el evento de pago. Lleva uno o varios tags &lt;code>proof&lt;/code> de Cashu —cada uno contiene una proof bloqueada mediante P2PK y vinculada a la pubkey de nutzap del destinatario del evento kind 10019—, un tag &lt;code>u&lt;/code> con la URL del mint, tags opcionales &lt;code>e&lt;/code> y &lt;code>a&lt;/code> que identifican una nota que recibe el zap, y un tag &lt;code>p&lt;/code> para el destinatario. Este recibe el evento kind 9321 mediante su suscripción normal a Nostr, valida que las proofs estén bloqueadas con su pubkey de nutzap en un mint incluido en su propio evento kind 10019, las desbloquea con la clave privada correspondiente y las conserva en su cartera de &lt;a href="https://nostrcompass.org/es/topics/nip-60/">NIP-60&lt;/a> o las funde a Lightning. Kind 7375 registra las proofs canjeadas en la cadena de eventos de la cartera del destinatario, para que una cartera que vuelva a sincronizar desde relays no contabilice dos veces proofs de nutzap del mismo origen.&lt;/p>
&lt;p>El modelo de confianza es el precio explícito del diseño. Los mints Cashu custodian el valor subyacente; un mint malicioso o incautado puede negarse a canjearlo. NIP-61 hereda ese riesgo de custodia de NIP-60 y no intenta eliminarlo. A cambio, el diseño permite micropagos con finalidad instantánea y capacidad offline: el token es el pago, el destinatario no necesita ejecutar un nodo Lightning ni aceptar HTLCs entrantes en tiempo real, y un remitente que mantenga proofs en el mismo mint puede pagar sin un solo salto de red a un custodio. El anuncio kind 10019 es la barrera de la capa social: los remitentes que eligen un mint fuera del conjunto de confianza del destinatario arriesgan enviar un token no canjeable, lo que mantiene predecible la superficie de canje del receptor.&lt;/p>
&lt;p>En comparación con NIP-57, la ruta de verificación también es más sencilla. Un recibo de zap NIP-57 es un evento kind 9735 publicado por el servicio LNURL del destinatario, lo que exige que el verificador consulte el endpoint LNURL y confirme que la clave de firma del recibo coincide con la declarada por el endpoint. Un nutzap lleva en línea la prueba criptográfica de pago —las propias proofs bloqueadas mediante P2PK—, por lo que cualquier verificador con las claves públicas del mint puede confirmar que son válidas sin consultar a un tercero. El compromiso es que verificar un nutzap exige comprender los keysets del mint, mientras que verificar NIP-57 solo requiere infraestructura LNURL estándar.&lt;/p>
&lt;p>Los dos formatos de zap conviven como complementos. Los zaps NIP-57 siguen siendo la opción adecuada para receptores con enrutamiento Lightning y remitentes que quieren denominar en sats con la semántica de liquidación de Lightning. Los zaps NIP-61 resultan apropiados para receptores sin conexión, flujos con muchos micropagos donde las comisiones Lightning superan el valor transferido y clientes dirigidos a usuarios sin infraestructura Lightning.&lt;/p>
&lt;p>Ejemplo de evento nutzap:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a5f87fe2d4c8b9a0e3f1c4d5e6a7b8c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1750162800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">9321&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;proof&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;amount\&amp;#34;:21,\&amp;#34;secret\&amp;#34;:\&amp;#34;...\&amp;#34;,\&amp;#34;C\&amp;#34;:\&amp;#34;...\&amp;#34;,\&amp;#34;id\&amp;#34;:\&amp;#34;...\&amp;#34;}&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;u&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://mint.example.com&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;8b39f4e5d6c7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;c5d8a4e3b2a1f0e9d8c7b6a5949382716050403020100ffeeddccbbaa99887766&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Great post!&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1e2d3c4b5a6978869504132c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.12.0">Amethyst v1.12.0&lt;/a> incorpora esta semana renderizado integrado de nutzaps NIP-61 junto a su superficie de cartera NIP-60 (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3075">PR #3075&lt;/a>), lo que convierte a Amethyst en el primer cliente Android dominante que muestra los nutzaps recibidos en la cronología y ofrece vistas de saldo por mint en la cartera.&lt;/p></content:encoded></item><item><title>Nostr Compass #26</title><link>https://nostrcompass.org/es/newsletters/2026-06-10-newsletter/</link><pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-06-10-newsletter/</guid><description>&lt;p>La organización Marmot Protocol abre tres nuevos repos para un borrador de protocolo v2 y un linaje de clientes nativos: un workspace Rust llamado &lt;code>darkmatter&lt;/code>, una app iOS SwiftUI &lt;code>darkmatter-ios&lt;/code> y una app Android Kotlin/Compose &lt;code>darkmatter-android&lt;/code>. El Whitenoise Flutter original se archiva. Chama comprime diecisiete lanzamientos en una semana y cruza la línea de app independiente en v3.0.0 antes de aterrizar un rediseño completo de la UI de la sala de intercambio y storefronts por vendedor en v3.1.0, encima de shares Shamir solo del titular, sustitución de árbitro, enrutado de comunidad mundial y notificaciones de intercambio de extremo a extremo. Coracle lanza un servicio de relay alojado de pago respaldado por la pila de código abierto Caravel y zooid, con integración profunda de Flotilla planeada. Angor cambia a mainnet por defecto en v0.2.30 y aterriza una prueba de financiación UAT de 3 usuarios en v0.2.29. Amethyst aterriza 41 PRs no publicados continuando el trabajo de NIP-32 / NIP-F4 / Tor de la semana pasada. NIP-67 (pista de completitud EOSE) y autocompletado NIP-50 se fusionan, cerrando dos brechas de corrección de larga data en el protocolo de relay central. NIP-GART propone un formato de cable que preserva la privacidad para alertas de emergencia, y NIP-46 recoge un método de logout.&lt;/p></description><content:encoded>&lt;p>La organización Marmot Protocol abre tres nuevos repos para un borrador de protocolo v2 y un linaje de clientes nativos: un workspace Rust llamado &lt;code>darkmatter&lt;/code>, una app iOS SwiftUI &lt;code>darkmatter-ios&lt;/code> y una app Android Kotlin/Compose &lt;code>darkmatter-android&lt;/code>. El Whitenoise Flutter original se archiva. Chama comprime diecisiete lanzamientos en una semana y cruza la línea de app independiente en v3.0.0 antes de aterrizar un rediseño completo de la UI de la sala de intercambio y storefronts por vendedor en v3.1.0, encima de shares Shamir solo del titular, sustitución de árbitro, enrutado de comunidad mundial y notificaciones de intercambio de extremo a extremo. Coracle lanza un servicio de relay alojado de pago respaldado por la pila de código abierto Caravel y zooid, con integración profunda de Flotilla planeada. Angor cambia a mainnet por defecto en v0.2.30 y aterriza una prueba de financiación UAT de 3 usuarios en v0.2.29. Amethyst aterriza 41 PRs no publicados continuando el trabajo de NIP-32 / NIP-F4 / Tor de la semana pasada. NIP-67 (pista de completitud EOSE) y autocompletado NIP-50 se fusionan, cerrando dos brechas de corrección de larga data en el protocolo de relay central. NIP-GART propone un formato de cable que preserva la privacidad para alertas de emergencia, y NIP-46 recoge un método de logout.&lt;/p>
&lt;h2 id="historias-principales">Historias principales&lt;/h2>
&lt;h3 id="marmot-v2-dark-matter-borrador-de-protocolo-clientes-nativos-app-flutter-archivada">Marmot v2 (Dark Matter): borrador de protocolo, clientes nativos, app Flutter archivada&lt;/h3>
&lt;p>Esta semana surgieron tres nuevos repos bajo la organización GitHub &lt;a href="https://github.com/marmot-protocol">marmot-protocol&lt;/a>, formando juntos la forma temprana de progreso de un borrador del protocolo Marmot v2 y un linaje de clientes nativos que reemplaza la línea de app Flutter. &lt;a href="https://github.com/marmot-protocol/darkmatter">&lt;code>darkmatter&lt;/code>&lt;/a> (Rust, creado el 13 de mayo, treinta y cuatro commits en los últimos siete días) alberga el borrador del protocolo v2 en &lt;code>spec/&lt;/code>, un motor CGKA respaldado por OpenMLS en &lt;code>crates/cgka-engine&lt;/code>, un simulador de conformidad con pruebas de propiedad y un modelo formal Tamarin para pruebas de convergencia. &lt;a href="https://github.com/marmot-protocol/darkmatter-ios">&lt;code>darkmatter-ios&lt;/code>&lt;/a> (Swift, creado el 25 de mayo) es un cliente SwiftUI respaldado por un xcframework UniFFI &lt;code>MarmotKit&lt;/code> vendorizado generado desde el workspace Rust. &lt;a href="https://github.com/marmot-protocol/darkmatter-android">&lt;code>darkmatter-android&lt;/code>&lt;/a> (Kotlin/Jetpack Compose, creado el 25 de mayo) se apoya en los mismos bindings Rust. El Whitenoise Flutter original ha sido marcado &lt;a href="https://github.com/marmot-protocol/whitenoise-archive">&lt;code>whitenoise-archive&lt;/code>&lt;/a> (&amp;ldquo;ARCHIVED: This was the original White Noise Flutter app&amp;rdquo;); un nuevo repo Dart &lt;a href="https://github.com/marmot-protocol/whitenoise">&lt;code>whitenoise&lt;/code>&lt;/a> lleva la línea Flutter activa en paralelo.&lt;/p>
&lt;p>Lee esto como un progreso temprano hacia un Marmot más fiable, no como un pivote terminado. El README de darkmatter se autodenomina &amp;ldquo;Candidate Marmot v2 protocol draft, CGKA engine, and conformance workspace&amp;rdquo; y dice directamente: &amp;ldquo;MDK remains the deployed Rust protocol implementation until this draft and engine are adopted.&amp;rdquo; Dentro del workspace, el crate cgka-engine está etiquetado &lt;code>0.1.0&lt;/code>, &amp;ldquo;single internal consumer, not semver-stable.&amp;rdquo; Cada página de especificación lleva &amp;ldquo;Status: draft for internal review&amp;rdquo;. Tres estrellas en el repo del workspace y cero en las apps iOS y Android confirman que el trabajo es pre-anuncio. La dirección, el alcance y la disciplina son la señal aquí; la disponibilidad para producción no es la afirmación.&lt;/p>
&lt;p>El borrador del protocolo concreta los deltas v1-a-v2. La extensión MLS monolítica &lt;code>marmot_group_data&lt;/code> de MIP-01, que ha llevado el nombre del grupo, descripción, pubkeys de admin, id de enrutado del grupo Nostr, lista de relays, datos de imagen del grupo y ajustes de mensajes efímeros bajo un solo paraguas desde el inicio de Marmot, se &lt;a href="https://github.com/marmot-protocol/darkmatter/blob/master/spec/mip-coverage.md">divide en componentes de app versionados&lt;/a>: &lt;code>marmot.group.profile.v1&lt;/code> para nombre y descripción, &lt;code>marmot.group.admin-policy.v1&lt;/code> para pubkeys de admin, &lt;code>marmot.transport.nostr.routing.v1&lt;/code> para el &lt;code>nostr_group_id&lt;/code> aleatorio y la lista canónica de relays, &lt;code>marmot.group.blossom.image.v1&lt;/code> para hash de imagen, clave de cifrado, nonce y clave de subida, y &lt;code>marmot.group.message-retention.v1&lt;/code> para los segundos de mensajes efímeros. Cada componente posee sus bytes exactos y su propia ruta de versionado, para que una futura característica pueda revisar un componente sin forzar al resto del estado del grupo a retransitar el consenso de la extensión MLS. Las credenciales MIP-00 también ganan un nuevo documento base &lt;code>account-identity-proof-v1.md&lt;/code>, señalado como &amp;ldquo;new in v2 and breaking&amp;rdquo;. La prueba de identidad ahora vive en su propia superficie, separada de la construcción del KeyPackage.&lt;/p>
&lt;p>Los deltas de biblioteca respaldan el retrabajo de especificación. &lt;code>cgka-engine&lt;/code> es la nueva máquina de estado local del grupo: envuelve OpenMLS, posee los estados de época &lt;code>Stable&lt;/code>, &lt;code>PendingPublish&lt;/code>, &lt;code>Merging&lt;/code> y &lt;code>Recovering&lt;/code>, traduce las intenciones en commits MLS, devuelve valores tipados &lt;code>IngestOutcome&lt;/code> y &lt;code>GroupEvent&lt;/code> para cada envoltorio de transporte entrante, y explícitamente no distribuye transporte ni persistencia. Un trait &lt;code>TransportPeeler&lt;/code> separa Nostr del motor, y un trait &lt;code>StorageProvider&lt;/code> separa SQLite (mediante &lt;code>storage-sqlite&lt;/code>, respaldado por SQLCipher) del motor. El MDK de hoy empaqueta todo esto junto; dividir las capas permite que un motor se ubique bajo un transporte de relay Nostr ahora y los también distribuidos &lt;a href="https://github.com/marmot-protocol/darkmatter/blob/master/docs/quic-broker-deployment.md">transportes QUIC stream y broker&lt;/a> más tarde, sin reescritura del modelo de convergencia. La propia convergencia está documentada como &lt;code>distributed-convergence.md&lt;/code> y probada en un modelo Tamarin que cubre selección determinista de rama, elegibilidad regulada por política, replay de ancla retenida, rechazo de rama obsoleta, reordenado de entrega, duplicación, invalidación de salida de app, traspaso welcome/commit, consumo de propuesta y regulación saliente durante la sincronización. Las pruebas de propiedad Rust luego verifican que el motor sigue las mismas reglas con objetos OpenMLS reales y el arnés del simulador. Trabajo de fiabilidad con métodos formales de este alcance está ausente de la pila Marmot actual.&lt;/p>
&lt;p>Ambos clientes nativos abandonan Flutter por kits de UI nativos de la plataforma. &lt;a href="https://github.com/marmot-protocol/darkmatter-ios">&lt;code>darkmatter-ios&lt;/code>&lt;/a> es SwiftUI puro con una Notification Service Extension que descifra los despertares de push MIP-05 en el dispositivo, vendoriza un paquete Swift &lt;code>MarmotKit&lt;/code> generado desde el workspace Rust y se registra bajo el bundle ID y app group &lt;code>dev.ipf.darkmatter&lt;/code>. &lt;a href="https://github.com/marmot-protocol/darkmatter-android">&lt;code>darkmatter-android&lt;/code>&lt;/a> es Kotlin y Jetpack Compose, con una compilación impulsada por &lt;code>just&lt;/code> que produce un APK &lt;code>arm64-v8a&lt;/code> firmado y lee endpoints de telemetría desde &lt;code>local.properties&lt;/code>. El README de Android indica el principio arquitectónico directamente: &amp;ldquo;Dark Matter owns protocol data and stores it in SQLite. The Android app should render that data, manage Android platform behavior, and keep UI lifecycle state. The Android app should not become a second database for Dark Matter data.&amp;rdquo; Eso refleja la disciplina de frontera que el README de cgka-engine aplica en la capa Rust, aplicada a la capa UI.&lt;/p>
&lt;p>Los clientes nativos importan para Marmot porque la debilidad más citada del protocolo ha sido la fiabilidad móvil bajo condiciones de entrega irregulares: despertares de notificación perdidos, carreras de commit MLS durante fluctuaciones de red, límites de background-fetch que dejan varados los avances de época. SwiftUI y Compose dan a los clientes acceso directo a las primitivas de procesamiento en segundo plano de la plataforma que Flutter alcanza mediante un puente de plugin, y la ruta de binding UniFFI mantiene la lógica del protocolo en un único workspace Rust distribuido como una biblioteca estática en ambas plataformas. La línea Whitenoise Flutter continúa en el repo desarchivado &lt;a href="https://github.com/marmot-protocol/whitenoise">&lt;code>whitenoise&lt;/code>&lt;/a>, por lo que el anuncio es aditivo: un nuevo linaje de cliente nativo corre junto a la app Flutter mientras la especificación v2 converge. El corte de producción desde MDK o la app Whitenoise actual espera a que el borrador, el motor y los clientes alcancen lanzamientos listos para producción.&lt;/p>
&lt;h3 id="chama-de-v200-a-v310-escrow-p2p-independiente-en-una-semana">Chama de v2.0.0 a v3.1.0: escrow P2P independiente en una semana&lt;/h3>
&lt;p>El cliente de escrow P2P nativo de Nostr introducido en Newsletter #25 en v1.3.0 publicó diecisiete lanzamientos etiquetados en los últimos siete días, terminando en &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.1.0">v3.1.0&lt;/a> el 9 de junio con un rediseño de la UI de la sala de intercambio y storefronts por vendedor. El rastro de versiones cuenta la historia: &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.0.0">v2.0.0&lt;/a> es la base BREAKING, luego &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.0.1">v2.0.1&lt;/a>, &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.0.2">v2.0.2&lt;/a> y &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.0.3">v2.0.3&lt;/a> cierran las brechas del pay-rail de financiación por WebView Fedi; &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.1.0">v2.1.0&lt;/a>, &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.2.0">v2.2.0&lt;/a>, &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.3.0">v2.3.0&lt;/a> y &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.3.1">v2.3.1&lt;/a> endurecen la capa del árbitro; &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.4.0">v2.4.0&lt;/a>, &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.5.0">v2.5.0&lt;/a> y &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.6.0">v2.6.0&lt;/a> añaden superficies de auto-custodia y enrutado de comunidad mundial; &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.7.0">v2.7.0&lt;/a>, &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.8.0">v2.8.0&lt;/a>, &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.9.0">v2.9.0&lt;/a> y &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.10.0">v2.10.0&lt;/a> superponen texto de clave en lenguaje llano, aplicaciones de grupo, arbitraje por plazo de disputa y reputación. &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.0.0">v3.0.0&lt;/a> ata el paquete con notificaciones de intercambio de extremo a extremo, y &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.1.0">v3.1.0&lt;/a> el 9 de junio redibuja la pantalla de intercambio en torno a una columna vertebral de progreso Reserved → Locked → Settled, tarjetas de acción coloreadas por rol y una clase de listado de storefront por vendedor (swaps curados, loanbooks y facturas) que se distribuyen.&lt;/p>
&lt;p>El pivote arquitectónico vive en v2.0.0. El formato LOCK de escrow cambió para que cada share de una división Shamir 2-de-3 se cifre solo a su titular (sharePolicy &lt;code>holder-only-v1&lt;/code>). El ecash al portador de la federación ya no se reconstruye desde un único participante solo, cerrando una ruta donde una parte maliciosa con su propio share y un share retenido por la federación podía completar el intercambio sin consentimiento. Los clientes pre-2.0 fallan ruidosamente con &amp;ldquo;can&amp;rsquo;t find your share&amp;rdquo;; el intercambio no puede completarse en un cliente obsoleto, y no se pierden fondos en el proceso. Un lock v2.0 requiere que cada parte esté en v2.x para liquidar. v2.0.0 también añadió storefronts multi-unidad y una vista Market solo en sats.&lt;/p>
&lt;p>v2.1.0 introdujo la sustitución de árbitro: el share del árbitro en el índice Shamir 2 ahora se cifra en un orden de prioridad determinista sobre el pool de árbitros de la comunidad, para que un árbitro ausente pueda ser reemplazado sin varar el intercambio. v2.2.0 probó que la sustitución funcionó en producción en un intercambio de ₿121 y añadió respaldos de sustitución de curación. v2.3.0 cerró la última brecha de front-running de árbitro comprobando la membresía de comunidad del árbitro del listado en el momento del lock, y v2.3.1 cerró la carrera hermana donde un slot de árbitro autoasignado era una vista previa hasta que el lock los asentaba.&lt;/p>
&lt;p>Las superficies de auto-custodia llegaron en v2.4.0 (frase de recuperación BIP-39 para la wallet de ecash Fedimint, almacenada cifrada en Nostr) y v2.5.0 (respaldo del nsec maestro que posee la identidad Nostr y la semilla de la wallet). v2.6.0 reelaboró el onboarding en torno a un selector de comunidad global para que los usuarios en países sin una Chama local se enruten a la federación más cercana; las compilaciones anteriores rebotaban al usuario sin fallback. v2.7.0 reescribió la pantalla de clave de recuperación en lenguaje llano (&amp;ldquo;la única clave a tu cuenta y al dinero en ella; Chama nunca la ve y no puede resetearla; si la pierdes, nadie puede recuperar tu cuenta&amp;rdquo;). v2.8.0 añadió aplicaciones de grupo, tematización oscura/clara y añadió dos nuevos kinds de evento (38120 roster, 38121 aplicación). v2.9.0 cambió la resolución de disputas en el plazo: los intercambios impugnados que llegan a su expiración ahora se resuelven por dictamen del árbitro; el comportamiento anterior auto-reembolsaba. El lanzamiento está marcado COORDINATED por lo que todas las partes en una disputa deben actualizar. v2.10.0 añadió valoraciones pulgar-arriba/pulgar-abajo por intercambio como un nuevo kind de evento 38123.&lt;/p>
&lt;p>v3.0.0 es el hito donde la app deja de necesitar una comunidad coordinadora para operar. Las notificaciones de intercambio de extremo a extremo hacen ping al usuario solo en transiciones de estado accionables: la contraparte bloqueó los sats, el pago está listo para reclamar, la disputa requiere el dictamen del usuario como árbitro, o el intercambio se liquidó o expiró. Un interruptor en la pantalla Me activa o desactiva las notificaciones, y el prompt de permiso solo se dispara cuando el interruptor está habilitado. El dedup fire-once evita que una recarga de estado dispare una tormenta de alertas. También se cerró un bug del guardarraíl wrong-chama en &lt;a href="https://github.com/jesuspirate/chama/pull/103">PR #103&lt;/a>, donde versiones anteriores podían estampar un listado con la etiqueta de una chama pero la federación de otra chama. Los bundles de escritorio para Windows y Linux se distribuyen con el lanzamiento; el dmg de macOS se retiene hasta que la firma y la notarización aterricen.&lt;/p>
&lt;p>Chama ahora se une a Mostro y Shopstr como un marketplace nativo de Nostr, distinguido por arquitectura sin servidor, escrow Shamir 2-de-3 respaldado por Fedimint, cifrado de shares solo del titular y ser el único de los tres que distribuye un cliente de escritorio y móvil autocontenido sin una comunidad coordinadora.&lt;/p>
&lt;h3 id="coracle-hosting-servicio-de-relay-de-pago-más-pila-caravel-de-código-abierto">Coracle Hosting: servicio de relay de pago más pila Caravel de código abierto&lt;/h3>
&lt;p>El 3 de junio Hodlbod &lt;a href="https://nos.lol/e/f8586160cd12df479c261397353c99e6f3e4d870b616382e1b4338bad3ab498a">anunció Coracle Hosting&lt;/a> en &lt;a href="https://hosting.coracle.social">hosting.coracle.social&lt;/a>, un servicio de relay comunitario alojado que acepta pagos lightning recurrentes sobre NWC o tarjeta. El servicio está impulsado por &lt;a href="https://gitea.coracle.social/coracle/caravel">Caravel&lt;/a>, el frontend de facturación y aprovisionamiento de Coracle, y &lt;a href="https://gitea.coracle.social/coracle/zooid">zooid&lt;/a>, un runtime de relay que aloja muchos relays virtuales en una sola máquina. Ambos son de código abierto en el gitea auto-alojado de Coracle. Caravel se distribuye con integración opcional de &lt;a href="https://livekit.io">livekit&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> que los operadores pueden activar por relay. Un nivel gratuito con límites de conteo de miembros permite a los operadores evaluar el servicio antes de comprometer los datos de pago.&lt;/p>
&lt;p>Hodlbod es franco sobre el modelo de negocio: monetizar código abierto vendiendo una versión alojada de una pila que cualquier otro puede también ejecutar. El foso competitivo es la integración con &lt;a href="https://flotilla.social">Flotilla&lt;/a>, que es el siguiente paso planeado. Flotilla posee la superficie de usuario, por lo que la opción alojada servida desde dentro de Flotilla se convierte en la ruta por defecto para cualquier usuario que prefiera infraestructura gestionada. Hodlbod ofreció añadir otros operadores de Caravel al selector de alojamiento alternativo de Flotilla si contactan, manteniendo la puerta abierta a un mercado de alojamiento federado.&lt;/p>
&lt;p>Caravel se une a &lt;a href="https://relay.tools">relay.tools&lt;/a> como una plataforma pública de aprovisionamiento de relays Nostr con niveles de miembros de pago. relay.tools precede a Caravel y se distribuye como el servicio dominante de creación de relays hoy, con su propio directorio de relays comunitarios y flujos de unión de miembros o moderadores de pago. La característica distintiva de Caravel es la pila coordinada: el runtime del relay (zooid), el frontend de facturación y aprovisionamiento (Caravel mismo) y el selector del lado del cliente (integración con Flotilla, aún en vuelo) se distribuyen como un solo diseño. La otra característica distintiva es la densidad de muchos-relays-por-proceso de zooid, donde los relays de clientes comparten un único proceso host para que el operador amortice los costes de alojamiento entre muchas comunidades pequeñas. Este es el mismo argumento de densidad que hizo viable el shared web hosting a principios de los 2000, aplicado a la capa de relay de Nostr.&lt;/p>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;h3 id="angor-v0229-y-v0230-mainnet-por-defecto-y-prueba-de-financiación-uat-de-3-usuarios">Angor v0.2.29 y v0.2.30: mainnet por defecto y prueba de financiación UAT de 3 usuarios&lt;/h3>
&lt;p>&lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.29">Angor v0.2.29&lt;/a> el 4 de junio y &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.30">v0.2.30&lt;/a> el 8 de junio son los dos lanzamientos de esta semana para el protocolo descentralizado de financiación Bitcoin-y-Nostr. El cambio destacado de v0.2.30 es &lt;a href="https://github.com/block-core/angor/pull/893">PR #893&lt;/a>, que cambia la red por defecto a mainnet. Angor aún se distribuye como un lanzamiento alfa inestable, pero el cambio a mainnet por defecto señala que el protocolo ha superado la fase solo-testnet para los clientes de escritorio y móvil. v0.2.30 también aterriza un flujo de creación de proyecto móvil de un solo toque con subida de imagen y reset de scroll (&lt;a href="https://github.com/block-core/angor/pull/889">PR #889&lt;/a>) y resuelve una condición de carrera donde el spinner de la factura lightning podía colgarse (&lt;a href="https://github.com/block-core/angor/pull/890">PR #890&lt;/a>).&lt;/p>
&lt;p>v0.2.29 añadió una prueba UAT de extremo a extremo en &lt;a href="https://github.com/block-core/angor/pull/881">PR #881&lt;/a> cubriendo envío de fondos de 3 usuarios en 10 rondas con gastos no confirmados, la primera prueba de flujo de financiación multi-usuario en el conjunto de pruebas de Angor. El lanzamiento también añadió un plan de implementación para una CLI y servidor MCP de Angor (&lt;a href="https://github.com/block-core/angor/pull/792">PR #792&lt;/a>), con mejoras en el CLI para el flujo de trabajo de pruebas MCP en &lt;a href="https://github.com/block-core/angor/pull/880">PR #880&lt;/a>. &lt;a href="https://github.com/block-core/angor/pull/885">PR #885&lt;/a> de DavidGershony corrigió una factura lightning Boltz que usaba la red incorrecta tras un cambio de red en runtime, un bug que habría aflorado en producción tras el cambio a mainnet por defecto de v0.2.30. Los ajustes ahora ofrecen una purga opcional del archivo de wallet de recuperación durante el borrado de datos (&lt;a href="https://github.com/block-core/angor/pull/883">PR #883&lt;/a>).&lt;/p>
&lt;h3 id="sprout-v0315-refresco-de-ttl-de-canal-efímero-y-comandos-slash-acp">Sprout v0.3.15: refresco de TTL de canal efímero y comandos slash ACP&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/sprout/releases/tag/v0.3.15">Sprout v0.3.15&lt;/a>, publicado el 10 de junio, es el octavo lanzamiento en una serie que comenzó con v0.3.7 el 2 de junio. Newsletter #25 cubrió la serie v0.3.1 a v0.3.6 con la integración mesh-llm y el trabajo de secciones de canal; v0.3.7 a v0.3.15 son downstream de eso, centrados en pulido y algunas adiciones de cara al usuario. El cambio más visible al usuario es un refresco de TTL para canales efímeros en &lt;a href="https://github.com/block/sprout/pull/902">PR #902&lt;/a>: cuando un usuario desarchiva un canal efímero, Sprout extiende el time-to-live del canal para que el desarchivado no re-archive inmediatamente bajo el temporizador de expiración original. Los emojis personalizados en móvil llegan en &lt;a href="https://github.com/block/sprout/pull/906">PR #906&lt;/a> junto con un rediseño de ajustes, y los conteos de reacción ahora se animan al cambiar (&lt;a href="https://github.com/block/sprout/pull/904">PR #904&lt;/a>).&lt;/p>
&lt;p>&lt;a href="https://github.com/block/sprout/pull/905">PR #905&lt;/a> corrige una brecha de larga data donde los nombres de visualización de múltiples palabras se rompían y la extracción de menciones &lt;code>nostr:npub&lt;/code> de &lt;a href="https://github.com/nostr-protocol/nips/blob/master/27.md">NIP-27&lt;/a> se descartaba silenciosamente. Una UI de equipo respaldada por directorio para escritorio se distribuye en &lt;a href="https://github.com/block/sprout/pull/912">PR #912&lt;/a> con comandos install, sync y reveal. Los comandos slash ahora pasan a los conectores &lt;a href="https://agentclientprotocol.com">ACP&lt;/a> en &lt;a href="https://github.com/block/sprout/pull/919">PR #919&lt;/a>, permitiendo a Sprout reenviar comandos estilo &lt;code>/help&lt;/code> directamente a los runtimes de agente mientras la UI de Sprout se mantiene fuera de la ruta.&lt;/p>
&lt;h3 id="wisp-v111-integración-de-wallet-spark-y-guardia-de-pegado-de-nsec">Wisp v1.1.1: integración de wallet Spark y guardia de pegado de nsec&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.1.1">Wisp v1.1.1&lt;/a>, publicado el 5 de junio, aterriza una pantalla de conexión de wallet de dos niveles con sub-pantalla &lt;a href="https://www.spark.money">Spark&lt;/a> en &lt;a href="https://github.com/barrydeen/wisp/pull/548">PR #548&lt;/a> y paridad del dashboard con la UI de wallet de iOS en &lt;a href="https://github.com/barrydeen/wisp/pull/549">PR #549&lt;/a>. El lanzamiento incluye una &lt;a href="https://github.com/barrydeen/wisp/pull/553">guardia de pegado de nsec&lt;/a> de todo el sistema que detecta un pegado con prefijo &lt;code>nsec1&lt;/code> en cualquier lugar de la app y bloquea al campo de aceptarlo, cerrando uno de los footguns más citados en la UX de Nostr. Inicio de sesión por escaneo QR más un modo solo lectura para &lt;code>npub&lt;/code> y &lt;code>nprofile&lt;/code> se distribuye en &lt;a href="https://github.com/barrydeen/wisp/pull/552">PR #552&lt;/a>, permitiendo a un usuario navegar un perfil solo lectura. Los mensajes de zap ahora se renderizan como mini-posts en el drawer de engagement (&lt;a href="https://github.com/barrydeen/wisp/pull/559">PR #559&lt;/a>) para que las notas de zap lleven su texto junto con la cantidad de sats. Un filtro de web of trust en las respuestas de hilo aterriza en &lt;a href="https://github.com/barrydeen/wisp/pull/583">PR #583&lt;/a>, permitiendo a los usuarios ocultar spam de respuesta de cuentas fuera de su grafo de follow.&lt;/p>
&lt;h3 id="nostria-v3146-y-nospeak-113-retrabajo-de-notificaciones-y-reinicio-de-ice">Nostria v3.1.46 y nospeak 1.1.3: retrabajo de notificaciones y reinicio de ICE&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.46">Nostria v3.1.46&lt;/a> el 7 de junio termina una serie de tres lanzamientos que retrabajó el contador de notificaciones para contar solo las nuevas notificaciones desde la última vista, eliminando una inflación de larga data donde cargar notificaciones más antiguas desplazándose aumentaba el conteo de la insignia. &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.45">Nostria v3.1.45&lt;/a> corrigió un bug de pago dividido que afectaba a pagos lightning y de código QR y descartó una UI translúcida previamente planeada como inviable en el compositor de Android.&lt;/p>
&lt;p>&lt;a href="https://github.com/psic4t/nospeak/releases/tag/v1.1.3">nospeak v1.1.3&lt;/a> el 4 de junio añade reinicio de ICE en estado FAILED para llamadas de voz 1 a 1. El comportamiento estándar de WebRTC descarta una llamada cuando los candidatos ICE se agotan sin una ruta alternativa; la ruta de reinicio de ICE renegocia candidatos para que la llamada se recupere de cambios transitorios de NAT o red. Las llamadas Android ahora mantienen la pantalla encendida durante las videollamadas.&lt;/p>
&lt;h2 id="cambios-sin-publicar">Cambios sin publicar&lt;/h2>
&lt;h3 id="amethyst-41-prs-continuando-la-pista-nip-32--nip-f4--tor">Amethyst: 41 PRs continuando la pista NIP-32 / NIP-F4 / Tor&lt;/h3>
&lt;p>Amethyst fusionó 41 PRs esta semana sin cortar una etiqueta de lanzamiento, encima de los 52 PRs de la semana pasada y el trabajo de etiquetado de hashtags &lt;a href="https://nostrcompass.org/es/topics/nip-32/">NIP-32&lt;/a> y podcast &lt;a href="https://nostrcompass.org/es/topics/nip-f4/">NIP-F4&lt;/a> cubierto en Newsletter #25. La rama activa sigue acumulando características para el próximo lanzamiento etiquetado, superponiendo pulido a las adiciones destacadas de la semana pasada: descubrimiento de etiquetadores de hashtags, pantalla de podcast, pistas de música y playlists, watchdog de auto-curación de Tor, firmadores efímeros para subidas anónimas y zaps en cadena con filtrado NIP-05. La producción de PRs de Amethyst sigue siendo la más alta de cualquier cliente Nostr, y la cola sin publicar es la hoja de ruta de facto para lo que otros clientes Nostr para Android necesitarán igualar.&lt;/p>
&lt;h3 id="damus-rastreo-de-relays-desde-mensajes-ok-y-changelog-de-v117">Damus: rastreo de relays desde mensajes OK y changelog de v1.17&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/pull/3786">Damus PR #3786&lt;/a>, fusionado el 3 de junio, añade los mensajes &lt;code>OK&lt;/code> exitosos de un relay a la lista de post-relay. Las compilaciones anteriores de Damus poblaban la lista de relays vistos solo al recibir un mensaje genérico del relay, lo que significaba que un relay que reconocía el post pero no entregaba eventos de vuelta era invisible para el usuario. El cambio importa para los usuarios que quieren confirmar que su post aterrizó en su relay outbox preferido. &lt;a href="https://github.com/damus-io/damus/pull/3796">PR #3796&lt;/a> corrige un ciclo &lt;code>AttributeGraph&lt;/code> en Profile View, y &lt;a href="https://github.com/damus-io/damus/pull/3725">PR #3725&lt;/a> aterriza el changelog de v1.17 antes del próximo lanzamiento etiquetado.&lt;/p>
&lt;h3 id="shopstr-doble-publicación-nip-34">Shopstr: doble publicación NIP-34&lt;/h3>
&lt;p>El &lt;a href="https://relay.ngit.dev/npub1u350hpq840naxzkkle4gmdtvzanfxmjd9m9tytn5355aua7jh2cqgfuw39/shopstr.git">repo de shopstr en ngit&lt;/a> fue anunciado en Nostr esta semana como un repo git &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a>, uniéndose a los repos rastreados de ngit. El repo GitHub del cliente de tienda sigue siendo la superficie principal de desarrollo; el anuncio NIP-34 hace disponible una ruta paralela de colaboración git-sobre-Nostr. Este es el segundo proyecto importante de marketplace Nostr en doble-publicar a NIP-34 tras &lt;a href="https://relay.ngit.dev/">Mostro&lt;/a>, y continúa la migración gradual de metadatos de proyectos al transporte git de Nostr.&lt;/p>
&lt;h3 id="hermes-marmot-pasarela-de-agente-ia-sobre-mls">Hermes-Marmot: pasarela de agente IA sobre MLS&lt;/h3>
&lt;p>&lt;a href="https://github.com/notmandatory/hermes-marmot">hermes-marmot&lt;/a>, un plugin para el &lt;a href="https://github.com/NousResearch/hermes-agent">Hermes Agent&lt;/a>, conecta la superficie de mensajería de un agente IA con grupos &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> (MLS-sobre-Nostr) usando &lt;a href="https://github.com/marmot-protocol/mdk-python">mdk-python&lt;/a>, los bindings Python al Marmot Development Kit de Rust. El plugin permite a un usuario enviar DM a un agente IA desde cualquier cliente Nostr que hable mensajes MLS kind 445, incluido &lt;a href="https://whitenoise.chat">Whitenoise&lt;/a>. Los DMs entrantes usan desenvoltura de gift-wrap &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> mediante los bindings Python de &lt;a href="https://github.com/rust-nostr/nostr">nostr-sdk&lt;/a>, y las bienvenidas entrantes fluyen a través de &lt;code>UnwrappedGift.from_gift_wrap&lt;/code> a &lt;code>mdk.process_welcome&lt;/code> y &lt;code>mdk.accept_welcome&lt;/code>. El control de acceso se ejecuta mediante &lt;code>MARMOT_ALLOWED_USERS&lt;/code> (una lista blanca de npubs separada por comas) o &lt;code>MARMOT_ALLOW_ALL_USERS=true&lt;/code> para acceso de desarrollo abierto.&lt;/p>
&lt;p>El repo es nuevo (última actualización el 27 de mayo) y pequeño. Su significado es arquitectónico: es el primer puente público entre un runtime de agente LLM y un canal de mensajería Nostr cifrado con MLS, y el primer uso en producción de mdk-python más allá de Whitenoise mismo. El patrón apunta hacia la comunicación agente-a-agente donde ambos endpoints poseen claves MLS y el relay solo ve texto cifrado.&lt;/p>
&lt;h2 id="actualizaciones-de-nip-y-trabajo-de-especificación-de-protocolo">Actualizaciones de NIP y trabajo de especificación de protocolo&lt;/h2>
&lt;h3 id="nip-67-pista-de-completitud-eose-pr-2317-fusionado">NIP-67 pista de completitud EOSE (PR #2317) fusionado&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2317">PR #2317&lt;/a> de mattn se fusionó el 6 de junio, añadiendo &lt;a href="https://nostrcompass.org/es/topics/nip-67/">NIP-67&lt;/a> al protocolo. El NIP extiende el mensaje de relay &lt;code>EOSE&lt;/code> con un tercer elemento opcional: &lt;code>[&amp;quot;EOSE&amp;quot;, &amp;lt;subscription_id&amp;gt;, &amp;quot;finish&amp;quot;]&lt;/code> señala que cada evento almacenado que coincide con el filtro se ha entregado, mientras que un &lt;code>[&amp;quot;EOSE&amp;quot;, &amp;lt;subscription_id&amp;gt;]&lt;/code> desnudo no lleva ninguna reclamación de completitud. Un relay que omite la pista está diciéndole al cliente que puede haber más; un relay que omite el anuncio NIP-67 en NIP-11 mantiene el comportamiento actual bajo la heurística legada existente. El cambio es compatible hacia atrás en ambas direcciones: los clientes legados ignoran el elemento final del array, y los relays legados lo omiten.&lt;/p>
&lt;p>La motivación en la especificación fusionada es doble. Primero, pérdida silenciosa de datos: un cliente pide las últimas 500 notas contra un relay con un límite interno de 300 eventos, el relay devuelve 300 eventos y el cliente (usando la heurística estándar &lt;code>received &amp;lt; limit&lt;/code>) concluye que el resultado está completo. Las notas coincidentes 201.ª hasta la N.ª más antigua permanecen en el relay sin leer, con el cliente ciego a ese hecho. Segundo, viajes de ida y vuelta obligatorios desperdiciados: cuando un relay limita las respuestas a 300 eventos, cualquier suscripción que agota el límite requiere un segundo &lt;code>REQ&lt;/code> con &lt;code>until=&amp;lt;oldest_created_at&amp;gt;&lt;/code> puramente para confirmar la completitud, incluso cuando el filtro coincide exactamente con 300 eventos. Ambos modos de fallo son pagados por cada cliente en cada suscripción con límite agotado. La pista &lt;code>&amp;quot;finish&amp;quot;&lt;/code> es una cadena opcional en un mensaje existente y elimina ambos costes.&lt;/p>
&lt;h3 id="extensión-de-autocompletado-nip-50-pr-2357-fusionado">Extensión de autocompletado NIP-50 (PR #2357) fusionado&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2357">PR #2357&lt;/a> de Alex Gleason se fusionó el 6 de junio, añadiendo un token &lt;code>autocomplete:true/false&lt;/code> a la búsqueda &lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a>. La extensión permite a un cliente marcar una consulta como una búsqueda typeahead para que el relay use coincidencia de prefijo, con búsqueda de texto completo como predeterminado para consultas sin el token. El relay de Ditto lo implementa para follow packs, listas y cualquier evento con un tag &lt;code>title&lt;/code>, devolviendo coincidencias contra el prefijo del título; la ruta de búsqueda por defecto ejecuta puntuación de texto completo. Sin este token, las UIs estilo autocompletado no tenían forma de comunicar la intención de búsqueda por prefijo y los relays tenían que adivinar por la forma de la consulta. El token es una pista por búsqueda, no una capacidad a nivel de relay, por lo que un relay puede implementarlo para una clase de evento (títulos) sin reclamar soporte general de autocompletado.&lt;/p>
&lt;h3 id="alertas-de-emergencia-y-difusiones-de-ubicación-nip-gart-pr-2374">Alertas de emergencia y difusiones de ubicación NIP-GART (PR #2374)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2374">PR #2374&lt;/a> de disinqa, abierto el 9 de junio, define un formato de cable que preserva la privacidad en Nostr para alertas de emergencia y difusiones de ubicación dirigidas a un grupo de destinatarios de confianza. El objetivo de diseño declarado es ocultar la identidad del remitente, la membresía del grupo y el payload a los operadores de relay mientras se mantiene los eventos seguros contra replay y verificables por firma de extremo a extremo. El número de NIP está aún por determinar, la propuesta es borrador temprano. El caso de uso es el patrón estándar de alerta de emergencia: un usuario bajo amenaza difunde un ping de ubicación que solo un grupo pre-compartido de contactos de confianza puede descifrar, con el relay ciego al remitente, al conjunto de destinatarios y al payload. Los detalles del formato de cable viven en el PR y probablemente evolucionarán a medida que los mantenedores revisen.&lt;/p>
&lt;h3 id="método-logout-nip-46-pr-2373">Método logout NIP-46 (PR #2373)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2373">PR #2373&lt;/a> de hzrd149, abierto el 8 de junio, añade un método &lt;code>logout&lt;/code> a &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> para que un cliente pueda decirle a un bunker explícitamente que la sesión ha terminado. Hasta ahora, la única forma de terminar una sesión de bunker era esperar el timeout de la sesión o dejar de usar la conexión, ambas dejan al bunker manteniendo el estado de la sesión para un cliente que se ha ido. La propuesta es corta (un nuevo método) y es el tipo de cambio de mantenimiento que hace las integraciones de bunker de larga vida más limpias.&lt;/p>
&lt;h3 id="propuesta-híbrida-relay-p2p-nip-95-circulada-como-formato-largo">Propuesta híbrida relay-P2P NIP-95 circulada como formato largo&lt;/h3>
&lt;p>Una &lt;a href="https://github.com/nostr-protocol/nips">especificación NIP-95&lt;/a> de formato largo circuló como un post &lt;code>kind:30023&lt;/code> de npub &lt;code>91bea5cd9361504c409aaf459516988f68a2fcd482762fd969a7cdc71df4451c&lt;/code> el 4 de junio bajo el título &lt;em>Protocolo Híbrido Relay-P2P via WebRTC&lt;/em>. El documento en portugués define un protocolo híbrido de relay peer-to-peer donde los clientes Nostr se conectan entre sí directamente mediante WebRTC para mensajería en vivo mientras continúan usando relays para la recuperación de eventos almacenados y la entrega offline. El autor enmarcó explícitamente la especificación como &amp;ldquo;LLM-ready&amp;rdquo;, proporcionando definiciones de mensajes, flujos lógicos, esquemas de datos y reglas de estado a un nivel de detalle que permite a un modelo de IA generar código cliente o servidor funcional. La propuesta aún no ha aterrizado como un PR de NIP; la circulación mediante &lt;code>kind:30023&lt;/code> es el precursor habitual a un pull request formal a nostr-protocol/nips.&lt;/p>
&lt;h3 id="nip-44-v3-recoge-un-segundo-firmador-clave-porta-la-especificación">NIP-44 v3 recoge un segundo firmador: Clave porta la especificación&lt;/h3>
&lt;p>El &lt;a href="https://nostrcompass.org/es/newsletters/2026-06-03-newsletter/#nip-44-v3-amber-implementation-ahead-of-spec">despliegue de NIP-44 v3 de v6.2.0 de Amber de la semana pasada&lt;/a> se distribuyó por delante de cualquier PR de NIPs fusionado, dejando v3 como una extensión específica de Amber que otros clientes tenían que reflejar para interoperar. Ese enmarque de implementación única cambió esta semana. &lt;a href="https://github.com/DocNR/clave">Clave&lt;/a>, el firmador remoto NIP-46 iOS basado en push, aterrizó un port independiente de NIP-44 v3 el 3 y 4 de junio a través de ocho commits. Las primitivas criptográficas se distribuyen en tres commits: &lt;a href="https://github.com/DocNR/clave/commit/99ca5a5aacb501d1666c489fcdea30187c7853fa">capa de claves HKDF + ECDH&lt;/a>, &lt;a href="https://github.com/DocNR/clave/commit/8808cdca54d32b4ae57856bd4b07ed73a45e8e5c">el algoritmo de padding v3&lt;/a> y una &lt;a href="https://github.com/DocNR/clave/commit/ae1f506a53cb2c8aa16523540dbe790876c1839e">API pública de alto nivel más Context de cifrado&lt;/a>. Encima de esos, la superficie NIP-46 sigue en &lt;a href="https://github.com/DocNR/clave/commit/f37aa1afc8368862fc3ebac533408442349bfc38">cableado de despacho RPC dentro de LightSigner&lt;/a> y un &lt;a href="https://github.com/DocNR/clave/commit/e51bcb49fc61cfa89b6030d61b203e046aeddb0a">esquema PendingRequest que lleva el contexto v3 (kind más scope)&lt;/a>, para que el firmador pueda registrar para qué kind de evento y caso de uso se aprobó el payload v3.&lt;/p>
&lt;p>Clave diverge de Amber en la superficie de cara al usuario. Un &lt;a href="https://github.com/DocNR/clave/commit/0a8b7de63c1f2994a80a66bf139ec519fab12877">esquema de concesión de permisos con niveles de sensibilidad&lt;/a> permite a los usuarios conceder cifrado v3 para un kind de evento y scope particular a un nivel de sensibilidad elegido. En el primer encuentro, &lt;a href="https://github.com/DocNR/clave/commit/2cf563cb15b0406f5e8aaa0b4e34b887ff1896a1">prompts de aprobación conscientes del contexto v3 con una tarjeta explicativa única&lt;/a> introducen v3 a los usuarios. El trabajo está en main y está &lt;a href="https://github.com/DocNR/clave/commit/4bd0c26d7cf308386ef15e5d96ee5673d6db2d4a">conectado al proyecto Xcode&lt;/a> pero no está publicado; la compilación etiquetada más reciente es &lt;a href="https://github.com/DocNR/clave/releases/tag/v0.2.0-build79">v0.2.0-build79&lt;/a> del 12 de mayo.&lt;/p>
&lt;p>Dos implementaciones independientes aterrizan NIP-44 v3 en rutas de producción antes de que el PR de NIPs se fusione, lo que fortalece el caso para el formato de cable subyacente que el PR del protocolo formalizará. Las pruebas de interoperabilidad entre implementaciones ahora se convierten en la ruta a la convergencia de la especificación, con la superficie de aprobación Android de Amber y el modelo de niveles de sensibilidad iOS de Clave como los dos puntos de referencia. Otros firmadores remotos cableando v3 (noauth de nsec.app ha estado inactivo desde mayo de 2025, y otros bunkers no han anunciado trabajo v3) endurecerían el consenso aún más.&lt;/p>
&lt;h3 id="actividad-nip-34-iris-adopta-la-pila-con-un-nuevo-transporte-hashtree">Actividad NIP-34: Iris adopta la pila con un nuevo transporte hashtree&lt;/h3>
&lt;p>Iris publicó anuncios de repo NIP-34 para &lt;a href="https://njump.me/nevent1qqs8kmy7a9dn5awurlp9q26lsaetl7dc4wauzdl8ww68dzmn09e074gpzfmhxue69uhhgetdwqhxjunfwvh8gmc850du0">&lt;code>hashtree&lt;/code>&lt;/a> el 8 de junio y &lt;a href="https://njump.me/nevent1qqsq4grx000f6p0r8hdv4lqhcgn7707vmktv2j528kn0ldps4y9g49qpzfmhxue69uhhgetdwqhxjunfwvh8gmcmq47as">&lt;code>iris-apps&lt;/code>&lt;/a>, &lt;a href="https://njump.me/nevent1qqsyj5r0tyqvpp9v7qnras90u6kzqtpqx6ktntwym66m8qyngvf59vqpzfmhxue69uhhgetdwqhxjunfwvh8gmcpts6pf">&lt;code>iris-drive&lt;/code>&lt;/a> y &lt;a href="https://njump.me/nevent1qqs0x98hpsv8vmrxvwm2rs9exxttrue5qv5p2n2sqjeylz2kgdmd7tgpzfmhxue69uhhgetdwqhxjunfwvh8gmca8783s">&lt;code>iris-chat-rs&lt;/code>&lt;/a> el 9 de junio, anunciando URLs de clonado bajo un nuevo esquema &lt;code>htree://&lt;/code> servido desde &lt;code>wss://temp.iris.to&lt;/code>. El transporte hashtree es una alternativa direccionable por contenido a los clonados enrutados por GRASP, y estos cuatro anuncios son sus primeros usos públicos. Los repos llevan descripciones vacías y los detalles arquitectónicos aún están emergiendo, pero la elección de publicar mediante anuncio NIP-34 (sobre un manifiesto Iris-interno personalizado) señala que Iris se compromete con la pila git-sobre-Nostr NIP-34 más amplia.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-67-pista-de-completitud-eose">NIP deep dive: NIP-67 (Pista de completitud EOSE)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-67/">NIP-67&lt;/a> cierra una de las brechas de corrección más antiguas en &lt;a href="https://nostrcompass.org/es/topics/nip-01/">NIP-01&lt;/a>. La especificación original define &lt;code>EOSE&lt;/code> como el límite entre eventos almacenados y eventos de suscripción en vivo para un &lt;code>REQ&lt;/code>, pero nunca especificó si el relay había terminado de entregar todas las coincidencias almacenadas o se había detenido a mitad de camino por un límite interno. Cada relay aplica un límite por suscripción (comúnmente 300 a 1000 eventos) independiente del &lt;code>limit&lt;/code> del cliente, y los clientes no han tenido forma de observar ese límite.&lt;/p>
&lt;p>El workaround estándar era comparar el conteo recibido contra el &lt;code>limit&lt;/code> solicitado. Si &lt;code>received &amp;lt; limit&lt;/code>, tratar el resultado como completo; de lo contrario, paginar con &lt;code>until=&amp;lt;oldest_created_at&amp;gt;&lt;/code>. Ambas ramas están rotas. La rama &lt;code>received &amp;lt; limit&lt;/code> trunca silenciosamente: un cliente pidiendo 500 notas contra un relay limitado a 300 ve 300 eventos, concluye que el resultado está completo porque &lt;code>300 &amp;lt; 500&lt;/code> y nunca obtiene el resto. Los eventos retenidos en el relay no pueden señalizar &amp;ldquo;más disponible&amp;rdquo; a través de ningún mensaje existente. La paginación como segunda rama es derrochadora: un filtro que coincide exactamente con el límite requiere un segundo &lt;code>REQ&lt;/code> para confirmar la completitud, devolviendo cero eventos mientras consume un escaneo de filtro completo en el relay.&lt;/p>
&lt;p>La corrección de NIP-67 es una cadena opcional en el mensaje &lt;code>EOSE&lt;/code>:&lt;/p>
&lt;pre tabindex="0">&lt;code>[&amp;#34;EOSE&amp;#34;, &amp;#34;&amp;lt;sub_id&amp;gt;&amp;#34;, &amp;#34;finish&amp;#34;] // explícito: todos los eventos almacenados entregados
[&amp;#34;EOSE&amp;#34;, &amp;#34;&amp;lt;sub_id&amp;gt;&amp;#34;] // ninguna reclamación de completitud
&lt;/code>&lt;/pre>&lt;p>Un relay que anuncia NIP-67 en &lt;code>supported_nips&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> y emite un &lt;code>EOSE&lt;/code> desnudo está diciéndole al cliente que hay más. Un relay que omite el anuncio mantiene el comportamiento actual, y el cliente recae en la heurística existente. Los clientes legados ignoran el elemento final del array. La compatibilidad hacia atrás se mantiene en ambas direcciones, sin nuevos verbos ni kinds de evento.&lt;/p>
&lt;p>Lo que hace a NIP-67 digno de examinar es el alcance que deliberadamente restringe. La especificación no define ningún cursor o token de paginación, por lo que la paginación basada en &lt;code>until&lt;/code> sigue siendo el mecanismo. Los límites de relay permanecen donde están, y el NIP no requiere exposición de ellos. NIP-67 preserva el significado de &lt;code>EOSE&lt;/code> como el límite almacenado-a-en-vivo y solo añade una señal sí-o-no en el límite: &amp;ldquo;tengo más para ti&amp;rdquo; versus &amp;ldquo;eso es todo&amp;rdquo;. Esta superficie mínima es por qué el PR se fusionó tras un período de revisión relativamente corto para una extensión NIP-01, y por qué mattn nota explícitamente en el PR que se usó traducción por IA para el texto en inglés. El cambio es lo suficientemente pequeño como para que la incertidumbre de traducción no importe.&lt;/p>
&lt;p>Ejemplo de intercambio consciente de NIP-67 entre un cliente y un relay que aplica límites. Anuncio NIP-11 del relay:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a5f87fe2d4c8b9a0e3f1c4d5e6a7b8c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1781136000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">11&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;supported_nips\&amp;#34;:[1,11,50,67]}&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1e2d3c4b5a6978869504132c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El intercambio a nivel de cable que sigue:&lt;/p>
&lt;pre tabindex="0">&lt;code>→ [&amp;#34;REQ&amp;#34;, &amp;#34;abc&amp;#34;, {&amp;#34;kinds&amp;#34;:[1],&amp;#34;limit&amp;#34;:500}]
← [...300 EVENT messages...]
← [&amp;#34;EOSE&amp;#34;, &amp;#34;abc&amp;#34;] // sin &amp;#34;finish&amp;#34;: límite alcanzado, más disponible
→ [&amp;#34;REQ&amp;#34;, &amp;#34;def&amp;#34;, {&amp;#34;kinds&amp;#34;:[1],&amp;#34;limit&amp;#34;:300,&amp;#34;until&amp;#34;:1780900000}]
← [...178 EVENT messages...]
← [&amp;#34;EOSE&amp;#34;, &amp;#34;def&amp;#34;, &amp;#34;finish&amp;#34;] // completo explícito
&lt;/code>&lt;/pre>&lt;p>La respuesta de 178 eventos previamente habría disparado un tercer &lt;code>REQ&lt;/code> para confirmar la completitud. Con NIP-67 el cliente se detiene ahí.&lt;/p>
&lt;p>NIP-67 también es notable como una enmienda a NIP-01 aterrizando con un consenso raro. La mayoría de los cambios a NIP-01 atraen largos hilos de debate porque la pequeña superficie del protocolo es portante para cada implementación. NIP-67 se fusionó tras un período de revisión extendido (aproximadamente siete semanas de apertura a fusión), sugiriendo que cuando un cambio a NIP-01 es lo suficientemente pequeño y el modo de fallo es lo suficientemente concreto (pérdida silenciosa de datos, viaje de ida y vuelta obligatorio desperdiciado), los mantenedores del protocolo están dispuestos a extender el vocabulario central de mensajes.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-50-búsqueda">NIP deep dive: NIP-50 (Búsqueda)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a> define el campo de filtro &lt;code>search&lt;/code> en los mensajes &lt;code>REQ&lt;/code>, permitiendo a los clientes pedir a un relay que filtre eventos por coincidencia de texto completo contra una cadena de consulta. La especificación base fusionada es deliberadamente mínima: el campo &lt;code>search&lt;/code> es una cadena, cada relay decide su propia semántica de búsqueda (qué campos están indexados, cómo funciona la puntuación, si se aplica stemming) y los relays anuncian soporte NIP-50 en su documento NIP-11. Los clientes controlan el algoritmo de búsqueda solo a través de la propia cadena de consulta.&lt;/p>
&lt;p>Este minimalismo es a la vez la fortaleza y la limitación de NIP-50. La fortaleza es que cualquier relay puede implementar búsqueda a cualquier nivel de calidad: un escaneo básico de subcadenas satisface la especificación, y un relay ejecutando Elasticsearch o Meilisearch la satisface igualmente. La limitación es que los clientes carecen de una forma de expresar la intención de búsqueda. Una UI typeahead de menciones de perfil quiere coincidencia de prefijo contra nombres de visualización; una búsqueda de texto completo de contenido quiere puntuación tokenizada de texto completo a través del cuerpo de la nota. El mismo campo &lt;code>search&lt;/code> lleva ambos, y el relay debe adivinar por la forma de la consulta.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2357">PR #2357&lt;/a> añade el primer token de extensión NIP-50: &lt;code>autocomplete:true&lt;/code> o &lt;code>autocomplete:false&lt;/code> incrustado en la consulta de búsqueda señaliza qué modo quiere el cliente. El relay de Ditto implementa el token para follow packs, listas y cualquier evento con un tag &lt;code>title&lt;/code>, cambiando a coincidencia de prefijo cuando &lt;code>autocomplete:true&lt;/code> está presente. El token vive inline en la consulta (los campos de filtro separados quedan intactos), por lo que viaja con la cadena de búsqueda y no requiere ninguna actualización del protocolo de cable:&lt;/p>
&lt;pre tabindex="0">&lt;code>search: &amp;#34;fiat autocomplete:true&amp;#34;
&lt;/code>&lt;/pre>&lt;p>Las pistas con forma de token como esta son cómo NIP-50 siempre ha manejado los dialectos específicos de relay. Los relays ya soportaban tokens como &lt;code>language:en&lt;/code> y &lt;code>domain:example.com&lt;/code>. Cada uno sigue siendo específico del relay, con cada relay documentando su propio dialecto. El PR #2357 de NIP-50 eleva &lt;code>autocomplete&lt;/code> de un token privado de relay a uno bendecido por la especificación, allanando el camino para búsqueda consciente de typeahead entre relays.&lt;/p>
&lt;p>Ejemplo &lt;code>REQ&lt;/code> NIP-50 con el token autocomplete, apuntando a un relay que indexa títulos de perfil kind 0:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;b7c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f7081a2b3c4d5e6f70819a2b3c4d5&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1781136000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;client&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;example-mention-picker&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Sent search: kinds=[0], search=\&amp;#34;fiat autocomplete:true\&amp;#34;, limit=10&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;12d3e4f5061728394a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f7081a2b3c4d5e6f70819a2b3c4d5e6f7081a2b3c4d5e6f708192&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El REQ real a nivel de cable:&lt;/p>
&lt;pre tabindex="0">&lt;code>[&amp;#34;REQ&amp;#34;, &amp;#34;mention-picker&amp;#34;, {&amp;#34;kinds&amp;#34;:[0],&amp;#34;search&amp;#34;:&amp;#34;fiat autocomplete:true&amp;#34;,&amp;#34;limit&amp;#34;:10}]
&lt;/code>&lt;/pre>&lt;p>Un relay que no reconoce el token trata &lt;code>autocomplete:true&lt;/code> como parte de la cadena literal de búsqueda y recae en coincidencia de texto completo, devolviendo resultados correctos (aunque clasificados diferente). La degradación elegante hace que el token sea seguro para incluir incondicionalmente para clientes que prefieren coincidencia de prefijo cuando está disponible.&lt;/p>
&lt;p>La siguiente extensión NIP-50 probable es control de ranking por kind: una pista que dice &amp;ldquo;ordenar por &lt;code>created_at&lt;/code> descendente&amp;rdquo; versus la puntuación de relevancia por defecto. Varios relays ya aceptan &lt;code>sort:newest&lt;/code> como un token privado de relay, y se aplica la misma ruta de elevación que trajo &lt;code>autocomplete&lt;/code> a la especificación. La búsqueda sigue siendo una de las pocas primitivas Nostr donde los relays compiten en la calidad del resultado; la fiabilidad de entrega es la misma en todos los relays conformes. Los tokens incrementales permiten a los clientes explotar esa competencia de calidad sin forzar a los relays a distribuir una nueva especificación pesada.&lt;/p></content:encoded></item><item><title>Nostr Compass #25</title><link>https://nostrcompass.org/es/newsletters/2026-06-03-newsletter/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-06-03-newsletter/</guid><description>&lt;p>Amber 6.2.0 estrena el cifrado NIP-44 v3 por delante de la especificación. Mostro aterriza la base para el escrow liquidado con Cashu a través de ocho PRs, envolviendo el Cashu Development Kit existente como un segundo backend de liquidación junto a Lightning. Los podcasts NIP-F4 se fusionan tras 27 meses de debate. fiatjaf abre una propuesta controvertida de desacoplamiento de claves NIP-17 que reabre el argumento arquitectónico bunker-contra-Marmot. Amethyst aterriza etiquetado de hashtags NIP-32, una pantalla de podcast dedicada y zaps en cadena a través de 52 PRs no publicados.&lt;/p></description><content:encoded>&lt;p>Amber 6.2.0 estrena el cifrado NIP-44 v3 por delante de la especificación. Mostro aterriza la base para el escrow liquidado con Cashu a través de ocho PRs, envolviendo el Cashu Development Kit existente como un segundo backend de liquidación junto a Lightning. Los podcasts NIP-F4 se fusionan tras 27 meses de debate. fiatjaf abre una propuesta controvertida de desacoplamiento de claves NIP-17 que reabre el argumento arquitectónico bunker-contra-Marmot. Amethyst aterriza etiquetado de hashtags NIP-32, una pantalla de podcast dedicada y zaps en cadena a través de 52 PRs no publicados.&lt;/p>
&lt;h2 id="historias-principales">Historias principales&lt;/h2>
&lt;h3 id="amber-620-cifrado-nip-44-v3-publicado">Amber 6.2.0: cifrado NIP-44 v3 publicado&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.2.0">Amber v6.2.0&lt;/a>, publicado el 1 de junio, añade &lt;a href="https://github.com/greenart7c3/Amber/pull/448">soporte de cifrado NIP-44 v3&lt;/a> con una pantalla dedicada de aprobación, vista previa de intent, vista previa de bunker, registro de historial y rechazo automático para solicitudes inválidas. El lanzamiento también registra &lt;a href="https://github.com/greenart7c3/Amber/commit/8b93340">autoridades ContentProvider NIP-44 v3&lt;/a> para que otras apps Android puedan solicitar cifrado v3 junto con la ruta v2 existente. NIP-44 en sí es la especificación de payload cifrado versionada usada por los DMs privados &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>, el tráfico de bunker NIP-46 y otras primitivas Nostr; v3 en Amber es un opt-in junto a v2, señalizado por un método de firmador separado para que los clientes del lado receptor puedan negociar el algoritmo explícitamente. El PR correspondiente en el repo NIPs aún no ha aterrizado, por lo que Amber está desplegando v3 por delante del consenso del protocolo, con el formato de cable y la autoridad ContentProvider registrados para la integración de clientes downstream.&lt;/p>
&lt;p>Las sesiones NIP-46 ahora auto-aceptan solicitudes ping en la conexión, eliminando el prompt en el primer viaje de ida y vuelta tras el emparejamiento. El método de firmador &lt;code>sign_message&lt;/code> fue eliminado por completo tras haber sido obsoleto y sin uso.&lt;/p>
&lt;p>Como Amber es el firmador Android dominante, cada cliente downstream que quiera v3 tiene que apuntar al formato de cable de Amber hasta que aterrice el PR de NIPs. Eso le da a Amber voz implícita sobre la especificación final de v3 hasta que el protocolo se ponga al día. El intercambio es real: v3 en producción permite a Amber recopilar retroalimentación de implementación para el eventual NIP, a costa de un punto de referencia temporal de implementación única que otros clientes ahora tienen que igualar.&lt;/p>
&lt;h3 id="mostro-integración-de-escrow-cashu-mediante-cdk">Mostro: integración de escrow Cashu mediante CDK&lt;/h3>
&lt;p>grunch aterrizó ocho PRs en MostroP2P esta semana integrando las primitivas multisig P2PK existentes de Cashu (NUT-10 y NUT-11) como un segundo backend de liquidación junto a Lightning en el intercambio de Bitcoin P2P coordinado por Nostr. Las primitivas criptográficas son de Cashu; el trabajo es andamiaje de integración y un nuevo trait de backend de escrow. &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.12.0">Mostro core v0.12.0&lt;/a>, publicado el 30 de mayo, añade los &lt;a href="https://github.com/MostroP2P/mostro-core/pull/150">tipos de protocolo para escrow multisig 2-de-3&lt;/a>, firmas P_M por prueba y permite eventos de escrow a través de la validación de respuesta. La arquitectura está documentada en &lt;a href="https://github.com/MostroP2P/mostro/pull/756">PR #756&lt;/a> y usa claves de intercambio por orden clarificadas en &lt;a href="https://github.com/MostroP2P/mostro/pull/757">PR #757&lt;/a>.&lt;/p>
&lt;p>La implementación se desplegó a través de seis PRs de seguimiento en un solo día. &lt;a href="https://github.com/MostroP2P/mostro/pull/758">F2 (PR #758)&lt;/a> añadió la configuración, el modo escrow y el arranque condicional. La siguiente rebanada, &lt;a href="https://github.com/MostroP2P/mostro/pull/760">F3 (PR #760)&lt;/a>, definió un trait &lt;code>EscrowBackend&lt;/code> con una implementación Lightning y un stub Cashu, permitiendo a Mostro cambiar de backend de liquidación sin cambiar la máquina de estado de la orden. &lt;a href="https://github.com/MostroP2P/mostro/pull/759">F4 (PR #759)&lt;/a> envolvió &lt;a href="https://github.com/cashubtc/cdk">CDK&lt;/a> (el Cashu Development Kit) para operaciones de mint y wallet. El trabajo de base de datos en &lt;a href="https://github.com/MostroP2P/mostro/pull/761">F5 (PR #761)&lt;/a> añadió bloqueos de escrow compare-and-swap y consultas active-locked. &lt;a href="https://github.com/MostroP2P/mostro/pull/762">F6 (PR #762)&lt;/a> construyó una mint contenerizada en un trabajo de CI dedicado para pruebas end-to-end de escrow. El flujo de Mostro ya usa DMs envueltos en gift wrap NIP-59 para la coordinación de órdenes sobre el relay, por lo que el escrow Cashu encaja como una segunda opción de liquidación junto a Lightning sin tocar el protocolo de cable.&lt;/p>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;h3 id="ngit-v250-fallback-grasp-y-fetches-de-git-perezosos">ngit v2.5.0: fallback GRASP y fetches de git perezosos&lt;/h3>
&lt;p>&lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.5.0">ngit v2.5.0&lt;/a> cambia el comportamiento por defecto de &lt;code>git push pr/&amp;lt;branch&amp;gt;&lt;/code> y &lt;code>ngit send&lt;/code> para producir un kind PR para nuevas propuestas cuando el repositorio tiene al menos un servidor GRASP registrado. Anteriormente esto solo se activaba para commits sobredimensionados de más de 60 KB o commits que contenían submódulos. Cuando un PR no puede empujarse a los servidores GRASP del repositorio, ngit ahora recae en el enrutado GRASP-06 a través de los servidores declarados. La bandera &lt;code>ngit send --git-server&lt;/code> o &lt;code>git push -o git-server=&amp;lt;url&amp;gt;&lt;/code> permite a los contribuyentes apuntar a una URL git personalizada o servidor GRASP explícitamente.&lt;/p>
&lt;p>Los republicados de &lt;code>ngit init&lt;/code> ahora preservan los tags desconocidos de los anuncios existentes, para que los tags añadidos por una versión futura de ngit o una herramienta de terceros sobrevivan al republicado. Una advertencia amarilla lista los tags arrastrados, y &lt;code>--clean&lt;/code> los elimina bajo demanda. &lt;code>ngit pr apply&lt;/code>, &lt;code>ngit pr checkout&lt;/code> y &lt;code>ngit pr list&lt;/code> consultan los servidores git perezosamente y comparten un único helper de fetch, por lo que checkout ya no obtiene incondicionalmente cuando el commit ya está local. &lt;code>ngit pr checkout&lt;/code> también intenta URLs de clonado proporcionadas por el remitente desde el evento PR como respaldo cuando los servidores git declarados del repo no llevan el tip del PR, coincidiendo con el comportamiento existente en &lt;code>ngit pr apply&lt;/code>. ngit es la implementación de referencia de &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> para colaboración git sobre Nostr, y v2.5.0 hace de GRASP la ruta de primera clase para los nuevos contribuyentes.&lt;/p>
&lt;h3 id="jumble-v2657-eliminación-de-exif-y-conteos-de-zap-validados">Jumble v26.5.7: eliminación de EXIF y conteos de zap validados&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble/releases/tag/v26.5.7">Jumble v26.5.7&lt;/a> añade dos cambios que afectan directamente a la privacidad del usuario y a la integridad de los datos. La ubicación EXIF y los identificadores de cámara ahora se eliminan de las subidas de imágenes antes de que salgan del cliente, cerrando una superficie de fuga de metadatos de larga data que afectaba a cada imagen publicada desde Jumble. Los conteos de zap ahora se computan solo desde recibos criptográficamente validados, corrigiendo conteos inflados de eventos zap malformados que habían permitido a los atacantes exagerar los totales de zap en las notas. El lanzamiento también añade verificación de identidad del remitente para DMs &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>, cerrando una superficie de suplantación donde un remitente podía falsificar su &lt;code>pubkey&lt;/code> en el sello.&lt;/p>
&lt;h3 id="nostr-calendar-v160-manejo-de-rsvp-y-participantes-duplicados">nostr-calendar v1.6.0: manejo de RSVP y participantes duplicados&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.6.0">nostr-calendar v1.6.0&lt;/a> aterriza el flujo RSVP de Formstr (&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/169">PR #169&lt;/a>) y evita participantes duplicados en las invitaciones a eventos (&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/168">PR #168&lt;/a>). La opción &lt;code>waitForAll&lt;/code> en la función publish ahora por defecto es false para que la UI no se bloquee en relays lentos (&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/170">PR #170&lt;/a>). &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/157">PR #157&lt;/a> estrenó los dos borradores de propuesta NIP de Formstr para programación de citas y reservas.&lt;/p>
&lt;h3 id="sprout-036-sprout--mesh-llm-y-secciones-de-canal">Sprout 0.3.6: Sprout × mesh-llm y secciones de canal&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/sprout/releases/tag/v0.3.6">Sprout v0.3.6&lt;/a> es el titular de una serie de seis lanzamientos de v0.3.1 a v0.3.6 esta semana. La integración in-process de Sprout × mesh-llm aterriza en &lt;a href="https://github.com/block/sprout/pull/798">PR #798&lt;/a>, permitiendo a Sprout servir y consumir nodos mesh-llm mediante admisión de relay. Las secciones de canal definidas por el usuario se sincronizan entre dispositivos mediante Nostr en &lt;a href="https://github.com/block/sprout/pull/792">PR #792&lt;/a>, y las secciones de canal llegan a móvil con sincronización de relay en &lt;a href="https://github.com/block/sprout/pull/800">PR #800&lt;/a>. Las notificaciones conscientes de hilo con controles de follow y silencio mutables llegan en &lt;a href="https://github.com/block/sprout/pull/761">PR #761&lt;/a>.&lt;/p>
&lt;p>Los adjuntos de tipo de archivo arbitrario con tarjetas de descarga llegaron en &lt;a href="https://github.com/block/sprout/pull/810">PR #810&lt;/a>, expandiendo Sprout más allá de los adjuntos solo de imagen. Móvil ganó una pestaña de feed social Pulse (&lt;a href="https://github.com/block/sprout/pull/772">PR #772&lt;/a>) y pulido de Pulse a través de las superficies de feed, composición y filtro (&lt;a href="https://github.com/block/sprout/pull/796">PR #796&lt;/a>).&lt;/p>
&lt;h3 id="nostrbotkit-v050-chat-de-grupo-marmot-en-un-framework-de-bots-rust">NostrBotKit v0.5.0: chat de grupo Marmot en un framework de bots Rust&lt;/h3>
&lt;p>&lt;a href="https://codeberg.org/Tuxor/NostrBotKit/src/branch/main/CHANGELOG.md">NostrBotKit v0.5.0&lt;/a>, publicado el 24 de mayo en Codeberg, añade soporte de &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> (MLS-sobre-Nostr, &lt;a href="https://github.com/nostr-protocol/nips/pull/2014">NIP-104&lt;/a>) al framework de bots Rust auto-alojado. Cuando se configura &lt;code>marmot: true&lt;/code>, el bot publica sus key packages MLS (kind 443, 30443, 10051), acepta invitaciones a grupos automáticamente y escucha mensajes en los grupos a los que se ha unido. Dos nuevos tipos de comando, &lt;code>dm_marmot&lt;/code> y &lt;code>dm_marmot_npub&lt;/code>, permiten a los bots enviar mensajes a grupos Marmot nombrados o chats Marmot 1:1 mediante trabajos cron o webhooks. Para evitar bucles de retroalimentación con otros bots, los bots de NostrBotKit solo responden a mensajes explícitamente dirigidos a ellos mediante &lt;code>/command&lt;/code> o &lt;code>@botname/command&lt;/code>. Los adjuntos cifrados usando MIP-04 se descifran automáticamente y se resuben mediante Blossom o NIP-96, y la base de datos de estado MLS se cifra con una clave derivada de la clave privada del bot. NostrBotKit es el primer framework Rust en publicar soporte de bots NIP-104, abriendo el despliegue de bots cifrados con Marmot a un perfil de operador diferente al de la ruta TypeScript existente.&lt;/p>
&lt;h3 id="noscrypt-v0114-lanzamiento-firmado-de-biblioteca-de-criptografía">noscrypt v0.1.14: lanzamiento firmado de biblioteca de criptografía&lt;/h3>
&lt;p>&lt;a href="https://github.com/vnuge/noscrypt/releases/tag/v0.1.14">noscrypt v0.1.14&lt;/a> es un lanzamiento de seguridad de la biblioteca de criptografía en C usada por varios clientes Nostr para primitivas secp256k1, NIP-04 y NIP-44. El lanzamiento se distribuye con &lt;a href="https://www.vaughnnugent.com/resources/software/modules/noscrypt">descargas firmadas con PGP&lt;/a> verificables contra la clave pública del mantenedor. Los clientes downstream que empaqueten noscrypt deben validar la firma antes de integrar.&lt;/p>
&lt;h3 id="chama-v130-nuevo-escrow-p2p-nativo-de-nostr-con-fedimint">Chama v1.3.0: nuevo escrow P2P nativo de Nostr con Fedimint&lt;/h3>
&lt;p>&lt;a href="https://github.com/jesuspirate/chama/releases/tag/v1.3.0">Chama v1.3.0&lt;/a>, publicado el 1 de junio, es el titular de una serie de cuatro lanzamientos para un nuevo cliente de escrow P2P nativo de Nostr que usa ecash Fedimint y compartición de secretos Shamir 2-de-3 para la liquidación. El proyecto se distribuye en &lt;a href="https://getchama.app">getchama.app&lt;/a> y funciona sin servidor. v1.3.0 introduce &amp;ldquo;heal that sticks&amp;rdquo; (re-difusión exitosa y curación de intercambios que sobreviven a los reinicios de sesión) y emparejamiento de pay-rail, donde las Chamas orientadas a EEUU muestran primero los rails de pago de EEUU. El trabajo base multi-unidad para storefronts aterrizó a través de &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v1.2.11">v1.2.11&lt;/a> (esquema multi-unidad) y &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v1.2.12">v1.2.12&lt;/a> (contador de stock de storefront + endurecimiento de recuperación del puente nativo Fedimint). Chama se une a Mostro y Shopstr en la categoría de marketplaces Nostr, distinguida por su arquitectura sin servidor y su liquidación de escrow basada en Fedimint.&lt;/p>
&lt;h2 id="cambios-sin-publicar">Cambios sin publicar&lt;/h2>
&lt;h3 id="amethyst-etiquetado-de-hashtags-nip-32-pantalla-de-podcast-pistas-de-música">Amethyst: etiquetado de hashtags NIP-32, pantalla de podcast, pistas de música&lt;/h3>
&lt;p>Amethyst fusionó 52 PRs y 411 commits esta semana sin cortar una etiqueta de lanzamiento. La adición funcional más grande es &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3111">PR #3111&lt;/a>, que implementa etiquetado de hashtags &lt;a href="https://nostrcompass.org/es/topics/nip-32/">NIP-32&lt;/a> y un feed de hashtags basado en etiquetas usando eventos kind 1985 con tags de namespace &lt;code>L&lt;/code> y etiqueta &lt;code>l&lt;/code>. Esto reemplaza el frágil mecanismo de coincidencia de texto &lt;code>#tag&lt;/code> con un modelo de descubrimiento basado en etiquetadores donde los usuarios pueden seguir a npubs de etiquetadores específicos de la misma forma que siguen a creadores de contenido. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3105">PR #3105&lt;/a> añade una pantalla dedicada de podcast con lista de episodios y reproductor en línea, aterrizando a los pocos días de la fusión de la especificación de podcast &lt;a href="https://nostrcompass.org/es/topics/nip-f4/">NIP-F4&lt;/a>. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3071">PR #3071&lt;/a> añade un feed Software Apps con filtrado por lista de follow, y &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3067">PR #3067&lt;/a> añade soporte para pistas de música y playlists mediante conjuntos &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a>.&lt;/p>
&lt;p>Los firmadores efímeros para subidas de posts anónimos aterrizan en &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3123">PR #3123&lt;/a>, permitiendo a los usuarios publicar de forma anónima sin exponer su clave de identidad a los servicios de subida. Un watchdog de auto-curación de Tor con pruebas de integración contra Arti v2.3.0 llega en &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3053">PR #3053&lt;/a>, fortaleciendo el enrutado Tor de Amethyst durante caídas de red transitorias. Los zaps en cadena y un filtro NIP-05 para usuarios que regresan desde Gemini aterrizan en &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3052">PR #3052&lt;/a>, ampliando la superficie de zap más allá de Lightning a pagos de Bitcoin en cadena.&lt;/p>
&lt;h3 id="shopstr-validación-de-urls-de-vista-previa-opengraph">Shopstr: validación de URLs de vista previa OpenGraph&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr/pull/504">PR #504&lt;/a> valida las URLs de vista previa OpenGraph antes de renderizarlas en los listados del marketplace, cerrando una potencial superficie XSS donde vendedores maliciosos podían incrustar contenido con scripts mediante metadatos OG diseñados. Las tiendas alojadas en Shopstr muestran vistas previas OG para enlaces externos, y las URLs no validadas permiten a un atacante inyectar contenido arbitrario en la UI de la tienda.&lt;/p>
&lt;h2 id="actualizaciones-de-nip-y-trabajo-de-especificación-de-protocolo">Actualizaciones de NIP y trabajo de especificación de protocolo&lt;/h2>
&lt;h3 id="nip-f4-podcasts-se-fusiona-tras-dos-años">NIP-F4 (Podcasts) se fusiona tras dos años&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/1093">PR #1093&lt;/a> se fusionó el 28 de mayo, dos años y tres meses después de que fiatjaf abriera el borrador original. NIP-F4 define los episodios de podcast como eventos kind 54 con tags &lt;code>imeta&lt;/code> para metadatos del archivo de audio (URL, tipo mime, código de idioma ISO, URLs de respaldo, bandera de servicio NIP-96, bitrate, duración), un tag &lt;code>title&lt;/code>, tags opcionales &lt;code>image&lt;/code> y &lt;code>description&lt;/code>, y tags &lt;code>t&lt;/code> para etiquetas de tema. La especificación mantiene deliberadamente RSS como la fuente de verdad: los episodios pueden llevar un tag &lt;code>i&lt;/code> que referencie el GUID del podcast RSS, permitiendo a los clientes Nostr enlazar a feeds de podcast existentes sin duplicar el alojamiento de audio. El largo debate en el hilo del PR (con el co-autor de podcast-namespace Dave Jones, Alex Gleason y Mike Terenzio) se resolvió en un modelo de coexistencia donde Nostr proporciona la capa social sobre RSS mientras RSS mantiene la capa de distribución. La pantalla de podcast del &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3105">PR #3105&lt;/a> de Amethyst aterriza a los pocos días de la fusión de la especificación, y el trabajo del selector de GIF de Jumble también incluye andamiaje temprano para adjuntos de podcast.&lt;/p>
&lt;h3 id="desacoplamiento-de-claves-nip-17-pr-2361">Desacoplamiento de claves NIP-17 (PR #2361)&lt;/h3>
&lt;p>fiatjaf abrió &lt;a href="https://github.com/nostr-protocol/nips/pull/2361">PR #2361&lt;/a> el 1 de junio, proponiendo que NIP-17 separe la clave de identidad de la clave de cifrado. Los destinatarios anuncian su clave de cifrado en un nuevo evento kind 10044, y los remitentes usan esa clave anunciada (cuando está presente) para el sello interno del gift-wrap, recayendo en la clave de identidad del destinatario solo cuando el anuncio está ausente. El PR también añade un tag &lt;code>n&lt;/code> al sello llevando la pubkey de cifrado del remitente, para que los receptores puedan derivar la clave de conversación correcta sin descifrado por prueba y error contra cada clave retirada. La motivación declarada es la UX de bunker: bajo el diseño actual, un usuario de bunker debe hacer un viaje de ida y vuelta a cada DM recibido a través del firmador para descifrar, ya que la clave de cifrado es la clave de identidad guardada por el firmador. Desacoplar permite al cliente mantener la clave de cifrado localmente mientras mantiene la clave de identidad en el bunker para firmas.&lt;/p>
&lt;p>La propuesta atrajo la revisión más polémica de la semana. Cody Tseng (Jumble) la apoya como la ruta más fácil para la interoperabilidad de DMs entre clientes. Vitor Pamplona (Amethyst) objeta por dos motivos: añade un nuevo secreto de descifrado de larga duración fuera del bunker, y los clientes que no lo distribuyan fallarán silenciosamente al descifrar mensajes de clientes que sí lo hacen, sin ruta de degradación porque la ruptura está en la capa del sello. Pamplona argumenta que el problema ya está resuelto correctamente por los key packages de &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> y la rotación de épocas, y que retrofit de separación de claves en la especificación base NIP-17 crea el tipo de fallo de interoperabilidad que Marmot tardó dos años en diseñar. La respuesta de fiatjaf tiene tres partes: el desacoplamiento es opcional por destinatario, la corrección del tag n aborda la preocupación del descifrado por prueba y error, y la alternativa es mantener la UX de bunker rota mientras Telegram se come el caso de uso de la mensajería. El hilo permanece abierto sin decisión de fusión y es la discusión NIP más observada del trimestre.&lt;/p>
&lt;h3 id="flujo-de-pago-nip-silent-payments-pr-2362">Flujo de pago NIP-Silent Payments (PR #2362)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2362">silentius-satoshi abrió PR #2362&lt;/a> el 1 de junio como complemento del más amplio &lt;a href="https://github.com/nostr-protocol/nips/pull/2355">borrador de NIP Nostr Silent Payments (PR #2355)&lt;/a>. El NIP de flujo de pago define kind 8352 para notificaciones de recepción de silent payment (entregadas mediante gift wrap &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> para que el enlace del recibo no sea públicamente observable) y kind 10353 para una caché UTXO cifrada que se sincroniza entre dispositivos para la misma wallet Silent Payments. El par juntos permiten a un pagador señalizar un pago a una dirección Silent Payments usando primitivas nativas de Nostr sin exponer el enlace on-chain en la capa de relay abierta.&lt;/p>
&lt;h3 id="nip-pip-perfect-ip-packets-pr-2364">NIP-PIP Perfect IP Packets (PR #2364)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2364">RandyMcMillan abrió PR #2364&lt;/a> el 1 de junio como borrador. Introduce un transporte de árbol de paquetes con tres nuevos kinds direccionables: 39078 lleva el manifiesto, 39079 lleva slices individuales y 39080 lleva solicitudes de reparación. La especificación define un formato de cable donde los archivos grandes se dividen en slices direccionables, con manifiestos describiendo el árbol de slices y solicitudes de reparación permitiendo a los receptores pedir slices faltantes. Se aplica estado de borrador temprano, y la propuesta aún no ha atraído revisión de mantenedores.&lt;/p>
&lt;h3 id="espacios-en-vivo-de-audiovídeo-nip-29-pr-2238">Espacios en vivo de audio/vídeo NIP-29 (PR #2238)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2238">PR #2238&lt;/a> se fusionó el 28 de mayo, extendiendo los grupos basados en relay &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> con soporte de espacios en vivo de audio y vídeo. Los grupos ahora pueden referenciar una sesión activa de espacio en vivo, permitiendo a los eventos de actividad en vivo estilo &lt;a href="https://nostrcompass.org/es/topics/nip-53/">NIP-53&lt;/a> anclarse en un contexto de grupo NIP-29.&lt;/p>
&lt;h3 id="múltiples-pistas-de-audio-en-vídeo-nip-71-pr-2255">Múltiples pistas de audio en vídeo NIP-71 (PR #2255)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2255">PR #2255&lt;/a> se fusionó el 28 de mayo, añadiendo tags &lt;code>imeta&lt;/code> de pista de audio a los eventos de vídeo NIP-71. El nuevo formato lleva URL, hash, tipo mime, tag de idioma (con ISO-639-1 más bandera de versión original), URLs de respaldo, señal de servicio NIP-96, bitrate y duración. Esto habilita streaming solo de audio (video podcasts), cambio de resolución con audio estable, múltiples pistas de idioma y almacenamiento reducido cuando los servidores no incrustan audio directamente en archivos de vídeo. Los clientes deben comprobar la disponibilidad de pistas de audio antes de asumir comportamiento de pista única.&lt;/p>
&lt;h3 id="gift-wrap-efímero-nip-59-pr-2245">Gift wrap efímero NIP-59 (PR #2245)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2245">PR #2245&lt;/a> se fusionó el 28 de mayo, añadiendo kind 21059 como contraparte efímera del gift wrap kind 1059 existente. La semántica coincide con el envoltorio estándar NIP-59 pero sigue las reglas de eventos efímeros por NIP-01 (los relays los descartan tras la difusión y no los persisten). Esto permite a las apps elegir persistencia según los requisitos: los indicadores de escritura y pings de presencia se benefician de lo efímero, mientras que el historial de DMs necesita persistencia.&lt;/p>
&lt;h3 id="kind-específico-de-aplicación-nip-78-pr-2292">Kind específico de aplicación NIP-78 (PR #2292)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2292">PR #2292&lt;/a> se fusionó el 28 de mayo, reclasificando los datos específicos de aplicación NIP-78 como un kind direccionable normal, descartando el rango separado anterior. Esto simplifica la semántica de reemplazabilidad y alinea NIP-78 con el modelo de evento direccionable usado por otros NIPs de estado de aplicación.&lt;/p>
&lt;h3 id="aclaraciones-nip-85-pr-2304">Aclaraciones NIP-85 (PR #2304)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2304">PR #2304&lt;/a> se fusionó el 28 de mayo con pequeñas mejoras al lenguaje alrededor de múltiples claves y relays por proveedor de servicio en &lt;a href="https://nostrcompass.org/es/topics/nip-85/">NIP-85&lt;/a> Trusted Assertions, clarificando la ruta de rotación de clave de operador para los servicios de aserción de relay.&lt;/p>
&lt;h3 id="gestión-de-conexión-de-relay-nip-01-de-una-línea-pr-2307">Gestión de conexión de relay NIP-01 de una línea (PR #2307)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2307">PR #2307&lt;/a> se fusionó el 28 de mayo, añadiendo una sola frase a NIP-01 sobre cómo los clientes deben manejar los tiempos de vida de las conexiones de relay. La corrección aborda una brecha de larga duración donde los clientes diferían en si mantener las conexiones WebSocket abiertas tras la obtención, llevando a pérdida silenciosa de mensajes en relays que descartan conexiones inactivas.&lt;/p>
&lt;h3 id="restricción-de-chat-kind-9-nip-c7-pr-2310">Restricción de chat kind 9 NIP-C7 (PR #2310)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2310">PR #2310&lt;/a> se fusionó el 28 de mayo, restringiendo las vistas de chat NIP-C7 solo a mensajes kind 9. Esto separa el chat efímero de las publicaciones de timeline kind 1 en clientes que implementan superficies de chat estilo NIP-C7.&lt;/p>
&lt;h3 id="simplificación-nip-55-pr-2363">Simplificación NIP-55 (PR #2363)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2363">PR #2363&lt;/a> de greenart7c3, abierto el 1 de junio, simplifica la especificación de aplicación de firmador Android. Vitor Pamplona firmó como &amp;ldquo;Looks good&amp;rdquo; y fiatjaf preguntó si está listo para fusionar. El cambio prepara el camino para el registro de autoridad ContentProvider NIP-44 v3 que Amber publicó esta semana.&lt;/p>
&lt;h3 id="nip-44-v3-implementación-de-amber-por-delante-de-la-especificación">NIP-44 v3 (implementación de Amber por delante de la especificación)&lt;/h3>
&lt;p>Amber publicó NIP-44 v3 en v6.2.0 con ocho commits implementando la actualización de cifrado y el registro de autoridad ContentProvider, pero el PR de especificación en el repo NIPs aún no ha aterrizado. NIP-44 en sí define un formato de payload cifrado versionado usado dentro de eventos firmados; el v2 existente (en producción desde 2024) usa ECDH secp256k1, HKDF, padding, ChaCha20, HMAC-SHA256 y base64. El formato de cable v3 añade un nuevo byte de versión (0x03) por delante del nonce, permitiendo a los clientes receptores negociar el algoritmo explícitamente. La implementación de Amber incluye rechazo automático para solicitudes v3 inválidas, una pantalla dedicada de aprobación distinta de las aprobaciones v2 y registro de texto plano por dirección para el historial. Hasta que el PR de NIPs se fusione, v3 se mantiene como una extensión específica de Amber. Trátalo como una señal prospectiva, no como una señalización estable a nivel de protocolo.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-32-etiquetado">NIP deep dive: NIP-32 (Etiquetado)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-32/">NIP-32&lt;/a> define una forma estructurada para que cualquier actor Nostr etiquete eventos, pubkeys, relays, URLs o temas usando eventos direccionables kind 1985 con un vocabulario de etiquetas con namespace. La especificación introduce dos nuevos tags: &lt;code>L&lt;/code> denota un namespace de etiqueta, y &lt;code>l&lt;/code> denota una etiqueta dentro de ese namespace. Los tags target de etiqueta (&lt;code>e&lt;/code>, &lt;code>p&lt;/code>, &lt;code>a&lt;/code>, &lt;code>r&lt;/code> o &lt;code>t&lt;/code>) especifican qué se está etiquetando. El requisito de namespace evita que múltiples sistemas de etiquetas colisionen: una etiqueta &lt;code>spam&lt;/code> en &lt;code>nip28.moderation&lt;/code> lleva semántica diferente a una etiqueta &lt;code>spam&lt;/code> en &lt;code>relay-report&lt;/code>.&lt;/p>
&lt;p>La elección de diseño que hace que NIP-32 sea útil más allá de la moderación es que las etiquetas son aserciones, no verdad a nivel de protocolo. Un evento kind 1985 dice solo que una pubkey particular etiquetó a un objetivo particular en un namespace particular. El modelo de confianza se delega al cliente: cada cliente elige a qué etiquetadores honrar, qué namespaces leer y qué comodidad UI dar a cada etiqueta. La misma primitiva lleva advertencias de contenido, asignación de licencia, tags de idioma ISO-639-1 en notas kind 1, tags geográficos ISO-3166-2, clasificación de contenido, sugerencias distribuidas de moderación y puntuaciones de reputación.&lt;/p>
&lt;p>El &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3111">PR #3111&lt;/a> de Amethyst esta semana es el mayor despliegue hasta ahora. Añade etiquetado de hashtags mediante NIP-32 y un feed de hashtags basado en etiquetas, permitiendo a los usuarios navegar por etiquetas asignadas por etiquetadores de confianza. El mecanismo anterior de coincidencia de texto &lt;code>#tag&lt;/code> que originalmente impulsó el descubrimiento de hashtags en Nostr permanece como respaldo para notas no etiquetadas. El modelo de hashtag como etiqueta significa que la misma nota puede ser descubrible bajo múltiples etiquetas asignadas por diferentes etiquetadores, y los usuarios pueden silenciar o impulsar etiquetadores específicos sin afectar a las notas subyacentes.&lt;/p>
&lt;p>El auto-etiquetado también está soportado. Un autor puede adjuntar tags &lt;code>L&lt;/code> y &lt;code>l&lt;/code> directamente a sus propias notas kind 1 para declarar idioma, ubicación y tema. Una nota etiquetada &lt;code>[&amp;quot;L&amp;quot;, &amp;quot;ISO-639-1&amp;quot;], [&amp;quot;l&amp;quot;, &amp;quot;en&amp;quot;, &amp;quot;ISO-639-1&amp;quot;]&lt;/code> se auto-identifica como inglés y puede ser filtrada por clientes conscientes del idioma sin infraestructura de etiquetado de terceros.&lt;/p>
&lt;p>Ejemplo de evento de etiqueta NIP-32 etiquetando una nota kind 1 como inglés y asignándole una etiqueta de moderación:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a5f87fe2d4c8b9a0e3f1c4d5e6a7b8c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1748908800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1985&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;L&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;ISO-639-1&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;l&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;en&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;ISO-639-1&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;L&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip28.moderation&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;l&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;approve&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip28.moderation&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;8b39f4e5d6c7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Labeled as English-language content approved for NIP-28 chat moderation&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1e2d3c4b5a6978869504132c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El despliegue de Amethyst combinado con el reciente trabajo de Trusted Relay Assertions sugiere que NIP-32 se está convirtiendo en el sustrato estándar para cualquier patrón de &amp;ldquo;aserción impulsada por el usuario sobre un objetivo&amp;rdquo; en Nostr. La siguiente prueba es si los propios etiquetadores desarrollan jerarquías de confianza: si los usuarios seguirán a npubs de etiquetadores específicos de la misma forma que siguen a creadores de contenido.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-f4-podcasts">NIP deep dive: NIP-F4 (Podcasts)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/F4.md">NIP-F4&lt;/a> se fusionó esta semana, dos años y tres meses después de que fiatjaf abriera el borrador original (PR #1093). El prefijo F es simple numeración hexadecimal: NIP-F0 a NIP-FF usan el mismo espacio hex de 1 byte que NIP-0A a NIP-0D, con el rango hex superior sirviendo como desbordamiento ahora que el rango decimal 01-99 se está llenando. NIP-F4 define cómo los podcasts publican episodios y metadatos como eventos Nostr mientras mantienen RSS como una capa complementaria para el propio archivo de audio.&lt;/p>
&lt;p>La elección arquitectónica central es que cada podcast es su propio par de claves Nostr. La especificación abre con esto directamente: &amp;ldquo;each podcast is its own Nostr keypair&amp;rdquo;. Esto permite a los podcasts combinar su presencia de podcasting con una presencia normal de microblogging kind 0 / kind 1, y permite a un podcast cambiar de propiedad con el tiempo mediante traspaso de claves o firma compartida estilo MuSig2. Cuatro kinds de evento llevan la capa de publicación:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>kind:10154&lt;/code>&lt;/strong>: metadatos de podcast reemplazables. Lleva tags &lt;code>title&lt;/code>, &lt;code>image&lt;/code>, &lt;code>description&lt;/code>, &lt;code>website&lt;/code> opcionales, y tags &lt;code>p&lt;/code> opcionales marcando autores con un &lt;code>role&lt;/code> de &lt;code>host&lt;/code>, &lt;code>cohost&lt;/code> o &lt;code>editor&lt;/code>.&lt;/li>
&lt;li>&lt;strong>&lt;code>kind:10164&lt;/code>&lt;/strong>: contra-reclamación del autor. El ejemplo en la especificación usa kind &lt;code>10064&lt;/code> (una errata abierta para corrección), pero el encabezado y el texto circundante lo identifican como &lt;code>kind:10164&lt;/code>. Los usuarios listan las pubkeys de podcast que autorizan, para que los clientes puedan verificar los tags &lt;code>p&lt;/code> en &lt;code>kind:10154&lt;/code> contra una reclamación equivalente del supuesto autor. Sin esto, un podcast podría etiquetar falsamente a cualquiera como host.&lt;/li>
&lt;li>&lt;strong>&lt;code>kind:54&lt;/code>&lt;/strong>: eventos de episodio autorizados directamente por la pubkey del podcast. Los tags incluyen &lt;code>title&lt;/code>, &lt;code>image&lt;/code> opcional, &lt;code>description&lt;/code> y uno o más tags &lt;code>audio&lt;/code>. Cada tag &lt;code>audio&lt;/code> es &lt;code>[&amp;quot;audio&amp;quot;, &amp;quot;&amp;lt;audio-url&amp;gt;&amp;quot;, &amp;quot;&amp;lt;optional_media_type&amp;gt;&amp;quot;]&lt;/code>. La especificación anota &amp;ldquo;otros campos importantes a especificar aquí más tarde tras un mayor descubrimiento&amp;rdquo;, y la forma fusionada es deliberadamente mínima.&lt;/li>
&lt;li>&lt;strong>&lt;code>kind:10054&lt;/code>&lt;/strong>: una lista de podcasts favoritos estilo &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a>, permitiendo a los usuarios marcar qué podcasts siguen.&lt;/li>
&lt;/ul>
&lt;p>El debate del hilo alrededor de la fusión involucró al co-autor de Podcasting 2.0 &lt;a href="https://github.com/daveajones">Dave Jones&lt;/a>, &lt;a href="https://github.com/alexgleason">Alex Gleason&lt;/a>, &lt;a href="https://github.com/mterenzio">Mike Terenzio&lt;/a>, &lt;a href="https://github.com/pablof7z">Pablo F7z&lt;/a> y &lt;a href="https://github.com/staab">staab&lt;/a>. Jones argumentó fuertemente contra cualquier intento de reemplazar RSS: &amp;ldquo;It&amp;rsquo;s been tried many times and always fails&amp;rdquo;, citando JSONfeed, XMPP, AMP, la API de Twitter y la migración fallida de Spotify. Terenzio reencuadró la propuesta como una capa social sobre RSS, manteniendo RSS mismo como la capa de distribución. fiatjaf accedió a dar un paso atrás y dejar madurar la propuesta: &amp;ldquo;I agree with everything you said but I still think we can pull it off, let&amp;rsquo;s stop here for a while&amp;rdquo;. Dos años después, la especificación fusionada aterriza más cerca de la coexistencia que del reemplazo.&lt;/p>
&lt;p>Tres preguntas de diseño permanecen explícitas en la especificación fusionada:&lt;/p>
&lt;ul>
&lt;li>La errata &lt;code>kind:10164&lt;/code> (el ejemplo muestra &lt;code>10064&lt;/code>) necesita reconciliación antes de que los clientes puedan interoperar de forma segura.&lt;/li>
&lt;li>El descubrimiento a nivel de episodio sin enlace GUID RSS queda abierto. La especificación fusionada no tiene tag &lt;code>i&lt;/code>, ni formato &lt;code>podcast:item:guid&lt;/code>, ni mecanismo de puente RSS. Los clientes que quieran puentear un catálogo RSS existente en eventos kind 54 deben definir la convención de puente ellos mismos.&lt;/li>
&lt;li>El stub de &amp;ldquo;otros campos importantes&amp;rdquo; en la definición de &lt;code>kind:54&lt;/code> deja bitrate, duración, idioma, punteros de transcripción, capítulos y metadatos por segmento como territorio abierto para propuestas de seguimiento.&lt;/li>
&lt;/ul>
&lt;p>El &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3105">PR #3105&lt;/a> de Amethyst aterriza una pantalla dedicada de podcast con lista de episodios y reproductor en línea a los pocos días de la fusión, la primera implementación importante de cliente. Jumble publicó andamiaje temprano de adjuntos de podcast junto con su selector de GIF. Wavlake sigue siendo la plataforma de podcasts nativa de Nostr más grande y tendrá que decidir si alinear sus eventos de pista de música kind 31337 existentes con el modelo de episodio kind 54 de NIP-F4.&lt;/p>
&lt;p>Ejemplo de evento de episodio kind 54 NIP-F4, coincidiendo con el conjunto mínimo de tags de la especificación fusionada:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;55807e7d5cd90d0303d7dce7397f996fdbaed8697903f326c7cf8ad999b9de3d&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1748995200&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">54&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Episode 42: Why RSS Won&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;image&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://podcast.example.com/ep42-cover.jpg&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;description&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Dave Jones and fiatjaf on protocol coexistence and the social layer.&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;audio&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://podcast.example.com/audio/ep42.mp3&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;audio/mpeg&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;In this episode we discuss the two-year journey of NIP-F4 from draft to merge, and why coexistence with RSS turned out to be the right architectural choice.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;abc123def456789012345678901234567890abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01234567&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>PR #1093 estuvo abierto durante 27 meses, muy por encima de la duración abierta mediana de los PRs de NIPs fusionados. La siguiente prueba para NIP-F4 es si la errata del kind 10164 se reconcilia, si emergen convenciones de descubrimiento de episodios y de puente RSS por parte de los implementadores, y si los hosts principales de podcast publican bajo pares de claves por podcast como recomienda la especificación.&lt;/p></content:encoded></item><item><title>Nostr Compass #24</title><link>https://nostrcompass.org/es/newsletters/2026-05-28-newsletter/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-05-28-newsletter/</guid><description>&lt;p>Amethyst v1.11.0 aterriza una implementación completa de calendario NIP-52 con recordatorios, splits de zap de Bitcoin en cadena y soporte para respuestas en grupos Marmot. White Noise v2026.5.22 estrena notificaciones push en iOS mediante una Notification Service Extension, junto con UX de bloqueo y un botón para añadir miembros. Vector v0.4.0 aterriza una reescritura desde cero de vector-core, Tor con un clic con soporte de bridges, firmadores remotos NIP-46, sincronización de grupos MLS con negentropy completo y un servidor MCP de 21 herramientas para agentes de IA. Applesauce v6.1.0 introduce listas de relays de búsqueda NIP-51 (kind 10086) y un conjunto completo de fábricas de git-cast NIP-34. MDK añade mensajes efímeros NIP-40 en iOS y Android mediante una superficie UniFFI unificada, y Mostro v0.17.4 cierra el bucle del bono anti-abuso con pagos de bono recortado de Fase 3 al ganador. Notedeck fusiona la reconciliación completa por negentropy NIP-77 para giftwraps y backfill de hilos, Cordn aparece como un mensajero MLS mediado por coordinador que intercambia una dependencia de disponibilidad de un solo punto por un ordenado más estricto de épocas y un modelo operativo más simple, una implementación de referencia NIP-B0 llamada deepmarks estrena un cliente de marcadores monetizado por curador, y el equipo de Formstr abre cuatro propuestas coordinadas de NIP de calendario que cubren autoremoción de participantes, eventos privados, recurrencia y programación de citas descentralizada.&lt;/p></description><content:encoded>&lt;p>Amethyst v1.11.0 aterriza una implementación completa de calendario NIP-52 con recordatorios, splits de zap de Bitcoin en cadena y soporte para respuestas en grupos Marmot. White Noise v2026.5.22 estrena notificaciones push en iOS mediante una Notification Service Extension, junto con UX de bloqueo y un botón para añadir miembros. Vector v0.4.0 aterriza una reescritura desde cero de vector-core, Tor con un clic con soporte de bridges, firmadores remotos NIP-46, sincronización de grupos MLS con negentropy completo y un servidor MCP de 21 herramientas para agentes de IA. Applesauce v6.1.0 introduce listas de relays de búsqueda NIP-51 (kind 10086) y un conjunto completo de fábricas de git-cast NIP-34. MDK añade mensajes efímeros NIP-40 en iOS y Android mediante una superficie UniFFI unificada, y Mostro v0.17.4 cierra el bucle del bono anti-abuso con pagos de bono recortado de Fase 3 al ganador. Notedeck fusiona la reconciliación completa por negentropy NIP-77 para giftwraps y backfill de hilos, Cordn aparece como un mensajero MLS mediado por coordinador que intercambia una dependencia de disponibilidad de un solo punto por un ordenado más estricto de épocas y un modelo operativo más simple, una implementación de referencia NIP-B0 llamada deepmarks estrena un cliente de marcadores monetizado por curador, y el equipo de Formstr abre cuatro propuestas coordinadas de NIP de calendario que cubren autoremoción de participantes, eventos privados, recurrencia y programación de citas descentralizada.&lt;/p>
&lt;h2 id="historias-principales">Historias principales&lt;/h2>
&lt;h3 id="amethyst-v1110-calendarios-splits-de-zap-en-cadena-y-respuestas-marmot">Amethyst v1.11.0: calendarios, splits de zap en cadena y respuestas Marmot&lt;/h3>
&lt;p>Amethyst, el cliente Nostr para Android mantenido por Vitor Pamplona, publicó &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.11.0">v1.11.0&lt;/a>. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2994">PR #2994&lt;/a> añade una implementación de evento de calendario &lt;a href="https://nostrcompass.org/es/topics/nip-52/">NIP-52&lt;/a> con una UI dedicada y un sistema de recordatorios, para que los eventos de calendario ahora se rendericen en su propia categoría de timeline, separada de la vista genérica kind-30023 de formato largo. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3018">PR #3018&lt;/a> extiende los zaps de Bitcoin en cadena con soporte para splits, distribuyendo una única transacción de Bitcoin entre múltiples destinatarios según el tag de zap-split existente, para que un pago en cadena se comporte igual que un split Lightning. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2974">PR #2974&lt;/a> añade una pantalla paginada de historial de transacciones en cadena que expone cada zap liquidado con el estado de confirmación en bloque.&lt;/p>
&lt;p>La mensajería de grupo gana paridad con el chat uno-a-uno: &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2995">PR #2995&lt;/a> añade soporte de respuesta para mensajes de grupo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>/MLS, para que los hilos dentro de grupos cifrados ahora se rendericen con la misma UI de referencia al padre que las notas públicas. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2984">PR #2984&lt;/a> endurece la validación de recibos de zap &lt;a href="https://nostrcompass.org/es/topics/nip-57/">NIP-57&lt;/a> comprobando que el proveedor LNURL coincide con el lud16 declarado del destinatario, cerrando una clase de falsificación donde un LNURL de tercero podía acuñar un recibo por un pago que nunca aterrizó. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2968">PR #2968&lt;/a> acepta dimensiones en coma flotante en los tags &lt;code>imeta&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-92/">NIP-92&lt;/a>, alineando Amethyst con clientes que publican valores fraccionarios de densidad de píxel desde dispositivos como la pantalla Retina del iPhone. El lanzamiento también conecta Payment Targets, un nuevo evento reemplazable de tarro de propinas multi-rail cubierto en la sección de protocolo abajo.&lt;/p>
&lt;h3 id="white-noise-v2026522-push-en-ios-ux-de-bloqueo-y-añadir-miembros">White Noise v2026.5.22: push en iOS, UX de bloqueo y añadir miembros&lt;/h3>
&lt;p>White Noise, el mensajero de grupos del protocolo Marmot, publicó &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.5.22%2B25">v2026.5.22&lt;/a> con las notificaciones push en iOS como característica principal. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/673">PR #673&lt;/a> implementa una Notification Service Extension (NSE) de iOS que descifra mensajes MLS dentro del proceso de la extensión y los expone como notificaciones del sistema, para que los usuarios de iPhone ya no necesiten la app en primer plano para recibir mensajes. La plomería del token push de Android se enruta por el mismo pipeline backend, con la NSE por plataforma manteniendo el texto cifrado fuera del broker.&lt;/p>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/676">PR #676&lt;/a> añade una UX completa de bloqueo y desbloqueo con flujos de confirmación y filtrado de listas de contactos. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/679">PR #679&lt;/a> añade el largamente solicitado botón &amp;ldquo;Añadir miembros&amp;rdquo; a la pantalla de información del grupo, cerrando una brecha de UX donde los administradores de grupo tenían que recurrir a enlaces para compartir. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/688">PR #688&lt;/a> introduce una pantalla dedicada de ajustes de notificaciones en iOS, y &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/687">PR #687&lt;/a> conecta compartir mediante pulsación larga para medios y mensajes.&lt;/p>
&lt;h3 id="mdk-añade-mensajes-efímeros-nip-40-en-todas-las-plataformas">MDK añade mensajes efímeros NIP-40 en todas las plataformas&lt;/h3>
&lt;p>El Marmot Development Kit, el núcleo Rust compartido usado por White Noise iOS, White Noise Android y cualquier futuro cliente Marmot, fusionó &lt;a href="https://github.com/marmot-protocol/mdk/pull/306">PR #306&lt;/a> para exponer la validación de mensajes efímeros y el manejo de expiración &lt;a href="https://nostrcompass.org/es/topics/nip-40/">NIP-40&lt;/a> mediante el puente UniFFI. El PR es el segundo de una serie de tres partes. iOS y Android ahora comparten una implementación Rust de la lógica de expiración; las reglas de tiempo viven en una única ruta de código auditada consumida por ambas plataformas mediante UniFFI. &lt;a href="https://github.com/marmot-protocol/mdk/pull/307">PR #307&lt;/a> limita la longitud almacenada de las razones de fallo de bienvenida y las sanea antes de persistirlas, una pasada de endurecimiento separada que complementa el manejo de eventos de bienvenida publicado la semana pasada.&lt;/p>
&lt;p>Los mensajes efímeros en MLS no son solo una comodidad de UI. El tag de expiración se publica con el sobre del mensaje cifrado, para que un destinatario que nunca abre el mensaje todavía tenga el texto cifrado subyacente expirando en la capa de relay junto con cualquier copia en caché en el cliente receptor. Con MDK poseyendo la ruta de validación, el comportamiento se mantiene consistente entre clientes: cualquier implementación conforme de Marmot aplica la misma semántica de expiración, para que un cliente honrando la expiración mientras otro guarda en caché para siempre deje de ser un peligro de portabilidad.&lt;/p>
&lt;h3 id="mostro-v0174-la-fase-3-cierra-el-bucle-del-bono-recortado">Mostro v0.17.4: la Fase 3 cierra el bucle del bono recortado&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>, el protocolo de intercambio de Bitcoin peer-to-peer construido sobre Nostr, publicó la Fase 3 de su despliegue de bono anti-abuso en &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.17.4">v0.17.4&lt;/a>. &lt;a href="https://github.com/MostroP2P/mostro/pull/738">PR #738&lt;/a> aterriza el flujo de pago para bonos recortados, tomando la garantía perdida del perdedor y desembolsándola al ganador de la disputa. &lt;a href="https://github.com/MostroP2P/mostro/pull/743">PR #743&lt;/a> añade la Fase 3.5, un mensaje explícito de confirmación de pago al ganador para que sepa que los sats recortados se han liquidado, con el evento de confirmación llegando en la misma sesión Nostr que la resolución de la disputa. La Fase 2, cubierta la semana pasada, introdujo el recorte como una acción de admin; la Fase 3 es la diferencia entre amenazar con una penalización y aplicarla.&lt;/p>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro/pull/746">PR #746&lt;/a> permite al demonio finalizar disputas que carecen de una fila de solucionador, un caso límite que anteriormente estancaba la resolución en disputas heredadas. &lt;a href="https://github.com/MostroP2P/mostro/pull/748">PR #748&lt;/a> tolera tasas nulas en la respuesta &lt;code>/exrates/BTC&lt;/code> de Yadio para que una breve caída de Yadio ya no rompa la ruta de conversión fiat de Mostro. &lt;a href="https://github.com/MostroP2P/mostro/pull/745">PR #745&lt;/a> documenta la especificación para proveedores de precio multi-fuente, la base para eliminar Yadio como punto único de fallo. El cliente móvil de Mostro conectó la ruta de reclamación de la Fase 3 correspondiente en &lt;a href="https://github.com/MostroP2P/mobile/pull/596">PR #596&lt;/a>.&lt;/p>
&lt;h3 id="applesauce-v610-relays-de-búsqueda-y-git-casts-nip-34">Applesauce v6.1.0: relays de búsqueda y git casts NIP-34&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/applesauce">Applesauce&lt;/a>, el kit de herramientas Nostr modular que impulsa Coracle, noStrudel y la pila de Pablo F7z, publicó &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-actions%406.1.0">v6.1.0&lt;/a> a través de sus paquetes. El lanzamiento añade soporte de primera clase para listas de relays de búsqueda &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a>: los eventos kind 10086 permiten a un usuario señalizar &amp;ldquo;pregunta a estos relays si quieres encontrarme&amp;rdquo;, situándose junto a las listas outbox &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> como una primitiva de descubrimiento. Las aplicaciones construidas sobre &lt;code>applesauce-core&lt;/code> obtienen un observable reactivo &lt;code>User.lookupRelays$&lt;/code> y un cargador correspondiente en &lt;code>applesauce-relay&lt;/code>.&lt;/p>
&lt;p>Las fábricas de git-cast &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> llegan a &lt;code>applesauce-factory&lt;/code>, dando a cada cliente construido con Applesauce una ruta de una línea para publicar anuncios de repo (kind 30617), parches (kind 1617) e issues (kind 1621). Las propiedades reactivas &lt;code>User.favoriteGitRepos$&lt;/code>, &lt;code>User.gitAuthors$&lt;/code> y &lt;code>User.graspServers$&lt;/code> permiten a las aplicaciones listar los repos seguidos de un usuario, los mantenedores de repos y los servidores GRASP configurados directamente desde el mismo objeto User. El lanzamiento también corrige los métodos manuales del pool que silenciosamente descartaban relays offline en &lt;a href="https://github.com/hzrd149/applesauce/pull/73">PR #73&lt;/a>.&lt;/p>
&lt;h3 id="notedeck-fusiona-negentropy-nip-77-para-giftwraps-y-backfill-de-hilos">Notedeck fusiona negentropy NIP-77 para giftwraps y backfill de hilos&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>, el cliente nativo de escritorio multi-columna de Damus, fusionó &lt;a href="https://github.com/damus-io/notedeck/pull/1459">PR #1459&lt;/a> el 25 de mayo para conectar la reconciliación completa por negentropy &lt;a href="https://nostrcompass.org/es/topics/nip-77/">NIP-77&lt;/a> en la ruta compartida del outbox. El PR añade tramas de cliente y relay NIP-77, sesiones de negentropy locales al relay y un rastreador de historial completo del outbox que impulsa la reconciliación del conjunto local y las obtenciones de eventos faltantes. Los giftwraps de mensajes obtienen reconciliación por negentropy para que los sobres de mensajes privados puedan recuperarse de los relays de lectura de la cuenta seleccionada. Las vistas de hilo ya no están limitadas por el límite de respuestas de la suscripción en vivo. Dave PNS reemplaza su implementación de negentropy local de Dave con la ruta compartida del outbox mientras preserva su comportamiento existente de historial acotado.&lt;/p>
&lt;p>Las suscripciones en vivo y negentropy ahora usan filtros separados. Un flujo puede mantener una pequeña solicitud en vivo mientras emite un filtro de negentropy más amplio para reconciliar lo que el relay ya tiene. El PR intencionalmente no habilita la sincronización amplia de negentropy para timelines de home o perfil, lo que cambiaría las características de coste del arranque en frío. Se añadió cobertura de test para reconciliación, entrega de giftwrap, backfill de hilos, restauración de Dave PNS, cambio de cuenta, reorientación de relay, reintentos de fetch y comportamiento de relay NIP-77.&lt;/p>
&lt;h3 id="vector-v040-reescritura-de-vector-core-tor-nip-46-mls-con-negentropy-completo-y-una-superficie-de-agente-mcp">Vector v0.4.0: reescritura de vector-core, Tor, NIP-46, MLS con negentropy completo y una superficie de agente MCP&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a>, el mensajero multiplataforma centrado en privacidad construido sobre DMs NIP-17 y grupos Marmot, publicó &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.0">v0.4.0&lt;/a> como su lanzamiento más grande hasta la fecha. El titular es una reescritura del motor desde cero: toda la lógica de Vector ahora vive en un único crate desacoplado, &lt;code>vector-core&lt;/code>, compartido entre escritorio, Android y cualquier cliente futuro, con más de 440 tests en el propio núcleo y el shell de la aplicación despojado de miles de líneas. La reescritura es la base para un CLI de Vector, bots y SDKs que impulsan el mismo código de protocolo que la GUI.&lt;/p>
&lt;p>La integración con Tor se envía con enrutado de tráfico con un clic y soporte de bridges para evitar la censura. El soporte multi-cuenta aterriza con un conmutador en la app. El inicio de sesión con firmador remoto llega mediante &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> con emparejamiento por bunker mediante QR o URI pegado, para que los usuarios puedan iniciar sesión sin exponer nunca su nsec. Delete-for-everyone funciona tanto en DMs &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> como en chats de grupo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, con Vector reteniendo la clave de firma efímera como una divergencia de especificación deliberada que las notas de lanzamiento indican explícitamente: &amp;ldquo;una desviación de las especificaciones tradicionales NIP-17/Marmot para controles de privacidad de usuario mejorados&amp;rdquo;. La clave efímera retenida da a los clientes Vector prueba local de que una eliminación fue sancionada por el remitente original, pero también significa que cualquier otro cliente que toque Vector ve una superficie de verificabilidad de eliminación diferente a la de los clientes NIP-17/Marmot de referencia.&lt;/p>
&lt;p>La sincronización de grupos MLS ahora se reconcilia completamente sobre negentropy &lt;a href="https://nostrcompass.org/es/topics/nip-77/">NIP-77&lt;/a>, la misma dirección que tomó Notedeck para giftwraps e hilos esta semana. El uploader de Blossom hace failover entre múltiples servidores, aprende las capacidades de cada servidor y sincroniza la lista de servidores entre dispositivos. Los paquetes de emoji personalizados son creables por el usuario, compartibles y compatibles entre otros clientes Nostr. La memoria SQLite bajó de aproximadamente 308MB a 5MB. El panel de emoji se abre desde caché en disco y los shortcodes estilo Discord (&lt;code>:smile:&lt;/code>) más el ranking de frecuencia Unicode exponen el glifo correcto primero.&lt;/p>
&lt;p>La adición más novedosa es &lt;code>vector-agent&lt;/code>, un servidor MCP (Model Context Protocol) que expone 21 herramientas para que los agentes de IA puedan controlar Vector: enviar DMs, gestionar grupos, subir archivos, editar perfiles. Este es el segundo proyecto Nostr esta semana (junto con Shopstr) en estrenar una superficie MCP, y la primera aplicación de clase mensajero en hacerlo. Junto con AgentNoise (cubierto la semana pasada), el patrón de clientes Nostr controlados por agentes está pasando de experimentos únicos a una dirección de plataforma deliberada.&lt;/p>
&lt;h3 id="cordn-aparece-como-un-mensajero-mls-mediado-por-coordinador">Cordn aparece como un mensajero MLS mediado por coordinador&lt;/h3>
&lt;p>&lt;a href="https://cordn.net">Cordn&lt;/a> (cliente web en &lt;a href="https://cordn.net">cordn.net&lt;/a>, repos en &lt;a href="https://github.com/Cordn-msg/cordn">Cordn-msg/cordn&lt;/a> y &lt;a href="https://github.com/Cordn-msg/cordn-web">Cordn-msg/cordn-web&lt;/a>) es un nuevo mensajero MLS que toma un enfoque arquitectónico diferente al de Marmot. Donde &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> está completamente basado en relays sin coordinador privilegiado (cada miembro del grupo escribe directamente a relays y cualquier relay conforme puede llevar el tráfico), Cordn introduce un rol de coordinador por grupo implementado como un servicio &lt;a href="https://nostrcompass.org/es/topics/contextvm/">ContextVM&lt;/a>. El coordinador ordena los commits MLS y maneja la distribución de bienvenidas.&lt;/p>
&lt;p>El argumento de Cordn, expuesto en su página &lt;a href="https://cordn.net/why">/why&lt;/a>, es que MLS tal como se despliega en mensajeros de producción &amp;ldquo;no está libre de coordinación&amp;rdquo; y que la &amp;ldquo;diseminación pública débilmente ordenada&amp;rdquo; hace que la convergencia del estado del grupo sea &amp;ldquo;mucho más difícil&amp;rdquo; sin un punto fuerte de coordinación. Un diseño mediado por coordinador proporciona un avance predecible de épocas y una resolución más simple de commits concurrentes. Los participantes se conectan al coordinador usando claves efímeras, para que el coordinador aprenda el ID del grupo y el tiempo del tráfico de commits pero no qué pubkeys a largo plazo son miembros. Cualquier parte consultando relays para un grupo Marmot ya puede ver la misma superficie: actividad del grupo por ID del grupo, con el tiempo inferible desde la llegada del evento. Cordn también reconoce que &amp;ldquo;la confianza en la disponibilidad permanece&amp;rdquo; con el auto-alojamiento: un coordinador auto-alojado evita la preocupación de centralización a nivel operador pero introduce un punto único de fallo para la liveness del grupo. Marmot evita ese punto único dejando el ordenado a MLS mismo (las épocas y los mensajes Commit manejan el ordenado dentro del protocolo) y distribuyendo eventos Welcome mediante gift wrap &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a>, a costa de disciplina del lado del admin: los admins deben esperar el reconocimiento del relay de un Commit antes de enviar el Welcome correspondiente, y los clientes deben reconciliar commits concurrentes cuando la entrega del relay compite con una transición de estado.&lt;/p>
&lt;p>El contraste vale la pena examinarlo para cualquier equipo que elija una pila de mensajería privada. Marmot intercambia algo de complejidad de implementación por un despliegue independiente del relay sin actor privilegiado en la ruta. Cordn intercambia una dependencia de disponibilidad de un solo punto por un ordenado más estricto y un modelo operativo más simple. Ambos proyectos construyen sobre &lt;a href="https://nostrcompass.org/es/topics/mls/">MLS&lt;/a> y usan Nostr como la capa de identidad y transporte. El desacuerdo es sobre dónde vive el coste de coordinación. Los repos cordn-msg muestran una cadencia constante de commits con el servicio de coordinador implementado sobre ContextVM y la capa MLS construida sobre &lt;code>ts-mls&lt;/code>.&lt;/p>
&lt;h3 id="deepmarks-marcadores-nip-b0-con-publicación-monetizada-por-curador">deepmarks: marcadores NIP-B0 con publicación monetizada por curador&lt;/h3>
&lt;p>&lt;a href="https://github.com/ostermayer/deepmarks-public">deepmarks-public&lt;/a> es un cliente de referencia para la especificación propuesta de marcadores &lt;a href="https://nostrcompass.org/es/topics/nip-b0/">NIP-B0&lt;/a> (kind 39701), con una arquitectura de tres cajas (curador, indexador, visor) y un sistema de niveles financiado por zaps &lt;a href="https://nostrcompass.org/es/topics/nip-57/">NIP-57&lt;/a> directos al curador. El cliente implementa NIP-B0, &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a>, &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>, NIP-57, &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>, &lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98&lt;/a>, &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> y BUD-01 y BUD-04 de Blossom para almacenamiento de archivos. Un nivel vitalicio de 21.000 sats convierte a los lectores de pago en destinatarios recurrentes de zaps para el curador. El curador publica eventos de marcador, el indexador los enriquece con metadatos legibles por máquina y el visor renderiza el feed; cada rol es un servicio desplegable separado.&lt;/p>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;h3 id="amber-v610-ga-copia-de-seguridad-cifrada-por-cuenta">Amber v6.1.0 GA: copia de seguridad cifrada por cuenta&lt;/h3>
&lt;p>&lt;strong>Amber&lt;/strong> pasó de &lt;code>v6.1.0-pre3&lt;/code> a GA &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.1.0">v6.1.0&lt;/a> esta semana. &lt;a href="https://github.com/greenart7c3/Amber/pull/444">PR #444&lt;/a> estrena copia de seguridad y restauración cifradas para la base de datos de permisos de aplicación, y &lt;a href="https://github.com/greenart7c3/Amber/pull/446">PR #446&lt;/a> divide la copia de seguridad por cuenta, para que los usuarios con múltiples identidades Nostr puedan hacer copia de seguridad y restaurar cada conjunto de concesiones de app independientemente. El trabajo de firma PSBT cubierto la semana pasada está en el corte GA.&lt;/p>
&lt;h3 id="citrine-suscripciones-por-relay-y-prevención-de-fugas-de-url-onion">Citrine: suscripciones por relay y prevención de fugas de URL onion&lt;/h3>
&lt;p>&lt;strong>Citrine&lt;/strong>, el relay personal en el dispositivo que se distribuye con Amethyst, publicó dos correcciones este ciclo. &lt;a href="https://github.com/greenart7c3/Citrine/pull/157">PR #157&lt;/a> cambia de una única suscripción global a suscripciones etiquetadas por relay, para que dos relays de origen que comparten un filtro &lt;code>kinds: [1]&lt;/code> ya no colisionen en el lado del agregador. &lt;a href="https://github.com/greenart7c3/Citrine/pull/162">PR #162&lt;/a> filtra las URLs de relay onion cuando el proxy Tor saliente está deshabilitado, previniendo que las direcciones onion filtren en la ruta de enrutado de clearnet.&lt;/p>
&lt;h3 id="angor-v0227-y-v0228-fiabilidad-de-relays-y-reconexión-de-boltz">Angor v0.2.27 y v0.2.28: fiabilidad de relays y reconexión de Boltz&lt;/h3>
&lt;p>&lt;strong>Angor&lt;/strong> publicó &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.27">v0.2.27&lt;/a> y &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.28">v0.2.28&lt;/a>. &lt;a href="https://github.com/block-core/angor/pull/874">PR #874&lt;/a> corrige un bug de deduplicación de relays donde solo un relay estaba conectado a la vez, una regresión que degradaba silenciosamente la fiabilidad para proyectos con múltiples endpoints de relay. &lt;a href="https://github.com/block-core/angor/pull/876">PR #876&lt;/a> añade lógica de reconexión WebSocket para la monitorización de submarine swaps de Boltz, para que una breve desconexión ya no deje un swap en estado desconocido.&lt;/p>
&lt;h3 id="nostrord-v110-zaps-nip-57-y-distinción-de-roles-nip-29">Nostrord v1.1.0: zaps NIP-57 y distinción de roles NIP-29&lt;/h3>
&lt;p>&lt;strong>Nostrord&lt;/strong> publicó &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v1.1.0">v1.1.0&lt;/a> con soporte de zaps Lightning &lt;a href="https://nostrcompass.org/es/topics/nip-57/">NIP-57&lt;/a> para mensajes y perfiles (&lt;a href="https://github.com/nostrord/nostrord/pull/98">PR #98&lt;/a>) y una distinción adecuada en el feed de actividad entre cambios de rol &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> y adiciones de miembros (&lt;a href="https://github.com/nostrord/nostrord/pull/92">PR #92&lt;/a>), que solía renderizarse idénticamente y ocultaba quién había sido promovido frente a quién había sido invitado.&lt;/p>
&lt;h3 id="ぬるぬる-v15x-keystore-mls-con-sqlcipher-y-recuperación-de-épocas">ぬるぬる v1.5.x: keystore MLS con SQLCipher y recuperación de épocas&lt;/h3>
&lt;p>&lt;strong>ぬるぬる&lt;/strong> (nurunuru, por tami1A84), un cliente Nostr en japonés que implementa mensajería de grupo MLS (kind 443) junto con NIP-44, búsqueda avanzada NIP-50, NIP-55 y NIP-70, publicó cinco lanzamientos esta semana. &lt;a href="https://github.com/tami1A84/null--nostr/pull/184">PR #184&lt;/a> introduce cifrado SQLCipher para el keystore MLS en la capa rust-engine. &lt;a href="https://github.com/tami1A84/null--nostr/pull/187">PR #187&lt;/a> y &lt;a href="https://github.com/tami1A84/null--nostr/pull/188">PR #188&lt;/a> extienden SQLCipher a Android e iOS respectivamente, con un paso de purga de texto plano heredado y guardias de CI. &lt;a href="https://github.com/tami1A84/null--nostr/pull/189">PR #189&lt;/a> y &lt;a href="https://github.com/tami1A84/null--nostr/pull/191">PR #191&lt;/a> añaden recuperación de épocas de pares MLS con una caché de replay y un banner de recuperación en ambas plataformas, para que un cliente que se queda atrás en los commits del grupo pueda recuperarse sin perder la conversación. ぬるぬる es un cliente Marmot construido sobre &lt;code>mdk-core&lt;/code>, &lt;code>mdk-sqlite-storage&lt;/code> y &lt;code>mdk-storage-traits&lt;/code> de &lt;code>marmot-protocol/mdk&lt;/code>, por lo que el trabajo de SQLCipher y recuperación de épocas aterriza dentro del mismo runtime MDK que usa White Noise.&lt;/p>
&lt;h3 id="bitcredit-core-v0510-corrección-de-propagación-de-bloques-enraizada-en-nostr">Bitcredit Core v0.5.10: corrección de propagación de bloques enraizada en Nostr&lt;/h3>
&lt;p>&lt;strong>Bitcredit Core&lt;/strong> publicó &lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/releases/tag/v0.5.10">v0.5.10&lt;/a> con una corrección para un campo Nostr-node-id faltante durante la propagación de bloques, que estaba rompiendo los flujos de creación de empresa que incluían subida de identidad. Bitcredit es un protocolo de e-bill que usa identidades Nostr como raíz de confianza para eventos de propagación de empresa y factura.&lt;/p>
&lt;h2 id="cambios-sin-publicar">Cambios sin publicar&lt;/h2>
&lt;p>&lt;strong>Jumble&lt;/strong> abrió &lt;a href="https://github.com/CodyTseng/jumble/pull/797">PR #797&lt;/a> para inicio de sesión con Google mediante el firmador de umbral Pomegranate, permitiendo a un usuario dividir su clave Nostr entre múltiples partes para que ningún firmador único posea el secreto completo. Este es un paso significativo más allá de los flujos de bunker o importación de nsec: un usuario puede recuperar su cuenta incluso si una parte firmadora está comprometida, sin que esa parte posea nunca la clave privada completa.&lt;/p>
&lt;p>&lt;strong>Shopstr&lt;/strong> abrió &lt;a href="https://github.com/shopstr-eng/shopstr/pull/492">PR #492&lt;/a> inicializando un servidor MCP (Model Context Protocol), con &lt;a href="https://github.com/shopstr-eng/shopstr/pull/494">PR #494&lt;/a> construyendo la infraestructura de soporte (fetch de relay, parsers, validación, errores, dedup, audit logging) y &lt;a href="https://github.com/shopstr-eng/shopstr/pull/472">PR #472&lt;/a> añadiendo una lista blanca de relays para el gestor de relays MCP. Esto hace de Shopstr el primer marketplace Nostr que se expone como servidor MCP, para que los agentes de IA puedan navegar y actuar sobre listados NIP-99 como una herramienta estructurada.&lt;/p>
&lt;p>&lt;strong>Keydex&lt;/strong>, la bóveda de secretos compartidos Shamir, abrió una migración sustancial en &lt;a href="https://github.com/mplorentz/keydex/pull/226">PR #226&lt;/a> moviendo los kinds personalizados 1337-1345 al rango 713-721, junto con &lt;a href="https://github.com/mplorentz/keydex/pull/239">PR #239&lt;/a> añadiendo AEAD sobre los shares Shamir y &lt;a href="https://github.com/mplorentz/keydex/pull/234">PR #234&lt;/a> migrando a aritmética GF256. La migración del rango de kinds alinea Keydex con la forma en que el repo NIPs asigna kinds personalizados, alejándose de un rango autoreclamado.&lt;/p>
&lt;p>&lt;strong>Mill&lt;/strong> (&lt;a href="https://github.com/0ceanSlim/nostr-mill">nostr-mill&lt;/a>) es una nueva UI de firmador Nostr drop-in de &lt;a href="https://github.com/0ceanSlim">OceanSlim&lt;/a> (mantenedor del relay Go &lt;a href="https://github.com/0ceanSlim/grain">grain&lt;/a>), distribuido como un Web Component con una única etiqueta script en &lt;a href="https://www.npmjs.com/package/nostr-mill">npm&lt;/a> y &lt;a href="https://cdn.jsdelivr.net/npm/nostr-mill/dist/mill.umd.js">jsDelivr&lt;/a>. Una etiqueta &lt;code>&amp;lt;script&amp;gt;&lt;/code> da a una app web los seis puntos de entrada comunes de firmador tras una UI unificada: extensión de navegador &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a>, bunker &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (pegado de URL o emparejamiento por QR con relays especificables por el usuario, inusual entre integraciones de bunker en página), Amber &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> mediante intents Android, nsec cifrado almacenado en &lt;code>sessionStorage&lt;/code> mediante AES-256-GCM con PBKDF2, &lt;code>npub&lt;/code> solo lectura y generación de par de claves en el navegador. El componente es tematizable mediante 29 propiedades CSS personalizadas con alcance al Shadow DOM y expone una pequeña API rastreada por SemVer (&lt;code>MILL.open&lt;/code>, eventos &lt;code>mill:connected&lt;/code> / &lt;code>mill:disconnected&lt;/code>, exportaciones de tema con nombre). La motivación del mantenedor es que los flujos de inicio de sesión con bunker han sido reimplementados una app web a la vez a través de Nostr. Consolidar sobre un componente compartido permite a los clientes converger sobre cómo debe comportarse la UX de firmador, y convierte flujos opcionales (como el inicio de sesión con clave delegada mediante firmadores de umbral, reflejando el inicio de sesión con Google basado en Pomegranate de Wisp cubierto arriba) en una superficie reutilizable que cualquier app puede insertar. Mill está en npm v1.5.0, con un solo mantenedor, en fase alfa, con grain como el primer integrador planeado.&lt;/p>
&lt;p>&lt;strong>moStard&lt;/strong>, un fork de &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a> enfocado en Monero por &lt;a href="https://github.com/roguehashrate">roguehashrate&lt;/a>, alcanzó &lt;a href="https://github.com/roguehashrate/moStard/releases">v1.0.1&lt;/a> esta semana con un conjunto de características reducido y una identidad temática de Monero superpuesta sobre la misma pila Applesauce + worker-relay. El trabajo de esta semana aterrizó el renderizado de eventos software-application kind 32267 de Zapstore (tarjetas incrustadas en el timeline mostrando nombre de la app, icono, capturas, plataforma, licencia y un enlace de lanzamiento a &lt;code>zapstore.dev/apps/&amp;lt;d-tag&amp;gt;&lt;/code>), encuestas mediante kind 20 y kind 21, propinas basadas en Payment Targets NIP-A3 con códigos QR por método, renderizado de markdown en notas, soporte de selector de GIFs para teclados de GIF externos y correcciones de emparejamiento del firmador Amber. El enmarque Monero se extiende al flujo de propina: las entradas &lt;code>payto&lt;/code> NIP-A3 para direcciones &lt;code>monero&lt;/code> obtienen botones de primera clase en la misma UI junto con &lt;code>lightning&lt;/code> y &lt;code>bitcoin&lt;/code>. El cliente tiene un solo mantenedor y está en fase alfa, pero el trabajo del 27 de mayo muestra a un constructor tirando de NIP-A3 desde los anuncios de especificación de protocolo de esta semana directamente a un fork en producción en cuestión de días.&lt;/p>
&lt;h2 id="actualizaciones-de-nip-y-trabajo-de-especificación-de-protocolo">Actualizaciones de NIP y trabajo de especificación de protocolo&lt;/h2>
&lt;h3 id="pila-nip-de-calendario-cuatro-propuestas-del-equipo-formstr">Pila NIP de calendario: cuatro propuestas del equipo Formstr&lt;/h3>
&lt;p>Ix2 (&lt;a href="https://github.com/geralt-debugs">@geralt-debugs&lt;/a>) abrió cuatro PRs coordinados de NIP el 17 de mayo, todos referenciando la implementación &lt;a href="https://calendar.formstr.app">calendar.formstr.app&lt;/a> que ya se distribuye bajo el mismo autor. &lt;a href="https://github.com/nostr-protocol/nips/pull/2350">PR #2350&lt;/a> propone kind 84 como un evento generalizado de &amp;ldquo;autoremoción de participante&amp;rdquo;: un participante etiquetado en cualquier evento puede publicar un kind 84 que referencie el original mediante tags &lt;code>e&lt;/code>, &lt;code>a&lt;/code> y &lt;code>k&lt;/code> para señalizar la exclusión. Los relays deben validar que el firmante del kind 84 aparece en un tag &lt;code>p&lt;/code> del evento referenciado antes de honrar la remoción, y una eliminación kind 5 siempre tiene precedencia. El PR generaliza un patrón que previamente solo se describía dentro del contexto de calendario NIP-52, para que kind 84 se convierta en la forma estándar de que los no-autores se retiren de cualquier evento de participante.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2351">PR #2351&lt;/a> es la base de la pila de calendario: NIP-52E para eventos privados de calendario (kinds 32678 basados en tiempo, 32681 evento de día, 32123 lista de calendarios privados, 31926 lista de ocupación, 1052 gift wrap, 52 rumor) y NIP-52R para eventos recurrentes. En el núcleo arquitectónico está el patrón de view-key: un par de claves generado aleatoriamente cifra el contenido del evento con NIP-44, y la mitad secreta (codificada en bech32 como &lt;code>nsec&lt;/code>) se envuelve en gift wrap a cada participante. El firmante solo posee el tag &lt;code>d&lt;/code> público; todo lo demás vive en &lt;code>content&lt;/code> cifrado. Desacoplar el cifrado de contenido de la identidad de esta forma significa que editar un evento no requiere volver a distribuir claves a los destinatarios. NIP-52R define dos tags opcionales en los kinds existentes 31923 y 31922 para declarar recurrencia usando valores RRULE RFC 5545 desnudos, con el índice de día &lt;code>D&lt;/code> volviéndose opcional cuando RRULE está presente. El secreto hacia adelante está explícitamente ausente: una view key filtrada revela todas las versiones pasadas y futuras del evento bajo el mismo tag &lt;code>d&lt;/code>.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2352">PR #2352&lt;/a> construye sobre NIP-52E con una especificación de programación de citas descentralizada que la descripción del PR llama &amp;ldquo;una alternativa drop-in a Calendly/Cal.com sin intermediario central&amp;rdquo;. Kind 31927 anuncia una página de programación con ventanas de disponibilidad cifradas; kind 32680 es un registro de recuperación auto-cifrado del lado del host para la view key; kinds 1057 y 1058 son la solicitud y respuesta de reserva envueltas en gift wrap. La mecánica ingeniosa: el reservador genera tanto el tag &lt;code>d&lt;/code> como la view key para el futuro evento privado antes de enviar la solicitud, para que el reservador pueda añadir la cita a su propio calendario inmediatamente con la clave correcta, y el host nunca tenga que hacer un round-trip de una clave de vuelta. Las respuestas de reserva llevan un tag &lt;code>status&lt;/code> sin cifrar en el envoltorio exterior para que los relays puedan filtrar sin descifrar.&lt;/p>
&lt;p>Una implementación de referencia ya está en vivo en &lt;a href="https://calendar.formstr.app">calendar.formstr.app&lt;/a> y como la app Android Calendar en Zapstore. &lt;a href="https://github.com/nostr-protocol/nips/pull/2351">PR #2351&lt;/a> cierra &lt;a href="https://github.com/nostr-protocol/nips/pull/2027">PR #2027&lt;/a> en su favor, consolidando una propuesta anterior de calendario privado que había estado abierta desde principios de año.&lt;/p>
&lt;h3 id="payment-targets-y-silent-payments">Payment Targets y Silent Payments&lt;/h3>
&lt;p>Otras dos propuestas de NIP circularon esta semana en documentos &lt;code>kind:30023&lt;/code> de formato largo.&lt;/p>
&lt;p>Una propuesta de &lt;strong>Payment Targets&lt;/strong> (NIP-A3 / payto) define un evento reemplazable kind 10133 que lleva uno o más tags &lt;code>[&amp;quot;payto&amp;quot;, &amp;quot;&amp;lt;type&amp;gt;&amp;quot;, &amp;quot;&amp;lt;authority&amp;gt;&amp;quot;]&lt;/code> que mapean a URIs &lt;code>payto:&lt;/code> RFC 8905. Los tipos soportados incluyen bitcoin, lightning, ethereum, monero, nano, cashme, revolut y venmo. La intención es estandarizar un tarro de propinas multi-rail que complementa (no reemplaza) a los zaps NIP-57 basados en lud16. Amethyst v1.11.0 es el primer implementador; los PRs fusionados &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2953">#2953&lt;/a> y &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3009">#3009&lt;/a> estrenan la superficie de suscripción y observación, y &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3011">PR #3011&lt;/a> conecta la UI para &lt;code>PaymentTargetsEvent&lt;/code>.&lt;/p>
&lt;p>Dos propuestas competidoras de Silent Payments cayeron de diferentes autores. La primera variante deriva las claves de escaneo y gasto BIP-352 de silent-payment del &lt;code>nsec&lt;/code> mediante tweaks aditivos públicos, para que cualquier remitente pueda construir una dirección &lt;code>sp1q...&lt;/code> desde un &lt;code>npub&lt;/code> sin configuración. La advertencia del autor es explícita en la especificación: &amp;ldquo;bscan y bspend DEBEN ser tratadas con exactamente el mismo cuidado que el nsec&amp;rdquo;, porque la clave de escaneo revela el nsec. Una segunda variante toma el enfoque inverso, añadiendo un campo &lt;code>sp_address&lt;/code> a los metadatos de perfil kind 0 que contiene una dirección BIP-352 silent-payment estándar cuyas claves se mantienen independientes de la identidad Nostr. La variante dos es estructuralmente más segura. Ambas propuestas atrajeron un hilo de revisión reflexivo; erskingardner (líder de Marmot) publicó un &lt;a href="https://gist.github.com/trbouma/77648ebe1005b181b67d1c4b42c7f31d?permalink_comment_id=6167489#gistcomment-6167489">comentario&lt;/a> detallado en el gist trbouma que rastrea la propuesta. Su preocupación central es que la variante 1 deriva la clave privada de escaneo del &lt;code>nsec&lt;/code> más un tweak calculable públicamente, lo que significa que cualquiera que posea la clave de escaneo (incluido un servicio de escaneo de terceros al que el usuario tenga que delegar en la práctica) puede recuperar el &lt;code>nsec&lt;/code> completo restando ese tweak. La misma clave que permite a un servicio remoto escanear los pagos entrantes también permite a ese servicio robar tu identidad y cualquier fondo derivado de ella.&lt;/p>
&lt;p>En el lado git-sobre-Nostr NIP-34, hzrd149 publicó 2 parches a &lt;a href="https://gitworkshop.dev/npub1zafcms4xya5ap9zr7xxr0jlrtrattwlesytn2s42030lzu0dwlzqpd26k5/relay.ngit.dev/schemata">schemata&lt;/a>. &lt;a href="https://gitworkshop.dev/">gitworkshop.dev&lt;/a> en sí atrajo dos reportes de issues: uno señalando que las sesiones de login se pierden al refrescar la página cuando se usa un firmador remoto NIP-46, el otro pidiendo estilizado distinto para enlaces en las vistas previas de README.&lt;/p>
&lt;h2 id="seis-años-de-mayos-de-nostr">Seis años de mayos de Nostr&lt;/h2>
&lt;p>El último newsletter de mayo de 2026 se aleja de los lanzamientos de la semana para recorrer el mes de mayo a lo largo de la historia de Nostr. Cada año tuvo un centro de gravedad diferente: 2021 fue un único commit, 2022 fue la formación del propio repo NIPs, 2023 fue la explosión de la especificación de protocolo, 2024 fue el ciclo de consolidación, 2025 fue cuando se fusionó negentropy y el Notedeck de Damus se graduó a Beta, y 2026 es el mes cubierto en este número y en los tres anteriores.&lt;/p>
&lt;h3 id="mayo-2021">Mayo 2021&lt;/h3>
&lt;p>Nostr tenía seis meses. El único código Nostr vivía en &lt;a href="https://github.com/fiatjaf/nostr">fiatjaf/nostr&lt;/a> y todo el mes produjo exactamente un commit, pero ese commit se convirtió en una de las partes más usadas del protocolo. El 22 de mayo, fiatjaf &lt;a href="https://github.com/fiatjaf/nostr/commit/9ee3a02">reutilizó NIP-02&lt;/a> como el NIP de lista de contactos. El mensaje del commit dice: &amp;ldquo;repurpose NIP-02 and add NIP authorship&amp;rdquo;, y el crédito explícito es a &lt;a href="https://github.com/nostr-protocol/nostr/pull/16">PR #16&lt;/a> de arcbtc (Ben Arc de LNbits), abierto el 9 de febrero y cerrado el día antes de que fiatjaf plegara la idea en NIP-02. El pitch de arcbtc era pequeño: un kind para &amp;ldquo;enviar lista de seguidores a los relays&amp;rdquo; que sería &amp;ldquo;útil para restaurar cuentas y recomendar claves públicas a seguir&amp;rdquo;. fiatjaf lo generalizó en un único evento &lt;code>kind:3&lt;/code> cuyos tags sirven tres propósitos a la vez. Son una lista de follow (el grafo social), un almacén de petname (apodos locales para amigos) y una fuente de recomendación de relays (qué relays usa un follow). El mismo evento, reemplazable por autor, se convirtió en la respuesta canónica a &amp;ldquo;a quién sigue esta persona&amp;rdquo;, &amp;ldquo;cómo los llama&amp;rdquo; y &amp;ldquo;dónde lee&amp;rdquo;. Cada cliente construido en los siguientes cinco años lee &lt;code>kind:3&lt;/code>. La convención añadida en el mismo commit, que cada NIP nombra a su autor, es la razón por la que cada especificación ahora tiene firmas.&lt;/p>
&lt;h3 id="mayo-2022">Mayo 2022&lt;/h3>
&lt;p>El mes en que el repo NIPs se convirtió en un proyecto comunitario. El 1 de mayo, fiatjaf &lt;a href="https://github.com/nostr-protocol/nips/commit/f25c7e6">migró las especificaciones&lt;/a> de &lt;code>fiatjaf/nostr&lt;/code> a un repo dedicado &lt;a href="https://github.com/nostr-protocol/nips">&lt;code>nostr-protocol/nips&lt;/code>&lt;/a> y el 2 de mayo añadió &lt;a href="https://github.com/nostr-protocol/nips/commit/c053670">criterios formales de aceptación&lt;/a>. Dos días después, Robert C. Martin (Uncle Bob) abrió &lt;a href="https://github.com/nostr-protocol/nips/pull/1">PR #1&lt;/a>, el primer pull request externo, proponiendo convenciones de hilo para tags &lt;code>e&lt;/code> y &lt;code>p&lt;/code>. El PR fue numerado originalmente NIP-13, luego &lt;a href="https://github.com/nostr-protocol/nips/commit/bd4a81a">renombrado a NIP-10&lt;/a> para dejar sitio a proof-of-work. Tres de los primeros seis NIPs son de Uncle Bob: NIP-10 (marcadores de hilo), NIP-14 (&lt;a href="https://github.com/nostr-protocol/nips/commit/ebacbcc">el tag Subject&lt;/a>) y el commit del 21 de mayo que fijó &lt;a href="https://github.com/nostr-protocol/nips/commit/e22ea1a">&lt;code>kind:1&lt;/code> como el kind canónico de nota de texto corta&lt;/a>. El 5 de mayo, William Casarin hizo sus primeros commits NIP: &lt;a href="https://github.com/nostr-protocol/nips/commit/d7a4aad">NIP-13 Proof of Work&lt;/a> y el &lt;a href="https://github.com/nostr-protocol/nips/commit/ad1eb96">evento kind:2 recommend-relay&lt;/a>. Al día siguiente, fiatjaf publicó &lt;a href="https://github.com/nostr-protocol/nips/commit/37eb53e">NIP-07 &lt;code>window.nostr&lt;/code>&lt;/a>, veinte líneas de markdown que definieron la interfaz de firmador de extensión de navegador aún usada hoy. La &lt;a href="https://github.com/nostr-protocol/nips/commit/57b86d2">advertencia CORS&lt;/a> de NIP-05 por David A. Harding y el &lt;a href="https://github.com/nostr-protocol/nips/commit/a4aea53">&lt;code>filter.limit&lt;/code>&lt;/a> de NIP-01 aterrizaron la misma semana. nostr-tools publicó su &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/dc489bf">primer build ESM importable por navegador&lt;/a> el 8 de mayo. Semisol redactó &lt;a href="https://github.com/nostr-protocol/nips/commit/a787093">NIP-15 (End Of Stored Events)&lt;/a> y &lt;a href="https://github.com/nostr-protocol/nips/commit/62fde6c">NIP-16 (rangos de kind de evento)&lt;/a> a final de mes, los documentos que aún gobiernan la semántica de sincronización de relay y la clasificación regular-vs-reemplazable-vs-efímero.&lt;/p>
&lt;h3 id="mayo-2023">Mayo 2023&lt;/h3>
&lt;p>La explosión de la especificación de protocolo. Se abrieron sesenta y cuatro PRs de NIP ese mes, con varias de las propuestas que definieron la superficie de Nostr para los próximos dos años aterrizando en 31 días, y el mayor anuncio de financiación que Nostr había recibido aterrizó el 4 de mayo con la &lt;a href="https://opensats.org/blog/opensats-receives-additional-funding-of-dollar10m-from-startsmall">subvención de $10 millones de OpenSats de #startsmall de Jack Dorsey&lt;/a>, el dinero que ha respaldado cada ola de subvenciones Nostr desde entonces. NIP-47 (Nostr Wallet Connect) fue &lt;a href="https://github.com/nostr-protocol/nips/pull/406">fusionado el 2 de mayo&lt;/a>, trayendo la especificación wallet-connect de Alby al protocolo principal. Dos días después Vitor Pamplona &lt;a href="https://github.com/nostr-protocol/nips/pull/498">propuso NIP-53 Live Activities&lt;/a> con salas &lt;code>kind:30311&lt;/code> y mensajes de chat &lt;code>kind:1311&lt;/code>, la base para cada superficie de livestreaming Nostr que siguió. Pablo Fernandez abrió &lt;a href="https://github.com/nostr-protocol/nips/pull/501">NIP-84 Highlights&lt;/a> el 5 de mayo y &lt;a href="https://github.com/nostr-protocol/nips/pull/530">NIP-89 Recommended Application Handlers&lt;/a> el 14 de mayo. v0l (Kieran Babich, autor de Snort) propuso &lt;a href="https://github.com/nostr-protocol/nips/commit/29f26e7">NIP-98 HTTP Auth&lt;/a> el 8 de mayo, la primitiva de autenticación de la que NIP-96 y Blossom dependieron ambos más tarde. Jonathan Staab propuso &lt;a href="https://github.com/nostr-protocol/nips/pull/532">NIP-32 Labels&lt;/a> el 15 de mayo, y &lt;a href="https://github.com/nostr-protocol/nips/pull/484">NIP-30 Custom Emoji&lt;/a> se fusionó el mismo día. Arthur Franca propuso &lt;a href="https://github.com/nostr-protocol/nips/pull/547">NIP-96 HTTP File Storage Integration&lt;/a> el 21 de mayo. Dos días después, Vitor añadió &lt;a href="https://github.com/nostr-protocol/nips/commit/e4937be">zap splits a NIP-57&lt;/a> y verbiricha añadió &lt;a href="https://github.com/nostr-protocol/nips/commit/0495931">borradores de formato largo &lt;code>kind:30024&lt;/code> a NIP-23&lt;/a>, la especificación que se convirtió en la base para los flujos modernos de autoría de formato largo Nostr en Habla, YakiHonne y Highlighter. fiatjaf propuso &lt;a href="https://github.com/nostr-protocol/nips/pull/566">NIP-29 Simple Groups&lt;/a> el 28 de mayo, la primera especificación de grupo gestionado por relay que cubre eventos de moderación &lt;code>kind:9000&lt;/code> a &lt;code>kind:9020&lt;/code>. El mes cerró con Paul Miller abriendo &lt;a href="https://github.com/nostr-protocol/nips/pull/574">la conversación de NIP-44&lt;/a> el 31 de mayo, un diseño de DM cifrado basado en XChaCha20 destinado a reemplazar NIP-04. El lado del cliente se movió igual de rápido: Damus estrenó NWC, zap pool y Pending Zaps entre el &lt;a href="https://github.com/damus-io/damus/commits/master/?since=2023-05-10&amp;amp;until=2023-05-15">10 y el 15 de mayo&lt;/a>; Snort lanzó &lt;a href="https://github.com/v0l/snort/commit/6cbc3ae">zap pool&lt;/a> y &lt;a href="https://github.com/v0l/snort/commit/d5032d6">medios de pago L402&lt;/a>; &lt;a href="https://github.com/vitorpamplona/amethyst/releases">Amethyst&lt;/a> publicó aproximadamente treinta lanzamientos versionados a lo largo del mes, desde v0.40.1 el 1 de mayo hasta el rango v0.55.x a fin de mes, con zap splits en v0.45.0 y labels NIP-32 en v0.46.0; el &lt;a href="https://github.com/PrimalHQ/primal-android-app/commit/6654cf9">repo Primal Android&lt;/a> fue creado el 16 de mayo; &lt;a href="https://github.com/rust-nostr/nostr/releases/tag/v0.22.0">rust-nostr v0.22.0&lt;/a> añadió NIP-47 y NIP-58. El 1 de mayo, &lt;a href="https://github.com/hoytech/strfry/commit/de475c5">strfry publicó su integración de negentropy&lt;/a>, la primera implementación de relay del protocolo de reconciliación de conjuntos de Doug Hoyte que más tarde se convertiría en NIP-77. El mes cerró con &lt;a href="https://www.forbes.com/sites/digital-assets/2023/05/30/bitcoin-social-network-nostr-creator-fiatjaf-/">Forbes publicando un perfil de formato largo de fiatjaf el 30 de mayo&lt;/a>, uno de los primeros deep dives de la prensa mainstream sobre el fundador anónimo de Nostr.&lt;/p>
&lt;h3 id="mayo-2024">Mayo 2024&lt;/h3>
&lt;p>El ciclo de consolidación. Menos propuestas llamativas, más publicaciones. &lt;a href="https://github.com/nostr-protocol/nips/pull/787">NIP-54 Decentralized Wikis&lt;/a> se fusionó el 2 de mayo con artículos &lt;code>kind:30818&lt;/code> y tags &lt;code>d&lt;/code> normalizados por caso. Tres días después, &lt;a href="https://github.com/nostr-protocol/nips/pull/1213">NIP-56&lt;/a> se extendió para que los reportes de abuso pudieran señalizar amenazas digitales (malware, phishing) junto con categorías solo de contenido. El 6 de mayo, &lt;a href="https://github.com/nostr-protocol/nips/pull/1221">las reacciones NIP-25 se simplificaron&lt;/a> para dejar de incluir todo el hilo de respuesta como tags &lt;code>e&lt;/code>. Arthur Franca &lt;a href="https://github.com/nostr-protocol/nips/pull/1233">propuso NIP-22 Comment&lt;/a> el 12 de mayo, introduciendo &lt;code>kind:1111&lt;/code> para que las respuestas a eventos no-&lt;code>kind:1&lt;/code> (artículos, archivos, productos) obtengan una forma estructurada de hilar. El 19 de mayo, fiatjaf &lt;a href="https://github.com/nostr-protocol/nips/pull/1248">renovó NIP-46&lt;/a> para abandonar completamente NIP-04 y cambiar todo el tráfico de bunker a cifrado NIP-44, la maniobra de deprecación que ha dado forma a cada implementación de bunker desde entonces. El 20 de mayo, &lt;a href="https://github.com/nostr-protocol/nips/pull/923">NIP-71 Video Events&lt;/a> se fusionó con &lt;code>kind:21&lt;/code> y &lt;code>kind:22&lt;/code>, y &lt;a href="https://github.com/nostr-protocol/nips/pull/1171">NIP-10&lt;/a> añadió el argumento opcional de pubkey en los tags &lt;code>e&lt;/code> para que los clientes puedan resolver autores de hilo sin primero obtener el evento referenciado. &lt;a href="https://github.com/nostr-protocol/nips/pull/1175">NIP-35 Torrents&lt;/a> de Kieran Walsh se fusionó el 22 de mayo, y el 24 de mayo el README de NIPs referenció por primera vez &lt;a href="https://github.com/nostr-protocol/nips/pull/1251">CIP-01&lt;/a> como una propuesta off-repo, señalizando el inicio del patrón &amp;ldquo;NIPs como uno de varios lugares de propuesta&amp;rdquo;. El 25 de mayo, un &lt;a href="https://github.com/nostr-protocol/nips/pull/1254">PR de limpieza&lt;/a> eliminó el tag &lt;code>aes-256-gcm&lt;/code> de NIP-71 antes de que las implementaciones downstream lo congelaran. NIP-96 añadió &lt;a href="https://github.com/nostr-protocol/nips/pull/1262">&lt;code>list files&lt;/code> y descartó el requisito de transformación&lt;/a> el 27 de mayo. El 28 de mayo, Jonathan Staab propuso &lt;a href="https://github.com/nostr-protocol/nips/pull/1264">subir el listón de aceptación de NIP&lt;/a> para requerir al menos dos implementaciones interoperables antes de que un borrador pueda graduarse. Lado cliente: Damus etiquetó &lt;a href="https://github.com/damus-io/damus/releases/tag/v1.7.2">v1.7.2&lt;/a> y &lt;a href="https://github.com/damus-io/damus/releases/tag/v1.8">v1.8&lt;/a> más un &lt;a href="https://github.com/damus-io/damus/commits/v1.9">v1.9 con manejo completo de marcadores NIP-10&lt;/a> el 9-10 de mayo, aterrizó &lt;a href="https://github.com/damus-io/damus/commit/8feb228">autenticación NIP-98 en notificaciones push&lt;/a>, y estrenó &lt;a href="https://github.com/damus-io/damus/commit/52aefc8">soporte completo de marcadores NIP-10&lt;/a>. Amethyst hizo de &lt;a href="https://github.com/vitorpamplona/amethyst/commit/1f45a63">NIP-17 el modo DM por defecto&lt;/a> el 14 de mayo, construyó &lt;a href="https://github.com/vitorpamplona/amethyst/commit/aa97c7e">gestión de relays con modelo outbox NIP-65&lt;/a>, añadió &lt;a href="https://github.com/vitorpamplona/amethyst/commit/ff94f45">selección de servidor NIP-96&lt;/a>, y estrenó &lt;a href="https://github.com/vitorpamplona/amethyst/commit/04c4490">derivación de claves BIP-32/BIP-39 NIP-06&lt;/a>. Primal Android &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/0.99.2">0.99.2&lt;/a> el 10 de mayo añadió etiquetado de usuarios y NWC de wallet externa, seguido por &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/0.99.4">0.99.4&lt;/a>. Pablo Fernandez aterrizó un &lt;a href="https://github.com/nostr-dev-kit/ndk/commits/master/?since=2024-05-01&amp;amp;until=2024-06-01">cluster de actualización optimista NDK&lt;/a> entre el 24 y el 31 de mayo. Snort añadió &lt;a href="https://github.com/v0l/snort/commit/5763d91">selección de servidor NIP-96&lt;/a>, y cashu-ts &lt;a href="https://github.com/cashubtc/cashu-ts/commit/3e20f45">separó sus primitivas cripto&lt;/a> en &lt;code>@cashu/crypto&lt;/code>.&lt;/p>
&lt;h3 id="mayo-2025">Mayo 2025&lt;/h3>
&lt;p>El mes en que &lt;a href="https://github.com/nostr-protocol/nips/pull/1494">NIP-77 (Negentropy Syncing)&lt;/a> se fusionó el 27 de mayo, la especificación de fiatjaf y Doug Hoyte para el protocolo de cable que reemplaza los filtros REQ de fuerza bruta con computación de diferencia de coste logarítmico. Esta era la misma negentropy que strfry había publicado dos años antes como una característica del lado del relay, ahora formalizada como un protocolo cliente-relay, y &lt;a href="https://github.com/nostr-protocol/nips/pull/1939">la entrada del README&lt;/a> aterrizó el mismo día. La semana anterior, &lt;a href="https://github.com/nostr-protocol/nips/pull/1897">NIP-23 formato largo&lt;/a> definió cómo los documentos HTML se asocian a entidades Nostr mediante un tag &lt;code>&amp;lt;link&amp;gt;&lt;/code> el 24 de mayo, la primitiva de copia web canónica. NIP-25 añadió &lt;a href="https://github.com/nostr-protocol/nips/pull/1702">pistas de relay del objetivo de reacción&lt;/a> el 22 de mayo y &lt;a href="https://github.com/nostr-protocol/nips/pull/1486">descartó la recomendación de emoji-a-like/dislike&lt;/a>, tratando los emojis como unidades semánticas distintas. NIP-52 se &lt;a href="https://github.com/nostr-protocol/nips/pull/1922">simplificó&lt;/a> el 14 de mayo para centrarse en los kinds que los clientes estaban distribuyendo en producción, el recorte que hizo que las extensiones de calendario de Formstr de un año después fueran más limpias de injertar. El 9 de mayo, &lt;a href="https://github.com/nostr-protocol/nips/commit/873afc5fb823f58c3b7f29c5090f9c56172623f2">Follow Packs&lt;/a> (listas de follow curadas kind 39089) y &lt;a href="https://github.com/nostr-protocol/nips/pull/1848">Favorite Relays&lt;/a> (una nueva lista reemplazable bajo NIP-51) entraron en el README el mismo día. El arco del protocolo Marmot aún no había comenzado: solo el repo &lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a> existía (primer commit 9 de septiembre de 2024), y mayo de 2025 fue su fase de prototipo Svelte+Tauri, con el &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/commit/b8e6754">commit del 14 de mayo&lt;/a> eliminando código específico de Tauri mientras el proyecto pivotaba a su arquitectura actual. El núcleo Rust MDK dedicado (12 de septiembre de 2025), el repo de especificación de Marmot (19 de septiembre de 2025) y la UI Flutter (2 de diciembre de 2025) llegaron todos más tarde en el año. Del lado cliente, &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.4.0">Notedeck v0.4.0&lt;/a> de Damus se publicó el 5 de mayo como la primera Beta, graduándose de Alpha con búsqueda de texto completo, el asistente de IA Dave, zaps sobre NWC, GIFs, etiquetado de usuarios y listas de silencio. Dos días después, &lt;a href="https://github.com/coracle-social/flotilla/releases/tag/1.0.0">Flotilla 1.0.0&lt;/a> de hodlbod cruzó el umbral de lanzamiento público como un cliente de chat de grupo basado en NIP-29, junto con &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.12">Coracle 0.6.12&lt;/a>, el primero de seis lanzamientos de Coracle que llegaron hasta &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.17">0.6.17 el 14 de mayo&lt;/a>. &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v3.4.0">Amber v3.4.0&lt;/a> el 12 de mayo abandonó las APIs obsoletas de Android Autofill y ClipboardManager y migró de shared preferences cifradas a DataStore. Primal Android &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/2.2.20">2.2.20&lt;/a> el 20 de mayo añadió el flujo Redeem Code para Primal Premium y una galería de imágenes rediseñada. &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.14.0">nak v0.14.0&lt;/a> el 21 de mayo cortó un menor del CLI canónico la misma semana que los lanzamientos de Coracle, Flotilla y Notedeck. OpenSats recibió su mayor donación no-Bitcoin-treasury hasta la fecha cuando &lt;a href="https://opensats.org/blog/opensats-receives-two-million-donation-from-the-reynolds-foundation">la Reynolds Foundation donó $2 millones&lt;/a> el 22 de mayo.&lt;/p>
&lt;h3 id="mayo-2026">Mayo 2026&lt;/h3>
&lt;p>El mes cubierto en &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/">Newsletter #21&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-13-newsletter/">#22&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-21-newsletter/">#23&lt;/a> y este número. El hilo definitorio es MLS-sobre-Nostr alcanzando producción multi-cliente: &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.8.0">MDK 0.8.0&lt;/a> estrenó primitivas de índice de hoja MIP-05 y key packages direccionables, seguido por &lt;a href="https://github.com/marmot-protocol/mdk/pull/306">PR #306&lt;/a> añadiendo validación de mensajes efímeros NIP-40 en iOS y Android mediante una superficie UniFFI compartida. &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.5.22%2B25">White Noise v2026.5.22+25&lt;/a> estrenó push en iOS mediante una Notification Service Extension que descifra el texto cifrado MLS dentro del proceso de la extensión para que el broker nunca vea texto plano, y dos nuevos clientes Marmot aparecieron: &lt;a href="https://github.com/DavidGershony/Scramble">Scramble&lt;/a> (un cliente de escritorio y Android en .NET/Avalonia con ranuras KeyPackage multi-dispositivo) y &lt;a href="https://cordn.net">Cordn&lt;/a> (una arquitectura MLS alternativa usando un coordinador por grupo sobre ContextVM). Angor migró su mensajería cifrada de NIP-04 a NIP-44 en &lt;a href="https://github.com/block-core/angor/pull/860">PR #860&lt;/a>, cerrando el arco de deprecación que se abrió con &lt;a href="https://github.com/nostr-protocol/nips/pull/574">la propuesta NIP-44 de Paul Miller en mayo de 2023&lt;/a>. El equipo Formstr abrió el envío coordinado de NIP más grande de la memoria reciente el 17 de mayo, con &lt;a href="https://github.com/nostr-protocol/nips/pull/2350">PR #2350&lt;/a> para autoremoción de participantes, &lt;a href="https://github.com/nostr-protocol/nips/pull/2351">PR #2351&lt;/a> para eventos privados de calendario y recurrencia (NIP-52E y NIP-52R), y &lt;a href="https://github.com/nostr-protocol/nips/pull/2352">PR #2352&lt;/a> para programación de citas descentralizada, todos con &lt;a href="https://calendar.formstr.app">calendar.formstr.app&lt;/a> ya distribuyendo la implementación de referencia. &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.11.0">Amethyst v1.11.0&lt;/a> renderizó los calendarios NIP-52 como una categoría de timeline de primera clase y extendió los zaps de Bitcoin en cadena a distribuciones divididas. Un año después de que &lt;a href="https://github.com/nostr-protocol/nips/pull/1494">NIP-77 se fusionara en mayo de 2025&lt;/a>, tres implementaciones independientes estrenaron la adopción de negentropy en la misma ventana: &lt;a href="https://github.com/damus-io/notedeck/pull/1459">Notedeck PR #1459&lt;/a> la conectó al cliente de escritorio de Damus para giftwrap y backfill de hilo, &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.0">Vector v0.4.0&lt;/a> usó sincronización MLS con negentropy completo como parte de su reescritura &lt;code>vector-core&lt;/code> desde cero junto con Tor con un clic y una superficie de agente MCP de 21 herramientas, y &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v3.0.0-pre1">Citrine v3.0.0-pre1&lt;/a> la añadió al relay nativo Android junto con Tor incorporado y agregación multi-relay. &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.17.4">Mostro v0.17.4&lt;/a> cerró el bucle del bono anti-abuso con pagos de bono recortado de la Fase 3 en &lt;a href="https://github.com/MostroP2P/mostro/pull/738">PR #738&lt;/a>, aplicando lo que el protocolo anteriormente solo amenazaba. Tres años desde &amp;ldquo;reemplazamos NIP-04&amp;rdquo; hasta &amp;ldquo;reemplazamos NIP-44 con estado de grupo MLS completo&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;p>Si quieres discutir, envíanos un DM en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #23</title><link>https://nostrcompass.org/es/newsletters/2026-05-21-newsletter/</link><pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-05-21-newsletter/</guid><description>&lt;p>Primal 3.5 estrena un shell de Android reconstruido, Amethyst añade zaps de Bitcoin en cadena, White Noise gana renderizado de markdown y enlaces profundos, Keycast pasa una auditoría de seguridad y AgentNoise te permite controlar agentes de codificación de IA locales sobre chat cifrado con Marmot. Hostr lanza una plataforma P2P de alojamiento en alquiler sobre Nostr con cuatro borradores de NIP que cubren listados, reservas y escrow basado en EVM. Angor migra la mensajería cifrada de NIP-04 a NIP-44, Dart NDK añade NIP-77 y un firmador web, Alby js-sdk v8 estrena reconexión multi-relay nativa para NWC y KeyChat parchea una brecha de secreto hacia adelante en la eliminación de prekeys únicas de Signal. En el lado del protocolo, el bono anti-abuso de Mostro alcanza la Fase 2, Wisp estrena respuestas privadas y reacciones envueltas en gift wrap, y una ola de implementación de NIP-05 sobre Namecoin toca media docena de clientes en una sola semana.&lt;/p></description><content:encoded>&lt;p>Primal 3.5 estrena un shell de Android reconstruido, Amethyst añade zaps de Bitcoin en cadena, White Noise gana renderizado de markdown y enlaces profundos, Keycast pasa una auditoría de seguridad y AgentNoise te permite controlar agentes de codificación de IA locales sobre chat cifrado con Marmot. Hostr lanza una plataforma P2P de alojamiento en alquiler sobre Nostr con cuatro borradores de NIP que cubren listados, reservas y escrow basado en EVM. Angor migra la mensajería cifrada de NIP-04 a NIP-44, Dart NDK añade NIP-77 y un firmador web, Alby js-sdk v8 estrena reconexión multi-relay nativa para NWC y KeyChat parchea una brecha de secreto hacia adelante en la eliminación de prekeys únicas de Signal. En el lado del protocolo, el bono anti-abuso de Mostro alcanza la Fase 2, Wisp estrena respuestas privadas y reacciones envueltas en gift wrap, y una ola de implementación de NIP-05 sobre Namecoin toca media docena de clientes en una sola semana.&lt;/p>
&lt;h2 id="historias-principales">Historias principales&lt;/h2>
&lt;h3 id="primal-35-para-android">Primal 3.5 para Android&lt;/h3>
&lt;p>Primal, el cliente social respaldado por su propia infraestructura de relay de caché, publicó &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.5.9">3.5.9&lt;/a> esta semana con un shell de aplicación reconstruido. El rediseño reemplaza la estructura de navegación anterior por un diseño actualizado y una nueva pantalla Explore, dando a la superficie principal de descubrimiento su propio hogar dedicado. El lanzamiento añade reproducción de audio para las vistas previas de enlaces, para que los archivos de audio incrustados en las notas se reproduzcan en línea sin salir del feed. Las insignias de verificación NIP-05 ahora se muestran en línea en los perfiles, exponiendo la confirmación de identidad de un vistazo. El filtrado de notificaciones recibió una revisión, permitiendo a los usuarios acotar qué tipos de eventos llegan a su lista de notificaciones. El editor ganó un mejor manejo de enlaces a eventos, y la capa de base de datos subyacente recibió correcciones de estabilidad.&lt;/p>
&lt;h3 id="white-noise-markdown-enlaces-profundos-y-metadatos-de-audio">White Noise: markdown, enlaces profundos y metadatos de audio&lt;/h3>
&lt;p>White Noise, la app de mensajería de grupo cifrada con Marmot construida sobre Nostr y MLS (&lt;a href="https://www.rfc-editor.org/rfc/rfc9420">RFC 9420&lt;/a>), tuvo una de sus semanas más ocupadas hasta la fecha en los repositorios frontend y backend.&lt;/p>
&lt;p>En el frontend, &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/665">PR #665&lt;/a> añade renderizado completo de markdown para los mensajes de chat, por lo que negrita, cursiva, bloques de código y enlaces ahora se renderizan de forma nativa en la vista de mensajes. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/675">PR #675&lt;/a> habilita el flujo para abandonar el grupo que anteriormente estaba bloqueado para administradores no-último, y &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/661">PR #661&lt;/a> añade soporte nativo de enlaces profundos para los URIs &lt;code>whitenoise://&lt;/code> y &lt;code>whitenoise-staging://&lt;/code> cubriendo usuarios, chats y ajustes, sin requerir ninguna infraestructura de redirección HTTP.&lt;/p>
&lt;p>En el backend en whitenoise-rs, &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/835">PR #835&lt;/a> hace que la rotación de key packages funcione correctamente reutilizando la ranura &lt;code>d_tag&lt;/code> para publicaciones kind:30443, habilitando la semántica de evento reemplazable NIP-33 para que las rotaciones sucesivas de key packages reemplacen al evento anterior en los relays, manteniendo solo el key package actual. &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/833">PR #833&lt;/a> extiende &lt;code>FileMetadata&lt;/code> con campos opcionales &lt;code>duration_ms&lt;/code> y &lt;code>waveform&lt;/code> para adjuntos de audio, coordinado con &lt;a href="https://github.com/marmot-protocol/mdk/pull/300">PR #300&lt;/a> de MDK que añade los mismos campos a los tags de medios MIP-04. Un nuevo crate &lt;code>whitenoise-markdown&lt;/code> (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/836">PR #836&lt;/a>) reemplaza el analizador de tokens nostr-sdk anterior con una biblioteca dedicada de renderizado de markdown.&lt;/p>
&lt;p>La propia especificación del protocolo Marmot recibió una corrección de seguridad en &lt;a href="https://github.com/marmot-protocol/marmot/pull/68">PR #68&lt;/a>, que cierra un problema de seguridad al especificar explícitamente HKDF-SHA256 para las derivaciones de clave de imagen en MIP-01, eliminando la ambigüedad que podría llevar a la divergencia en las implementaciones. En MDK, &lt;a href="https://github.com/marmot-protocol/mdk/pull/307">PR #307&lt;/a> sanea las razones de fallo de bienvenida y limita la longitud almacenada, cerrando un hallazgo de seguridad separado.&lt;/p>
&lt;h3 id="amethyst-v1100-zaps-de-bitcoin-en-cadena">Amethyst v1.10.0: zaps de Bitcoin en cadena&lt;/h3>
&lt;p>Amethyst publicó cuatro lanzamientos esta semana, con &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.10.0">v1.10.0&lt;/a> como titular. El lanzamiento añade soporte para zaps de Bitcoin en cadena NIP-BC, permitiendo a los usuarios enviar, recibir y mostrar zaps liquidados directamente en cadena mediante transacciones de Bitcoin. Los lanzamientos anteriores de la serie corrigieron la detección de blobs Blossom para rechazar nombres de archivo no conformes (&lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.09.2">v1.09.2&lt;/a>), parchearon las reglas de ProGuard para las compilaciones de escritorio y fusionaron el pull request &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2977">#2977&lt;/a> para mostrar a los zappers de Bitcoin en cadena como una fila ₿ dedicada en la galería expandida de reacciones. Una pantalla de historial de transacciones en cadena con paginación en curso aterrizó en &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2974">PR #2974&lt;/a>.&lt;/p>
&lt;h3 id="agentnoise-controla-agentes-de-codificación-sobre-white-noise">AgentNoise: controla agentes de codificación sobre White Noise&lt;/h3>
&lt;p>&lt;a href="https://github.com/nvk/agentnoise">AgentNoise&lt;/a> de nvk es un ayudante de escritorio nativo en Rust que te permite usar un teléfono con White Noise como superficie de control para sesiones de agentes de codificación locales de Codex y Claude. La herramienta escucha uno o más chats de White Noise, autentica a los remitentes mediante un flujo PIN de primer emparejamiento y lanza agentes de codificación locales a través del launcher configurado. Enviar &lt;code>/claude &amp;lt;prompt&amp;gt;&lt;/code> desde tu teléfono abre una nueva sesión de trabajo de White Noise nombrada por el hostname de la máquina y un breve resumen del prompt, luego transmite actualizaciones de progreso y la salida final de vuelta a ese chat. Es intencionalmente Rust-primero y mantiene Node fuera del camino del puente de confianza. El proyecto alcanzó &lt;a href="https://github.com/nvk/agentnoise/releases/tag/v0.1.24">v0.1.24&lt;/a> esta semana, añadiendo respuestas más cortas legibles en teléfono, referencias a trabajos por prefijo corto único y un observador opcional de sesiones locales. AgentNoise ejecuta los CLIs &lt;code>wn&lt;/code> y &lt;code>wnd&lt;/code> de &lt;code>marmot-protocol/whitenoise-rs&lt;/code> como subprocesos, por lo que comparte su transporte Nostr con el propio cliente White Noise.&lt;/p>
&lt;h3 id="auditoría-de-seguridad-de-keycast-completada">Auditoría de seguridad de Keycast completada&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/keycast">Keycast&lt;/a>, el servidor de firma remota NIP-46 orientado a equipos que almacena las claves privadas Nostr cifradas en reposo en SQLite, completó una auditoría de seguridad en mayo de 2026. La pasada de endurecimiento abordó problemas de autenticación, permisos, integridad de datos y dependencias, y los resultados están documentados en &lt;a href="https://github.com/marmot-protocol/keycast/blob/master/AUDIT.md">AUDIT.md&lt;/a>. Los cambios incluyen: la autenticación HTTP NIP-98 ahora requiere exactamente un tag &lt;code>u&lt;/code> y un tag &lt;code>method&lt;/code>, rechaza timestamps obsoletos y valida los hashes de &lt;code>payload&lt;/code>; la lista de permitidos &lt;code>ALLOWED_PUBKEYS&lt;/code> se analiza exactamente y se aplica del lado del servidor; las políticas vacías ahora deniegan por defecto las solicitudes de sign/encrypt/decrypt; la aplicación de claves foráneas está habilitada en las conexiones SQLite; y las rutas de aplicación anidadas como &lt;code>/teams/:id&lt;/code> están protegidas del lado del servidor. Una migración SQL normaliza el JSON de permisos de kinds permitidos antiguo al arranque. El proyecto sigue en fase temprana y la auditoría anota elementos residuales antes de confiarle claves reales de equipo.&lt;/p>
&lt;h3 id="scramble-cliente-marmot-para-escritorio-y-android">Scramble: cliente Marmot para escritorio y Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/DavidGershony/Scramble">Scramble&lt;/a> (antes OpenChat) es un cliente de escritorio y Android en .NET/Avalonia para el &lt;a href="https://nostrcompass.org/es/topics/marmot/">protocolo Marmot&lt;/a>, implementando los MIPs 00-04: publicación de KeyPackage (kind:30443), metadatos de grupo con la extensión MLS NostrGroupData, eventos de bienvenida envueltos en gift wrap NIP-59 (kind:444), mensajes cifrados ChaCha20-Poly1305 (kind:445) y adjuntos de medios cifrados con Blossom. Es totalmente interoperable con White Noise y cualquier otro cliente compatible con Marmot.&lt;/p>
&lt;p>El proyecto publicó 13 lanzamientos esta semana, con soporte multi-dispositivo como característica principal. Cada dispositivo genera una ranura KeyPackage única (un tag &lt;code>d&lt;/code> en kind:30443). Al arranque, Scramble obtiene los KeyPackages propios del usuario desde los relays, detecta los IDs de ranura de los dispositivos pares y los añade automáticamente a los grupos MLS existentes usando el flujo de commit por etapas. La adición automática está restringida a los grupos donde el usuario actual es admin; los grupos no-admin se saltan con una guía para pedir al admin del grupo. Un banner de divulgación de secreto hacia adelante informa a los dispositivos recién enlazados que los mensajes antiguos no están disponibles. Una pasada de reconciliación de ID de ranura (&lt;code>TryReconcileSlotId&lt;/code>) maneja dispositivos migrados desde versiones pre-multi-dispositivo emparejando los bytes de KeyPackage del relay contra el material clave local para adoptar el tag &lt;code>d&lt;/code> correcto. La reconexión del firmador externo para usuarios de Amber y NIP-46 también se corrigió: el guardia &lt;code>IsConnected&lt;/code> que bloqueaba la reconexión automática incorporada de &lt;code>ExternalSignerService&lt;/code> se eliminó en los nueve sitios de llamada en &lt;code>NostrService&lt;/code>.&lt;/p>
&lt;h3 id="hostr-alojamiento-en-alquiler-p2p-sobre-nostr">Hostr: alojamiento en alquiler P2P sobre Nostr&lt;/h3>
&lt;p>&lt;a href="https://hostr.network">Hostr&lt;/a> (&lt;a href="https://github.com/sudonym-btc/hostr">fuente&lt;/a>) es una plataforma peer-to-peer de alojamiento en alquiler construida enteramente sobre Nostr. Cubre el flujo completo estilo Airbnb (buscar y listar propiedades, negociar reservas y liquidar pagos) usando cuatro borradores de NIP que el proyecto está desarrollando en paralelo con la aplicación.&lt;/p>
&lt;p>El NIP de alojamiento extiende los listados clasificados de &lt;a href="https://github.com/nostr-protocol/nips/blob/master/99.md">NIP-99&lt;/a> (kind:30402 activo, kind:30403 borrador) con tags específicos de alojamiento para tipo (&lt;code>room&lt;/code>, &lt;code>house&lt;/code>, &lt;code>apartment&lt;/code>, &lt;code>villa&lt;/code>, &lt;code>hotel&lt;/code>, &lt;code>hostel&lt;/code>, &lt;code>resort&lt;/code>), horas de check-in/check-out, estancia mínima e índices de celdas geoespaciales H3 para búsqueda basada en ubicación con precisión configurable. El NIP de reservas define un protocolo completo de negociación y ciclo de vida: los eventos de reserva reemplazables kind:32122 llevan un ID de intercambio &lt;code>d&lt;/code>, un tag &lt;code>a&lt;/code> de anclaje al listado y tags &lt;code>p&lt;/code> de participantes con roles (&lt;code>buyer&lt;/code>, &lt;code>seller&lt;/code>, &lt;code>escrow&lt;/code>); los rumores de mensajes estructurados kind:1327 entregan contraofertas privadas en la etapa de negociación mediante gift wraps NIP-59 para que la negociación quede fuera de los relays públicos; los eventos de transición append-only kind:1326 crean una traza de auditoría pública una vez que una reserva se compromete. La privacidad del comprador se preserva mediante claves Nostr temporales por intercambio vinculadas a la identidad real del comprador mediante tags &lt;code>participant_proof&lt;/code> cifrados. El NIP de escrow define los anuncios de servicios de escrow kind:30303 y las declaraciones de confianza del usuario kind:17388; la implementación de referencia usa contratos inteligentes EVM en Rootstock, con &lt;code>contractBytecodeHash&lt;/code> permitiendo a los clientes verificar que el contrato desplegado coincide con una implementación auditada conocida. El NIP de listado de marketplace define tags genéricos compartidos entre todos los perfiles de marketplace NIP-99, incluidos &lt;code>instantBook&lt;/code>, &lt;code>negotiable&lt;/code>, &lt;code>quantity&lt;/code>, &lt;code>securityDeposit&lt;/code>, &lt;code>cancellationPolicy&lt;/code> y &lt;code>maxDisputePeriod&lt;/code>. Esta semana el proyecto preparó su envío a las app stores y fusionó soporte de identidad de cliente MCP para automatización orientada a agentes.&lt;/p>
&lt;p>Dos nuevas entradas aparecieron en la plataforma Shakespeare MiniApps esta semana: &lt;a href="https://inkpress.shakespeare.wtf">InkPress&lt;/a>, un generador de revistas con IA que publica contenido estructurado tipo revista como eventos Nostr, y &lt;a href="https://pressstr.shakespeare.wtf">PressStr&lt;/a>, una plataforma de escritura y publicación para la pila Soapbox.&lt;/p>
&lt;h2 id="publicando-esta-semana">Publicando esta semana&lt;/h2>
&lt;h3 id="ngit-v244">ngit v2.4.4&lt;/h3>
&lt;p>&lt;strong>ngit&lt;/strong> publicó &lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.4">v2.4.4&lt;/a>, añadiendo &lt;code>ngit sync --trust-server&lt;/code> (&lt;code>-t&lt;/code>) para casos en que un servidor git está por delante en fast-forward respecto al estado de Nostr. Cuando se detecta esta situación, sync reporta los refs afectados y requiere la bandera para firmar y publicar un evento de estado actualizado; un ajuste de configuración de git &lt;code>nostr.trust-server-domains&lt;/code> proporciona una lista blanca separada por punto y coma para servidores que deben ser confiados automáticamente sin la bandera.&lt;/p>
&lt;h3 id="amber-v610-pre3-añade-firma-psbt">Amber v6.1.0-pre3 añade firma PSBT&lt;/h3>
&lt;p>&lt;strong>Amber&lt;/strong> publicó &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.1.0-pre3">v6.1.0-pre3&lt;/a> con un mejor diseño para nuevas conexiones de apps, correcciones de crashes y una opción de seleccionar/deseleccionar todo en la pantalla de permisos. &lt;a href="https://github.com/greenart7c3/Amber/pull/438">PR #438&lt;/a> añade soporte para firmar PSBT a través de las rutas basadas en Intent y basadas en relay NIP-46, permitiendo a Amber firmar Partially Signed Bitcoin Transactions sin exponer el nsec a la app solicitante.&lt;/p>
&lt;h3 id="wisp-v110-estrena-respuestas-privadas-y-elimina-soporte-para-amber">Wisp v1.1.0 estrena respuestas privadas y elimina soporte para Amber&lt;/h3>
&lt;p>&lt;strong>Wisp&lt;/strong> publicó &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.1.0">v1.1.0&lt;/a> con respuestas privadas mediante gift wrap NIP-17 (&lt;a href="https://github.com/barrydeen/wisp/pull/540">PR #540&lt;/a>), reacciones envueltas en gift wrap y zaps DIP-03 en respuestas privadas (&lt;a href="https://github.com/barrydeen/wisp/pull/543">PR #543&lt;/a>), traducción automática para notas (&lt;a href="https://github.com/barrydeen/wisp/pull/523">PR #523&lt;/a>) y una entrada fiat estilo registro en el diálogo de zap. &lt;a href="https://github.com/barrydeen/wisp/pull/541">PR #541&lt;/a> migra los zaps privados de un esquema casero de texto plano en DM-relay a DIP-03 con enrutado adecuado de DM-relay. El mismo ciclo de lanzamiento eliminó el soporte del firmador remoto NIP-55 (&lt;a href="https://github.com/barrydeen/wisp/pull/531">PR #531&lt;/a>), descartando las integraciones con Amber y otros firmadores externos, y eliminó el relay local incorporado (&lt;a href="https://github.com/barrydeen/wisp/pull/533">PR #533&lt;/a>). Wisp es un cliente social Nostr para Android.&lt;/p>
&lt;h3 id="calendar-by-formstr-v154-corrige-gift-wrap-para-nuevos-participantes">Calendar by Formstr v1.5.4 corrige gift wrap para nuevos participantes&lt;/h3>
&lt;p>&lt;strong>Calendar by Formstr&lt;/strong> publicó &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.5.4">v1.5.4&lt;/a> (el último de una secuencia v1.5.2 → v1.5.4). &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/160">PR #160&lt;/a> corrige un bug donde editar un evento privado de calendario con nuevos participantes publicaba el evento actualizado con las nuevas pubkeys en tags &lt;code>p&lt;/code> pero nunca creaba ni entregaba invitaciones gift wrap a esos participantes, rompiendo el flujo de invitación para adiciones de última hora. &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/156">PR #156&lt;/a> añade manejo de errores alrededor del descifrado de eventos privados para que los clientes ya no lancen excepciones en eventos indescifrables, y &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/138">PR #138&lt;/a> corrige tiempos de eventos recurrentes que se desviaban entre zonas horarias.&lt;/p>
&lt;h3 id="applesauce-v610-añade-git-casts-nip-34-y-relays-de-búsqueda-nip-51">Applesauce v6.1.0 añade git casts NIP-34 y relays de búsqueda NIP-51&lt;/h3>
&lt;p>&lt;strong>Applesauce&lt;/strong> publicó &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%406.1.0">v6.1.0&lt;/a> a través de sus paquetes con soporte significativo para NIP-34 (git-sobre-Nostr): applesauce-common añade nuevos casts &lt;code>GitRepository&lt;/code>, &lt;code>GitGraspList&lt;/code> y &lt;code>FavoriteGitRepos&lt;/code> más las fábricas correspondientes, y expone las propiedades reactivas &lt;code>User.favoriteGitRepos$&lt;/code>, &lt;code>User.gitAuthors$&lt;/code> y &lt;code>User.graspServers$&lt;/code> para que las aplicaciones puedan listar los repos git seguidos de un usuario, los mantenedores de repos y los servidores GRASP configurados directamente desde el mismo objeto User. El mismo lanzamiento añade soporte para listas de relays de búsqueda kind 10086 NIP-51, una adición reciente a la familia de listas de relays usada para descubrir dónde encontrar datos específicos. applesauce-core gana &lt;code>replaceableAddress&lt;/code> en &lt;code>EventCast&lt;/code> para búsqueda de direcciones reemplazables NIP-01, más &lt;code>pointer&lt;/code>, &lt;code>kind&lt;/code> y un ayudante &lt;code>getReplaceableAddressForEvent&lt;/code>, y añade un método &lt;code>timeline$()&lt;/code> en el cast base &lt;code>User&lt;/code>. &lt;a href="https://github.com/hzrd149/applesauce/pull/73">PR #73&lt;/a> corrige los métodos manuales del pool que silenciosamente descartaban relays offline.&lt;/p>
&lt;h3 id="sprout-v0016-estrena-el-binario-sprig-y-huddle-protocol-v2">Sprout v0.0.16 estrena el binario Sprig y huddle protocol v2&lt;/h3>
&lt;p>&lt;strong>Sprout&lt;/strong> de Block, un workspace de equipo basado en relay Nostr auto-alojado donde humanos y agentes de IA comparten las mismas salas y registro de eventos, publicó &lt;a href="https://github.com/block/sprout/releases/tag/v0.0.16">v0.0.16&lt;/a> de la app de escritorio junto con compilaciones rodantes del nuevo binario todo-en-uno Sprig (&lt;a href="https://github.com/block/sprout/pull/605">PR #605&lt;/a>), que empaqueta el arnés ACP, el agente y el MCP de desarrollador en un único binario estilo busybox para despliegue sencillo. La bandera &lt;code>--no-memory&lt;/code> añadida en &lt;a href="https://github.com/block/sprout/pull/611">PR #611&lt;/a> permite a los operadores deshabilitar la inyección de memoria central NIP-AE para el arnés ACP. En el lado de tiempo real, &lt;a href="https://github.com/block/sprout/pull/609">PR #609&lt;/a> extiende el protocolo de voz huddle a un encabezado de trama v2 que soporta hasta 10 pares simultáneos.&lt;/p>
&lt;h3 id="nostrord-v103-añade-os-keychain-y-multi-cuenta">Nostrord v1.0.3 añade OS keychain y multi-cuenta&lt;/h3>
&lt;p>&lt;strong>Nostrord&lt;/strong> publicó &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v1.0.3">v1.0.3&lt;/a> con almacenamiento de claves local endurecido usando el keychain del OS y respaldo por frase de contraseña, soporte multi-cuenta y un código QR de bunker tocable que abre la app del firmador en Android.&lt;/p>
&lt;h3 id="angor-migra-a-nip-44-y-estrena-endurecimiento-de-seguridad">Angor migra a NIP-44 y estrena endurecimiento de seguridad&lt;/h3>
&lt;p>&lt;strong>Angor&lt;/strong>, la app de crowdfunding en Bitcoin construida sobre Nostr y Taproot, publicó tres lanzamientos inestables esta semana (&lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.24">v0.2.24&lt;/a>, &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.25">v0.2.25&lt;/a> y &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.26">v0.2.26&lt;/a>) con un conjunto de cambios de endurecimiento de seguridad e integración con Nostr. &lt;a href="https://github.com/block-core/angor/pull/860">PR #860&lt;/a> migra la mensajería cifrada Nostr de NIP-04 a NIP-44, reemplazando el esquema basado en XOR obsoleto con cifrado ChaCha20-Poly1305. &lt;a href="https://github.com/block-core/angor/pull/861">PR #861&lt;/a> permite subidas de medios Blossom sin una wallet seleccionada usando una clave de autenticación Nostr efímera, desbloqueando subidas para usuarios que aún no han conectado una wallet. La serie de seguridad abordó varias categorías endurecidas: &lt;a href="https://github.com/block-core/angor/pull/854">PR #854&lt;/a> añade seguridad de tipos para AngorKey y protección de memoria de mnemónicos, &lt;a href="https://github.com/block-core/angor/pull/856">PR #856&lt;/a> aplica validación a nivel de protocolo para timelocks, tasas de comisión, umbrales de dust y reglas de penalización, y &lt;a href="https://github.com/block-core/angor/pull/851">PR #851&lt;/a> aplica endurecimiento no rupturista en ocho categorías de severidad media y baja. &lt;a href="https://github.com/block-core/angor/pull/859">PR #859&lt;/a> corrige la compatibilidad con GrapheneOS habilitando la compilación AOT y eliminando la generación de código en tiempo de ejecución, y &lt;a href="https://github.com/block-core/angor/pull/855">PR #855&lt;/a> evita la pérdida de wallet al hacer swipe-kill en Android persistiendo el estado de la wallet antes de que el OS termine el proceso.&lt;/p>
&lt;h3 id="alby-js-sdk-v80-estrena-reconexión-multi-relay-nwc">Alby js-sdk v8.0 estrena reconexión multi-relay NWC&lt;/h3>
&lt;p>&lt;strong>Alby js-sdk&lt;/strong> publicó la línea v8.0 (de &lt;a href="https://github.com/getAlby/js-sdk/releases/tag/v8.0.1">v8.0.1&lt;/a> a &lt;a href="https://github.com/getAlby/js-sdk/releases/tag/v8.0.3">v8.0.3&lt;/a>) con soporte para suscripción NWC multi-relay. &lt;a href="https://github.com/getAlby/js-sdk/pull/516">PR #516&lt;/a> actualiza la dependencia nostr-tools y habilita la reconexión automática nativa entre múltiples relays, reemplazando el enfoque de polling anterior con lógica de reconexión nativa de relay. &lt;a href="https://github.com/getAlby/js-sdk/pull/542">PR #542&lt;/a> reemplaza todas las llamadas &lt;code>console.debug&lt;/code> con una interfaz de logger inyectable para que los desarrolladores de aplicaciones puedan enrutar los diagnósticos del SDK a través de su propia infraestructura de logging. El lanzamiento elimina el polyfill de WebSocket, requiriendo Node.js 22 o superior para los consumidores del lado del servidor. v8.0.2 añadió una corrección para un bug de importación de crypto utils que rompía ciertos bundlers.&lt;/p>
&lt;h3 id="keychat-v1411-corrige-el-secreto-hacia-adelante">KeyChat v1.41.1 corrige el secreto hacia adelante&lt;/h3>
&lt;p>&lt;strong>KeyChat&lt;/strong>, una app de mensajería que combina el protocolo Signal con transporte de relay Nostr, publicó &lt;a href="https://github.com/keychat-io/keychat-app/releases/tag/v1.41.1&amp;#43;6513">v1.41.1+6513&lt;/a>. La corrección destacada aplica el secreto hacia adelante eliminando las prekeys únicas de Signal inmediatamente después de un descifrado exitoso, cerrando una brecha donde una prekey retenida podía usarse para descifrar mensajes pasados si el dispositivo era comprometido posteriormente. El lanzamiento también añade vista previa de URL para mensajes que consisten en un único enlace, centraliza la descarga automática de medios bajo un nuevo &lt;code>FileDownloadManager&lt;/code> con un umbral automático de 20 MB y refactoriza la obtención de info de relay NIP-11 para forzar el refresco en arranque en frío para que las configuraciones de tarifas de relays de pago siempre se carguen correctamente.&lt;/p>
&lt;h2 id="en-desarrollo">En desarrollo&lt;/h2>
&lt;p>&lt;strong>Citrine&lt;/strong> fusionó &lt;a href="https://github.com/greenart7c3/Citrine/pull/151">PR #151&lt;/a> implementando la aplicación de NIP-70: el relay Android ahora bloquea los reposts que incrustan contenido de evento protegido, como requiere la especificación. &lt;a href="https://github.com/greenart7c3/Citrine/pull/149">PR #149&lt;/a> añade acciones de visualización y copia para múltiples direcciones de conexión, localhost, Wi-Fi local y Tor, desde la pantalla de configuración del relay. &lt;a href="https://github.com/greenart7c3/Citrine/pull/141">PR #141&lt;/a> añade manejo de desafío AUTH NIP-42 mediante integración con firmador externo con Amber.&lt;/p>
&lt;p>&lt;strong>Mostro&lt;/strong> alcanzó la Fase 2 del despliegue de su bono anti-abuso. &lt;a href="https://github.com/MostroP2P/mostro/pull/737">PR #737&lt;/a> aterriza la lógica de recorte de disputas dirigida por el solucionador: los manejadores de admin ahora consumen la carga útil &lt;code>BondResolution&lt;/code> de mostro-core, permitiendo a un admin recortar el bono de cualquiera de las partes al resolver una disputa. La Fase 1.5, fusionada en &lt;a href="https://github.com/MostroP2P/mostro/pull/736">PR #736&lt;/a>, introdujo una acción dedicada &lt;code>PayBondInvoice&lt;/code> y un estado &lt;code>WaitingTakerBond&lt;/code>, separando el pago del bono anti-abuso del tomador del pago del intercambio del comprador. El cliente móvil añadió la UX completa de la Fase 1.5 en &lt;a href="https://github.com/MostroP2P/mobile/pull/592">PR #592&lt;/a>. Mostro es un protocolo de intercambio de Bitcoin peer-to-peer construido sobre Nostr.&lt;/p>
&lt;p>&lt;strong>Damus&lt;/strong> fusionó &lt;a href="https://github.com/damus-io/damus/pull/3773">PR #3773&lt;/a> restaurando el indicador de señal de relay, y &lt;a href="https://github.com/damus-io/damus/pull/3775">PR #3775&lt;/a> corrige relays que rechazaban reconectar tras un fallo de conexión inicial.&lt;/p>
&lt;p>&lt;strong>rust-nostr&lt;/strong> fusionó &lt;a href="https://github.com/rust-nostr/nostr/pull/1358">PR #1358&lt;/a> añadiendo traits de finalización de eventos y builders de eventos específicos de NIP, facilitando la construcción de eventos con tipado correcto para funciones de protocolo específicas. &lt;a href="https://github.com/rust-nostr/nostr/pull/1363">PR #1363&lt;/a> backportea una corrección que asegura que el firmador NIP-46 se suscribe a notificaciones antes de enviar la respuesta de conexión, cerrando una condición de carrera donde los mensajes del cliente que llegaban inmediatamente después de connect podían perderse.&lt;/p>
&lt;p>&lt;strong>dart-nostr&lt;/strong> fusionó &lt;a href="https://github.com/ethicnology/dart-nostr/pull/44">PR #44&lt;/a> añadiendo un resolvedor de relay Namecoin &lt;code>.bit&lt;/code> y registros TLSA pin, permitiendo a las aplicaciones Flutter resolver URLs de relay &lt;code>wss://example.bit/&lt;/code> a través de DNS Namecoin a sus direcciones WebSocket reales.&lt;/p>
&lt;p>&lt;strong>Dart NDK&lt;/strong> (el kit de desarrollo Nostr para Dart/Flutter, ahora en &lt;code>relaystr/ndk&lt;/code>) fusionó &lt;a href="https://github.com/relaystr/ndk/pull/464">PR #464&lt;/a> implementando NIP-77, el protocolo de firma de eventos offline. En el lado del firmador, &lt;a href="https://github.com/relaystr/ndk/pull/602">PR #602&lt;/a> y &lt;a href="https://github.com/relaystr/ndk/pull/601">PR #601&lt;/a> añaden un firmador de eventos específico para web y una abstracción &lt;code>PlatformEventVerifier&lt;/code>, permitiendo que las apps Flutter web usen el firmador de plataforma sin una ruta de código separada; &lt;a href="https://github.com/relaystr/ndk/pull/604">PR #604&lt;/a> introduce una fábrica de firmadores de eventos para selección de firmador en tiempo de ejecución. &lt;a href="https://github.com/relaystr/ndk/pull/608">PR #608&lt;/a> añade &lt;code>getDmRelays()&lt;/code> para obtener la lista de relays de DM NIP-17 de un usuario (kind:10050), y &lt;a href="https://github.com/relaystr/ndk/pull/600">PR #600&lt;/a> corrige la preservación de campos firmados NIP-46 para que los firmadores remotos no pierdan campos en el ida y vuelta.&lt;/p>
&lt;p>&lt;strong>Pages by Form*&lt;/strong> (&lt;a href="https://github.com/formstr-hq/nostr-docs">repo&lt;/a>), la app de documentos colaborativos nativa de Nostr de Formstr alojada en &lt;a href="https://pages.formstr.app">pages.formstr.app&lt;/a>, fusionó cuatro PRs esta semana endureciendo los flujos de adjuntos cifrados y de gestión de documentos. &lt;a href="https://github.com/formstr-hq/nostr-docs/pull/37">PR #37&lt;/a> corrige imágenes faltantes en las exportaciones DOCX, HTML y PDF incrustando adjuntos cifrados: obtiene los blobs &lt;code>&amp;lt;encrypted-file&amp;gt;&lt;/code> de los servidores Blossom, los descifra con AES-GCM 256-bit usando la clave y nonce almacenados, valida el tipo MIME de la imagen y los convierte a URLs de datos base64 para que las exportaciones preserven las imágenes que solo existen en Blossom en forma cifrada. &lt;a href="https://github.com/formstr-hq/nostr-docs/pull/39">PR #39&lt;/a> añade un mecanismo de búsqueda de documentos local, &lt;a href="https://github.com/formstr-hq/nostr-docs/pull/38">PR #38&lt;/a> limpia el flujo de renombrado y &lt;a href="https://github.com/formstr-hq/nostr-docs/pull/40">PR #40&lt;/a> corrige el manejo de copias de seguridad compartidas.&lt;/p>
&lt;p>&lt;strong>Zap Cooking&lt;/strong> fusionó &lt;a href="https://github.com/zapcooking/frontend/pull/396">PR #396&lt;/a>, la primera fase de una revisión del feed que sienta las bases de las primitivas de renderizado de feed sin ningún cambio visible aún para el usuario. El PR introduce un analizador de tags &lt;code>imeta&lt;/code> NIP-92 que lee los slots &lt;code>url&lt;/code>, &lt;code>m&lt;/code> (MIME), &lt;code>dim&lt;/code> (dimensiones), &lt;code>blurhash&lt;/code>, &lt;code>alt&lt;/code>, &lt;code>x&lt;/code> (hash de archivo) y &lt;code>fallback&lt;/code>, más un decodificador de blurhash canónico portado a mano (~200 LOC) que produce URLs de datos PNG mediante canvas con un respaldo null seguro para SSR. Cuando los tags &lt;code>imeta&lt;/code> están ausentes, el analizador recae en extraer URLs raw de imagen y vídeo del contenido del evento usando las mismas heurísticas que el feed actual ya usa.&lt;/p>
&lt;p>&lt;strong>Nurunuru&lt;/strong> (ぬるぬる, &lt;code>tami1A84/null--nostr&lt;/code>), un cliente Nostr con variantes nativas Android, iOS y Web que comparten un motor Rust FFI, fusionó su sincronización v1.5.0 Native → Web en &lt;a href="https://github.com/tami1A84/null--nostr/pull/176">PR #176&lt;/a>. La sincronización trae varias adiciones de características a la compilación Web que ya se publicaron en Android v1.4.9 e iOS 1.0.4: el &lt;a href="https://github.com/tami1A84/null--nostr/pull/176">NotificationModal&lt;/a> ahora expone notificaciones de cumpleaños, detección de zaps de seguimiento mutuo y notificaciones de reacciones con emoji personalizado; el selector de reacciones descarta la fila rápida de reacciones Unicode por defecto y centra la UX en el emoji personalizado; el motor de recomendaciones en &lt;code>lib/recommendation.js&lt;/code> filtra usuarios sin iconos o nombres de visualización y prioriza las entradas Following con Recommended cargándose en segundo plano. La entrada de voz es la única característica que va en la dirección opuesta: la compilación Web ya usa ElevenLabs Scribe streaming, y v1.5.0 sincroniza parcialmente el lado Native al &lt;code>SpeechRecognizer&lt;/code> estándar del OS (Android) y &lt;code>SFSpeechRecognizer&lt;/code> + &lt;code>AVAudioEngine&lt;/code> (iOS) mientras la integración Native Scribe completa se difiere a v1.6.&lt;/p>
&lt;h2 id="trabajo-de-protocolo-y-especificación">Trabajo de protocolo y especificación&lt;/h2>
&lt;p>&lt;strong>PR &lt;a href="https://github.com/nostr-protocol/nips/pull/2251">#2251&lt;/a>&lt;/strong> endurece la especificación de eventos protegidos NIP-70: ahora indica explícitamente que los reposts que incrustan el contenido completo de un evento protegido deben ser rechazados por los relays. NIP-70 define el tag &lt;code>-&lt;/code> que señala que un autor de nota no consiente que su nota sea republicada. La especificación original cubría el comportamiento de filtrado del relay, pero dejaba el caso de repost ambiguo. Este PR cierra esa brecha. El &lt;a href="https://github.com/greenart7c3/Citrine/pull/151">PR #151&lt;/a> de Citrine implementa la aplicación en el lado del relay esta misma semana.&lt;/p>
&lt;p>&lt;strong>PR &lt;a href="https://github.com/nostr-protocol/nips/pull/1653">#1653&lt;/a>&lt;/strong> propone un NIP de Drafts para guardar y sincronizar eventos borradores privados. La propuesta usa eventos reemplazables con un estado &lt;code>draft&lt;/code> y cifrado NIP-44 a la propia clave del autor, permitiendo a los clientes guardar trabajos en progreso en los relays sin que esos eventos sean visibles para nadie más. El evento borrador lleva el evento completo de publicación pretendida como contenido cifrado, incluidos su kind y tags eventuales.&lt;/p>
&lt;p>&lt;strong>Snapshots (&lt;a href="https://github.com/nostr-protocol/nips/pull/2279">PR #2279&lt;/a>)&lt;/strong> es una propuesta abierta para definir un evento snapshot inmutable para preservar una versión exacta de un evento Nostr reemplazable. El evento snapshot lleva el contenido completo del evento reemplazable en un punto dado en el tiempo, con un tag &lt;code>a&lt;/code> enlazándolo de vuelta a la dirección del evento reemplazable para que todas las versiones históricas sean consultables juntas. Esto hace posible que los observadores inspeccionen el estado histórico incluso después de que los relays dejen de retener versiones antiguas.&lt;/p>
&lt;p>&lt;strong>Ola de NIP-05 Namecoin:&lt;/strong> Esta semana vio un impulso coordinado para añadir resolución NIP-05 &lt;code>.bit&lt;/code> a los clientes Nostr. El feed de discusión de NIPs capturó PRs de código abierto contra Aegis (&lt;a href="https://github.com/ZharlieW/Aegis/pull/14">#14&lt;/a>, que añade verificación en tiempo de firma en el firmador), nostter (&lt;a href="https://github.com/SnowCait/nostter/pull/2128">#2128&lt;/a>) y dart-nostr (&lt;a href="https://github.com/ethicnology/dart-nostr/pull/44">#44&lt;/a>), junto con un borrador NIP upstream (&lt;a href="https://github.com/nostr-protocol/nips/pull/2349">PR #2349&lt;/a>). El PR de Aegis es notable por colocar la verificación en el lado del productor: el firmador comprueba la cadena Namecoin antes de firmar cualquier evento kind:0 que reclame una identidad &lt;code>.bit&lt;/code> y advierte al usuario ante discrepancias, atrapando el problema antes de que el evento llegue a ningún relay.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-07-windownostr-para-navegadores-web">NIP Deep Dive: NIP-07 (window.nostr para navegadores web)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/07.md">NIP-07&lt;/a> define la interfaz &lt;code>window.nostr&lt;/code> que las extensiones de navegador exponen a las aplicaciones web. Es la interfaz de firmador más ampliamente desplegada en la web, implementada por extensiones como Alby, nos2x, Flamingo y horse.&lt;/p>
&lt;p>La interfaz tiene dos métodos requeridos y varios opcionales. &lt;code>window.nostr.getPublicKey()&lt;/code> devuelve la clave pública del usuario como una cadena hexadecimal sin exponer nunca la clave privada a la página que llama. &lt;code>window.nostr.signEvent(event)&lt;/code> toma un evento parcial con &lt;code>created_at&lt;/code>, &lt;code>kind&lt;/code>, &lt;code>tags&lt;/code> y &lt;code>content&lt;/code>, y devuelve el evento firmado completo con &lt;code>id&lt;/code>, &lt;code>pubkey&lt;/code> y &lt;code>sig&lt;/code> añadidos. El punto clave es que la clave privada nunca abandona el contexto aislado de la extensión; la aplicación web envía un evento no firmado y recibe uno firmado de vuelta.&lt;/p>
&lt;p>Los métodos opcionales cubren el cifrado: &lt;code>window.nostr.nip04.encrypt&lt;/code> y &lt;code>window.nostr.nip04.decrypt&lt;/code> para el esquema NIP-04 más antiguo (ahora obsoleto), y &lt;code>window.nostr.nip44.encrypt&lt;/code> y &lt;code>window.nostr.nip44.decrypt&lt;/code> para el esquema NIP-44 actual. Las extensiones que soportan NIP-44 pueden por tanto manejar tanto el cifrado de mensajes directos como cualquier otra aplicación que necesite cifrado con clave por pubkey sin que la página que llama vea el nsec.&lt;/p>
&lt;p>La especificación también incluye una recomendación para los autores de extensiones: cargar los scripts con &lt;code>&amp;quot;run_at&amp;quot;: &amp;quot;document_end&amp;quot;&lt;/code> en el manifiesto de la extensión para que &lt;code>window.nostr&lt;/code> esté disponible síncronamente cuando la página carga, evitando condiciones de carrera donde un cliente comprueba &lt;code>window.nostr&lt;/code> antes de que la extensión lo haya inyectado.&lt;/p>
&lt;p>Un ejemplo clave de NIP-07 en acción es el proyecto Keycast cubierto arriba. El frontend web de Keycast usa NIP-07 para firmar eventos de autenticación HTTP NIP-98: la app SvelteKit nunca maneja el nsec del usuario directamente. Llama a &lt;code>window.nostr.signEvent&lt;/code> para producir el encabezado de autenticación, luego envía ese encabezado a la API de Keycast. Esta arquitectura significa que el material clave permanece en la extensión del navegador durante todo el flujo de gestión de claves del equipo.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;7f8e9d0c1b2a3e4f5d6c7b8a9f0e1d2c3b4a5f6e7d8c9b0a1f2e3d4c5b6a7f8a&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1747785600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Hello from a NIP-07 signed event&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2cdd&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="nip-deep-dive-nip-39-identidades-externas-en-perfiles">NIP Deep Dive: NIP-39 (identidades externas en perfiles)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/39.md">NIP-39&lt;/a> define cómo un usuario Nostr puede declarar control sobre identidades de plataformas externas en su perfil. Cada declaración usa un tag &lt;code>i&lt;/code> dentro de un evento kind:10011, aseverando la propiedad de una cuenta específica en otra plataforma junto con una prueba que puede ser verificada independientemente.&lt;/p>
&lt;p>Cada tag sigue el formato &lt;code>[&amp;quot;i&amp;quot;, &amp;quot;platform:identity&amp;quot;, &amp;quot;proof&amp;quot;]&lt;/code>, donde &lt;code>platform:identity&lt;/code> combina el nombre de la plataforma y el nombre de usuario con un separador de dos puntos (&lt;code>github:semisol&lt;/code>, &lt;code>twitter:semisol_public&lt;/code>). &lt;code>proof&lt;/code> apunta a un artefacto verificable en la propia plataforma.&lt;/p>
&lt;p>Para GitHub, la prueba es un ID de Gist. El usuario crea un Gist público desde su cuenta de GitHub que contiene el texto &lt;code>Verifying that I control the following Nostr public key: npub1...&lt;/code>. Un cliente verificando la reclamación obtiene &lt;code>https://gist.github.com/&amp;lt;identity&amp;gt;/&amp;lt;proof&amp;gt;&lt;/code> y comprueba que el Gist fue creado por el nombre de usuario de GitHub reclamado y contiene la pubkey esperada. Para Twitter la prueba es un ID de tweet, para Mastodon un ID de post, y para Telegram una referencia de mensaje en un grupo público.&lt;/p>
&lt;p>El nombre del proveedor de identidad debe contener solo &lt;code>a-z&lt;/code>, &lt;code>0-9&lt;/code> y los caracteres &lt;code>._-/&lt;/code>, y no debe contener &lt;code>:&lt;/code>. Los nombres de identidad deben normalizarse a minúsculas, usando el alias principal cuando existen varios.&lt;/p>
&lt;p>La discusión de NIP-05 Namecoin &lt;code>.bit&lt;/code> que ocurre esta semana muestra el papel de NIP-39 en la pila de identidad más amplia: proporciona una forma estandarizada e independiente del relay para cruzar referencias de una clave Nostr con una identidad establecida en otro lugar, sin requerir ninguna autoridad central de verificación. Un cliente puede verificar independientemente la prueba obteniendo un artefacto público en la plataforma nombrada, y la prueba está vinculada a la pubkey Nostr específica en el texto del Gist o tweet, no a una credencial genérica de plataforma.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;7f8e9d0c1b2a3e4f5d6c7b8a9f0e1d2c3b4a5f6e7d8c9b0a1f2e3d4c5b6a7f8a&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1747785600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">10011&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;i&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;github:semisol&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;9721ce4ee4fceb91c9711ca2a6c9a5ab&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;i&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;twitter:semisol_public&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1619358434134196225&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;i&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;mastodon:bitcoinhackers.org/@semisol&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;109775066355589974&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3eff&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>Eso es todo por esta semana. Si estás construyendo algo o tienes noticias que compartir, envíanos un DM en Nostr o encuéntranos en &lt;a href="https://nostrcompass.org">nostrcompass.org&lt;/a>.&lt;/p></content:encoded></item><item><title>Nostr Compass #22</title><link>https://nostrcompass.org/es/newsletters/2026-05-13-newsletter/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-05-13-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal al desarrollo del protocolo Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-13-newsletter/#nostr-vpn-lanza-ocho-versiones-culminando-en-v4010">ocho versiones en siete días&lt;/a> desde un flujo de emparejamiento de dispositivos rediseñado hasta un intercambio de AEAD FIPS que aproximadamente duplica el rendimiento TCP. &lt;a href="https://github.com/marmot-protocol">Marmot Protocol&lt;/a> (la base de &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>) lanza una &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-13-newsletter/#marmot-white-noise-lanza-frontend-con-bloqueo-completo-y-31-prs-fusionados-en-mdk-y-backend">versión frontend que completa la función de bloqueo de usuarios&lt;/a> y 31 PRs fusionados en MDK y backend. &lt;a href="https://github.com/0ceanSlim/grain">Grain&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-13-newsletter/#grain-v060-a%c3%b1ade-nip-40-nip-50-nip-70-y-nip-45">v0.6.0&lt;/a> con cuatro nuevas implementaciones de NIP en un hito. &lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-13-newsletter/#citrine-v300-pre1-trae-tor-integrado-y-agregaci%c3%b3n-de-relay">v3.0.0-pre1&lt;/a> con Tor integrado y agregación de relay.&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal al desarrollo del protocolo Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-13-newsletter/#nostr-vpn-lanza-ocho-versiones-culminando-en-v4010">ocho versiones en siete días&lt;/a> desde un flujo de emparejamiento de dispositivos rediseñado hasta un intercambio de AEAD FIPS que aproximadamente duplica el rendimiento TCP. &lt;a href="https://github.com/marmot-protocol">Marmot Protocol&lt;/a> (la base de &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>) lanza una &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-13-newsletter/#marmot-white-noise-lanza-frontend-con-bloqueo-completo-y-31-prs-fusionados-en-mdk-y-backend">versión frontend que completa la función de bloqueo de usuarios&lt;/a> y 31 PRs fusionados en MDK y backend. &lt;a href="https://github.com/0ceanSlim/grain">Grain&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-13-newsletter/#grain-v060-a%c3%b1ade-nip-40-nip-50-nip-70-y-nip-45">v0.6.0&lt;/a> con cuatro nuevas implementaciones de NIP en un hito. &lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-13-newsletter/#citrine-v300-pre1-trae-tor-integrado-y-agregaci%c3%b3n-de-relay">v3.0.0-pre1&lt;/a> con Tor integrado y agregación de relay.&lt;/p>
&lt;h2 id="historias-principales">Historias principales&lt;/h2>
&lt;h3 id="nostr-vpn-lanza-ocho-versiones-culminando-en-v4010">Nostr VPN lanza ocho versiones culminando en v4.0.10&lt;/h3>
&lt;p>&lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a>, la VPN de malla descentralizada basada en Rust que usa Nostr para el descubrimiento de pares y un protocolo noise respaldado por FIPS para el plano de datos, lanzó ocho versiones desde &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.1">v4.0.1&lt;/a> hasta &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.10">v4.0.10&lt;/a> en macOS, Linux, Windows y Android esta semana.&lt;/p>
&lt;p>El cambio principal está en &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.8">v4.0.8&lt;/a>: el AEAD se intercambió del backend suave &lt;code>chacha20poly1305&lt;/code> de RustCrypto al ChaCha20-Poly1305 de BoringSSL en &lt;code>ring&lt;/code> 0.17, que usa NEON ajustado a mano en aarch64 y AVX2/AVX-512 en x86_64. Los benchmarks de Docker en hardware idéntico mostraron que el rendimiento TCP directo de 2 nodos saltó de 437 a 1097 Mbps.&lt;/p>
&lt;p>&lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.9">v4.0.9&lt;/a> añadió lotes &lt;code>sendmmsg(2)&lt;/code> en la ruta de envío UDP, amortizando las llamadas al sistema &lt;code>sendto&lt;/code> por paquete en lotes de 8 paquetes y empujando TCP de flujo único de 1066 a 1548 Mbps (1,45×). &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.10">v4.0.10&lt;/a> lanzó una revisión completa de UX para el emparejamiento de dispositivos.&lt;/p>
&lt;h3 id="marmot--white-noise-lanza-frontend-con-bloqueo-completo-y-31-prs-fusionados-en-mdk-y-backend">Marmot / White Noise lanza frontend con bloqueo completo y 31 PRs fusionados en MDK y backend&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>, la app de mensajería grupal privada construida sobre el protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> basado en MLS, lanzó &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.5.7&amp;#43;24">v2026.5.7+24&lt;/a> el 7 de mayo como la versión frontend que completa el conjunto de funciones de bloqueo. Un usuario bloqueado ahora está oculto de invitaciones, vistas previas de chat, líneas de tiempo de mensajes, resultados de búsqueda y notificaciones, y sus mensajes ya no cuentan para las insignias de no leídos.&lt;/p>
&lt;p>El trabajo de soporte abarca 31 PRs fusionados en MDK y el backend. MDK aportó &lt;a href="https://github.com/marmot-protocol/mdk/pull/258">PR #258&lt;/a> con el formato de cable de extensión v3 y el esquema &lt;code>disappearing_message_secs&lt;/code>, sentando las bases para los mensajes que desaparecen.&lt;/p>
&lt;h3 id="grain-v060-añade-nip-40-nip-50-nip-70-y-nip-45">Grain v0.6.0 añade NIP-40, NIP-50, NIP-70 y NIP-45&lt;/h3>
&lt;p>&lt;a href="https://github.com/0ceanSlim/grain">Grain&lt;/a>, la biblioteca relay y cliente Nostr basada en Go, lanzó &lt;a href="https://github.com/0ceanSlim/grain/releases/tag/v0.6.0">v0.6.0&lt;/a> el 6 de mayo con cuatro nuevas implementaciones de NIP y un pase de endurecimiento de producción. El hito v0.6 añade expiración de eventos &lt;a href="https://github.com/nostr-protocol/nips/blob/master/40.md">NIP-40&lt;/a>, búsqueda de texto completo &lt;a href="https://github.com/nostr-protocol/nips/blob/master/50.md">NIP-50&lt;/a>, eventos protegidos &lt;a href="https://github.com/nostr-protocol/nips/blob/master/70.md">NIP-70&lt;/a> y conteos de eventos &lt;a href="https://github.com/nostr-protocol/nips/blob/master/45.md">NIP-45&lt;/a>.&lt;/p>
&lt;h2 id="lanzamientos-de-esta-semana">Lanzamientos de esta semana&lt;/h2>
&lt;h3 id="citrine-v300-pre1-trae-tor-integrado-y-agregación-de-relay">Citrine v3.0.0-pre1 trae Tor integrado y agregación de relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a>, la app Android que convierte un teléfono en un nodo relay Nostr, lanzó &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v3.0.0-pre1">v3.0.0-pre1&lt;/a> como pre-lanzamiento esta semana. Las adiciones principales son soporte Tor integrado para acceso a relay que preserva la privacidad y agregación de relay, donde Citrine puede obtener eventos de múltiples relays upstream y servirlos a clientes locales. &lt;a href="https://github.com/greenart7c3/Citrine/pull/139">PR #139&lt;/a> añade soporte &lt;a href="https://nostrcompass.org/es/topics/nip-77/">NIP-77 (Reconciliación Negentropy)&lt;/a> para sincronización eficiente de eventos basada en reconciliación de conjuntos.&lt;/p>
&lt;h3 id="amber-v610-pre2-mejora-el-flujo-de-conexión-de-nueva-app">Amber v6.1.0-pre2 mejora el flujo de conexión de nueva app&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, la app firmadora Android para &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55 (Aplicación firmadora Android)&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>, lanzó &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.1.0-pre2">v6.1.0-pre2&lt;/a>. Las correcciones principales: el diálogo del firmador ahora se cierra correctamente después de aceptar una solicitud de bunker, las solicitudes de bunker malformadas muestran una pantalla de solicitud inválida y se añade limitación de tasa para solicitudes de firma basadas en intención.&lt;/p>
&lt;h3 id="alby-hub-v1222-añade-página-de-ia-y-agentes-y-soporte-de-core-lightning">Alby Hub v1.22.2 añade página de IA y Agentes y soporte de Core Lightning&lt;/h3>
&lt;p>&lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a>, el nodo Lightning autocustodio y servidor Nostr Wallet Connect, lanzó &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.22.2">v1.22.2&lt;/a> con varias adiciones importantes. La nueva página de IA y Agentes expone las capacidades Lightning y NWC de Alby Hub a agentes de IA y herramientas compatibles con MCP. La función más solicitada desde el lanzamiento: Core Lightning (CLN) ahora es un backend compatible junto con LND y LDK.&lt;/p>
&lt;h3 id="mostro-lanza-bonos-de-tomador-concurrentes-y-mostro-core-v0110">Mostro lanza bonos de tomador concurrentes y mostro-core v0.11.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>, el protocolo de intercambio Bitcoin peer-to-peer en Nostr, fusionó 11 PRs esta semana avanzando la función de bono de tomador que previene el griefing al requerir que ambas partes bloqueen fondos antes de que proceda un intercambio. &lt;a href="https://github.com/MostroP2P/mostro/pull/733">PR #733&lt;/a> implementa bonos de tomador concurrentes donde múltiples tomadores pueden enviar facturas de bono simultáneamente y el primero en bloquear gana.&lt;/p>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro-core">mostro-core&lt;/a> lanzó &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.11.0">v0.11.0&lt;/a> con las adiciones de biblioteca correspondientes, y &lt;a href="https://github.com/MostroP2P/mostro-cli">mostro-cli&lt;/a> lanzó &lt;a href="https://github.com/MostroP2P/mostro-cli/releases/tag/v0.15.0">v0.15.0&lt;/a>.&lt;/p>
&lt;h3 id="jumble-lanza-cinco-versiones-con-búsqueda-reciente-y-persistencia-de-cuenta">Jumble lanza cinco versiones con búsqueda reciente y persistencia de cuenta&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a>, el cliente Nostr centrado en relay disponible como app web y app de escritorio Electron, lanzó cinco versiones esta semana: &lt;a href="https://github.com/CodyTseng/jumble/releases/tag/v26.5.2">v26.5.2&lt;/a> a &lt;a href="https://github.com/CodyTseng/jumble/releases/tag/v26.5.6">v26.5.6&lt;/a>. &lt;a href="https://github.com/CodyTseng/jumble/releases/tag/v26.5.5">v26.5.5&lt;/a> añade historial de búsquedas recientes. Se corrigió un bug crítico de persistencia en &lt;a href="https://github.com/CodyTseng/jumble/releases/tag/v26.5.6">v26.5.6&lt;/a>: las cuentas y los datos en caché ahora sobreviven a un reinicio completo de la app.&lt;/p>
&lt;h3 id="nostrord-lanza-modales-de-compartir-grupo-carga-de-medios-y-paquetes-de-arch-linux">Nostrord lanza modales de compartir grupo, carga de medios y paquetes de Arch Linux&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrord/nostrord">Nostrord&lt;/a>, un cliente Nostr dirigido a grupos basados en relay NIP-29, lanzó &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v1.0.0">v1.0.0&lt;/a>, &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v1.0.1">v1.0.1&lt;/a> y &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v1.0.2">v1.0.2&lt;/a> esta semana. &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v1.0.1">v1.0.1&lt;/a> lanza paquetes de Arch Linux via AUR como &lt;code>nostrord-bin&lt;/code>, y &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v1.0.2">v1.0.2&lt;/a> añade compartir grupos via &lt;a href="https://github.com/nostrord/nostrord/pull/49">PR #49&lt;/a> con un modal de compartir que genera tanto un URI &lt;code>nostr:naddr&lt;/code> como un enlace &lt;code>nostrord.com/open/&lt;/code> amigable para la web.&lt;/p>
&lt;h3 id="fips-v030-lanza-alcance-multiplataforma-descubrimiento-de-pares-nostr-y-un-gateway-para-lans-sin-modificar">FIPS v0.3.0 lanza alcance multiplataforma, descubrimiento de pares Nostr y un gateway para LANs sin modificar&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> (Free Internetworking Peering System), el proyecto de red de malla nativo de Nostr, lanzó &lt;a href="https://github.com/jmcorgan/fips/releases/tag/v0.3.0">v0.3.0&lt;/a> esta semana, un hito importante que amplía el proyecto de solo Linux a Linux, macOS, Windows y OpenWrt. La adición principal es el descubrimiento de pares mediado por Nostr con traversal NAT UDP asistido por STUN.&lt;/p>
&lt;h3 id="flotilla-180-lanza-videollamadas-renderizado-de-email-y-menciones-de-sala">Flotilla 1.8.0 lanza videollamadas, renderizado de email y menciones de sala&lt;/h3>
&lt;p>&lt;a href="https://flotilla.social">Flotilla&lt;/a>, la app de chat grupal &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> basada en relay de hodlbod, lanzó &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.8.0">1.8.0&lt;/a> esta semana con varias adiciones notables. Las salas de voz ahora soportan video: los participantes pueden encender cámaras o compartir su pantalla durante una llamada. El renderizado de email llega a través de una actualización a la biblioteca welshman: Flotilla ahora puede recibir mensajes que incrustan contenido de email HTML y lo renderiza en línea.&lt;/p>
&lt;h3 id="calendar-by-formstr-lanza-v151-con-programación-de-citas-y-sincronización-de-calendario-android">Calendar by Formstr lanza v1.5.1 con programación de citas y sincronización de calendario Android&lt;/h3>
&lt;p>&lt;a href="https://calendar.formstr.app">Calendar by Formstr&lt;/a>, una app de calendario nativa de Nostr, lanzó &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.5.0">v1.5.0&lt;/a> el 10 de mayo y &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.5.1">v1.5.1&lt;/a> el 11 de mayo. La programación de citas llega en &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/89">PR #89&lt;/a>, permitiendo a los usuarios crear franjas horarias reservables en su calendario. La integración de calendario Android de solo lectura en &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/123">PR #123&lt;/a> sincroniza eventos Nostr al calendario del dispositivo.&lt;/p>
&lt;h2 id="nuevos-proyectos">Nuevos proyectos&lt;/h2>
&lt;h3 id="tamagostrich-lanza-un-tamagotchi-nip-78-descentralizado-con-recompensas-en-sats">Tamagostrich lanza un Tamagotchi NIP-78 descentralizado con recompensas en sats&lt;/h3>
&lt;p>&lt;a href="https://github.com/Negr087/tamagostrich">Tamagostrich&lt;/a> es un juego de mascota virtual basado en navegador lanzado en el Hackathon IDENTITY 2026 donde un avestruz bebé, Nori, evoluciona a través de tu actividad social en Nostr. El estado de la mascota vive en un evento &lt;a href="https://nostrcompass.org/es/topics/nip-78/">NIP-78&lt;/a> kind:30078 para que se sincronice en cada dispositivo que comparte el mismo par de claves. Las recompensas de hito pagan automáticamente en sats via &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a>: 50 sats en el nivel 5, 210 sats en el nivel 10 y 420 sats en el nivel máximo 21.&lt;/p>
&lt;h2 id="trabajo-de-protocolo-y-especificaciones">Trabajo de protocolo y especificaciones&lt;/h2>
&lt;p>El repositorio de NIPs fusionó &lt;a href="https://github.com/nostr-protocol/nips/pull/2338">PR #2338&lt;/a> corrigiendo los enlaces de referencia del README para los kinds de eventos Marmot y el kind de geocaching 37516. Se abrieron cinco nuevas propuestas esta semana:&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2331">PR #2331&lt;/a> propone &lt;strong>NIP-9A: Reglas de Comunidad Verificables&lt;/strong>, introduciendo kind:34551, un evento reemplazable parametrizado que permite al propietario de una comunidad publicar un documento de reglas legible por máquina y firmado criptográficamente.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2335">PR #2335&lt;/a> propone &lt;strong>Eventos de Reserva para Mercados Nostr&lt;/strong>, definiendo kind:32122 (eventos de reserva reemplazables parametrizados), kind:1326 (registros de auditoría de transición de solo adición) y kind:32124 (reseñas post-intercambio).&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2334">PR #2334&lt;/a> propone &lt;strong>Servicios de Custodia para Mercados Nostr&lt;/strong>, usando kind:30303 para que los operadores de custodia declaren su dirección de contrato EVM y programa de tarifas.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2333">PR #2333&lt;/a> propone &lt;strong>Perfiles de Listado de Alojamiento para Listados del Mercado NIP-99&lt;/strong>, extendiendo los listados clasificados NIP-99 con tags de índice geoespacial H3 &lt;code>g&lt;/code>.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2332">PR #2332&lt;/a> propone &lt;strong>NIP-BC: Zaps Onchain (kind 8333)&lt;/strong>, explotando una identidad directa entre las claves Nostr y las direcciones Bitcoin Taproot.&lt;/p>
&lt;h2 id="inmersión-profunda-en-nip-nip-78-datos-específicos-de-la-app">Inmersión profunda en NIP: NIP-78 (datos específicos de la app)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-78/">NIP-78&lt;/a> define una forma estándar para que las aplicaciones almacenen datos privados o públicos arbitrarios en nombre de un usuario usando eventos Nostr. El kind de evento central es 30078, un evento reemplazable parametrizado donde el tag &lt;code>d&lt;/code> es una cadena de identificador definida por la aplicación.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;64-char hex&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;64-char hex&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1747180800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30078&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;tamagostrich-pet-state&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;level\&amp;#34;:7,\&amp;#34;xp\&amp;#34;:1420,\&amp;#34;happiness\&amp;#34;:82,\&amp;#34;energy\&amp;#34;:61}&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;128-char hex&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>La motivación principal es la sincronización entre dispositivos sin un servidor centralizado. Para datos de aplicación privados, los eventos NIP-78 pueden cifrar el campo de contenido usando &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44 (Cifrado con Versión)&lt;/a> o el más antiguo &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a> antes de publicar.&lt;/p>
&lt;hr>
&lt;p>&lt;strong>Fuentes primarias:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/78.md">Especificación NIP-78&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/Negr087/tamagostrich">Tamagostrich&lt;/a>: implementación en producción esta semana&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Ver también:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51: Listas&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65: Metadatos de Lista de Relays&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="inmersión-profunda-en-nip-nip-98-http-auth">Inmersión profunda en NIP: NIP-98 (HTTP Auth)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98&lt;/a> define un esquema de autenticación HTTP que permite que los pares de claves Nostr autoricen solicitudes a servidores HTTP, eliminando la necesidad de nombres de usuario, contraseñas o tokens OAuth para el acceso a API del lado del servidor. Un cliente construye un evento Nostr de corta duración de kind 27235, lo firma con su clave privada, codifica el JSON en base64 y lo envía en un encabezado HTTP &lt;code>Authorization: Nostr &amp;lt;base64&amp;gt;&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;64-char hex&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;64-char hex&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1747180800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">27235&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;u&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://files.example.com/upload&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;method&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;POST&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;payload&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;sha256-hash-of-request-body&amp;gt;&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;128-char hex&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El evento kind 27235 incluye el método HTTP en un tag &lt;code>method&lt;/code>, la URL completa de la solicitud en un tag &lt;code>u&lt;/code> y una marca de tiempo &lt;code>created_at&lt;/code>. El servidor valida la firma, verifica que el método y la URL coincidan con la solicitud real y confirma que la marca de tiempo es reciente para prevenir ataques de repetición.&lt;/p>
&lt;p>NIP-98 se usa en Blossom (&lt;a href="https://github.com/hzrd149/blossom/blob/master/buds/01.md">BUD-01&lt;/a>) para autenticar cargas y descargas de blobs. Routstr lo usa para control de acceso a la API HTTP por solicitud. Sprout lo usa para autenticación de transporte git y acceso a relay REST.&lt;/p>
&lt;hr>
&lt;p>&lt;strong>Fuentes primarias:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">Especificación NIP-98&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/hzrd149/blossom/blob/master/buds/01.md">BUD-01: Auth de carga Blossom&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Ver también:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://nostrcompass.org/es/topics/nip-96/">NIP-96: Integración de Almacenamiento de Archivos HTTP&lt;/a>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Eso es todo por esta semana. Si estás construyendo algo o tienes noticias que compartir, envíanos un DM en Nostr o encuéntranos en &lt;a href="https://nostrcompass.org">nostrcompass.org&lt;/a>.&lt;/p></content:encoded></item><item><title>Nostr Compass #21</title><link>https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/marmot-protocol">Marmot Protocol&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/#mdk-080-a%c3%b1ade-primitivas-de-notificaci%c3%b3n-mip-05-y-paquetes-de-claves-direccionables">MDK 0.8.0&lt;/a> con las primeras primitivas de notificación MIP-05, paquetes de claves &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51 (Listas)&lt;/a> direccionables y una revisión de seguridad mejorada. &lt;a href="https://github.com/lawalletio/lawallet-nwc">LaWallet NWC&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/#lawallet-nwc-v0100-lanza-el-monorepo-completo-y-wallet-para-usuarios-finales">v0.10.0&lt;/a> como el mayor lanzamiento desde la financiación de OpenSats. &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> realiza un &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/#amethyst-estabiliza-nests-con-keep-alive-resiliencia-jwt-y-suscripciones-de-ciclo-de-vida">sprint de estabilidad de Nests&lt;/a>. &lt;a href="https://github.com/DanConwayDev/ngit-cli">ngit&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/#ngit-v242-y-v243-corrigen-detecci%c3%b3n-del-servidor-grasp-y-eventos-de-estado-multi-remoto">v2.4.2&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/#ngit-v242-y-v243-corrigen-detecci%c3%b3n-del-servidor-grasp-y-eventos-de-estado-multi-remoto">v2.4.3&lt;/a>. &lt;a href="https://github.com/0ceanSlim/grain">GRAIN&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/#grain-v054-trae-endurecimiento-de-producci%c3%b3n-y-una-correcci%c3%b3n-silenciosa-de-p%c3%a9rdida-de-datos">v0.5.4&lt;/a>. &lt;a href="https://github.com/MostroP2P/mostro-core">Mostro Core&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/#mostro-core-v0101-a%c3%b1ade-artefactos-de-lanzamiento-firmados-con-pgp">v0.10.1&lt;/a>. &lt;a href="https://github.com/clave-mobile">Clave&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/#clave-v020-lanza-multi-cuenta-en-ios-con-firma-nip-46-nostr-connect">v0.2.0&lt;/a>.&lt;/p>
&lt;h2 id="historias-principales">Historias principales&lt;/h2>
&lt;h3 id="mdk-080-añade-primitivas-de-notificación-mip-05-y-paquetes-de-claves-direccionables">MDK 0.8.0 añade primitivas de notificación MIP-05 y paquetes de claves direccionables&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a>, la biblioteca principal en Rust para el protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, lanzó &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.8.0">v0.8.0&lt;/a> el 4 de mayo. Esta versión incluye los primeros bloques de construcción de notificaciones MIP-05, mueve los paquetes de claves MIP-00 a eventos direccionables para que el paquete de claves de un usuario pueda reemplazarse en su lugar, mejora la compatibilidad de grupo de versiones mixtas, amplía la cobertura UniFFI para bindings móviles y refuerza las rutas de validación. Las primitivas MIP-05 incluyen auxiliares de índice de hoja añadidos en &lt;a href="https://github.com/marmot-protocol/mdk/pull/235">PR #235&lt;/a>, que dan a los clientes posteriores suficiente información para entregar notificaciones push por destinatario sin exponer la estructura del grupo. &lt;a href="https://github.com/marmot-protocol/mdk/pull/273">PR #273&lt;/a> restaura la publicación de mdk-core en crates.io, y &lt;a href="https://github.com/marmot-protocol/mdk/pull/269">PR #269&lt;/a> expone el módulo test_util detrás de una característica Cargo &lt;code>test-utils&lt;/code>.&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/marmot-protocol">Marmot Protocol&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/#mdk-080-a%c3%b1ade-primitivas-de-notificaci%c3%b3n-mip-05-y-paquetes-de-claves-direccionables">MDK 0.8.0&lt;/a> con las primeras primitivas de notificación MIP-05, paquetes de claves &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51 (Listas)&lt;/a> direccionables y una revisión de seguridad mejorada. &lt;a href="https://github.com/lawalletio/lawallet-nwc">LaWallet NWC&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/#lawallet-nwc-v0100-lanza-el-monorepo-completo-y-wallet-para-usuarios-finales">v0.10.0&lt;/a> como el mayor lanzamiento desde la financiación de OpenSats. &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> realiza un &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/#amethyst-estabiliza-nests-con-keep-alive-resiliencia-jwt-y-suscripciones-de-ciclo-de-vida">sprint de estabilidad de Nests&lt;/a>. &lt;a href="https://github.com/DanConwayDev/ngit-cli">ngit&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/#ngit-v242-y-v243-corrigen-detecci%c3%b3n-del-servidor-grasp-y-eventos-de-estado-multi-remoto">v2.4.2&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/#ngit-v242-y-v243-corrigen-detecci%c3%b3n-del-servidor-grasp-y-eventos-de-estado-multi-remoto">v2.4.3&lt;/a>. &lt;a href="https://github.com/0ceanSlim/grain">GRAIN&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/#grain-v054-trae-endurecimiento-de-producci%c3%b3n-y-una-correcci%c3%b3n-silenciosa-de-p%c3%a9rdida-de-datos">v0.5.4&lt;/a>. &lt;a href="https://github.com/MostroP2P/mostro-core">Mostro Core&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/#mostro-core-v0101-a%c3%b1ade-artefactos-de-lanzamiento-firmados-con-pgp">v0.10.1&lt;/a>. &lt;a href="https://github.com/clave-mobile">Clave&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-05-06-newsletter/#clave-v020-lanza-multi-cuenta-en-ios-con-firma-nip-46-nostr-connect">v0.2.0&lt;/a>.&lt;/p>
&lt;h2 id="historias-principales">Historias principales&lt;/h2>
&lt;h3 id="mdk-080-añade-primitivas-de-notificación-mip-05-y-paquetes-de-claves-direccionables">MDK 0.8.0 añade primitivas de notificación MIP-05 y paquetes de claves direccionables&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a>, la biblioteca principal en Rust para el protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, lanzó &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.8.0">v0.8.0&lt;/a> el 4 de mayo. Esta versión incluye los primeros bloques de construcción de notificaciones MIP-05, mueve los paquetes de claves MIP-00 a eventos direccionables para que el paquete de claves de un usuario pueda reemplazarse en su lugar, mejora la compatibilidad de grupo de versiones mixtas, amplía la cobertura UniFFI para bindings móviles y refuerza las rutas de validación. Las primitivas MIP-05 incluyen auxiliares de índice de hoja añadidos en &lt;a href="https://github.com/marmot-protocol/mdk/pull/235">PR #235&lt;/a>, que dan a los clientes posteriores suficiente información para entregar notificaciones push por destinatario sin exponer la estructura del grupo. &lt;a href="https://github.com/marmot-protocol/mdk/pull/273">PR #273&lt;/a> restaura la publicación de mdk-core en crates.io, y &lt;a href="https://github.com/marmot-protocol/mdk/pull/269">PR #269&lt;/a> expone el módulo test_util detrás de una característica Cargo &lt;code>test-utils&lt;/code>.&lt;/p>
&lt;h3 id="lawallet-nwc-v0100-lanza-el-monorepo-completo-y-wallet-para-usuarios-finales">LaWallet NWC v0.10.0 lanza el monorepo completo y Wallet para usuarios finales&lt;/h3>
&lt;p>&lt;a href="https://github.com/lawalletio/lawallet-nwc">LaWallet NWC&lt;/a>, la implementación &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> Nostr Wallet Connect del equipo de LaWallet, lanzó &lt;a href="https://github.com/lawalletio/lawallet-nwc/releases/tag/v0.10.0">v0.10.0&lt;/a> el 30 de abril. Es el mayor lanzamiento desde que el proyecto recibió financiación de OpenSats. Incluye el monorepo completo, el panel de administración completo, una Wallet para usuarios finales, un registro de actividad completo, branding dinámico y el nuevo esquema &lt;code>LightningAddress 1→N&lt;/code> y &lt;code>NWCConnection&lt;/code> que desbloquea el enrutamiento NWC por dirección. La Wallet para el usuario lanzada en &lt;a href="https://github.com/lawalletio/lawallet-nwc/pull/191">PR #191&lt;/a> cubre incorporación, inicio, envío/recepción, escaneo, monedas, un feed de actividad y una caché sin conexión.&lt;/p>
&lt;h3 id="amethyst-estabiliza-nests-con-keep-alive-resiliencia-jwt-y-suscripciones-de-ciclo-de-vida">Amethyst estabiliza Nests con keep-alive, resiliencia JWT y suscripciones de ciclo de vida&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, el cliente Android con muchas funciones, continuó el trabajo de sala de audio &lt;a href="https://nostrcompass.org/es/topics/nip-53/">NIP-53&lt;/a> Nests cubierto en el boletín &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#amethyst-advances-nests-audio-rooms-with-moq-interop-testing">#20&lt;/a> con un sprint de estabilidad. La corrección de brecha de audio en &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2733">PR #2733&lt;/a> superpone la nueva adquisición de credenciales con el flujo activo durante el refresco JWT, para que el oyente no escuche un corte cuando rota el token. Un nuevo mecanismo keep-alive en &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2730">PR #2730&lt;/a> reconecta relays desconectados sin requerir acción manual del usuario, y &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2728">PR #2728&lt;/a> reemplaza el &lt;code>KeyDataSourceSubscription&lt;/code> heredado con &lt;code>LifecycleAwareKeyDataSourceSubscription&lt;/code>. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2724">PR #2724&lt;/a> añade un indicador de anillo exterior animado que resalta al participante que habla en sesiones con múltiples hablantes.&lt;/p>
&lt;h3 id="ngit-v242-y-v243-corrigen-detección-del-servidor-grasp-y-eventos-de-estado-multi-remoto">ngit v2.4.2 y v2.4.3 corrigen detección del servidor GRASP y eventos de estado multi-remoto&lt;/h3>
&lt;p>&lt;a href="https://github.com/DanConwayDev/ngit-cli">ngit&lt;/a>, la herramienta de línea de comandos y plugin &lt;code>git&lt;/code> para la colaboración &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a>, lanzó &lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.2">v2.4.2&lt;/a> el 28 de abril y &lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.3">v2.4.3&lt;/a> el 1 de mayo. v2.4.2 corrige un desajuste de normalización de URL donde &lt;code>repo_grasps&lt;/code> mantenía nombres de host normalizados pero la comparación se hacía contra URLs de clonación completas. v2.4.3 corrige una ambigüedad de evento de estado que surgía cuando un repositorio tiene múltiples remotos &lt;code>nostr://&lt;/code> compartiendo el mismo identificador.&lt;/p>
&lt;h3 id="grain-v054-trae-endurecimiento-de-producción-y-una-corrección-silenciosa-de-pérdida-de-datos">GRAIN v0.5.4 trae endurecimiento de producción y una corrección silenciosa de pérdida de datos&lt;/h3>
&lt;p>&lt;a href="https://github.com/0ceanSlim/grain">GRAIN&lt;/a>, la biblioteca relay y cliente Nostr basada en Go, lanzó &lt;a href="https://github.com/0ceanSlim/grain/releases/tag/v0.5.4">v0.5.4&lt;/a> el 30 de abril. La versión acumula seis correcciones desde v0.5.3, incluyendo un bug silencioso de pérdida de datos en el inicio rápido de Docker que anteriormente descartaba eventos cuando el contenedor se reiniciaba, y un bug de corrección de la capa de almacenamiento en lecturas de eventos direccionables.&lt;/p>
&lt;h3 id="mostro-core-v0101-añade-artefactos-de-lanzamiento-firmados-con-pgp">Mostro Core v0.10.1 añade artefactos de lanzamiento firmados con PGP&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro-core">Mostro Core&lt;/a>, la biblioteca Rust que proporciona funcionalidad peer-to-peer para el daemon Mostro, lanzó &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.10.1">v0.10.1&lt;/a> el 28 de abril como seguimiento del &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#mostro-core-v0100-and-mostro-mobile-v125-adopt-nip-59-dual-key-gift-wrap">módulo de protocolo de chat P2P v0.10.0 de la semana pasada&lt;/a>. La nueva versión añade artefactos de lanzamiento firmados con PGP y un flujo &lt;code>verify-release&lt;/code>.&lt;/p>
&lt;h2 id="lanzamientos-etiquetados">Lanzamientos etiquetados&lt;/h2>
&lt;h3 id="clave-v020-lanza-multi-cuenta-en-ios-con-firma-nip-46-nostr-connect">Clave v0.2.0 lanza multi-cuenta en iOS con firma NIP-46 (Nostr Connect)&lt;/h3>
&lt;p>&lt;a href="https://github.com/clave-mobile">Clave&lt;/a>, la app de firma remota &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> para iOS cubierta en &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#clave-brings-nip-46-remote-signing-to-ios-via-apns">#20&lt;/a>, lanzó &lt;a href="https://github.com/clave-mobile/clave/releases">v0.2.0&lt;/a> el 5 de mayo. La mayor actualización hasta ahora introduce soporte multi-cuenta: Clave ahora puede albergar hasta cuatro cuentas en un dispositivo, con un selector de un toque y aislamiento por cuenta.&lt;/p>
&lt;h3 id="wisp-lanza-trabajo-de-estabilidad-v103--v105">Wisp lanza trabajo de estabilidad v1.0.3 → v1.0.5&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>, el cliente Android que &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#wisp-v100-graduates-from-beta">se graduó de beta en #20&lt;/a>, lanzó &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.0.3">v1.0.3&lt;/a>, &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.0.4">v1.0.4&lt;/a> y &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.0.5">v1.0.5&lt;/a> el 4 de mayo con trabajo de estabilidad.&lt;/p>
&lt;h3 id="amber-610-pre1-lanza-correcciones-de-diseño-y-estabilidad">Amber 6.1.0-pre1 lanza correcciones de diseño y estabilidad&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, la app firmadora Android para &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55 (Aplicación firmadora Android)&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>, lanzó &lt;a href="https://github.com/greenart7c3/Amber/releases">v6.1.0-pre1&lt;/a> con un pase de diseño en el flujo de conexión de nueva app y varias correcciones de fallos reportados.&lt;/p>
&lt;h3 id="routstr-core-v043-mejora-el-manejo-de-pagos-reembolsos-y-reportes-de-uso">Routstr Core v0.4.3 mejora el manejo de pagos, reembolsos y reportes de uso&lt;/h3>
&lt;p>&lt;a href="https://github.com/Routstr/routstr-core">Routstr Core&lt;/a>, la capa de inferencia descentralizada, lanzó &lt;a href="https://github.com/Routstr/routstr-core/releases">v0.4.3&lt;/a> como pre-lanzamiento el 1 de mayo.&lt;/p>
&lt;h3 id="nostria-v3137-a-v3141-añaden-marcadores-web-y-un-tema-auto">Nostria v3.1.37 a v3.1.41 añaden Marcadores Web y un tema Auto&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>, el cliente Nostr multiplataforma, lanzó &lt;a href="https://github.com/nostria-app/nostria/releases">v3.1.37 a v3.1.41&lt;/a> el 30 de abril y el 4 de mayo. Las versiones añaden soporte &lt;a href="https://nostrcompass.org/es/topics/nip-b0/">NIP-B0 (Marcadores Web)&lt;/a>, un tema &amp;ldquo;Auto&amp;rdquo; que sigue la configuración del dispositivo y visualización de PDF en la app.&lt;/p>
&lt;h2 id="cambios-no-publicados">Cambios no publicados&lt;/h2>
&lt;h3 id="sprout-lanza-desktop-v004-y-v005-junto-con-autenticación-de-agente-nip-oa-y-el-sidecar-relay-de-emparejamiento">Sprout lanza Desktop v0.0.4 y v0.0.5 junto con autenticación de agente NIP-OA y el sidecar relay de emparejamiento&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/sprout">Sprout&lt;/a>, el cliente Nostr de Block con relay integrado, lanzó &lt;a href="https://github.com/block/sprout/releases">Sprout Desktop v0.0.4&lt;/a> el 5 de mayo y &lt;a href="https://github.com/block/sprout/releases">v0.0.5&lt;/a> el 6 de mayo, junto con aproximadamente 80 PRs fusionados. El cambio principal en &lt;a href="https://github.com/block/sprout/pull/471">PR #471&lt;/a> conecta la autenticación de agente NIP-OA al flujo de membresía NIP-43 del relay. Un nuevo relay sidecar efímero para emparejamiento de dispositivos NIP-AB llega en &lt;a href="https://github.com/block/sprout/pull/467">PR #467&lt;/a> como &lt;code>sprout-pair-relay&lt;/code>.&lt;/p>
&lt;h3 id="nostream-añade-soporte-de-relay-marmot-y-reacciones-nip-25">nostream añade soporte de relay Marmot y reacciones NIP-25&lt;/h3>
&lt;p>&lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a>, la implementación de relay Node.js, fusionó una semana productiva de adiciones de protocolo. El soporte de relay Marmot Protocol que cubre los MIPs 00 al 03 llega en &lt;a href="https://github.com/Cameri/nostream/pull/602">PR #602&lt;/a>. Las adiciones de protocolo menores: soporte de reacciones &lt;a href="https://nostrcompass.org/es/topics/nip-25/">NIP-25&lt;/a> en &lt;a href="https://github.com/Cameri/nostream/pull/589">PR #589&lt;/a>.&lt;/p>
&lt;h3 id="strfry-añade-observabilidad-por-conexión-y-reduce-el-límite-nofiles">strfry añade observabilidad por conexión y reduce el límite nofiles&lt;/h3>
&lt;p>&lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a>, el relay Nostr en C++, fusionó 14 PRs orientados a la observabilidad e higiene operativa. El cambio principal es &lt;a href="https://github.com/hoytech/strfry/pull/218">PR #218&lt;/a>, que añade observabilidad de salida pendiente por conexión y un límite de contrapresión configurable.&lt;/p>
&lt;h3 id="damus-reemplaza-los-gifs-de-tenor-con-un-proxy-purple-y-lanza-ux-de-compactación">Damus reemplaza los GIFs de Tenor con un proxy Purple y lanza UX de compactación&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>, el cliente iOS de Nostr, fusionó &lt;a href="https://github.com/damus-io/damus/pull/3737">PR #3737&lt;/a> reemplazando la integración de GIFs Tenor con un proxy &lt;a href="https://damus.io/purple/">Damus Purple&lt;/a>.&lt;/p>
&lt;h3 id="routstrd-auth-un-routstrd-dockerizado-para-equipos-con-auth-nip-98-y-rbac-por-npub">routstrd-auth: un Routstrd dockerizado para equipos con auth NIP-98 y RBAC por npub&lt;/h3>
&lt;p>&lt;a href="https://github.com/Routstr/routstrd-auth">routstrd-auth&lt;/a>, creado el 27 de abril por el equipo de Routstr, es una variante dockerizada de Routstrd para implementaciones en equipos multiusuario. El cambio principal es un sistema granular de control de acceso basado en roles por npub con roles &lt;code>admin&lt;/code> y &lt;code>user&lt;/code>, y endpoints de cliente que adoptan autenticación HTTP &lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">NIP-98&lt;/a>.&lt;/p>
&lt;h3 id="routstrd-integra-hermes-para-clientes-daemon-y-modo-remoto">Routstrd integra Hermes para clientes daemon y modo remoto&lt;/h3>
&lt;p>&lt;a href="https://github.com/routstr/routstrd">Routstrd&lt;/a>, el daemon local que orquesta clientes de inferencia Routstr, fusionó &lt;a href="https://github.com/routstr/routstrd/pull/22">PR #22&lt;/a> añadiendo integración con &lt;a href="https://github.com/NousResearch/hermes-agent">Hermes Agent&lt;/a>.&lt;/p>
&lt;h3 id="whitenoise-rs-lanza-aislamiento-de-base-de-datos-por-cuenta-y-actualizaciones-de-propuestas">whitenoise-rs lanza aislamiento de base de datos por cuenta y actualizaciones de propuestas&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a>, la biblioteca Rust principal para el mensajero White Noise, fusionó &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/796">PR #796&lt;/a> moviendo tablas de proyección de mensajes a bases de datos por cuenta, y &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/791">PR #791&lt;/a> añadiendo actualizaciones de propuestas para que los grupos puedan extender su funcionalidad.&lt;/p>
&lt;h3 id="angor-0221-lanza-flujos-de-app-compactos-junto-con-endurecimiento-del-proveedor-de-claves-y-cambio-de-red">Angor 0.2.21 lanza flujos de app compactos junto con endurecimiento del proveedor de claves y cambio de red&lt;/h3>
&lt;p>&lt;a href="https://github.com/block-core/angor">Angor&lt;/a>, la plataforma de crowdfunding Bitcoin con perfiles de fundadores publicados en Nostr, lanzó &lt;a href="https://github.com/block-core/angor/releases">Angor 0.2.21&lt;/a> el 6 de mayo.&lt;/p>
&lt;h2 id="recién-rastreados-y-descubiertos">Recién rastreados y descubiertos&lt;/h2>
&lt;h3 id="bitmacro-signer-un-bunker-nip-46-autoalojable-con-cifrado-de-claves-del-lado-del-cliente">BitMacro Signer: un bunker NIP-46 autoalojable con cifrado de claves del lado del cliente&lt;/h3>
&lt;p>&lt;a href="https://github.com/bitmacro/bitmacro-signer">BitMacro Signer&lt;/a> es una herramienta de firma Nostr autoalojable que gestiona claves privadas usando el modelo de bunker &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>. El firmador cifra las claves en el cliente antes del almacenamiento para que el lado del servidor nunca tenga texto en claro.&lt;/p>
&lt;p>El descubrimiento de repos NIP-34 de esta semana trajo 26 nuevos anuncios de repositorio, de los cuales cuatro destacan.&lt;/p>
&lt;h3 id="gnostr-una-implementación-de-git-construida-directamente-sobre-nostr">gnostr: una implementación de git construida directamente sobre Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/gnostr-org/gnostr">gnostr&lt;/a> es una implementación de git construida directamente sobre Nostr, distinta de &lt;code>git-remote-nostr&lt;/code> en que incluye sus propios comandos de árbol de trabajo como cliente de control de versiones nativo de Nostr desde cero.&lt;/p>
&lt;h3 id="nostr-archive-una-especificación-de-archivo-con-contenido-direccionado-en-nostr-y-blossom">nostr-archive: una especificación de archivo con contenido direccionado en Nostr y Blossom&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev/nostr-archive/nostr-archive">nostr-archive&lt;/a> es una especificación borrador e implementación de referencia para archivos con contenido direccionado en Nostr y Blossom.&lt;/p>
&lt;h3 id="flower-cache-un-servidor-de-caché-local-de-blossom">flower-cache: un servidor de caché local de Blossom&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev/flower-cache/flower-cache">flower-cache&lt;/a> es un servidor de caché local de Blossom, útil para clientes que quieren un espejo local activo del conjunto de blobs de un servidor Blossom remoto.&lt;/p>
&lt;h3 id="micro-vpn-ansible-playbooks-de-ansible-para-despliegue-de-vpn-sobre-nip-34">micro-vpn-ansible: playbooks de Ansible para despliegue de VPN sobre NIP-34&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev/npub1mu9fsh42uh48trncevdpju8cyv3mxmj9qj3rdjqc46zc324c6hys9ctsnc/relay.ngit.dev/micro-vpn-ansible">micro-vpn-ansible&lt;/a> es una pequeña colección de playbooks de Ansible para desplegar una micro VPN, alojada como repositorio NIP-34.&lt;/p>
&lt;h2 id="trabajo-de-protocolo">Trabajo de protocolo&lt;/h2>
&lt;h3 id="actualizaciones-de-nip">Actualizaciones de NIP&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Un mercado de hashrate sin intermediarios sobre Nostr&lt;/strong> (&lt;a href="https://njump.me/nevent1qqsqd2478wqugjh9ur9lenw9la0wd987h6jcc0tma4kkuat4xceymvszypxxmj0zcqtwqm34f48gzulrg99daaczllhtqun7xsldkh8neua2jhr32rf">borrador de propuesta&lt;/a>): Borrador de NIP anónimo que argumenta que los actores actuales del mercado de hashrate son todos intermediarios con custodia que someten a los usuarios a KYC. La propuesta esboza un mercado peer-to-peer de hashrate sobre eventos Nostr.&lt;/li>
&lt;li>&lt;strong>Feeds curados: una alternativa más simple a los feeds DVM&lt;/strong> (&lt;a href="https://njump.me/nevent1qqsqj55kvu28uyq2jr6nfwx20mv7c0vkm0vxkgx0zzrnanfp4wwv8nczyzm7669svt0xkjsju50a22zurc0qa589z2xd4yatzx6p2z64a5e0cyxz3e3">borrador de propuesta&lt;/a>): Un borrador argumenta que las Máquinas de Vending de Datos &lt;a href="https://nostrcompass.org/es/topics/nip-90/">NIP-90&lt;/a> fueron diseñadas como un mercado de cómputo de propósito general, y el modelo de solicitud/respuesta es más pesado de lo necesario cuando un cliente solo quiere una lista direccionable de IDs de eventos.&lt;/li>
&lt;li>&lt;strong>Colores de perfil: identidad visual determinista&lt;/strong> (&lt;a href="https://njump.me/nevent1qqsy3tj7mn3r7wczmc52aknf5ym43lj3rrhd3sfprzvc6qydsq62wrgzyzjk8j56zmt5fwv088l5y84hqq4gags3grvuznlu4zmyt54w34cccyxenp3">borrador de propuesta&lt;/a>): Un nuevo borrador de NIP para derivar colores deterministas y legibles de un pubkey de Nostr para identidad visual consistente entre clientes.&lt;/li>
&lt;li>&lt;strong>NIPs de seguimiento Namecoin: anclar identidad, relays, TLS y reputación&lt;/strong> (&lt;a href="https://njump.me/nevent1qqsydpjnaj2netmv0h5mlm2j6zpk8u50yvc9pqth3ly8pzuwy22720szypp3shk7edn43y5zfvdr0ftl8eq8l00zaknjqx3c9xuv7ja8ck60q7uupzs">clúster de borradores&lt;/a>): Un clúster separable de borradores de NIP que mueven partes del stack de Nostr existente a registros anclados en Namecoin.&lt;/li>
&lt;/ul>
&lt;h2 id="inmersión-profunda-en-nip-nip-34-git-stuff">Inmersión profunda en NIP: NIP-34 (git stuff)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> define kinds de eventos para alojar repositorios git, parches, pull requests, issues y estado de fusión en relays Nostr. Es el estándar que convierte Nostr en una capa de coordinación para la colaboración de código.&lt;/p>
&lt;p>Un repositorio se anuncia como un evento direccionable kind &lt;code>30617&lt;/code> cuyo tag &lt;code>d&lt;/code> es un identificador en kebab-case. Los parches usan kind &lt;code>1617&lt;/code> y llevan la salida de &lt;code>git format-patch&lt;/code> en el cuerpo del contenido. Los pull requests usan kind &lt;code>1618&lt;/code>. Los issues usan kind &lt;code>1621&lt;/code> con contenido markdown. Los eventos de estado mueven un hilo entre Abierto (&lt;code>1630&lt;/code>), Aplicado/Fusionado o Resuelto (&lt;code>1631&lt;/code>), Cerrado (&lt;code>1632&lt;/code>) y Borrador (&lt;code>1633&lt;/code>).&lt;/p>
&lt;h2 id="inmersión-profunda-en-nip-nip-53-actividades-en-vivo">Inmersión profunda en NIP: NIP-53 (Actividades en Vivo)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-53/">NIP-53&lt;/a> define la superficie estándar de eventos para actividades en vivo en Nostr: transmisiones en vivo, espacios de reunión persistentes, eventos de conferencia programados, presencia de oyentes y el canal de chat en vivo que vincula los mensajes de chat a un registro de actividad en vivo específico.&lt;/p>
&lt;p>Una transmisión en vivo se anuncia como un evento direccionable kind &lt;code>30311&lt;/code>. NIP-53 separa el espacio persistente del evento programado que se celebra en su interior. Un kind &lt;code>30312&lt;/code> Meeting Space define una sala, y un kind &lt;code>30313&lt;/code> Conference Event representa una reunión programada o en curso en esa sala.&lt;/p>
&lt;p>La superficie de actividades en vivo de Nostr es intencionalmente delgada: NIP-53 anuncia la actividad, mientras otros NIPs manejan preocupaciones adyacentes. Los zaps a transmisiones en vivo usan recibos de zap &lt;a href="https://nostrcompass.org/es/topics/nip-57/">NIP-57 (Zaps)&lt;/a>, los objetivos de recaudación de fondos usan metas de zap &lt;a href="https://nostrcompass.org/es/topics/nip-75/">NIP-75 (Metas de Zap)&lt;/a>, y las grabaciones de video pueden republicarse como eventos de video &lt;a href="https://nostrcompass.org/es/topics/nip-71/">NIP-71 (Eventos de Video)&lt;/a>.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. Si estás construyendo algo o tienes noticias que compartir, envíanos un DM en Nostr o encuéntranos en &lt;a href="https://nostrcompass.org">nostrcompass.org&lt;/a>.&lt;/p></content:encoded></item><item><title>Nostr Compass #20</title><link>https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/</link><pubDate>Wed, 29 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/</guid><description>&lt;p>Bienvenidos de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#gitworkshop-ships-in-browser-pr-merge-repository-following-and-a-bandwidth-efficient-git-explorer">GitWorkshop&lt;/a> convierte git-sobre-Nostr en una superficie de revisión de código más completa con un botón para fusionar PR en el navegador, favoritos y seguimiento de repositorios, un explorador de git eficiente en ancho de banda, comentarios de revisión en línea con kind &lt;code>1111&lt;/code> y estado de notificaciones cifrado multi-dispositivo. &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#routstrd-launches-a-local-router-for-inference-over-nostr">Routstrd&lt;/a> lanza un demonio local que descubre proveedores de modelos mediante anuncios Nostr de kind &lt;code>38421&lt;/code> y les paga con Cashu. Los lanzamientos etiquetados incluyen &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#ngit-v242-fixes-grasp-relay-detection-for-pr-submissions">ngit v2.4.2&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#wisp-v100-graduates-from-beta">Wisp v1.0.0&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#grain-v052-fixes-websocket-lockup-v053-continues-polish">grain v0.5.2 y v0.5.3&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#mostro-core-v0100-and-mostro-mobile-v125-adopt-nip-59-dual-key-gift-wrap">Mostro Core v0.10.0 y Mostro Mobile v1.2.5&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#marmot-ts-v050-ships-addressable-keypackages">marmot-ts v0.5.0&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#cruxcoach-v013-ships-encrypted-climbing-data-backup-with-nostr-and-blossom">CruxCoach v0.1.3&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#meiso-v130-adds-subtasks-blossom-attachments-and-nip-89-tagging">Meiso v1.3.0&lt;/a>, NoorNote, Nostria, Nostr Calendar, nos2x-fox, applesauce, nostr-double-ratchet y más. Los cambios aún no publicados cubren &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#amethyst-advances-nests-audio-rooms-with-moq-interop-testing">Amethyst Nests&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#nostream-adds-nip-65-relay-list-support-and-nwc-payments">nostream NIP-65 y NWC&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#fips-adds-nostr-based-udpnat-bootstrap">FIPS con bootstrap udp:nat basado en Nostr&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#strfry-adds-per-connection-observability">observabilidad de strfry&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#sprout-adds-owner-attestation-and-multi-workspace-support">atestaciones de propietario en Sprout&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#zap-cooking-adds-recipe-packs-delete-requests-and-bunker-login">paquetes de recetas en Zap Cooking&lt;/a>. Los proyectos recién rastreados incluyen &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#nostrord-a-nip-29-client-built-with-kotlin-multiplatform-and-wasm">Nostrord&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#clave-brings-nip-46-remote-signing-to-ios-via-apns">Clave&lt;/a>, Treasures, smesh, Surveil, Fundstr, Nod City, deploy-nsite-to-pages y null&amp;ndash;nostr. La retrospectiva de fin de mes cubre los abriles de Nostr desde 2021 hasta 2026.&lt;/p></description><content:encoded>&lt;p>Bienvenidos de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#gitworkshop-ships-in-browser-pr-merge-repository-following-and-a-bandwidth-efficient-git-explorer">GitWorkshop&lt;/a> convierte git-sobre-Nostr en una superficie de revisión de código más completa con un botón para fusionar PR en el navegador, favoritos y seguimiento de repositorios, un explorador de git eficiente en ancho de banda, comentarios de revisión en línea con kind &lt;code>1111&lt;/code> y estado de notificaciones cifrado multi-dispositivo. &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#routstrd-launches-a-local-router-for-inference-over-nostr">Routstrd&lt;/a> lanza un demonio local que descubre proveedores de modelos mediante anuncios Nostr de kind &lt;code>38421&lt;/code> y les paga con Cashu. Los lanzamientos etiquetados incluyen &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#ngit-v242-fixes-grasp-relay-detection-for-pr-submissions">ngit v2.4.2&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#wisp-v100-graduates-from-beta">Wisp v1.0.0&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#grain-v052-fixes-websocket-lockup-v053-continues-polish">grain v0.5.2 y v0.5.3&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#mostro-core-v0100-and-mostro-mobile-v125-adopt-nip-59-dual-key-gift-wrap">Mostro Core v0.10.0 y Mostro Mobile v1.2.5&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#marmot-ts-v050-ships-addressable-keypackages">marmot-ts v0.5.0&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#cruxcoach-v013-ships-encrypted-climbing-data-backup-with-nostr-and-blossom">CruxCoach v0.1.3&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#meiso-v130-adds-subtasks-blossom-attachments-and-nip-89-tagging">Meiso v1.3.0&lt;/a>, NoorNote, Nostria, Nostr Calendar, nos2x-fox, applesauce, nostr-double-ratchet y más. Los cambios aún no publicados cubren &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#amethyst-advances-nests-audio-rooms-with-moq-interop-testing">Amethyst Nests&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#nostream-adds-nip-65-relay-list-support-and-nwc-payments">nostream NIP-65 y NWC&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#fips-adds-nostr-based-udpnat-bootstrap">FIPS con bootstrap udp:nat basado en Nostr&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#strfry-adds-per-connection-observability">observabilidad de strfry&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#sprout-adds-owner-attestation-and-multi-workspace-support">atestaciones de propietario en Sprout&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#zap-cooking-adds-recipe-packs-delete-requests-and-bunker-login">paquetes de recetas en Zap Cooking&lt;/a>. Los proyectos recién rastreados incluyen &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#nostrord-a-nip-29-client-built-with-kotlin-multiplatform-and-wasm">Nostrord&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#clave-brings-nip-46-remote-signing-to-ios-via-apns">Clave&lt;/a>, Treasures, smesh, Surveil, Fundstr, Nod City, deploy-nsite-to-pages y null&amp;ndash;nostr. La retrospectiva de fin de mes cubre los abriles de Nostr desde 2021 hasta 2026.&lt;/p>
&lt;h2 id="historias-principales">Historias principales&lt;/h2>
&lt;h3 id="gitworkshop-lanza-fusión-de-pr-en-el-navegador-seguimiento-de-repositorios-y-un-explorador-de-git-eficiente-en-ancho-de-banda">GitWorkshop lanza fusión de PR en el navegador, seguimiento de repositorios y un explorador de git eficiente en ancho de banda&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev">GitWorkshop&lt;/a>, la capa de colaboración web de Dan Conway para &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> git-sobre-Nostr, publicó esta semana un lanzamiento importante que acerca el flujo de trabajo mucho más a lo que los desarrolladores esperan de GitHub o GitLab, manteniendo comentarios, listas de repositorios y notificaciones dentro de eventos Nostr firmados.&lt;/p>
&lt;p>La incorporación destacada es un botón largamente esperado para fusionar PR en el navegador para repositorios que usan servidores GRASP. El lanzamiento también añade favoritos y seguimiento de repositorios basados en reacciones y listas de &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a>, con conjuntos de repositorios fijados publicados como eventos kind &lt;code>10617&lt;/code> que apuntan a anuncios de repositorio kind &lt;code>30617&lt;/code> mediante tags &lt;code>a&lt;/code> ordenados. Las páginas de perfil ahora pueden mostrar una lista portátil de repositorios.&lt;/p>
&lt;p>Un explorador de git eficiente en ancho de banda reemplaza al anterior clonado superficial en el navegador. El nuevo explorador se apoya en el protocolo cliente/servidor de git subyacente sobre el que se construye GRASP, por lo que puede manejar repositorios grandes sin forzar al navegador a descargar un pack completo. La búsqueda ahora cubre nombres de usuario y metadatos de repositorio, impulsada por &lt;a href="https://github.com/nostr-protocol/nips/blob/master/50.md">NIP-50&lt;/a> y una implementación de relay &lt;code>ngit-indexer&lt;/code> que descubre y sincroniza anuncios de repositorio en toda la red. Un flujo de creación de repositorios en el navegador completa la ruta de descubrimiento e incorporación.&lt;/p>
&lt;p>Las herramientas de revisión están reconstruidas alrededor de una pestaña Files Changed, un visor de diff por parche y un conjunto de nuevas primitivas experimentales. Los comentarios de revisión de código en línea usan kind &lt;code>1111&lt;/code>, construido sobre &lt;a href="https://github.com/nostr-protocol/nips/blob/master/22.md">NIP-22&lt;/a>: cada comentario apunta a una ruta de archivo (tag &lt;code>f&lt;/code>), un SHA de commit (tag &lt;code>c&lt;/code>) y un rango de líneas seleccionado (tag &lt;code>line&lt;/code>) para que un cliente pueda renderizar el comentario en la posición correcta dentro del diff. Un segundo nivel de primitivas experimentales queda con permisos del autor y de los mantenedores del repositorio y usa etiquetas &lt;a href="https://github.com/nostr-protocol/nips/blob/master/32.md">NIP-32&lt;/a>: renombrar el asunto de un Issue o PR después de enviarlo, añadir hashtags posteriormente, fijar un CoverNote versionado en la parte superior de un PR o Issue como resumen editable y marcar subhilos de discusión de código en línea como resueltos. Los eventos de veredicto y los bloques &lt;code>suggestion&lt;/code> siguen en borrador y aún no se han lanzado.&lt;/p>
&lt;p>El estado de notificaciones entre dispositivos también se sincroniza mediante Nostr, pero con un giro que preserva la privacidad. GitWorkshop genera un par de claves dedicado para notificaciones, cifra ese nsec y lo almacena dentro de un evento kind &lt;code>30078&lt;/code>. El nsec de notificaciones firma después los eventos reales de estado de notificaciones. La indirección evita que el firmador principal del usuario sea saturado con solicitudes frecuentes de cifrado y descifrado para cada acción de lectura o archivado, e impide que observadores externos vean fácilmente cuándo un usuario toca su estado de notificaciones. Un usuario puede sincronizar el estado de lectura y archivado entre dispositivos; los relays solo ven blobs cifrados.&lt;/p>
&lt;h3 id="routstrd-lanza-un-enrutador-local-para-inferencia-sobre-nostr">Routstrd lanza un enrutador local para inferencia sobre Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/routstr/routstrd">Routstrd&lt;/a> es un nuevo demonio en TypeScript que proporciona a las herramientas locales un endpoint compatible con OpenAI y enruta cada solicitud a un proveedor competidor de &lt;a href="https://routstr.com">Routstr&lt;/a>. El demonio descubre proveedores a través de anuncios Nostr de kind &lt;code>38421&lt;/code> definidos en la especificación RIP-02 de Routstr. Después puntúa a los proveedores por precio, confianza y rendimiento reciente bajo RIP-06 y envía cada solicitud a la mejor opción del momento.&lt;/p>
&lt;p>El pago se realiza mediante una wallet local de Cashu gestionada por cocod y financiada con Lightning. Esto proporciona al cliente una ruta de liquidación denominada en sats manteniendo el descubrimiento de proveedores público y sin permisos a través de relays Nostr. Si un proveedor falla durante una sesión, Routstrd puede recurrir al siguiente nodo mejor clasificado. La ruta de instalación es &lt;code>bun install -g routstrd&lt;/code>, seguida de &lt;code>routstrd onboard&lt;/code> para la configuración de la wallet y los relays.&lt;/p>
&lt;p>La &lt;a href="https://github.com/routstr">organización Routstr&lt;/a> más amplia mantiene el demonio, el software del nodo en Python (&lt;code>routstr-core&lt;/code>), una interfaz de chat y las especificaciones del protocolo. Para los usuarios, el puerto local se convierte en la interfaz estable: las herramientas existentes compatibles con OpenAI apuntan a Routstrd, mientras el demonio maneja el descubrimiento de proveedores, el enrutado y el pago.&lt;/p>
&lt;h2 id="lanzamientos-etiquetados">Lanzamientos etiquetados&lt;/h2>
&lt;h3 id="ngit-v242-corrige-la-detección-de-servidores-grasp-para-envíos-de-pr">ngit v2.4.2 corrige la detección de servidores GRASP para envíos de PR&lt;/h3>
&lt;p>&lt;a href="https://codeberg.org/DanConwayDev/ngit-cli">ngit&lt;/a> publicó &lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.2">v2.4.2&lt;/a> con una corrección para la detección de servidores GRASP de repositorio, manteniendo el envío de PR en el camino feliz cuando una propuesta usa el kind PR. Cabe señalar que ngit actualmente utiliza por defecto el kind &lt;code>Patch&lt;/code> para la mayoría de los cambios a menos que sean grandes; el mantenedor está trabajando para cambiar ese valor por defecto. &lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.1">v2.4.1&lt;/a>, publicada anteriormente en la semana, corrigió errores &lt;code>fatal&lt;/code> durante clone y fetch cuando los datos git de un PR abierto no estaban disponibles en los servidores git especificados por el repositorio.&lt;/p>
&lt;h3 id="wisp-v100-se-gradúa-de-beta">Wisp v1.0.0 se gradúa de beta&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>, un cliente Android en Kotlin y Jetpack Compose centrado en enrutado de relays, privacidad y una interfaz nativa pequeña, publicó &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.0.0">v1.0.0&lt;/a> y a continuación &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.0.2">v1.0.2&lt;/a>. El hito 1.0.0 reúne el interruptor de denominación fiat de Normie Mode, el feed For You, la configuración de grupos basados en relays de &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> y la difusión de listas de relays &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> cubierta en &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-22-newsletter/#wisp-v0180-beta-adds-normie-mode-for-you-feed-and-nip-29-group-config">Newsletter #19&lt;/a>. v1.0.2 añade soporte para páginas de 16 KB de Android 15, una pestaña de escaneo de QR en el cajón lateral, un botón de descarga para los controles de vídeo en línea y correcciones de rendimiento en la lista de notificaciones.&lt;/p>
&lt;h3 id="grain-v052-corrige-el-bloqueo-de-websocket-v053-continúa-el-pulido">grain v0.5.2 corrige el bloqueo de WebSocket, v0.5.3 continúa el pulido&lt;/h3>
&lt;p>&lt;a href="https://github.com/0ceanSlim/grain">grain&lt;/a>, el relay en Go de 0ceanSlim, publicó &lt;a href="https://github.com/0ceanSlim/grain/releases/tag/v0.5.2">v0.5.2&lt;/a> como un hotfix crítico para un bloqueo de WebSocket introducido en v0.5.0, seguido de &lt;a href="https://github.com/0ceanSlim/grain/releases/tag/v0.5.3">v0.5.3&lt;/a>. El bloqueo hacía que las conexiones se colgaran bajo ciertos filtros y rutas de WebSocket, por lo que los operadores en v0.5.1 o v0.5.0 deberían actualizar. grain rastrea todas las categorías principales de eventos Nostr, expone información de relay NIP-11, admite control de acceso por lista blanca/negra, límites de tasa por kind, un panel web y una biblioteca cliente Go añadida en la línea v0.5.x.&lt;/p>
&lt;h3 id="mostro-core-v0100-y-mostro-mobile-v125-adoptan-nip-59-gift-wrap-con-doble-clave">Mostro Core v0.10.0 y Mostro Mobile v1.2.5 adoptan NIP-59 gift wrap con doble clave&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.10.0">Mostro Core v0.10.0&lt;/a> añade el nuevo módulo gift-wrap de &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> con identidad y claves de intercambio separadas. El código de transporte anterior utilizaba una única clave de identidad tanto para la identidad de intercambio como para el gift wrapping. v0.10.0 separa la identidad de intercambio estable de la clave de envoltura efímera, para que cada intercambio pueda usar una clave de transporte fresca mientras se preserva la identidad necesaria para el protocolo de intercambio. La integración con el demonio llega mediante &lt;a href="https://github.com/MostroP2P/mostro/pull/718">Mostro PR #718&lt;/a>, y &lt;a href="https://github.com/MostroP2P/mostro-cli/pull/165">mostro-cli PR #165&lt;/a> lleva la misma migración al cliente de línea de comandos.&lt;/p>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.5">Mostro Mobile v1.2.5&lt;/a> se publica junto con el trabajo del protocolo. &lt;a href="https://github.com/MostroP2P/mobile/pull/581">PR #581&lt;/a> permite a los tomadores filtrar ofertas por la antigüedad de la cuenta del creador, dando a los usuarios una forma de evitar cuentas de creadores recién creadas en el libro de órdenes. &lt;a href="https://github.com/MostroP2P/mobile/pull/580">PR #580&lt;/a> corrige las etiquetas de rol en los detalles de las órdenes canceladas, y &lt;a href="https://github.com/MostroP2P/mobile/pull/576">PR #576&lt;/a> limpia los botones de cancelación cooperativa.&lt;/p>
&lt;h3 id="marmot-ts-v050-estrena-keypackages-direccionables">marmot-ts v0.5.0 estrena KeyPackages direccionables&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/marmot-ts">marmot-ts&lt;/a> publicó &lt;a href="https://github.com/marmot-protocol/marmot-ts/releases/tag/%40internet-privacy%2Fmarmot-ts%400.5.0">@internet-privacy/marmot-ts@0.5.0&lt;/a>, el primer lanzamiento con cambios rupturistas planeado para el cliente TypeScript de &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>. &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/68">PR #68&lt;/a> añade soporte para KeyPackage direccionables: &lt;code>KeyPackageManager&lt;/code> ahora puede manejar tanto los eventos KeyPackage heredados kind &lt;code>443&lt;/code> como los nuevos kind &lt;code>30443&lt;/code>. El lanzamiento elimina &lt;code>KeyPackageStore&lt;/code> y las clases de almacenamiento del estado de grupo, reemplazándolas con almacenes clave-valor genéricos que se pasan a &lt;code>KeyPackageManager&lt;/code> y &lt;code>MarmotGroup&lt;/code>. También traslada la gestión de invitaciones y grupos a &lt;code>MarmotClient.invites&lt;/code> y &lt;code>MarmotClient.groups&lt;/code>, por lo que quienes lo integran directamente necesitan cambios en el constructor y en el almacenamiento antes de actualizar.&lt;/p>
&lt;h3 id="cruxcoach-v013-estrena-copia-de-seguridad-cifrada-de-datos-de-escalada-con-nostr-y-blossom">CruxCoach v0.1.3 estrena copia de seguridad cifrada de datos de escalada con Nostr y Blossom&lt;/h3>
&lt;p>&lt;a href="https://codeberg.org/CruxCoach/CruxCoach">CruxCoach&lt;/a> es una nueva aplicación Android de código abierto para escaladores en Kilter Board. La Kilter Board es un muro de entrenamiento interactivo cuyos agarres se iluminan por Bluetooth para mostrar rutas. La app se lanzó el 14 de abril y alcanzó &lt;a href="https://codeberg.org/CruxCoach/CruxCoach/releases/tag/v0.1.3">v0.1.3&lt;/a> el 26 de abril.&lt;/p>
&lt;p>v0.1.3 añade copia de seguridad opcional cifrada en la nube. La cuenta CruxCoach de un usuario es un par de claves Nostr, y la clave privada también funciona como entrada para la clave de cifrado de la copia local. La app cifra los datos de escalada en el dispositivo y refleja el texto cifrado en servidores de almacenamiento Blossom (&lt;code>blossom.primal.net&lt;/code> y &lt;code>nostr.download&lt;/code>). Las acciones de borrado remoto llaman a la ruta de limpieza de Blossom. Más allá de la copia de seguridad, CruxCoach usa firma remota &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> para soporte de Amber, DMs privados &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> para el contacto con el desarrollador dentro de la app, listas de relays &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> para descubrimiento de relays y la biblioteca &lt;a href="https://github.com/vitorpamplona/quartz">Quartz&lt;/a> de Vitor Pamplona para la plomería Nostr. Los usuarios pueden instalarla a través de Zapstore o APKs directos de Codeberg.&lt;/p>
&lt;h3 id="meiso-v130-añade-subtareas-adjuntos-blossom-y-etiquetado-nip-89">Meiso v1.3.0 añade subtareas, adjuntos Blossom y etiquetado NIP-89&lt;/h3>
&lt;p>&lt;a href="https://github.com/higedamc/meiso">Meiso&lt;/a> es un gestor de tareas minimalista en Flutter para Android que almacena tareas como datos de aplicación kind &lt;code>30078&lt;/code> cifrados con &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> en relays Nostr. &lt;a href="https://github.com/higedamc/meiso/releases/tag/v1.3.0">v1.3.0&lt;/a>, publicada el 6 de abril, añade subtareas con relaciones padre/hijo, enlaces entre tareas para bloqueadas/bloqueadas-por/relacionadas-con/duplicada-de, adjuntos de imagen a través de endpoints de subida HTTP Blossom y &lt;a href="https://nostrcompass.org/es/topics/nip-96/">NIP-96&lt;/a>, un tag &lt;code>client&lt;/code> de aplicación recomendada &lt;a href="https://github.com/nostr-protocol/nips/blob/master/89.md">NIP-89&lt;/a> en los eventos publicados y una herramienta de sincronización de línea de comandos en Go. v1.3.0 también corrige el comportamiento de los relays en el arranque en frío y la reutilización del cliente Amber.&lt;/p>
&lt;h3 id="noornote-nostria-nostr-calendar-nos2x-fox-y-lanzamientos-de-bibliotecas">NoorNote, Nostria, Nostr Calendar, nos2x-fox y lanzamientos de bibliotecas&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a> publicó &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.8.7">v0.8.7&lt;/a>, &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.8.8">v0.8.8&lt;/a> y &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.8.9">v0.8.9&lt;/a>. Esos lanzamientos corrigen el manejo de clics en imágenes y vídeos en reposts citados, añaden soporte de lightbox para imágenes en artículos de formato largo y corrigen la pantalla de inicio en blanco en escritorio. &lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> publicó &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.29">v3.1.29&lt;/a>, &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.30">v3.1.30&lt;/a> y &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.31">v3.1.31&lt;/a>, añadiendo compresión de imágenes en el editor de artículos, un interruptor USD para la wallet, controles de tarjetas promocionales, soporte PDF y pulido del diseño móvil.&lt;/p>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.4.1">Nostr Calendar v1.4.1&lt;/a> desacopla la publicación de eventos de calendario de la gestión de listas de calendarios y corrige el seguimiento de invitaciones. &lt;a href="https://github.com/diegogurpegui/nos2x-fox/releases/tag/v1.19.0">nos2x-fox v1.19.0&lt;/a> añade marcos temporales de autorización personalizados para las concesiones de firma de navegador NIP-07 en Firefox. &lt;a href="https://github.com/mmalmi/nostr-double-ratchet/releases/tag/v0.0.97">nostr-double-ratchet v0.0.97&lt;/a> publica nuevos binarios. &lt;a href="https://github.com/nostr-wot/nostr-wot-sdk/releases/tag/nostr-wot-sdk%400.9.0">nostr-wot-sdk 0.9.0&lt;/a> monta &lt;code>NostrSessionProvider&lt;/code> por defecto, y &lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/535">nostr-tools PR #535&lt;/a> añade soporte de análisis multi-relay para cadenas wallet-connect NIP-47.&lt;/p>
&lt;p>A finales de semana, &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.1.0-pre1">Amber v6.1.0-pre1&lt;/a> publicó una preversión con un mejor diseño para conectar aplicaciones nuevas, correcciones del diálogo del firmador, mejor manejo de permisos de notificación y selección de cuentas refactorizada. &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.14">nostr-vpn v0.3.14&lt;/a> publicó una nueva compilación con artefactos para macOS Apple Silicon, Linux y Windows. &lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/releases/tag/v0.5.8">Bitcredit Core v0.5.7-hotfix-1 y v0.5.8&lt;/a> publicaron correcciones consecutivas para un problema de validación de bloques huérfanos. &lt;a href="https://gitlab.com/chad.curtis/surveil/-/tags/v0.1.6">Surveil v0.1.6&lt;/a> trajo pulido de UI móvil y una página About renovada; el proyecto se presenta &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-29-newsletter/#surveil-a-magic-the-gathering-deck-builder-on-nostr">más abajo&lt;/a>.&lt;/p>
&lt;h3 id="applesauce-600-elimina-las-fábricas-de-eventos-heredadas-y-añade-análisis-de-uri-blossom">applesauce 6.0.0 elimina las fábricas de eventos heredadas y añade análisis de URI Blossom&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/applesauce">applesauce&lt;/a>, el kit de herramientas Nostr en TypeScript de hzrd149, publicó un tren de lanzamientos 6.0.0 en el monorepo. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%406.0.0">applesauce-core@6.0.0&lt;/a> elimina la clase heredada &lt;code>EventFactory&lt;/code> y los antiguos ayudantes &lt;code>buildEvent&lt;/code>, &lt;code>modifyEvent&lt;/code> y &lt;code>createEvent&lt;/code>, empujando a quienes llaman hacia las nuevas clases de fábrica en &lt;code>applesauce-core/factories&lt;/code> y &lt;code>applesauce-common&lt;/code>. También añade manejo de direcciones IP y localhost al análisis de enlaces, expresiones regulares para URI Blossom BUD-10 y nuevos ayudantes observables como &lt;code>timeoutWithIgnore&lt;/code>, &lt;code>combineLatestBy&lt;/code>, &lt;code>combineLatestByIndex&lt;/code> y &lt;code>combineLatestByKey&lt;/code>.&lt;/p>
&lt;p>Los lanzamientos a nivel de paquete completan las piezas específicas de Nostr. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-content%406.0.0">applesauce-content@6.0.0&lt;/a> añade nodos de URI Blossom BUD-10 para texto y Markdown, dando a los renderizadores una forma de primera clase para analizar referencias Blossom en el contenido. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-actions%406.0.0">applesauce-actions@6.0.0&lt;/a> añade clases base de fábrica para listas NIP-51 que cubren relays, usuarios e ítems, haciendo la construcción de listas menos ad hoc. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-wallet-connect%406.0.0">applesauce-wallet-connect@6.0.0&lt;/a> expone &lt;code>WalletConnect.connectURI&lt;/code>, para que las apps puedan acceder directamente a un URI wallet-connect NIP-47 existente.&lt;/p>
&lt;h2 id="cambios-sin-publicar">Cambios sin publicar&lt;/h2>
&lt;h3 id="amethyst-avanza-las-salas-de-audio-nests-con-pruebas-de-interoperabilidad-moq">Amethyst avanza las salas de audio Nests con pruebas de interoperabilidad MoQ&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> fusionó varios PR centrados en Nests esta semana, construyendo sobre la pila de salas de audio &lt;a href="https://datatracker.ietf.org/group/moq/about/">Media over QUIC&lt;/a> de la semana pasada. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2622">PR #2622&lt;/a> añade un arnés de interoperabilidad entre clientes que ejercita el cliente MoQ de Amethyst contra la implementación web de referencia. El objetivo es detectar divergencias a nivel de cable entre Android/navegador antes de que los usuarios se topen con ellas. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2625">PR #2625&lt;/a> mejora el foco del hablante y el estado de conexión en picture-in-picture, mientras que &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2620">PR #2620&lt;/a> clarifica avatares, estado de silencio y estado de habla en la cuadrícula de participantes. A finales de semana, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2634">PR #2634&lt;/a> corrige el padding del IME y los insets de ventana en la vista Nest a pantalla completa y &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2635">PR #2635&lt;/a> añade filtrado por frescura basado en presencia al feed de Nests. Por separado, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2627">PR #2627&lt;/a> elimina la implementación C personalizada de secp256k1 de Amethyst y migra a &lt;code>libschnorr256k1&lt;/code>.&lt;/p>
&lt;h3 id="nostream-añade-soporte-para-listas-de-relays-nip-65-y-pagos-nwc">nostream añade soporte para listas de relays NIP-65 y pagos NWC&lt;/h3>
&lt;p>&lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a> fusionó tres PR notables después del sprint de 53 PR del relay de la semana pasada. El soporte para metadatos de listas de relays &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> llega en &lt;a href="https://github.com/Cameri/nostream/pull/585">PR #585&lt;/a>, para que el relay pueda indexar y servir eventos kind &lt;code>10002&lt;/code> de listas de relays. Un procesador de pagos Nostr Wallet Connect sigue en &lt;a href="https://github.com/Cameri/nostream/pull/539">PR #539&lt;/a>, añadiendo una ruta de pago-por-relay. La limpieza de conexiones mejora en &lt;a href="https://github.com/Cameri/nostream/pull/438">PR #438&lt;/a>, que cierra un bug de conexiones muertas donde los sockets con suscripciones activas no eran recogidos, causando que los conteos de suscripciones se desviaran en instancias de larga ejecución.&lt;/p>
&lt;h3 id="fips-añade-bootstrap-udpnat-basado-en-nostr">FIPS añade bootstrap udp:nat basado en Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a>, el Free Internetworking Peering System previamente cubierto en &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-25-newsletter/#fips-nostr-native-mesh-networking">Newsletter #6&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#fips-v020-ships-tor-transport-reproducible-builds-and-sidecar-examples">Newsletter #10&lt;/a>, fusionó &lt;a href="https://github.com/jmcorgan/fips/pull/53">PR #53&lt;/a> con bootstrap &lt;code>udp:nat&lt;/code> basado en Nostr. El cambio permite a los nodos publicar anuncios Nostr, intercambiar señalización cifrada de oferta/respuesta, descubrir direcciones públicas mediante STUN, realizar UDP hole punching y entregar el socket perforado a la pila de transporte normal de FIPS. La implementación vincula las identidades de la carga útil de señalización al remitente Nostr real, consulta los relays configurados de DM y anuncios para la búsqueda de bandeja de entrada y revierte los traspasos de traversal adoptado fallidos para que los transportes UDP huérfanos no queden vivos. Este es el trabajo de anuncio Nostr y traversal NAT a seguir en el repositorio canónico, &lt;code>jmcorgan/fips&lt;/code>.&lt;/p>
&lt;h3 id="strfry-añade-observabilidad-por-conexión">strfry añade observabilidad por conexión&lt;/h3>
&lt;p>&lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a> fusionó &lt;a href="https://github.com/hoytech/strfry/pull/214">PR #214&lt;/a>, añadiendo observabilidad por conexión y métricas a nivel de conexión exportables a través de Prometheus. &lt;a href="https://github.com/hoytech/strfry/pull/204">PR #204&lt;/a> normaliza las etiquetas de Prometheus, y &lt;a href="https://github.com/hoytech/strfry/pull/215">PR #215&lt;/a> añade una sección de Community Integrations a la documentación que cubre proyectos de identidad Namecoin construidos sobre strfry.&lt;/p>
&lt;h3 id="sprout-añade-owner-attestation-y-soporte-multi-workspace">Sprout añade Owner Attestation y soporte multi-workspace&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/sprout">Sprout&lt;/a>, el cliente Nostr de Block, fusionó &lt;a href="https://github.com/block/sprout/pull/406">PR #406&lt;/a> implementando NIP-OA (Owner Attestation). La característica proporciona a un agente autónomo una prueba criptográfica de que una pubkey humana específica autorizó sus acciones. &lt;a href="https://github.com/block/sprout/pull/409">PR #409&lt;/a> añade soporte multi-workspace a la app de escritorio, &lt;a href="https://github.com/block/sprout/pull/411">PR #411&lt;/a> añade autocompletado &lt;code>#channel&lt;/code> al compositor móvil y &lt;a href="https://github.com/block/sprout/pull/410">PR #410&lt;/a> cierra una ventana de carrera que podía descartar mensajes de canal activo. &lt;a href="https://github.com/block/sprout/pull/413">PR #413&lt;/a> introduce NIP-RS para sincronización de estado de lectura entre dispositivos, y los &lt;a href="https://github.com/block/sprout/pull/420">PR #420&lt;/a> y &lt;a href="https://github.com/block/sprout/pull/422">PR #422&lt;/a> de seguimiento conectan ese estado de lectura a las insignias de no leídos en móvil.&lt;/p>
&lt;h3 id="zap-cooking-añade-paquetes-de-recetas-solicitudes-de-eliminación-e-inicio-de-sesión-con-bunker">Zap Cooking añade paquetes de recetas, solicitudes de eliminación e inicio de sesión con bunker&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a> fusionó una semana productiva de trabajo de publicación de recetas. Las solicitudes de eliminación &lt;a href="https://github.com/nostr-protocol/nips/blob/master/09.md">NIP-09&lt;/a> para los Recipe Packs propios de un usuario llegan en &lt;a href="https://github.com/zapcooking/frontend/pull/367">PR #367&lt;/a>. La fiabilidad de publicación mejora mediante &lt;a href="https://github.com/zapcooking/frontend/pull/366">PR #366&lt;/a>, que fuerza cada nueva receta al relay garden y añade una cola de reintentos para el conjunto compartido de recetas. La publicación de paquetes autorales con un clic llega en &lt;a href="https://github.com/zapcooking/frontend/pull/365">PR #365&lt;/a>, y &lt;a href="https://github.com/zapcooking/frontend/pull/331">PR #331&lt;/a> añade soporte para inicio de sesión con bunker &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>.&lt;/p>
&lt;h3 id="whitenoise-rs-cifra-su-base-de-datos-local">Whitenoise-rs cifra su base de datos local&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a> fusionó &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/758">PR #758&lt;/a>, añadiendo cifrado SQLCipher para la base de datos Whitenoise en disco. Eso cierra una brecha de seguridad en reposo de larga data para la pila del demonio Marmot. &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/775">PR #775&lt;/a> expone las capacidades requeridas del grupo, &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/772">PR #772&lt;/a> migra las operaciones de medios de grupo a &lt;code>MediaOps&lt;/code> propiedad de la sesión y &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/773">PR #773&lt;/a> extrae un contenedor &lt;code>SharedServices&lt;/code> como parte del refactor de session-ops. En el lado móvil, &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/577">whitenoise PR #577&lt;/a> habilita el reinicio automático al arranque para el servicio en primer plano de Android, corrigiendo el caso en que el demonio no volvía después de reiniciar el dispositivo.&lt;/p>
&lt;h2 id="recién-rastreados-y-descubiertos">Recién rastreados y descubiertos&lt;/h2>
&lt;h3 id="nostrord-un-cliente-nip-29-construido-con-kotlin-multiplatform-y-wasm">Nostrord: un cliente NIP-29 construido con Kotlin Multiplatform y WASM&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrord/nostrord">Nostrord&lt;/a> es un nuevo cliente de chat grupal &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> enfocado al caso de uso de reemplazo de Discord. Los grupos viven en relays Nostr con membresía, roles, moderación y control de acceso aplicados por el relay, por lo que el estado del grupo está alojado por el relay NIP-29 seleccionado. El desarrollador del cliente no controla una base de datos de aplicación separada para esos grupos. La app web se ejecuta en &lt;a href="https://web.nostrord.com">web.nostrord.com&lt;/a> y está construida con Kotlin Multiplatform compilando a WebAssembly, con compilaciones nativas para Android, iOS y escritorio en desarrollo. Nostrord es beneficiario de una subvención &lt;a href="https://opensats.org">OpenSats&lt;/a> e interopera con los mismos relays NIP-29 usados por Flotilla, Chachi y 0xChat.&lt;/p>
&lt;h3 id="clave-lleva-la-firma-remota-nip-46-a-ios-mediante-apns">Clave lleva la firma remota NIP-46 a iOS mediante APNs&lt;/h3>
&lt;p>&lt;a href="https://github.com/DocNR/clave">Clave&lt;/a> es un firmador remoto para iOS en beta que firma eventos Nostr cuando la app no está abierta. La clave privada permanece en el Keychain del iPhone. Cuando un cliente envía una solicitud de firma remota &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>, un proxy del lado del servidor entrega una Notificación Push de Apple, despertando una Notification Service Extension durante hasta 30 segundos. Esa extensión descifra la solicitud con cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>, firma con la clave del Keychain y publica la respuesta. El registro del token del dispositivo usa HTTP Auth &lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">NIP-98&lt;/a> para prevenir el secuestro de tokens. Clave admite emparejamiento &lt;code>bunker://&lt;/code> y &lt;code>nostrconnect://&lt;/code>, niveles de confianza por cliente, anulaciones por kind y ha sido probado con Nostur y noStrudel.&lt;/p>
&lt;h3 id="treasures-geocaching-descentralizado-en-nostr">Treasures: geocaching descentralizado en Nostr&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/chad.curtis/treasures">Treasures&lt;/a> es una plataforma de geocaching donde los caches y los hallazgos son eventos Nostr firmados. Los creadores de caches publican eventos direccionables kind &lt;code>37516&lt;/code> con coordenadas GPS. Los buscadores registran el descubrimiento escaneando un código QR adjunto al cache físico; el código codifica la pubkey del creador, el tag &lt;code>d&lt;/code> del cache y una clave privada de verificación usada como prueba de la visita física. Los zaps &lt;a href="https://nostrcompass.org/es/topics/nip-57/">NIP-57&lt;/a> pueden fluir desde los buscadores hacia los creadores de caches, y la app en vivo está en &lt;a href="https://treasures.to">treasures.to&lt;/a>.&lt;/p>
&lt;h3 id="smesh-v051-relay-nostr-auto-alojado-cliente-y-firmador-en-una-sola-pila">smesh v0.5.1: relay Nostr auto-alojado, cliente y firmador en una sola pila&lt;/h3>
&lt;p>&lt;a href="https://git.smesh.lol/smesh/smesh">smesh&lt;/a> es una pila Nostr auto-alojada escrita en Moxie, un lenguaje personalizado derivado de Go y TinyGo por mleku. La pila incluye un binario de relay nativo con soporte HTTP, WebSocket, AUTH, búsqueda y Blossom; &lt;code>sm3sh&lt;/code>, un cliente web compilado a módulos ES; y una extensión de firmador de navegador con firma de navegador NIP-07 más soporte de cifrado NIP-04 y NIP-44. El trabajo reciente incluye mensajería de grupo MLS (RFC 9420) en v0.5.0, reconciliación de conjuntos negentropy para sincronización de relay y un motor de grafo Web of Trust. El código vive en la forja auto-alojada de mleku en &lt;code>git.smesh.lol&lt;/code>, construida con su propia herramienta &lt;code>git-web&lt;/code>. El repositorio relacionado &lt;a href="https://git.smesh.lol/smesh/gitea-nostr-auth">gitea-nostr-auth&lt;/a> es un puente OAuth2/OIDC para Gitea: los usuarios se autentican con un firmador de navegador NIP-07, el puente descubre relays a través de NIP-65 y Gitea recibe claims de identidad OIDC estándar.&lt;/p>
&lt;h3 id="surveil-un-constructor-de-mazos-de-magic-the-gathering-en-nostr">Surveil: un constructor de mazos de Magic: The Gathering en Nostr&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/chad.curtis/surveil">Surveil&lt;/a> es un cliente Nostr para jugadores de Magic: The Gathering que permite a los usuarios buscar cartas, construir mazos, escanear cartas físicas en Android con OCR ML Kit en el dispositivo y compartir mazos en la red. Los mazos se publican como eventos direccionables kind &lt;code>37381&lt;/code>, y la especificación del evento de mazo está documentada en el &lt;code>NIP.md&lt;/code> del proyecto. La capa social se construye a partir de primitivas Nostr estándar: comentarios en hilo NIP-22 (kind &lt;code>1111&lt;/code>) con alcance a cada mazo, reacciones NIP-25 (kind &lt;code>7&lt;/code>), datos de perfil &lt;a href="https://github.com/nostr-protocol/nips/blob/master/78.md">NIP-78&lt;/a> (kind &lt;code>30078&lt;/code>) para los hogares de los jugadores, feeds de seguidores kind &lt;code>3&lt;/code> y forks que llevan un tag &lt;code>a&lt;/code> de vuelta al mazo original. &lt;a href="https://gitlab.com/chad.curtis/surveil/-/tags/v0.1.6">v0.1.6&lt;/a> se publicó esta semana con pulido de UI móvil, mejoras del contador de vida, una página About renovada y una píldora de relay en el banner principal del mazo. La app web se ejecuta en cualquier lugar donde se sirva HTML estático, la compilación Android se distribuye a través de &lt;a href="https://zapstore.dev">Zapstore&lt;/a>, y los eventos kind &lt;code>37381&lt;/code> también son indexados nativamente por &lt;a href="https://about.ditto.pub/reference">Ditto&lt;/a> como mazos Magic. El repositorio está en GitLab en &lt;a href="https://gitlab.com/chad.curtis/surveil">chad.curtis/surveil&lt;/a>.&lt;/p>
&lt;h3 id="adiciones-más-pequeñas-fundstr-nod-city-deploy-nsite-to-pages-y-null--nostr">Adiciones más pequeñas: Fundstr, Nod City, deploy-nsite-to-pages y null&amp;ndash;nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/ritty65/Fundstr">Fundstr&lt;/a> es una plataforma de financiación de creadores en Nostr que usa ecash Cashu para promesas únicas y recurrentes, con definiciones de niveles de creador y DMs de Nostr. &lt;a href="https://nod.city">Nod City&lt;/a> es un sitio de reseñas de servicios Bitcoin donde las reseñas son eventos Nostr firmados y los reseñadores pueden recibir zaps; no se encontró repositorio público de código fuente. &lt;a href="https://github.com/Origami74/deploy-nsite-to-pages">deploy-nsite-to-pages&lt;/a> es una GitHub Action que refleja un nsite en GitHub Pages usando &lt;code>nsyte download&lt;/code>, soportando nsites de raíz kind &lt;code>15128&lt;/code> y con nombre kind &lt;code>35128&lt;/code>. &lt;a href="https://github.com/tami1A84/null--nostr">null&amp;ndash;nostr&lt;/a>, también descubierto en los datos NIP-34 de esta semana, es el cliente cubierto en la reciente ola de OpenSats como Nurunuru; admite mensajería de grupo MLS, Amber, búsqueda NIP-50, publicaciones protegidas NIP-70, insignias ProofMode y distribución Zapstore.&lt;/p>
&lt;p>FIPS no es un proyecto nuevo para Compass. Se cubrió en &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-25-newsletter/#fips-nostr-native-mesh-networking">Newsletter #6&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#fips-v020-ships-tor-transport-reproducible-builds-and-sidecar-examples">Newsletter #10&lt;/a>. La base de datos ahora apunta al repositorio canónico correcto, &lt;a href="https://github.com/jmcorgan/fips">jmcorgan/fips&lt;/a>, y el descubrimiento NIP-34 de esta semana también sacó a la luz mirrors relacionados de git-sobre-Nostr como &lt;code>fips&lt;/code> y &lt;code>awesome-fips&lt;/code>.&lt;/p>
&lt;h2 id="trabajo-de-protocolo">Trabajo de protocolo&lt;/h2>
&lt;h3 id="actualizaciones-de-nip">Actualizaciones de NIP&lt;/h3>
&lt;p>Propuestas y discusiones recientes en el &lt;a href="https://github.com/nostr-protocol/nips">repositorio NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Fusionados esta semana:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>NIP-34 git repositories: remove unused refs tag extension&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2325">PR #2325&lt;/a>): Elimina una extensión de tag &lt;code>refs&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> que estaba definida pero no se usaba. La limpieza reduce la ambigüedad de implementación para las herramientas git-sobre-Nostr.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-34 git repositories: remove incorrect NIP-09 claim&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2326">PR #2326&lt;/a>): Elimina una afirmación incorrecta de que los eventos de eliminación &lt;a href="https://github.com/nostr-protocol/nips/blob/master/09.md">NIP-09&lt;/a> pueden restablecer el estado del repositorio. La eliminación NIP-09 es una solicitud de eliminación de evento del lado del cliente, no una máquina de estados del repositorio. La corrección evita que los implementadores de NIP-34 traten las pistas de eliminación como restablecimientos autoritativos del repositorio.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Trabajo abierto e impulsado por implementaciones:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Comentarios de revisión en línea kind &lt;code>1111&lt;/code> de GitWorkshop&lt;/strong>: El kind de comentario de revisión de código en línea está documentado en el &lt;code>NIP.md&lt;/code> de GitWorkshop y ahora está en uso activo, pero aún no se ha propuesto como un NIP formal. Los eventos de veredicto (kind &lt;code>7321&lt;/code>) y los bloques &lt;code>suggestion&lt;/code> siguen en borrador y aún no se han lanzado. La retroalimentación de implementación de GitWorkshop y ngit determinará si las formas se convierten en un NIP autónomo de revisión git o permanecen como una convención de aplicación en capas sobre NIP-34.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Nostr mail core y Nostrmon&lt;/strong>: Dos nuevos borradores de NIPs personalizados circularon esta semana. &lt;a href="https://njump.me/57d11cdf2f9ed73f7f39d6a7a6012ee3d642584ab11887f96a031f7d00fd9697">Nostr mail core&lt;/a> propone kind &lt;code>1301&lt;/code> para contenido de correo RFC 2822, envuelto con NIP-59 para entrega privada y puenteado al correo legado mediante pubkeys de puente resueltas por NIP-05. &lt;a href="https://njump.me/5e9a8cee19d464f5f0322518ac9ccaf2399c69da6572346b4fb12d36acb17a27">Nostrmon&lt;/a> esboza kinds de eventos direccionables para regiones, mapas, criaturas, NPCs, guardados de jugador e ítems. Ambos permanecen como borradores personalizados, no NIPs fusionados.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-67: EOSE Completeness Hint&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2317">PR #2317&lt;/a>): La propuesta continúa iterando sobre añadir un marcador de completitud positivo a &lt;code>EOSE&lt;/code>, permitiendo a los relays distinguir &amp;ldquo;eventos almacenados totalmente entregados&amp;rdquo; de los casos heredados de &lt;code>EOSE&lt;/code> donde el relay no hace ninguna afirmación de completitud.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="seis-abriles-de-nostr">Seis abriles de Nostr&lt;/h2>
&lt;p>Abril ofrece una sección transversal clara del camino de desarrollo de Nostr: el documento del protocolo en 2021, el trabajo temprano de clientes en 2022, la ola de aplicaciones post-Damus en 2023, la mensajería privada y el trabajo git-sobre-Nostr en 2024, Blossom y la limpieza de listas de relays en 2025 y las subvenciones a clientes centradas en la adopción en 2026.&lt;/p>
&lt;h3 id="abril-2021-el-documento-del-protocolo-antes-del-repo-nips">Abril 2021: el documento del protocolo antes del repo NIPs&lt;/h3>
&lt;p>Fiatjaf publicó el artículo original de Nostr, &lt;a href="https://fiatjaf.com/nostr.html">&amp;ldquo;Notes and Other Stuff Transmitted by Relays&amp;rdquo;&lt;/a>, el 20 de noviembre de 2020. Ese primer texto ya contenía la forma central que todavía define el protocolo: los usuarios firman eventos con claves, los publican en relays y leen de los relays que eligen. El &lt;a href="https://github.com/nostr-protocol/nostr/commits?since=2021-04-01&amp;amp;until=2021-04-30">registro de commits de &lt;code>nostr-protocol/nostr&lt;/code>&lt;/a> no muestra commits entre el 1 y el 30 de abril. La actividad se sitúa a ambos lados: los commits de marzo de 2021 añadieron los primeros enlaces &amp;ldquo;nostwitter&amp;rdquo; y un filtro &lt;code>kind&lt;/code>, mientras que mayo de 2021 reutilizó NIP-02 y añadió la autoría de NIPs.&lt;/p>
&lt;p>En abril de 2021, no había mercado público de clientes, ni red de relays visible, ni repositorio de NIPs. El protocolo todavía vivía como un pequeño documento y unos pocos experimentos. Nostr aún no se había convertido en una red social o una plataforma de desarrollo. Todavía era un modelo relay/clave/evento esperando su primera ola sostenida de contribuidores.&lt;/p>
&lt;h3 id="abril-2022-los-nips-aún-vivían-en-el-repo-principal">Abril 2022: los NIPs aún vivían en el repo principal&lt;/h3>
&lt;p>Abril de 2022 fue el último mes antes de que los NIPs se movieran fuera del repo principal &lt;code>nostr-protocol/nostr&lt;/code>. Como la división aún no había ocurrido, el repo dedicado &lt;a href="https://github.com/nostr-protocol/nips">&lt;code>nostr-protocol/nips&lt;/code>&lt;/a> no tenía historial de pull requests de abril. En el repo principal aterrizaron tres commits de abril: &lt;a href="https://github.com/nostr-protocol/nostr/commit/bae286312a233b971bee5429adda7aff41747eb8">&amp;ldquo;Update readme to add nip12&amp;rdquo;&lt;/a> el 8 de abril por goswami1999, &lt;a href="https://github.com/nostr-protocol/nostr/commit/4b9e9d123273ba8a5c70d77df46922070c11c11d">&amp;ldquo;add kinds list&amp;rdquo;&lt;/a> el 25 de abril por jb55 y &lt;a href="https://github.com/nostr-protocol/nostr/commit/759997657f07e0344064228ffe5e93febe85d367">&amp;ldquo;add js formatting to sample code&amp;rdquo;&lt;/a> el 28 de abril por steliosrammos.&lt;/p>
&lt;p>El trabajo de clientes también empezaba a tomar forma. Los commits de Damus de abril de 2022 añadieron comportamiento inicial de chatroom, manejo de perfiles e íconos de la app, mientras que nostr-tools se estaba convirtiendo en la ruta de biblioteca JavaScript para los primeros clientes y experimentos. En el lado del protocolo, las consultas de tags genéricas NIP-12 dieron a la búsqueda por tag un lugar documentado, la lista de kinds movió Nostr hacia un modelo de registro y mejores ejemplos JavaScript facilitaron a los autores de clientes y bibliotecas implementar la especificación. El 1 de mayo, fiatjaf movió los NIPs al repo dedicado. Abril de 2022 fue el último mes de la era original de un solo repo.&lt;/p>
&lt;h3 id="abril-2023-expansión-de-aplicaciones-post-damus">Abril 2023: expansión de aplicaciones post-Damus&lt;/h3>
&lt;p>Abril de 2023 llegó tres meses después de que Damus se lanzara en la App Store de iOS el 31 de enero de 2023, y después de que Jack Dorsey publicara su clave pública de Nostr. La red acababa de absorber su primera gran ola de crecimiento público. Clientes como Damus, Snort, Iris, Coracle y Amethyst estaban activos, mientras que los operadores de relays aprendían qué le hacía un grafo social más grande a las suposiciones sobre ancho de banda, spam, búsqueda y moderación.&lt;/p>
&lt;p>Abril de 2023 tuvo un PR de NIPs fusionado: &lt;a href="https://github.com/nostr-protocol/nips/pull/456">PR #456&lt;/a>, fusionado el 17 de abril, añadiendo enlaces a entidades bech32 NIP-19 al manejo de URIs NIP-21. Los commits circundantes muestran la presión de aplicaciones detrás del trabajo del protocolo. Abril de 2023 vio trabajo en &lt;a href="https://github.com/nostr-protocol/nips/commit/8b39976e78f90fe766ad7149e250777cddacbb5e">NIP-45 COUNT&lt;/a>, marcadores de zap específicos de eventos, &lt;a href="https://github.com/nostr-protocol/nips/commit/bf0a0da6a48b96467172414d8e41dc72b0ca379c">NIP-15 marketplace&lt;/a>, semántica de delegación de eliminación NIP-26, metadatos de archivo NIP-94, manejo de errores de wallet-connect NIP-47 y &lt;a href="https://github.com/nostr-protocol/nips/commit/e91ce3409e1ce8267fc07a21784d2538621267c3">NIP-30 custom emoji&lt;/a>. La lista de contribuidores se había ampliado para incluir a fiatjaf, staab, pablof7z, Semisol, CodyTseng, sethforprivacy, mikedilger, AsaiToshiya, alexgleason, martindsq, frbittencourt y arkin0x.&lt;/p>
&lt;p>Damus, Snort, Iris, Coracle y Amethyst ya no eran demos alrededor de una especificación; eran clientes de producción lidiando con onboarding, feeds, spam, zaps, medios y selección de relays. El trabajo de protocolo de abril de 2023 se lee como el backlog que esos clientes crearon: zaps, marketplaces, metadatos de archivos, conteo, emoji y enlaces de identidad empujaron la especificación más allá de simples notas y follows.&lt;/p>
&lt;h3 id="abril-2024-mensajería-privada-git-sobre-nostr-y-soporte-a-mantenedores">Abril 2024: mensajería privada, git-sobre-Nostr y soporte a mantenedores&lt;/h3>
&lt;p>Abril de 2024 tuvo dos fusiones de PRs de NIP. &lt;a href="https://github.com/nostr-protocol/nips/pull/1167">PR #1167&lt;/a>, fusionado el 10 de abril, corrigió terminología confusa en la firma remota &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>, donde clientes y firmadores necesitan un lenguaje exacto para las acciones solicitadas y autorizadas. &lt;a href="https://github.com/nostr-protocol/nips/pull/1108">PR #1108&lt;/a>, fusionado el 17 de abril, expandió los repositorios git &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> con eventos de estado, clarificaciones, mantenedores opcionales, identificadores de repositorio y tags de descubribilidad. Ese paso hizo git-sobre-Nostr más práctico para ngit y luego GitWorkshop.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/commit/df30012430c88d49fb5b124992b04d5c61b6338b">NIP-17&lt;/a>, anteriormente NIP-24, aterrizó el 24 de abril como mensajes sellados gift-wrapped para DMs privados y chats de grupos pequeños. El trabajo de clientes y bibliotecas corría junto a esto: Amethyst, Primal, Gossip, nostr-tools, NDK y rust-nostr estaban todos activos en el mismo período.&lt;/p>
&lt;p>OpenSats también anunció soporte a largo plazo para desarrolladores de Nostr en abril de 2024: &lt;a href="https://opensats.org/blog/pablofz7-receives-lts-grant">PabloF7z&lt;/a> el 9 de abril, &lt;a href="https://opensats.org/blog/stuart-bowman-receives-lts-grant">Stuart Bowman&lt;/a> el 12 de abril y &lt;a href="https://opensats.org/blog/hzrd149-receives-lts-grant">hzrd149&lt;/a> el 15 de abril. Esas subvenciones movieron la financiación de subvenciones aisladas de proyectos hacia el mantenimiento sostenido de relays, bibliotecas e infraestructura de clientes.&lt;/p>
&lt;h3 id="abril-2025-limpieza-densa-de-nips-y-formalización-de-blossom">Abril 2025: limpieza densa de NIPs y formalización de Blossom&lt;/h3>
&lt;p>Abril de 2025 fue el mes de protocolo más denso en esta retrospectiva, con dieciséis PRs de NIPs fusionados. El mes comenzó con &lt;a href="https://github.com/nostr-protocol/nips/pull/1846">PR #1846&lt;/a>, añadiendo transacciones y direcciones blockchain a NIP-73, y &lt;a href="https://github.com/nostr-protocol/nips/pull/1865">PR #1865&lt;/a>, añadiendo tags NIP-C0 a la tabla de tags estandarizados. Continuó con &lt;a href="https://github.com/nostr-protocol/nips/pull/1801">PR #1801&lt;/a> y &lt;a href="https://github.com/nostr-protocol/nips/pull/1889">PR #1889&lt;/a>, ambos mejorando la guía de republicación de listas de relays kind &lt;code>10002&lt;/code>, y &lt;a href="https://github.com/nostr-protocol/nips/pull/1879">PR #1879&lt;/a>, que redujo y clarificó &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a>.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/1822">PR #1822&lt;/a> añadió NIP-B7 para interacción con Blossom, dando a los clientes Nostr y a los servidores Blossom una capa de coordinación canónica después de más de un año de práctica informal. &lt;a href="https://github.com/nostr-protocol/nips/pull/1051">PR #1051&lt;/a> deprecó &lt;a href="https://github.com/nostr-protocol/nips/blob/master/26.md">NIP-26&lt;/a>, la especificación de firma delegada de eventos. NIP-26 había sido difícil de implementar de forma segura y se había vuelto menos atractivo a medida que NIP-46 y otros patrones de firmador maduraban.&lt;/p>
&lt;p>El resto del mes combinó limpieza con expansión de aplicaciones: &lt;a href="https://github.com/nostr-protocol/nips/pull/1882">PR #1882&lt;/a> añadió campos de política de privacidad y términos de servicio a &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a>, &lt;a href="https://github.com/nostr-protocol/nips/pull/1849">PR #1849&lt;/a> expandió el kind &lt;code>39701&lt;/code> de marcadores web bajo NIP-B0, &lt;a href="https://github.com/nostr-protocol/nips/pull/1891">PR #1891&lt;/a> añadió ese kind de marcador al README y &lt;a href="https://github.com/nostr-protocol/nips/pull/1895">PR #1895&lt;/a> añadió tags estandarizados NIP-B0. OpenSats anunció su &lt;a href="https://opensats.org/blog/eleventh-wave-of-nostr-grants">Undécima Ola de Subvenciones de Nostr&lt;/a> el 16 de abril, financiando Swae, HAMSTR, Vertex, Nostr Double Ratchet y Nostr Game Engine. Primal, Coracle, noStrudel, nostr-tools, NDK y rust-nostr también estaban publicando durante este período, por lo que la limpieza del protocolo se ubicó junto a trabajo activo de clientes y bibliotecas.&lt;/p>
&lt;h3 id="abril-2026-endurecimiento-de-nip-34-insignias-y-subvenciones-centradas-en-la-adopción">Abril 2026: endurecimiento de NIP-34, insignias y subvenciones centradas en la adopción&lt;/h3>
&lt;p>Abril de 2026, el mes con el que cierra este número, tuvo cuatro PRs de NIPs fusionados. El primero fue &lt;a href="https://github.com/nostr-protocol/nips/pull/2276">PR #2276&lt;/a>, fusionado el 1 de abril, que cambió las insignias de perfil &lt;a href="https://github.com/nostr-protocol/nips/blob/master/58.md">NIP-58&lt;/a> a kind &lt;code>10008&lt;/code> y añadió conjuntos de insignias kind &lt;code>30008&lt;/code>, haciendo la asignación de insignias y las colecciones de insignias más componibles. Un segundo cambio de usabilidad git-sobre-Nostr llegó en &lt;a href="https://github.com/nostr-protocol/nips/pull/2312">PR #2312&lt;/a>, fusionado el 10 de abril, añadiendo semántica de URL de clonación &lt;code>nostr://&lt;/code> a &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a>. Las limpiezas del 25 de abril, &lt;a href="https://github.com/nostr-protocol/nips/pull/2325">PR #2325&lt;/a> y &lt;a href="https://github.com/nostr-protocol/nips/pull/2326">PR #2326&lt;/a>, eliminaron lenguaje NIP-34 no utilizado e incorrecto.&lt;/p>
&lt;p>Los commits relacionados afinan las mismas superficies. El 22 de abril, fiatjaf añadió una lista de servidores Blossom a NIP-51 y ajustó la edición de metadatos NIP-29 para coincidir con el comportamiento estilo PUT de Flotilla. El 26 de abril, renombró NIP-5A por claridad. Abril de 2026 se centró en hacer las superficies de protocolo ya utilizadas más fáciles de implementar y más difíciles de malinterpretar.&lt;/p>
&lt;p>OpenSats anunció su &lt;a href="https://opensats.org/blog/sixteenth-wave-of-nostr-grants">Decimosexta Ola de Subvenciones de Nostr&lt;/a> el 8 de abril, apoyando Amethyst Desktop, Nostr Mail, Nostrord, Nurunuru (null&amp;ndash;nostr) y una renovación de HAMSTR: clientes de escritorio, mensajería tipo correo, UX de grupos, onboarding en japonés y conectividad fuera de red.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Gracias por leer Nostr Compass #20. &lt;a href="https://nostr.com">Envíanos un DM en Nostr&lt;/a> con pistas, correcciones o nuevos proyectos que cubrir.&lt;/em>&lt;/p></content:encoded></item><item><title>Nostr Compass #19</title><link>https://nostrcompass.org/es/newsletters/2026-04-22-newsletter/</link><pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-04-22-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> avanzó fuerte en cumplimiento de &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, comunidades &lt;a href="https://nostrcompass.org/es/topics/nip-72/">NIP-72&lt;/a>, objetivos de zap &lt;a href="https://nostrcompass.org/es/topics/nip-75/">NIP-75&lt;/a> y salas de audio sobre MoQ. &lt;a href="https://github.com/OpenTollGate/tollgate">TollGate&lt;/a> estabilizó acceso a internet de pago por uso sobre Nostr y &lt;a href="https://nostrcompass.org/es/topics/cashu/">Cashu&lt;/a> con &lt;a href="https://github.com/OpenTollGate/tollgate/releases/tag/v0.1.0">v0.1.0&lt;/a>. &lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a> cerró una semana de trabajo de relay en torno a &lt;a href="https://nostrcompass.org/es/topics/nip-45/">NIP-45&lt;/a>, &lt;a href="https://nostrcompass.org/es/topics/nip-62/">NIP-62&lt;/a>, compresión, endurecimiento de consultas y paridad completa con &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a>. También destacaron el paquete de repositorios de Forgesworn, la sincronización de cartera Lightning de ShockWallet y los análisis de &lt;a href="https://nostrcompass.org/es/topics/nip-72/">NIP-72&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-57/">NIP-57&lt;/a>.&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> avanzó fuerte en cumplimiento de &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, comunidades &lt;a href="https://nostrcompass.org/es/topics/nip-72/">NIP-72&lt;/a>, objetivos de zap &lt;a href="https://nostrcompass.org/es/topics/nip-75/">NIP-75&lt;/a> y salas de audio sobre MoQ. &lt;a href="https://github.com/OpenTollGate/tollgate">TollGate&lt;/a> estabilizó acceso a internet de pago por uso sobre Nostr y &lt;a href="https://nostrcompass.org/es/topics/cashu/">Cashu&lt;/a> con &lt;a href="https://github.com/OpenTollGate/tollgate/releases/tag/v0.1.0">v0.1.0&lt;/a>. &lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a> cerró una semana de trabajo de relay en torno a &lt;a href="https://nostrcompass.org/es/topics/nip-45/">NIP-45&lt;/a>, &lt;a href="https://nostrcompass.org/es/topics/nip-62/">NIP-62&lt;/a>, compresión, endurecimiento de consultas y paridad completa con &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a>. También destacaron el paquete de repositorios de Forgesworn, la sincronización de cartera Lightning de ShockWallet y los análisis de &lt;a href="https://nostrcompass.org/es/topics/nip-72/">NIP-72&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-57/">NIP-57&lt;/a>.&lt;/p>
&lt;h2 id="noticias-principales">Noticias principales&lt;/h2>
&lt;h3 id="amethyst-lanza-cumplimiento-mip-de-marmot-comunidades-nip-72-objetivos-de-zap-y-salas-de-audio-con-moq">Amethyst lanza cumplimiento MIP de Marmot, comunidades NIP-72, objetivos de zap y salas de audio con MoQ&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> fusionó 57 PRs centradas en interoperabilidad de &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, gestión de comunidades &lt;a href="https://nostrcompass.org/es/topics/nip-72/">NIP-72&lt;/a>, objetivos de zap &lt;a href="https://nostrcompass.org/es/topics/nip-75/">NIP-75&lt;/a> en pantallas &lt;a href="https://nostrcompass.org/es/topics/nip-53/">NIP-53&lt;/a> y una nueva superficie de audio en tiempo real sobre Media over QUIC. El trabajo incluye alineación con formatos wire de MIP-01 y MIP-05, soporte para MIP-00 KeyPackage Relay List, correcciones de framing y descifrado MLS, una CLI &lt;code>amy&lt;/code> para operaciones de grupos, creación y moderación de comunidades, leaderboard de top zappers y una nueva pantalla de Public Chats para salas públicas de audio.&lt;/p>
&lt;h3 id="tollgate-v010-estabiliza-internet-de-pago-por-uso-sobre-nostr-y-cashu">TollGate v0.1.0 estabiliza internet de pago por uso sobre Nostr y Cashu&lt;/h3>
&lt;p>&lt;a href="https://github.com/OpenTollGate/tollgate">TollGate&lt;/a> publicó &lt;a href="https://github.com/OpenTollGate/tollgate/releases/tag/v0.1.0">v0.1.0&lt;/a>, fijando una primera referencia estable para vender conectividad por minutos o megabytes a cambio de tokens ecash de &lt;a href="https://nostrcompass.org/es/topics/cashu/">Cashu&lt;/a>. La arquitectura separa una capa de protocolo basada en TIP-01 y TIP-02, una capa de interfaz con HTTP-01 a HTTP-03 y NOSTR-01, y una capa de medio descrita por WIFI-01 para captive portals y clientes pagadores.&lt;/p>
&lt;h3 id="nostream-fusiona-53-prs-para-nip-45-nip-62-compresión-y-endurecimiento-de-consultas">nostream fusiona 53 PRs para NIP-45, NIP-62, compresión y endurecimiento de consultas&lt;/h3>
&lt;p>&lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a> añadió soporte de &lt;code>COUNT&lt;/code> para &lt;a href="https://nostrcompass.org/es/topics/nip-45/">NIP-45&lt;/a>, anunció right-to-vanish de &lt;a href="https://nostrcompass.org/es/topics/nip-62/">NIP-62&lt;/a>, amplió el esquema de filtros para tags en mayúscula y añadió compresión gzip y xz para import/export. Además, mejoró el rendimiento del traductor de filtros a SQL, corrigió un fallo en matching de pubkeys en allowlists y denylists, añadió desempate determinista en &lt;code>upsertMany&lt;/code>, limitó la confianza en &lt;code>X-Forwarded-For&lt;/code> y alcanzó paridad completa con &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a>.&lt;/p>
&lt;h2 id="lanzamientos-de-esta-semana">Lanzamientos de esta semana&lt;/h2>
&lt;h3 id="primal-android-lanza-pestaña-explore-verificación-nip-05-y-reproductor-de-audio">Primal Android lanza pestaña Explore, verificación NIP-05 y reproductor de audio&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> añadió una nueva pestaña Explore, editor de feeds basado en la DSL de búsqueda avanzada de Primal, verificación &lt;a href="https://github.com/nostr-protocol/nips/blob/master/05.md">NIP-05&lt;/a> y un reproductor de audio embebido. También conectó el escáner QR de cartera con emparejamiento &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>.&lt;/p>
&lt;h3 id="strfry-añade-métricas-prometheus-para-la-ruta-de-escritura-y-corrige-el-sobre-auth-de-nip-42">strfry añade métricas Prometheus para la ruta de escritura y corrige el sobre AUTH de NIP-42&lt;/h3>
&lt;p>&lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a> añadió métricas Prometheus para escrituras, logging por conexión y compresión, volvió configurable el límite de tags por filtro y corrigió sus respuestas de AUTH para ajustarse a &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a>, usando el sobre &lt;code>OK&lt;/code> en lugar de &lt;code>NOTICE&lt;/code>.&lt;/p>
&lt;h3 id="shopstr-endurece-la-seguridad-del-storefront-en-13-prs">Shopstr endurece la seguridad del storefront en 13 PRs&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> fusionó una serie de correcciones de seguridad que cierran JavaScript almacenado en enlaces de storefront, XSS reflejado en políticas HTML, una API sin autenticación para borrar eventos cacheados, lectura no autenticada de mensajes, fallos SSRF y errores funcionales en cola de publish y descuentos de carrito.&lt;/p>
&lt;h3 id="nostria-v3126-a-v3128-añaden-reproducción-de-música-en-segundo-plano-en-android">Nostria v3.1.26 a v3.1.28 añaden reproducción de música en segundo plano en Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> añadió reproducción de música en segundo plano en Android con controles en la barra de notificaciones y pantalla de bloqueo, y los releases posteriores endurecieron esa nueva superficie del servicio multimedia.&lt;/p>
&lt;h3 id="wisp-v0180-beta-añade-normie-mode-feed-for-you-y-configuración-de-grupos-nip-29">Wisp v0.18.0-beta añade Normie Mode, feed For You y configuración de grupos NIP-29&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> orientó esta versión a usuarios menos nativos de Bitcoin con Normie Mode, onboarding renovado y feed For You. En el lado de protocolo añadió configuración de grupos &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> para flags, invites, roles y AUTH, además de broadcasting a inbox relays &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> de pubkeys mencionadas.&lt;/p>
&lt;h3 id="noornote-v084-añade-scheduled-posts-y-zaps-en-live-streams">NoorNote v0.8.4 añade Scheduled Posts y zaps en live streams&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a> añadió publicaciones programadas a través de un relay operado por el proyecto, zaps de un toque desde tarjetas de live stream vía &lt;a href="https://nostrcompass.org/es/topics/nip-53/">NIP-53&lt;/a> y correcciones de duplicación en timelines largas de Android.&lt;/p>
&lt;h3 id="topaz-v002-lanza-un-relay-nostr-para-android">topaz v0.0.2 lanza un relay Nostr para Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/topaz">topaz&lt;/a> apareció como un relay Nostr ejecutable en teléfonos Android. El alcance por ahora es acotado, pero la idea es usar el teléfono como relay personal siempre disponible.&lt;/p>
&lt;h3 id="stablekraft-v100-lanza-la-primera-versión-estable-de-su-pwa-de-música-y-podcasts">StableKraft v1.0.0 lanza la primera versión estable de su PWA de música y podcasts&lt;/h3>
&lt;p>&lt;a href="https://github.com/ChadFarrow/stablekraft-app">StableKraft&lt;/a> llegó a &lt;a href="https://github.com/ChadFarrow/stablekraft-app/releases/tag/v1.0.0">v1.0.0&lt;/a> como una PWA Next.js para descubrir, organizar y reproducir música obtenida desde feeds de podcasts, usando Nostr para auth y funciones sociales y Lightning para pagos V4V. La semana también mejoró la ingesta de feeds y acortó ventanas de reparseo nocturno.&lt;/p>
&lt;h3 id="niplock-lanza-un-gestor-de-contraseñas-basado-en-nip-17">NipLock lanza un gestor de contraseñas basado en NIP-17&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev/npub1z5jf78uhd68znuwwwu926th55rzd0wy8nd9clkr03cx22mwme0jqazk56h/relay.ngit.dev/passwd">NipLock&lt;/a> almacena credenciales como mensajes directos &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> enviados de la clave del usuario a sí misma, de modo que se sincronicen entre dispositivos autenticados con la misma clave. Soporta firma con &lt;code>nsec&lt;/code>, extensiones de navegador y &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> vía &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>.&lt;/p>
&lt;h3 id="flotilla-budabit-pule-su-superficie-de-repositorios-nip-34">flotilla-budabit pule su superficie de repositorios NIP-34&lt;/h3>
&lt;p>El fork &lt;a href="https://github.com/Pleb5/flotilla-budabit">flotilla-budabit&lt;/a> siguió mejorando controles de discusión de repositorios, pestañas sticky, carga de anuncios desde relays GRASP y sincronización del estado de patches aplicados por maintainers en su flujo git-over-Nostr.&lt;/p>
&lt;h3 id="rx-nostr-372-a-374-añaden-verificador-por-defecto-y-argumentos-opcionales">rx-nostr 3.7.2 a 3.7.4 añaden verificador por defecto y argumentos opcionales&lt;/h3>
&lt;p>&lt;a href="https://github.com/penpenpng/rx-nostr">rx-nostr&lt;/a> añadió un verificador Schnorr por defecto, corrigió un uso defectuoso de &lt;code>@noble/curves&lt;/code> en su paquete crypto y permitió crear instancias con &lt;code>createRxNostr()&lt;/code> sin configuración obligatoria.&lt;/p>
&lt;h3 id="keep-android-v100-lanza-builds-reproducibles-y-cero-trackers">Keep Android v1.0.0 lanza builds reproducibles y cero trackers&lt;/h3>
&lt;p>&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a> llegó a &lt;a href="https://github.com/privkeyio/keep-android/releases/tag/v1.0.0">v1.0.0&lt;/a> tras añadir receta de build reproducible, sustituir Google ML Kit por ZXing para eliminar dependencias de Google Play Services y publicar un escaneo de Exodus Privacy sin trackers. También añadió un manifiesto &lt;code>zapstore.yaml&lt;/code> para distribuir el APK en Zapstore.&lt;/p>
&lt;h3 id="flotilla-173-y-174-añaden-envoltura-kind-9-para-salas-nip-29-más-ricas">Flotilla 1.7.3 y 1.7.4 añaden envoltura kind-9 para salas NIP-29 más ricas&lt;/h3>
&lt;p>&lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a> empezó a envolver contenido no orientado a chat dentro de kind &lt;code>9&lt;/code> para preservar el contexto de la sala &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a>. Los releases también añadieron encuestas, login &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> mediante Aegis, support de share para invites, room mentions, borradores y vídeo en llamadas.&lt;/p>
&lt;h3 id="wot-relay-v021-migra-el-eventstore-a-lmdb">WoT Relay v0.2.1 migra el eventstore a LMDB&lt;/h3>
&lt;p>&lt;a href="https://github.com/bitvora/wot-relay">WoT Relay&lt;/a> migró su eventstore a LMDB, reajustó la carga inicial del grafo de confianza y actualizó dependencias criptográficas y metadatos &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> para el release.&lt;/p>
&lt;h3 id="suite-formstr-revisión-de-seguridad-en-pollerama-i18n-en-forms-y-soporte-rrule-en-calendar">Suite Formstr: revisión de seguridad en Pollerama, i18n en Forms y soporte RRULE en Calendar&lt;/h3>
&lt;p>La suite de Formstr fusionó 26 PRs entre Pollerama, Forms y Nostr Calendar. Pollerama endureció gestión de claves y parsing de perfiles; Forms añadió soporte para audio/vídeo, i18n e importador de Google Forms; y Nostr Calendar lanzó v1.3.0 y v1.4.0 con múltiples RRULE, fechas flotantes en UTC según RFC 5545, eventos compartidos y preferencias de notificación, todo sobre &lt;a href="https://nostrcompass.org/es/topics/nip-52/">NIP-52&lt;/a>.&lt;/p>
&lt;h3 id="también-lanzaron-notedeck-nostrblue-cliprelay-captains-log">También lanzaron: notedeck, nostr.blue, cliprelay, Captain&amp;rsquo;s Log&lt;/h3>
&lt;p>Otros proyectos publicaron releases iterativos sin una sola gran novedad: &lt;a href="https://github.com/damus-io/notedeck">notedeck&lt;/a> mejoró renderizado de columnas y relay pools, &lt;a href="https://github.com/patrickulrich/nostr.blue">nostr.blue&lt;/a> actualizó Dioxus y destrabó Android, &lt;a href="https://github.com/tajava2006/cliprelay">cliprelay&lt;/a> ajustó sincronización de portapapeles y &lt;a href="https://github.com/nodetec/comet">Captain&amp;rsquo;s Log&lt;/a> añadió detección de vida de relays de sync.&lt;/p>
&lt;h2 id="en-desarrollo">En desarrollo&lt;/h2>
&lt;h3 id="whitenoise-rs-se-refactoriza-hacia-vistas-de-cuenta-con-alcance-de-sesión">whitenoise-rs se refactoriza hacia vistas de cuenta con alcance de sesión&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a> continuó su refactor por fases desde singletons globales hacia &lt;code>AccountSession&lt;/code> por cuenta, moviendo handles de relay, drafts, settings, operaciones de mensajes, lectura y escritura de grupos, membresía, push notifications, key packages y dispatch de eventos a superficies propias de cada sesión.&lt;/p>
&lt;h3 id="la-app-white-noise-añade-ui-de-bloqueodesbloqueo-salida-de-grupo-y-avisos-offline">La app White Noise añade UI de bloqueo/desbloqueo, salida de grupo y avisos offline&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> añadió controles para bloquear y desbloquear usuarios, salir y eliminar grupos desde la app y mostrar avisos offline cuando el daemon no puede alcanzar sus relays. También afinó la eliminación de key packages legacy durante migraciones.&lt;/p>
&lt;h3 id="mdk-añade-soporte-de-invites-entre-versiones-mixtas-y-convergencia-de-selfupdate">MDK añade soporte de invites entre versiones mixtas y convergencia de SelfUpdate&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> mejoró compatibilidad entre clientes Marmot con distintas versiones calculando &lt;code>RequiredCapabilities&lt;/code> como LCD de las capacidades de invitados y alineando el formato wire de SelfUpdate. También reforzó validación de depletion admin, almacenamiento en memoria y acceso a propuestas requeridas por grupo.&lt;/p>
&lt;h3 id="nostter-añade-cifrado-nip-44-a-listas-de-personas-bookmarks-y-mutes">nostter añade cifrado NIP-44 a listas de personas, bookmarks y mutes&lt;/h3>
&lt;p>&lt;a href="https://github.com/SnowCait/nostter">nostter&lt;/a> siguió migrando de &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a> a &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> al cifrar mute lists, bookmarks y people lists, y eliminó una ruta legacy de migración kind-30000 que ya no hacía falta.&lt;/p>
&lt;h3 id="zapcooking-lanza-puntuación-nourish-y-un-hilo-de-comentarios-reutilizable">zap.cooking lanza puntuación Nourish y un hilo de comentarios reutilizable&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">zap.cooking&lt;/a> añadió un módulo Nourish para puntuar recetas por ejes nutricionales y refactorizó su módulo de comentarios hacia un &lt;code>CommentThread&lt;/code> reutilizable, junto con mejoras de escalado, subida de medios y pestañas de replies.&lt;/p>
&lt;h3 id="ridestr-extrae-un-coordinador-compartido-de-pasajeros">ridestr extrae un coordinador compartido de pasajeros&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">ridestr&lt;/a> refactorizó pantallas Compose y extrajo la lógica de protocolo de rider y driver hacia un coordinador compartido &lt;code>:common&lt;/code>, además de añadir un receptor de driver ping kind &lt;code>3189&lt;/code>.&lt;/p>
&lt;h3 id="blossom-propone-cabecera-bud-01-sunset-para-expiración-de-blobs">Blossom propone cabecera BUD-01 Sunset para expiración de blobs&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/blossom">Blossom&lt;/a> abrió una propuesta para añadir una cabecera &lt;code>Sunset&lt;/code> a BUD-01, de modo que un servidor pueda anunciar cuándo dejará de servir un blob y los clientes puedan planificar retención limitada sin descubrirla solo cuando llegue un 404.&lt;/p>
&lt;h2 id="proyectos-nuevos">Proyectos nuevos&lt;/h2>
&lt;h3 id="forgesworn-publica-un-toolkit-criptográfico-de-29-repositorios-para-nostr">Forgesworn publica un toolkit criptográfico de 29 repositorios para Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/forgesworn">Forgesworn&lt;/a> lanzó un conjunto amplio de repositorios TypeScript alrededor de firma, identidad, attestations, web of trust y APIs pagadas. Destacan &lt;code>nsec-tree&lt;/code> para subidentidades deterministas, &lt;code>Heartwood&lt;/code> como signer &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> sobre Raspberry Pi, &lt;code>Signet&lt;/code> para verificación de identidad, &lt;code>nostr-attestations&lt;/code> para credenciales y &lt;code>toll-booth&lt;/code> / &lt;code>toll-booth-dvm&lt;/code> para monetizar APIs sobre Lightning y &lt;a href="https://nostrcompass.org/es/topics/nip-90/">NIP-90&lt;/a>.&lt;/p>
&lt;h3 id="shockwallet-lanza-sincronización-de-cartera-lightning-nativa-de-nostr-y-conexiones-multi-node">ShockWallet lanza sincronización de cartera Lightning nativa de Nostr y conexiones multi-node&lt;/h3>
&lt;p>&lt;a href="https://github.com/shocknet/wallet2">ShockWallet&lt;/a> usa Nostr como transporte para conectarse a nodos Lightning autocustodiados mediante &lt;code>nprofile&lt;/code>. El proyecto sigue empujando sincronización de estado multi-dispositivo basada en eventos específicos de aplicación y una superficie coherente entre web, Android e iOS.&lt;/p>
&lt;h3 id="los-issues-de-nostrability-migran-a-git-sobre-nostr-tras-la-censura-de-github">Los issues de Nostrability migran a git sobre Nostr tras la censura de GitHub&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev/elsat@habla.news/nostrability/issues">Nostrability&lt;/a> movió su workflow de issues a infraestructura git-over-Nostr después de que GitHub eliminara la organización sin respuesta posterior. La idea es mantener los informes de interoperabilidad dentro de infraestructura nativa de Nostr.&lt;/p>
&lt;h3 id="nowhere-codifica-sitios-web-completos-en-fragments-url-y-enruta-pedidos-por-nostr">nowhere codifica sitios web completos en fragments URL y enruta pedidos por Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/5t34k/nowhere">nowhere&lt;/a> serializa un sitio entero dentro del fragmento &lt;code>#&lt;/code> de la URL, lo comprime y lo firma, de modo que el host nunca vea el contenido porque los navegadores no envían fragments a servidores. Para tipos de sitio que necesitan comunicación viva, como store o forum, el tráfico pasa por relays Nostr con cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>.&lt;/p>
&lt;h3 id="nuevas-superficies-pequeñas-relaykit-y-brainstorm-search">Nuevas superficies pequeñas: relayk.it y Brainstorm Search&lt;/h3>
&lt;p>&lt;a href="https://relayk.it">relayk.it&lt;/a> apareció como cliente de descubrimiento de relays construido con Shakespeare y ejecutado íntegramente en el navegador, mientras &lt;a href="https://brainstorm.world">Brainstorm Search&lt;/a> ofrece una UI de búsqueda Nostr de página única orientada a descubrir contenido en la red.&lt;/p>
&lt;h2 id="trabajo-de-protocolo-y-especificación">Trabajo de protocolo y especificación&lt;/h2>
&lt;h3 id="actualizaciones-de-nip">Actualizaciones de NIP&lt;/h3>
&lt;p>La semana trajo nuevas propuestas en el repositorio de NIPs alrededor de &lt;a href="https://nostrcompass.org/es/topics/nip-67/">NIP-67&lt;/a> para completitud de &lt;code>EOSE&lt;/code>, NIP-5D para applets web, subgrupos y permisos explícitos en &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a>, un campo &lt;code>access_control&lt;/code> en &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a>, attestations de reputación de agentes para mercados de &lt;a href="https://nostrcompass.org/es/topics/nip-90/">NIP-90&lt;/a> y la continuación del trabajo sobre datos privados de localización y cambios de &lt;code>marmot-ts&lt;/code>.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-72-comunidades-moderadas">NIP Deep Dive: NIP-72 (comunidades moderadas)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/72.md">NIP-72&lt;/a> define comunidades temáticas moderadas en las que cualquiera puede enviar contenido, pero solo las publicaciones aprobadas por un moderador aparecen en la vista comunitaria. La comunidad se define con un evento kind &lt;code>34550&lt;/code>, los envíos la referencian mediante una etiqueta &lt;code>a&lt;/code> y los moderadores publican eventos kind &lt;code>4549&lt;/code> para aprobarlos. El modelo es transparente, auditable y bifurcable, a diferencia de &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a>, donde el relay controla tanto la membresía como la moderación.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-57-zaps">NIP Deep Dive: NIP-57 (zaps)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/57.md">NIP-57&lt;/a> define cómo adjuntar pagos Lightning a identidades y contenido Nostr mediante solicitudes kind &lt;code>9734&lt;/code> y recibos kind &lt;code>9735&lt;/code>. El punto central sigue siendo la validación: los clientes deben comprobar firma, monto de invoice, description hash y &lt;code>preimage&lt;/code> antes de tratar un recibo como un zap real. Sobre esa base descansan tanto zaps privados y anónimos como sistemas de objetivos de zap de &lt;a href="https://nostrcompass.org/es/topics/nip-75/">NIP-75&lt;/a>.&lt;/p></content:encoded></item><item><title>Nostr Compass #18</title><link>https://nostrcompass.org/es/newsletters/2026-04-15-newsletter/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-04-15-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> fusionó una tanda grande de trabajo en Tor, secp256k1, llamadas WebRTC y &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, incluyendo soporte de llamadas para &lt;a href="https://nostrcompass.org/es/topics/nip-ac/">NIP-AC&lt;/a> y múltiples carteras &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a>. &lt;a href="https://github.com/vcavallo/nstrfy-android">nstrfy&lt;/a> lanzó notificaciones push nativas de Nostr para Android con soporte para &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>, &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>, &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-40/">NIP-40&lt;/a>. &lt;a href="https://github.com/LibertyFarmer/hamstr">HAMSTR&lt;/a> añadió transporte Reticulum para eventos Nostr sobre LoRa. &lt;a href="https://github.com/nostrnative/bloom">Bloom&lt;/a>, &lt;a href="https://github.com/zeSchlausKwab/wavefunc">WaveFunc&lt;/a>, &lt;a href="https://github.com/v0l/snort">Snort&lt;/a> y &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> encabezaron los lanzamientos de la semana, mientras los análisis de NIP cubren &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-90/">NIP-90&lt;/a>.&lt;/p>
&lt;h2 id="noticias-principales">Noticias principales&lt;/h2>
&lt;h3 id="amethyst-fusiona-desktop-tor-secp256k1-en-c-llamadas-webrtc-y-multi-wallet-nwc">Amethyst fusiona desktop Tor, secp256k1 en C, llamadas WebRTC y multi-wallet NWC&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> fusionó 29 PRs entre criptografía, networking, llamadas y carteras. Lo más importante fue &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2381">PR #2381&lt;/a>, que añade soporte Tor de escritorio con diseño fail-closed, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2374">PR #2374&lt;/a>, que introduce una implementación secp256k1 en C con bindings JNI para acelerar verificación Schnorr, y &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2202">PR #2202&lt;/a>, que alinea su implementación MLS pura en Kotlin con RFC 9420 para mejorar la interoperabilidad de &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>. Una serie de PRs de WebRTC añadió llamadas de voz y vídeo para &lt;a href="https://nostrcompass.org/es/topics/nip-ac/">NIP-AC&lt;/a>, y &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1988">PR #1988&lt;/a> incorpora soporte multi-wallet para &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a>.&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> fusionó una tanda grande de trabajo en Tor, secp256k1, llamadas WebRTC y &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, incluyendo soporte de llamadas para &lt;a href="https://nostrcompass.org/es/topics/nip-ac/">NIP-AC&lt;/a> y múltiples carteras &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a>. &lt;a href="https://github.com/vcavallo/nstrfy-android">nstrfy&lt;/a> lanzó notificaciones push nativas de Nostr para Android con soporte para &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>, &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>, &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-40/">NIP-40&lt;/a>. &lt;a href="https://github.com/LibertyFarmer/hamstr">HAMSTR&lt;/a> añadió transporte Reticulum para eventos Nostr sobre LoRa. &lt;a href="https://github.com/nostrnative/bloom">Bloom&lt;/a>, &lt;a href="https://github.com/zeSchlausKwab/wavefunc">WaveFunc&lt;/a>, &lt;a href="https://github.com/v0l/snort">Snort&lt;/a> y &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> encabezaron los lanzamientos de la semana, mientras los análisis de NIP cubren &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-90/">NIP-90&lt;/a>.&lt;/p>
&lt;h2 id="noticias-principales">Noticias principales&lt;/h2>
&lt;h3 id="amethyst-fusiona-desktop-tor-secp256k1-en-c-llamadas-webrtc-y-multi-wallet-nwc">Amethyst fusiona desktop Tor, secp256k1 en C, llamadas WebRTC y multi-wallet NWC&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> fusionó 29 PRs entre criptografía, networking, llamadas y carteras. Lo más importante fue &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2381">PR #2381&lt;/a>, que añade soporte Tor de escritorio con diseño fail-closed, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2374">PR #2374&lt;/a>, que introduce una implementación secp256k1 en C con bindings JNI para acelerar verificación Schnorr, y &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2202">PR #2202&lt;/a>, que alinea su implementación MLS pura en Kotlin con RFC 9420 para mejorar la interoperabilidad de &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>. Una serie de PRs de WebRTC añadió llamadas de voz y vídeo para &lt;a href="https://nostrcompass.org/es/topics/nip-ac/">NIP-AC&lt;/a>, y &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1988">PR #1988&lt;/a> incorpora soporte multi-wallet para &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a>.&lt;/p>
&lt;h3 id="nstrfy-lanza-notificaciones-push-nativas-de-nostr-para-android">nstrfy lanza notificaciones push nativas de Nostr para Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/vcavallo/nstrfy-android">nstrfy&lt;/a> debutó como una app Android de notificaciones push basada en eventos kind &lt;code>7741&lt;/code> en relays Nostr. Soporta payloads en texto plano y cifrados con &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>, puede firmar vía &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> usando &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>, importa listas de relays desde &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> y respeta expiración de eventos de &lt;a href="https://nostrcompass.org/es/topics/nip-40/">NIP-40&lt;/a>. El proyecto complementario &lt;a href="https://github.com/vcavallo/nstrfy.sh">nstrfy.sh&lt;/a> ofrece un cliente bash y una versión web alojada.&lt;/p>
&lt;h3 id="hamstr-añade-reticulum-para-nostr-sobre-malla-lora">HAMSTR añade Reticulum para Nostr sobre malla LoRa&lt;/h3>
&lt;p>&lt;a href="https://github.com/LibertyFarmer/hamstr">HAMSTR&lt;/a> añadió &lt;a href="https://reticulum.network/">Reticulum&lt;/a> como backend de transporte para enviar eventos Nostr a través de hardware LoRa sin infraestructura de internet. El proyecto mantiene también sus transportes AX.25 Packet Radio y VARA HF, y sigue soportando zaps de &lt;a href="https://nostrcompass.org/es/topics/nip-57/">NIP-57&lt;/a> para que los pagos Lightning offline aparezcan correctamente en clientes como Amethyst y Primal.&lt;/p>
&lt;h2 id="lanzamientos-de-esta-semana">Lanzamientos de esta semana&lt;/h2>
&lt;h3 id="bloom-v010-lanza-servidor-blossom-y-relay-autoalojados">Bloom v0.1.0 lanza servidor Blossom y relay autoalojados&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrnative/bloom">Bloom&lt;/a> lanzó &lt;a href="https://github.com/nostrnative/bloom/releases/tag/v0.1.0">v0.1.0&lt;/a> como aplicación de escritorio que empaqueta un servidor de medios &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> y un relay Nostr en una sola app Tauri. El release ofrece almacenamiento soberano de archivos con content addressing SHA-256, soporte de metadatos de archivo &lt;a href="https://nostrcompass.org/es/topics/nip-94/">NIP-94&lt;/a> y resolución de URIs &lt;code>blossom://&lt;/code>.&lt;/p>
&lt;h3 id="wavefunc-v010-y-v011-lanzan-radio-por-internet-sobre-nostr">WaveFunc v0.1.0 y v0.1.1 lanzan radio por internet sobre Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/zeSchlausKwab/wavefunc">WaveFunc&lt;/a> salió como directorio y reproductor de radio por internet basado en Nostr. Usa kinds personalizados para emisoras, favoritos, chat en vivo y comentarios, y añade una cartera &lt;a href="https://nostrcompass.org/es/topics/nip-60/">NIP-60&lt;/a> con nutzaps, junto con mejoras de escritorio como system tray, media keys y deep linking.&lt;/p>
&lt;h3 id="snort-lanza-v050-a-v053-con-endurecimiento-de-seguridad-y-mejora-de-rendimiento">Snort lanza v0.5.0 a v0.5.3 con endurecimiento de seguridad y mejora de rendimiento&lt;/h3>
&lt;p>&lt;a href="https://github.com/v0l/snort">Snort&lt;/a> publicó tres releases centrados en una auditoría de seguridad, verificación real de firmas Schnorr, protección reforzada de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>, mejoras en cifrado de PIN y optimizaciones de rendimiento. También añadió visualización de invoices de pago requerido kind &lt;code>7000&lt;/code> para &lt;a href="https://nostrcompass.org/es/topics/nip-90/">NIP-90&lt;/a> y rehízo el sistema de mensajería para evitar cuellos de botella.&lt;/p>
&lt;h3 id="primal-android-lanza-3021-y-rediseña-el-layout-del-feed">Primal Android lanza 3.0.21 y rediseña el layout del feed&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> publicó &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.21">v3.0.21&lt;/a> con correcciones de votos zap de encuestas, servicio de cartera y reconexión del signer remoto. Después llegaron siete PRs que unifican el layout principal, rediseñan las tarjetas del feed, mejoran tarjetas multimedia, añaden respuestas rápidas compactas y actualizan las app bars.&lt;/p>
&lt;h3 id="nostria-v3119-a-v3121-añaden-generación-local-de-imágenes">Nostria v3.1.19 a v3.1.21 añaden generación local de imágenes&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> añadió generación local de imágenes con Janus Pro y WebGPU, además de generación en la nube, chat multimodal y mejoras del editor y del sistema de diálogos. El proyecto sigue ampliando una superficie que en el release anterior ya había sumado signer local y aplicaciones móviles nativas.&lt;/p>
&lt;h3 id="tubestr-v103-lanza-mejoras-en-feed-y-estudio">TubeStr v1.0.3 lanza mejoras en feed y estudio&lt;/h3>
&lt;p>&lt;a href="https://github.com/Tubestr/tubestr-v2">TubeStr&lt;/a> añadió mejoras de feed y studio, renovó la experiencia de onboarding y corrigió una exportación de vídeo defectuosa. La app usa NDK y MDK para compartir medios cifrados entre familiares y planea integración futura con &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>.&lt;/p>
&lt;h2 id="en-desarrollo">En desarrollo&lt;/h2>
&lt;h3 id="botburrow-inicia-desarrollo-como-plataforma-de-bots-de-marmot">Botburrow inicia desarrollo como plataforma de bots de Marmot&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/botburrow">Botburrow&lt;/a> es una nueva plataforma autoalojada para gestionar bots con identidad Nostr propia dentro de chats grupales &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>. Cada bot se conecta a un daemon &lt;code>wnd&lt;/code>, puede entrar a grupos mediante mensajes Welcome y ejecutar scripts, triggers y tareas programadas.&lt;/p>
&lt;h3 id="nostr-archives-añade-relay-de-trending-feeds-y-resolución-de-entidades">Nostr Archives añade relay de trending feeds y resolución de entidades&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/nostrarchives-api">Nostr Archives&lt;/a> siguió expandiendo su plataforma de archivado y analítica con filtros de leaderboard, contadores de engagement, resolución directa de entidades Nostr desde rutas URL y una página de documentación de API. El servicio mantiene varios relays especializados, incluyendo búsqueda &lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a> y feeds de tendencias.&lt;/p>
&lt;h3 id="damus-corrige-la-timeline-de-favoritos">Damus corrige la timeline de favoritos&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> reescribió &lt;code>subscribe_to_favorites()&lt;/code> para filtrar in place, reconstruir la deduplicación y persistir la selección de pestaña, corrigiendo fallos en la timeline de favoritos.&lt;/p>
&lt;h3 id="nostur-añade-zaps-privados-y-visualización-de-emoji-personalizados">Nostur añade zaps privados y visualización de emoji personalizados&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a> añadió soporte de zaps privados, visualización de emoji personalizados, renderizado corregido de &lt;code>.webp&lt;/code> animado y detección del formato de audio de mensajes de voz.&lt;/p>
&lt;h3 id="amber-lanza-v601-a-v603-con-backups-webdav-y-correcciones-de-reconexión-a-relays">Amber lanza v6.0.1 a v6.0.3 con backups WebDAV y correcciones de reconexión a relays&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> publicó tres releases con nuevas opciones de backup, retroceso exponencial para reconexión a relays, actualización de Quartz y correcciones para eventos y flujos de intents. Como firmante &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>, Amber sigue ganando robustez para clientes Android.&lt;/p>
&lt;h3 id="plektos-v060-se-rediseña-con-temas-ditto">Plektos v0.6.0 se rediseña con temas Ditto&lt;/h3>
&lt;p>&lt;a href="https://github.com/derekross/plektos">Plektos&lt;/a>, construido sobre &lt;a href="https://nostrcompass.org/es/topics/nip-52/">NIP-52&lt;/a>, añadió temas estilo Ditto, configuración de forma de avatar y una revisión visual amplia, además de atender hallazgos de una revisión completa de código.&lt;/p>
&lt;h3 id="shadow-añade-api-nostr-os-y-app-de-cartera-cashu">Shadow añade API Nostr OS y app de cartera Cashu&lt;/h3>
&lt;p>&lt;a href="https://github.com/justinmoon/shadow">Shadow&lt;/a> siguió ampliando su runtime con una app de cartera Cashu, un reproductor de podcasts demo y APIs del sistema para Nostr y audio. También mejoró soporte Linux de escritorio con correcciones de fuentes y rutas XDG.&lt;/p>
&lt;h3 id="lief-corrige-login-con-amber-y-añade-zapstore">Lief corrige login con Amber y añade Zapstore&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/chad.curtis/lief">Lief&lt;/a> solucionó un problema de login con &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, simplificó el flujo de signer nudge, actualizó nostrify y añadió integración con Zapstore.&lt;/p>
&lt;h3 id="espy-rehace-el-selector-de-color-y-corrige-login-con-amber">Espy rehace el selector de color y corrige login con Amber&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/chad.curtis/espy">Espy&lt;/a> renovó su color picker con un arco curvo de saturación, corrigió fallos visuales del anillo de tono y añadió personajes ocultos, mientras compartía con Lief las correcciones de login con Amber y la integración con Zapstore.&lt;/p>
&lt;h3 id="jumble-añade-filtros-por-kind-por-feed-y-pestaña-de-artículos">Jumble añade filtros por kind por feed y pestaña de artículos&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a> añadió filtrado por kind para cada feed, una pestaña Articles, sincronización del estado leído de notificaciones, modo para ocultar avatares y una corrección de race condition al cambiar de cuenta.&lt;/p>
&lt;h3 id="primal-web-lanza-8-subidas-de-versión">Primal Web lanza 8 subidas de versión&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-web-app">Primal Web&lt;/a> publicó versiones 3.0.93 a 3.0.101 con foco en mejoras del chat de live streams, mención de límites, paginación de bookmarks, prevención de likes duplicados y correcciones del relay proxy.&lt;/p>
&lt;h2 id="trabajo-de-protocolo-y-especificación">Trabajo de protocolo y especificación&lt;/h2>
&lt;h3 id="actualizaciones-de-nip">Actualizaciones de NIP&lt;/h3>
&lt;p>En el repositorio de NIPs se fusionó soporte para URLs de clonación &lt;code>nostr://&lt;/code> en &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a>, y siguieron abiertas varias propuestas alrededor de descriptores mínimos de gateways de pago, manifiestos de autodeclaración de relays, datos privados de localización transitoria, programas WASM de &lt;a href="https://nostrcompass.org/es/topics/nip-5c/">NIP-5C&lt;/a>, payloads grandes para &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> y la restricción de &lt;a href="https://nostrcompass.org/es/topics/nip-c7/">NIP-C7&lt;/a> a vistas de chat.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-29-grupos-basados-en-relay">NIP Deep Dive: NIP-29 (grupos basados en relay)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/29.md">NIP-29&lt;/a> define mensajería grupal en la que el relay actúa como autoridad para membresía y moderación. Los eventos de usuario llevan una etiqueta &lt;code>h&lt;/code> con el ID del grupo, las referencias &lt;code>previous&lt;/code> sirven como defensa frente a rebroadcasts fuera de contexto y los eventos de moderación de la serie &lt;code>9000&lt;/code> gestionan alta, baja, roles y metadatos. El modelo es adecuado para comunidades públicas o moderadas en las que el operador del relay puede leer el contenido, a diferencia de alternativas cifradas como &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> o &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-90-data-vending-machines">NIP Deep Dive: NIP-90 (Data Vending Machines)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/90.md">NIP-90&lt;/a> describe un mercado de cómputo bajo demanda sobre Nostr. Los clientes publican trabajos en el rango &lt;code>5000-5999&lt;/code>, los proveedores devuelven resultados en &lt;code>6000-6999&lt;/code> y pueden emitir feedback kind &lt;code>7000&lt;/code> como &lt;code>payment-required&lt;/code>, &lt;code>processing&lt;/code>, &lt;code>error&lt;/code> o &lt;code>success&lt;/code>. El diseño permite entradas por URL, texto, eventos o trabajos previos y deja flexible la lógica comercial para acomodar desde transformaciones baratas hasta tareas costosas de GPU.&lt;/p></content:encoded></item><item><title>Nostr Compass #17</title><link>https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#amethyst-lanza-arti-tor-y-fusiona-mls-y-marmot-puros-en-kotlin">v1.08.0&lt;/a> con integración de Arti Tor y una UI de Shorts rediseñada, mientras fusiona implementaciones puras en Kotlin de &lt;a href="https://nostrcompass.org/es/topics/mls/">MLS&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> en su librería &lt;a href="https://nostrcompass.org/es/topics/quartz/">Quartz&lt;/a>. &lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#nostur-v1270-a%c3%b1ade-grabaci%c3%b3n-de-v%c3%addeo-y-respuestas-privadas">v1.27.0&lt;/a> con grabación de vídeo, perfiles con GIF animados y respuestas privadas. &lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#shosho-v0150-lanza-shows-y-carrusel-vertical-de-v%c3%addeo">v0.15.0&lt;/a> con Shows (información personalizada de live stream conectada a OBS) y un carrusel vertical de vídeo al estilo TikTok. &lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a> &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#nymchat-revierte-marmot-y-lanza-chats-grupales-nip-17-mejorados">revierte Marmot y lanza chats grupales NIP-17 mejorados&lt;/a> con claves efímeras rotativas. &lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#nostr-vpn-lanza-soporte-de-exit-node-y-empaquetado-para-umbrel">soporte de exit node y empaquetado para Umbrel&lt;/a> a lo largo de seis releases. &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> salta a &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#amber-v600-pre1-a%c3%b1ade-claves-de-firma-nip-46-por-conexi%c3%b3n">v6.0.0-pre1&lt;/a> con claves de firma &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> por conexión y actualizaciones dentro de la app mediante Zapstore. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> alcanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#notedeck-v0100-beta-lanza-autoactualizaci%c3%b3n-con-zapstore">v0.10.0-beta&lt;/a> con autoactualización de APK vía Zapstore, y &lt;a href="https://nostrcompass.org/es/topics/nip-58/">NIP-58&lt;/a> (Badges) recibe una &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#actualizaciones-de-nips">migración de kind&lt;/a>. Dos análisis en profundidad de NIP cubren &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages) y &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (Nostr Remote Signing).&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#amethyst-lanza-arti-tor-y-fusiona-mls-y-marmot-puros-en-kotlin">v1.08.0&lt;/a> con integración de Arti Tor y una UI de Shorts rediseñada, mientras fusiona implementaciones puras en Kotlin de &lt;a href="https://nostrcompass.org/es/topics/mls/">MLS&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> en su librería &lt;a href="https://nostrcompass.org/es/topics/quartz/">Quartz&lt;/a>. &lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#nostur-v1270-a%c3%b1ade-grabaci%c3%b3n-de-v%c3%addeo-y-respuestas-privadas">v1.27.0&lt;/a> con grabación de vídeo, perfiles con GIF animados y respuestas privadas. &lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#shosho-v0150-lanza-shows-y-carrusel-vertical-de-v%c3%addeo">v0.15.0&lt;/a> con Shows (información personalizada de live stream conectada a OBS) y un carrusel vertical de vídeo al estilo TikTok. &lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a> &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#nymchat-revierte-marmot-y-lanza-chats-grupales-nip-17-mejorados">revierte Marmot y lanza chats grupales NIP-17 mejorados&lt;/a> con claves efímeras rotativas. &lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#nostr-vpn-lanza-soporte-de-exit-node-y-empaquetado-para-umbrel">soporte de exit node y empaquetado para Umbrel&lt;/a> a lo largo de seis releases. &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> salta a &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#amber-v600-pre1-a%c3%b1ade-claves-de-firma-nip-46-por-conexi%c3%b3n">v6.0.0-pre1&lt;/a> con claves de firma &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> por conexión y actualizaciones dentro de la app mediante Zapstore. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> alcanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#notedeck-v0100-beta-lanza-autoactualizaci%c3%b3n-con-zapstore">v0.10.0-beta&lt;/a> con autoactualización de APK vía Zapstore, y &lt;a href="https://nostrcompass.org/es/topics/nip-58/">NIP-58&lt;/a> (Badges) recibe una &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#actualizaciones-de-nips">migración de kind&lt;/a>. Dos análisis en profundidad de NIP cubren &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages) y &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (Nostr Remote Signing).&lt;/p>
&lt;h2 id="noticias-principales">Noticias principales&lt;/h2>
&lt;h3 id="amethyst-lanza-arti-tor-y-fusiona-mls-y-marmot-puros-en-kotlin">Amethyst lanza Arti Tor y fusiona MLS y Marmot puros en Kotlin&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, el cliente Android mantenido por vitorpamplona, lanzó cuatro releases desde &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.3">v1.07.3&lt;/a> hasta &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.08.0">v1.08.0&lt;/a> y fusionó un gran lote de trabajo aún no publicado en su librería &lt;a href="https://nostrcompass.org/es/topics/quartz/">Quartz&lt;/a> (el módulo Nostr compartido de Kotlin Multiplatform). El release principal es v1.08.0 &amp;ldquo;Arti Tor&amp;rdquo;, que migra la conectividad Tor de la app desde la librería Tor basada en C a &lt;a href="https://gitlab.torproject.org/tpo/core/arti">Arti&lt;/a>, la implementación en Rust del Tor Project. La migración aborda crashes aleatorios que ocurrían con los bindings anteriores de C Tor. Arti es el reemplazo a largo plazo del Tor Project para la base de código en C, escrito desde cero en Rust para seguridad de memoria y async I/O.&lt;/p>
&lt;p>El release v1.07.3 rediseñó la UI de Shorts, reemplazando el diseño paginado por feeds de borde a borde para imágenes, shorts y vídeos largos. El mismo release migró badges a kind &lt;code>10008&lt;/code> y bookmarks a kind &lt;code>10003&lt;/code>, alineándose con la migración de kind de &lt;a href="https://nostrcompass.org/es/topics/nip-58/">NIP-58&lt;/a> &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#actualizaciones-de-nips">fusionada esta semana&lt;/a>. v1.07.4 corrigió un problema en el manejo de secretos de Nostr Wallet Connect, y v1.07.5 corrigió un crash en la subida de imágenes.&lt;/p>
&lt;p>En main, pero todavía no en un release etiquetado, el equipo escribió una implementación completa en Kotlin tanto de &lt;a href="https://nostrcompass.org/es/topics/mls/">MLS&lt;/a> como del protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, reemplazando la necesidad de bindings nativos de bibliotecas C/Rust. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2147">PR #2147&lt;/a> añade la capa central de mensajería grupal Marmot MLS, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2149">PR #2149&lt;/a> añade la UI de chat grupal, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2146">PR #2146&lt;/a> añade procesadores de mensajes entrantes y salientes con un gestor de suscripciones, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2141">PR #2141&lt;/a> añade persistencia del estado de grupos MLS y gestión de rotación de KeyPackage, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2150">PR #2150&lt;/a> añade una suite completa de tests de MLS con firma de GroupInfo mejorada, y &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2158">PR #2158&lt;/a> añade seguimiento del estado de publicación de KeyPackage. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2166">PR #2166&lt;/a> añade una implementación pura en Kotlin de secp256k1 para operaciones criptográficas de Nostr, reemplazando la dependencia de la biblioteca nativa en C. Combinado con la implementación MLS en Kotlin, &lt;a href="https://nostrcompass.org/es/topics/quartz/">Quartz&lt;/a> puede ejecutar firma Nostr y mensajería grupal Marmot sin ningún binding nativo, lo que abre la puerta a objetivos de Kotlin Multiplatform, incluyendo iOS.&lt;/p>
&lt;p>El equipo también está construyendo soporte para &lt;a href="https://nostrcompass.org/en/topics/nip-ac/">NIP-AC&lt;/a> (P2P Voice and Video Calls): &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2143">PR #2143&lt;/a> añade una suite completa de tests para la máquina de estados de llamadas NIP-AC, y &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2164">PR #2164&lt;/a> evita que ofertas de llamada obsoletas se disparen de nuevo después de reiniciar la app.&lt;/p>
&lt;h3 id="nostur-v1270-añade-grabación-de-vídeo-y-respuestas-privadas">Nostur v1.27.0 añade grabación de vídeo y respuestas privadas&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>, el cliente Nostr para iOS, lanzó &lt;a href="https://github.com/nostur-com/nostur-ios-public/releases/tag/v1.27.0">v1.27.0&lt;/a> el 2 de abril. El release añade grabación de vídeo dentro de la app con recorte antes de subir, de modo que los usuarios puedan capturar clips cortos, ajustarlos a la duración deseada y publicarlos sin salir del cliente. El soporte para GIF animados se extiende a fotos de perfil y banner, y también se añadió renderizado de WebP animado. Una nueva integración con Shortcuts permite a los usuarios enviar publicaciones de Nostr desde automatizaciones de Apple Shortcuts. El release también añade respuestas privadas y corrige problemas de compatibilidad de DMs que afectaban la entrega de mensajes entre Nostur y otros clientes.&lt;/p>
&lt;h3 id="shosho-v0150-lanza-shows-y-carrusel-vertical-de-vídeo">Shosho v0.15.0 lanza Shows y carrusel vertical de vídeo&lt;/h3>
&lt;p>&lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a>, la app de live streaming sobre Nostr, lanzó &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.15.0">v0.15.0&lt;/a> y &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.15.1">v0.15.1&lt;/a> el 7 de abril. La función principal es Shows: los streamers pueden configurar información personalizada del show antes de salir en vivo y conectar su show a OBS o a cualquier codificador externo. Esto separa los metadatos de &amp;ldquo;qué estoy transmitiendo&amp;rdquo; del acto de entrar en directo, de modo que los streamers puedan preparar títulos, descripciones y productos antes de empezar a emitir. El mismo release añade un carrusel vertical de vídeo al estilo TikTok para deslizar entre lives, clips y replays en un feed a pantalla completa, y Quick Add para publicar clips de vídeo y añadir productos directamente desde una página de perfil. v0.15.1 corrige un bug por el que el teclado ocultaba el campo de entrada del chat del live stream.&lt;/p>
&lt;h2 id="lanzamientos-de-esta-semana">Lanzamientos de esta semana&lt;/h2>
&lt;h3 id="notedeck-v0100-beta-lanza-autoactualización-con-zapstore">Notedeck v0.10.0-beta lanza autoactualización con Zapstore&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>, el cliente de escritorio y móvil del equipo Damus, lanzó &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.10.0-beta.1">v0.10.0-beta.1&lt;/a> y &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.10.0-beta.2">v0.10.0-beta.2&lt;/a> como prereleases de prueba para autoactualización de APK. &lt;a href="https://github.com/damus-io/notedeck/pull/1417">PR #1417&lt;/a> añade autoactualización de APK a través del actualizador Nostr/Zapstore en Android, construyendo sobre el &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-18-newsletter/#notedeck-moves-release-discovery-onto-nostr">trabajo de descubrimiento de actualizaciones nativo de Nostr cubierto en Newsletter #14&lt;/a>. El flujo de actualización descubre nuevos releases a través de eventos Nostr publicados en relays, luego descarga el APK desde donde el desarrollador lo aloje (GitHub releases, Blossom CDN u otras fuentes), verifica el hash SHA-256 contra el evento Nostr firmado y lo instala. &lt;a href="https://github.com/damus-io/notedeck/pull/1438">PR #1438&lt;/a> corrige un bug en la pantalla de bienvenida donde los botones Login y CreateAccount volvían inmediatamente hacia atrás, y &lt;a href="https://github.com/damus-io/notedeck/pull/1424">PR #1424&lt;/a> corrige desbordamiento de texto en la vista de sesión de Agentium AI.&lt;/p>
&lt;h3 id="amber-v600-pre1-añade-claves-de-firma-nip-46-por-conexión">Amber v6.0.0-pre1 añade claves de firma NIP-46 por conexión&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, la app firmante &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> (Android Signer Application), lanzó &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.0.0-pre1">v6.0.0-pre1&lt;/a> el 4 de abril. El cambio más importante son las claves de firma por conexión para el protocolo bunker &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (Nostr Remote Signing). En lugar de usar un único keypair para todas las conexiones bunker, Amber ahora genera una clave distinta para cada cliente conectado. Si una conexión de cliente se ve comprometida, el atacante no puede suplantar al firmante frente a otros clientes.&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/pull/377">PR #377&lt;/a> añade comprobación e instalación de actualizaciones dentro de la app vía Zapstore, uniéndose a &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#notedeck-v0100-beta-lanza-autoactualizaci%c3%b3n-con-zapstore">Notedeck&lt;/a> en la adopción de distribución de apps nativa de Nostr. &lt;a href="https://github.com/greenart7c3/Amber/pull/375">PR #375&lt;/a> maneja los fallos de AndroidKeyStore de forma elegante mostrando una advertencia a los usuarios en lugar de crashear, y &lt;a href="https://github.com/greenart7c3/Amber/pull/371">PR #371&lt;/a> añade limpieza de base de datos con límites de tamaño y truncado de contenido para evitar crecimiento ilimitado del almacenamiento. El prerelease también incluye la whitelist de auth de relay &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> y el login con frase mnemónica de recuperación del &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#amber-v502-through-v504">ciclo v5.0.x cubierto la semana pasada&lt;/a>.&lt;/p>
&lt;h3 id="nostria-lanza-app-móvil-nativa">Nostria lanza app móvil nativa&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>, el cliente Nostr multiplataforma mantenido por SondreB, lanzó una app móvil nativa para Android con ocho releases desde &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.11">v3.1.11&lt;/a> hasta &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.18">v3.1.18&lt;/a>. La capacidad nueva más importante es el soporte nativo de firmante local para firmantes como &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> y Aegis. También hay &lt;a href="https://www.nostria.app/download">instaladores de escritorio&lt;/a> para Linux, macOS y Windows. &lt;a href="https://github.com/nostria-app/nostria/pull/610">PR #610&lt;/a> reduce la presión de memoria del feed con límites adaptativos de runtime y limpieza de URLs de preview. v3.1.14 corrige la integración con Brainstorm, un proveedor de &lt;a href="https://nostrcompass.org/es/topics/web-of-trust/">Web of Trust&lt;/a>. v3.1.15 se centra en mejoras de música. La nueva app Android está disponible en &lt;a href="https://zapstore.dev/apps/app.nostria">Zapstore&lt;/a>.&lt;/p>
&lt;h3 id="divine-108-lanza-subidas-reanudables-y-dms">diVine 1.0.8 lanza subidas reanudables y DMs&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>, el cliente de vídeo de formato corto, lanzó &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.8">1.0.8&lt;/a> con 87 PRs fusionados. Las subidas reanudables permiten a los creadores retomar subidas interrumpidas bloque por bloque en lugar de reiniciar desde cero en una conexión inestable. El release añade ajustes de calidad y bitrate de vídeo, doble toque para dar like y mejoras en DMs. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2722">PR #2722&lt;/a> añade un plugin de cámara para macOS para captura de vídeo de escritorio, y &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2820">PR #2820&lt;/a> migra el sistema de notificaciones a una arquitectura BLoC con enriquecimiento y agrupación. El equipo también reemplazó stickers y arte de categorías generados por AI con SVGs de OpenMoji (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/2844">PR #2844&lt;/a>, &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2842">PR #2842&lt;/a>).&lt;/p>
&lt;h3 id="manent-v130-añade-difuminado-de-notas-sensibles-y-auth-nip-42">Manent v1.3.0 añade difuminado de notas sensibles y auth NIP-42&lt;/h3>
&lt;p>&lt;a href="https://github.com/dtonon/manent">Manent&lt;/a>, la app privada de notas cifradas y almacenamiento de archivos, lanzó &lt;a href="https://github.com/dtonon/manent/releases/tag/v1.3.0">v1.3.0&lt;/a> el 2 de abril. Los usuarios ahora pueden marcar notas como sensibles para difuminarlas en la vista de lista, manteniendo el contenido privado oculto durante el desplazamiento casual. El release también añade soporte para &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> (Authentication of Clients to Relays), permitiendo a Manent autenticarse en relays que lo exigen antes de aceptar eventos. Manent almacena todos los datos cifrados en relays Nostr usando el keypair del usuario, así que el soporte NIP-42 amplía el conjunto de relays que puede usar para almacenamiento.&lt;/p>
&lt;h3 id="wisp-v0170-a-v0173-añaden-zaps-en-live-streams-y-backup-de-billetera">Wisp v0.17.0 a v0.17.3 añaden zaps en live streams y backup de billetera&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>, el cliente Nostr para Android, lanzó seis releases desde &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.16.2-beta">v0.16.2-beta&lt;/a> hasta &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.17.3-beta">v0.17.3-beta&lt;/a> con 44 PRs fusionados. El release v0.17.0 añade avisos de seguridad para backup de billetera y mejoras de UX para zaps. &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.17.1-beta">v0.17.1&lt;/a> añade visibilidad del chat de live stream entre plataformas y funcionalidad de zaps en live streams. &lt;a href="https://github.com/barrydeen/wisp/pull/423">PR #423&lt;/a> añade auto-búsqueda de perfiles, una animación de zap exitoso y mejoras en el estado de usuario. &lt;a href="https://github.com/barrydeen/wisp/pull/426">PR #426&lt;/a> corrige un crash por falta de memoria en &lt;code>computeId&lt;/code> para eventos con listas grandes de tags. Los releases v0.16.x añadieron autocompletado de shortcode de emoji, mejoras de UI para chats grupales y filtrado de usuarios bloqueados en todas las rutas de notificaciones.&lt;/p>
&lt;h3 id="mostro-lanza-deep-links-tipos-de-cambio-de-nostr-y-una-corrección-de-pagos-duplicados">Mostro lanza deep links, tipos de cambio de Nostr y una corrección de pagos duplicados&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>, el exchange peer-to-peer de Bitcoin construido sobre Nostr, recibió actualizaciones tanto en su daemon de servidor como en su cliente móvil esta semana. Del lado del servidor, &lt;a href="https://github.com/MostroP2P/mostro/pull/692">PR #692&lt;/a> evita que escrituras obsoletas de órdenes provoquen pagos duplicados, un bug que podía hacer que un vendedor recibiera el pago dos veces por la misma operación. &lt;a href="https://github.com/MostroP2P/mostro/pull/693">PR #693&lt;/a> usa actualizaciones dirigidas para escrituras de dev_fee en lugar de sobrescribir la orden completa.&lt;/p>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a>, el cliente Flutter, lanzó &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.3">v1.2.3&lt;/a> el 3 de abril. El release maneja deep links de distintas instancias de Mostro, de modo que los usuarios puedan tocar enlaces que enruten al servidor de exchange correcto. &lt;a href="https://github.com/MostroP2P/mobile/pull/498">PR #498&lt;/a> detecta DMs de admin y disputa en el pipeline de notificaciones en segundo plano, y la app ahora obtiene tipos de cambio desde Nostr con fallback HTTP/cache. &lt;a href="https://github.com/MostroP2P/mobile/pull/560">PR #560&lt;/a> corrige un bug de bloqueo en la conexión al relay que impedía a la app alcanzar relays bajo ciertas condiciones de red.&lt;/p>
&lt;h3 id="unfiltered-v1012-añade-hashtags-y-comentarios">Unfiltered v1.0.12 añade hashtags y comentarios&lt;/h3>
&lt;p>&lt;a href="https://github.com/dmcarrington/unfiltered">Unfiltered&lt;/a>, un cliente Nostr enfocado en contenido visual, lanzó &lt;a href="https://github.com/dmcarrington/unfiltered/releases/tag/v1.0.12">v1.0.12&lt;/a>. &lt;a href="https://github.com/dmcarrington/unfiltered/pull/69">PR #69&lt;/a> añade soporte para hashtags y &lt;a href="https://github.com/dmcarrington/unfiltered/pull/72">PR #72&lt;/a> añade la capacidad de escribir y mostrar comentarios en publicaciones. &lt;a href="https://github.com/dmcarrington/unfiltered/pull/71">PR #71&lt;/a> corrige problemas de navegación con múltiples imágenes por publicación.&lt;/p>
&lt;h3 id="primal-android-lanza-uso-compartido-de-billetera-entre-múltiples-cuentas-y-auto-reconexión-del-firmante-remoto">Primal Android lanza uso compartido de billetera entre múltiples cuentas y auto-reconexión del firmante remoto&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal&lt;/a>, el cliente Nostr para Android, lanzó un release el 7 de abril. La actualización añade uso compartido de billetera entre múltiples cuentas y un menú overflow con eliminación de billetera en Dev Tools. El firmante remoto ahora se reconecta automáticamente cuando cae la conexión, y el servicio de billetera recibió su propia lógica de auto-reconexión. Entre las correcciones están que los votos zap de encuestas ya no aparecen como Top Zaps, la prevención de crashes por opciones vacías en encuestas, el ocultamiento del balance de billetera cuando no existe ninguna y el mapeo de tipos WalletException a códigos de error en respuestas NWC.&lt;/p>
&lt;h3 id="titan-v010-lanza-navegador-nativo-nsite-con-registro-de-nombres-en-bitcoin">Titan v0.1.0 lanza navegador nativo nsite:// con registro de nombres en Bitcoin&lt;/h3>
&lt;p>&lt;a href="https://github.com/btcjt/titan">Titan&lt;/a>, un navegador nativo de escritorio para la web de Nostr, lanzó &lt;a href="https://github.com/btcjt/titan/releases/tag/v0.1.0">v0.1.0&lt;/a> el 7 de abril. Titan resuelve URLs &lt;code>nsite://&lt;/code> buscando nombres legibles por humanos registrados en Bitcoin, consultando relays Nostr para los eventos de contenido del sitio y renderizando páginas obtenidas desde servidores &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>. El resultado es una experiencia de navegación web sin DNS, sin certificados TLS y sin proveedores de hosting. Los nombres se registran a través de una &lt;a href="https://npub1hmq6xuqnplk5lw0h3700cujmx5gymqn5wrn42u6432r6ntzumezqc3marw.nsite.lol/register">interfaz web&lt;/a> vinculada a transacciones de Bitcoin. El release inicial se distribuye como &lt;code>.dmg&lt;/code> de macOS (ARM, con soporte Rosetta 2 para Intel) e incluye soporte para entorno de desarrollo Nix.&lt;/p>
&lt;h3 id="bikel-v150-lanza-servicio-nativo-en-primer-plano-para-teléfonos-de-googled">Bikel v1.5.0 lanza servicio nativo en primer plano para teléfonos de-Googled&lt;/h3>
&lt;p>&lt;a href="https://github.com/Mnpezz/bikel">Bikel&lt;/a>, un tracker de ciclismo descentralizado que convierte recorridos en datos de infraestructura pública usando Nostr, lanzó &lt;a href="https://github.com/Mnpezz/bikel/releases/tag/v1.5.0">v1.5.0&lt;/a> el 4 de abril. El release migra desde Expo TaskManager dependiente de GMS a un servicio nativo personalizado en primer plano, asegurando seguimiento confiable de recorridos en segundo plano en LineageOS, GrapheneOS y otras variantes Android de-Googled. El Bikel Bot ganó una arquitectura de doble bolsillo con recolección autónoma de eCash mediante Cashu nutzaps. v1.4.3 y v1.4.2 corrigen la sincronización del tracking en segundo plano para entornos Android no estándar, y la app añade toggles para puntos de mapa de aparcabicis OSM.&lt;/p>
&lt;h3 id="sprout-añade-soporte-para-nip-01-nip-23-y-nip-33">Sprout añade soporte para NIP-01, NIP-23 y NIP-33&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/sprout">Sprout&lt;/a>, una plataforma de comunicación de Block con relay Nostr integrado, lanzó &lt;a href="https://github.com/block/sprout/releases/tag/desktop/v0.1.0-rc7">desktop/v0.1.0-rc7&lt;/a> el 6 de abril. Esta semana el equipo añadió soporte para artículos kind &lt;code>30023&lt;/code> de &lt;a href="https://nostrcompass.org/en/topics/nip-23/">NIP-23&lt;/a> (Long-form Content), eventos reemplazables parametrizados de &lt;a href="https://nostrcompass.org/en/topics/nip-33/">NIP-33&lt;/a> con reemplazo claveado por tag &lt;code>d&lt;/code>, y notas de texto kind &lt;code>1&lt;/code> y listas de follows kind &lt;code>3&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-01/">NIP-01&lt;/a>/&lt;a href="https://nostrcompass.org/en/topics/nip-02/">NIP-02&lt;/a>. El release también añade un sistema adaptativo de temas IDE con 54 temas, mejoras de UX para historial de workflows y ejecuciones de agentes, y una limpieza de la barra lateral de miembros.&lt;/p>
&lt;h3 id="mesh-llm-v0560-lanza-protocolo-de-configuración-distribuida">mesh-llm v0.56.0 lanza protocolo de configuración distribuida&lt;/h3>
&lt;p>&lt;a href="https://github.com/michaelneale/mesh-llm">mesh-llm&lt;/a>, un sistema distribuido de inferencia LLM que usa keypairs Nostr para identidad de nodo, lanzó &lt;a href="https://github.com/michaelneale/mesh-llm/releases/tag/v0.56.0">v0.56.0&lt;/a> el 7 de abril. El release añade un protocolo de configuración distribuida con semántica de ownership, cuantización asimétrica de KV cache (claves Q8_0 con valores Q4) para reducir el uso de memoria, almacenamiento en keychain del sistema para keystores de identidad, streaming fluido de chat con cola de mensajes, y correcciones para el layout fullscreen y el particionado de KV cache con flash attention.&lt;/p>
&lt;h3 id="nostr-vpn-lanza-soporte-de-exit-node-y-empaquetado-para-umbrel">Nostr VPN lanza soporte de exit node y empaquetado para Umbrel&lt;/h3>
&lt;p>&lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a>, una VPN peer-to-peer que usa relays Nostr para señalización y WireGuard para túneles cifrados, lanzó seis releases desde &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.0">v0.3.0&lt;/a> hasta &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.6">v0.3.6&lt;/a> esta semana. El ciclo v0.3.x añade soporte de exit node en Windows y macOS, permitiendo que peers enruten tráfico de internet a través de otros nodos de la red. La propagación de invites y aliases ahora se sincroniza sobre Nostr, así que los usuarios pueden compartir acceso a la red sin coordinación fuera de banda. Los releases añaden empaquetado para Umbrel en despliegues autoalojados, NAT punch-through usando endpoints públicos recordados, limpieza automática de exit nodes obsoletos y una especificación de protocolo publicada. El proyecto también estabilizó el manejo de rutas en macOS con default routes autorreparables y reparación de underlay, y añadió una build Android vía Tauri. Hay builds disponibles para macOS (Apple Silicon e Intel), Linux (AppImage y .deb), Windows y Android.&lt;/p>
&lt;h3 id="nymchat-revierte-marmot-y-lanza-chats-grupales-nip-17-mejorados">Nymchat revierte Marmot y lanza chats grupales NIP-17 mejorados&lt;/h3>
&lt;p>&lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a>, el cliente de chat con capacidad MLS, lanzó 14 releases desde &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/3.56.261">v3.56.261&lt;/a> hasta &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.58.274">v3.58.274&lt;/a>. El cambio más significativo es un giro de protocolo: &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.57.261">v3.57.261&lt;/a> añadió chats grupales Marmot MLS, pero &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.58.268">v3.58.268&lt;/a> revirtió a &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> porque el soporte multidispositivo de Marmot aún no está terminado, lo que causaba problemas con la sincronización del estado del chat grupal entre dispositivos. v3.58.271 introduce chats grupales NIP-17 mejorados con claves efímeras rotativas para todos los mensajes, diseñadas para prevenir ataques de timing y correlación. La semana también trajo un sistema de amigos con control granular de ajustes (&lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.58.262">v3.58.262&lt;/a>), sincronización de mensajes de chat grupal MLS en ajustes cifrados de la app, y múltiples correcciones de conectividad con relays.&lt;/p>
&lt;h3 id="nak-v0195-añade-blossom-multi-servidor-y-publicación-outbox">nak v0.19.5 añade Blossom multi-servidor y publicación outbox&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>, el toolkit de línea de comandos Nostr de fiatjaf, lanzó &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.5">v0.19.5&lt;/a>. El comando &lt;code>blossom&lt;/code> ahora acepta múltiples flags &lt;code>--server&lt;/code> para subir a varios servidores &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> en una sola llamada. Un nuevo comando &lt;code>key&lt;/code> amplía claves parciales rellenando con ceros por la izquierda. El comando &lt;code>event&lt;/code> gana un flag &lt;code>--outbox&lt;/code> para publicar eventos a través del modelo outbox, y &lt;code>fetch&lt;/code> ahora sale con código de error cuando no se devuelve ningún evento.&lt;/p>
&lt;h2 id="en-desarrollo">En desarrollo&lt;/h2>
&lt;h3 id="white-noise-añade-previews-con-thumbhash-y-puente-de-registro-push">White Noise añade previews con thumbhash y puente de registro push&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>, el mensajero privado construido sobre el protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, fusionó cinco PRs. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/549">PR #549&lt;/a> reemplaza previews de imagen con blurhash por thumbhash, un algoritmo más nuevo que produce imágenes placeholder más nítidas con un payload más pequeño (normalmente menos de 30 bytes frente a los ~50-100 bytes de blurhash) mientras preserva la proporción y distribución de color de la imagen original. Blurhash se mantiene como fallback para contenido antiguo. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/548">PR #548&lt;/a> actualiza whitenoise-rs y añade el puente de registro push &lt;a href="https://nostrcompass.org/es/topics/mip-05/">MIP-05&lt;/a>, conectando el &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#marmot-moves-keypackages-to-addressable-events-and-tightens-push-notifications">trabajo de especificación de notificaciones push de la semana pasada&lt;/a> con el cliente. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/493">PR #493&lt;/a> añade paginación basada en cursor para mensajes de chat, reemplazando la estrategia anterior de carga por un enfoque guiado por scroll.&lt;/p>
&lt;h3 id="route96-añade-configuración-dinámica-de-etiquetas-y-limpieza-de-zero-egress">Route96 añade configuración dinámica de etiquetas y limpieza de zero-egress&lt;/h3>
&lt;p>&lt;a href="https://github.com/v0l/route96">Route96&lt;/a>, el servidor de medios &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> de v0l, fusionó tres PRs. &lt;a href="https://github.com/v0l/route96/pull/80">PR #80&lt;/a> añade configuración dinámica del modelo de etiquetas vía la API de admin, permitiendo a los operadores cambiar modelos de clasificación de contenido sin reiniciar el servidor. &lt;a href="https://github.com/v0l/route96/pull/82">PR #82&lt;/a> añade campos de configuración de etiquetas a la UI de admin. &lt;a href="https://github.com/v0l/route96/pull/79">PR #79&lt;/a> añade una política de limpieza de archivos zero-egress que elimina automáticamente archivos que nunca se han descargado, manteniendo bajos los costes de almacenamiento para los operadores.&lt;/p>
&lt;h3 id="snort-lanza-endurecimiento-de-seguridad-e-invoices-de-pago-para-dvm">Snort lanza endurecimiento de seguridad e invoices de pago para DVM&lt;/h3>
&lt;p>&lt;a href="https://github.com/v0l/snort">Snort&lt;/a>, el cliente web, lanzó dos releases esta semana con una auditoría de seguridad integral. Las correcciones incluyen verificación de firma Schnorr, protección frente a falsificación de mensajes de relay &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (evitando que atacantes inyecten solicitudes de firma a través de relays comprometidos), mejoras en cifrado de PIN y eliminación de la confianza en delegación NIP-26. Las ganancias de rendimiento vienen de verificación Schnorr por lotes en WASM, rutas con lazy loading, traducciones precompiladas y eliminación de verificación doble por evento. &lt;a href="https://github.com/v0l/snort/pull/618">PR #618&lt;/a> añade la visualización de invoice requerido por pago para kind &lt;code>7000&lt;/code> de &lt;a href="https://nostrcompass.org/en/topics/nip-90/">NIP-90&lt;/a> (Data Vending Machine), de modo que cuando un DVM responde con un requisito de pago, Snort renderiza el invoice Lightning directamente en el feed.&lt;/p>
&lt;h3 id="damus-mejora-la-compactación-de-lmdb">Damus mejora la compactación de LMDB&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>, el cliente iOS, fusionó &lt;a href="https://github.com/damus-io/damus/pull/3719">PR #3719&lt;/a> que añade compactación automática programada de LMDB, evitando que la base de datos local crezca sin límite con el tiempo. &lt;a href="https://github.com/damus-io/damus/pull/3663">PR #3663&lt;/a> mejora BlurOverlayView para que parezca protector en lugar de roto.&lt;/p>
&lt;h3 id="captains-log-añade-indexación-de-tags-y-sincronización-de-notas">Captain&amp;rsquo;s Log añade indexación de tags y sincronización de notas&lt;/h3>
&lt;p>&lt;a href="https://github.com/nodetec/captains-log">Captain&amp;rsquo;s Log&lt;/a> (Comet), la herramienta de escritura long-form nativa de Nostr de Nodetec, fusionó cuatro PRs esta semana. &lt;a href="https://github.com/nodetec/captains-log/pull/156">PR #156&lt;/a> añade indexación de tags y soporte de sincronización entre notas, &lt;a href="https://github.com/nodetec/captains-log/pull/157">PR #157&lt;/a> refactoriza la sincronización de notas y el manejo de tags, y &lt;a href="https://github.com/nodetec/captains-log/pull/159">PR #159&lt;/a> corrige la sincronización de notas enviadas a la papelera para que las notas eliminadas permanezcan eliminadas entre dispositivos.&lt;/p>
&lt;h3 id="relatr-v02x-rediseña-su-sistema-de-plugins-con-marketplace-nativo-de-nostr-para-validadores">Relatr v0.2.x rediseña su sistema de plugins con marketplace nativo de Nostr para validadores&lt;/h3>
&lt;p>&lt;a href="https://github.com/ContextVM/relatr">Relatr&lt;/a>, un motor de puntuación de &lt;a href="https://nostrcompass.org/es/topics/web-of-trust/">Web of Trust&lt;/a> que calcula rankings de confianza a partir de la distancia en el grafo social y validadores configurables, lanzó la familia v0.2.x con un rediseño completo del sistema de plugins. Los validadores ahora se escriben en Elo, un lenguaje portable de expresiones funcionales bifurcado para soportar capacidades de múltiples pasos orquestadas por el host (consultas Nostr, búsquedas en el grafo social, resolución NIP-05). Los plugins se publican como eventos Nostr kind &lt;code>765&lt;/code>, haciendo que la distribución sea nativa de la red de relays. Un nuevo &lt;a href="https://relatr.net">plugin marketplace&lt;/a> permite a operadores descubrir, instalar y ponderar validadores desde el navegador, con un CLI (&lt;code>relo&lt;/code>) para autoría y publicación local. La arquitectura está aislada: los plugins solo pueden invocar capacidades que el host proporcione explícitamente, así que un validador malicioso no puede escapar de su ámbito definido. Las instancias de Relatr ahora pueden gestionarse desde el sitio web, con visibilidad completa de qué plugins componen el algoritmo de puntuación y sus pesos individuales.&lt;/p>
&lt;h3 id="shopstr-mejora-la-navegación-móvil-y-el-control-de-acceso">Shopstr mejora la navegación móvil y el control de acceso&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>, el marketplace nativo de Nostr para comprar y vender con Bitcoin, empujó 158 commits en su app principal y el proyecto complementario &lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a> esta semana. Las correcciones incluyen mejoras en el layout de comunidades en móvil, comportamiento de cerrar menú al navegar y autocierre de dropdowns. Las rutas protegidas ya no pueden abrirse vía URL directa sin iniciar sesión, y la lógica de coincidencia de slugs ahora maneja correctamente múltiples coincidencias exactas.&lt;/p>
&lt;h3 id="pollerama-añade-notificaciones-búsqueda-de-películas-y-ui-de-valoración">Pollerama añade notificaciones, búsqueda de películas y UI de valoración&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-polls">Pollerama&lt;/a>, una app de encuestas, sondeos y ratings sociales construida sobre Nostr, añadió notificaciones de hilos, una función de búsqueda de películas y una revisión de la UI de valoración. El release también corrige problemas de carga del feed y actualiza versiones de dependencias.&lt;/p>
&lt;h3 id="purser-construye-daemon-de-pagos-nativo-de-nostr-con-cifrado-marmot">Purser construye daemon de pagos nativo de Nostr con cifrado Marmot&lt;/h3>
&lt;p>&lt;a href="https://github.com/EthnTuttle/purser">Purser&lt;/a>, un daemon de pagos nativo de Nostr diseñado como reemplazo de Zaprite, fusionó nueve PRs esta semana construyendo su arquitectura central. El proyecto usa MLS de &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> vía MDK para mensajería cifrada entre comerciante y cliente, con Strike y Square como proveedores de pagos. Esta semana aterrizaron carga de config y catálogo, validación de esquema de mensajes, la capa de comunicación MDK, implementaciones de proveedores Strike y Square, un motor de polling, limitación anti-spam, persistencia de pagos pendientes y el pipeline de procesamiento de órdenes. Los 99 tests ahora ejercitan operaciones MLS reales de mdk-core después de que el equipo eliminara mock MLS en favor de cifrado real en modo local.&lt;/p>
&lt;h3 id="vector-refactoriza-adjuntos-de-dms-y-añade-edición-de-perfil">Vector refactoriza adjuntos de DMs y añade edición de perfil&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a>, el mensajero Nostr centrado en privacidad construido con Tauri, fusionó &lt;a href="https://github.com/VectorPrivacy/Vector/pull/55">PR #55&lt;/a> refactorizando el frontend. El descifrado y guardado de adjuntos de DM se movió a la librería vector-core, y la app ahora soporta edición de perfil. La flag de cancelación de subida quedó correctamente conectada a través de TauriSendCallback, y se limpiaron callbacks de preview de adjuntos sin uso.&lt;/p>
&lt;h2 id="trabajo-de-protocolo-y-especificación">Trabajo de protocolo y especificación&lt;/h2>
&lt;h3 id="actualizaciones-de-nips">Actualizaciones de NIPs&lt;/h3>
&lt;p>Cambios recientes en el &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Fusionados:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-58/">NIP-58&lt;/a> (Badges): Profile Badges pasan a kind 10008, Badge Sets a kind 30008&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2276">PR #2276&lt;/a>): Migra Profile Badges desde kind &lt;code>30008&lt;/code> a kind &lt;code>10008&lt;/code> (un evento reemplazable, uno por pubkey) e introduce kind &lt;code>30008&lt;/code> para Badge Sets. Antes, Profile Badges usaba el mismo kind (&lt;code>30008&lt;/code>) que las definiciones de Badge, lo que los convertía en eventos reemplazables parametrizados claveados por un tag &lt;code>d&lt;/code>. El nuevo kind &lt;code>10008&lt;/code> es un evento reemplazable simple: uno por pubkey, sin necesidad de tag &lt;code>d&lt;/code>. Los clientes consultan un único evento reemplazable por usuario en lugar de escanear eventos reemplazables parametrizados. Amethyst v1.07.3 ya distribuye esta migración.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> (Git Stuff): Añadir listas de follows relacionadas con git&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2130">PR #2130&lt;/a>): Añade convenciones de listas de follows para seguimiento de repositorios y issues de NIP-34. Los usuarios publican follow sets kind &lt;code>30000&lt;/code> con tags &lt;code>d&lt;/code> como &lt;code>git-repos&lt;/code> o &lt;code>git-issues&lt;/code> que contienen referencias de tag &lt;code>a&lt;/code> a repositorios (kind &lt;code>30617&lt;/code>) que quieren seguir. Los clientes pueden suscribirse a estos follow sets para mostrar actividad de repositorios en el feed de un usuario, de forma similar a como funcionan las listas de contactos kind &lt;code>3&lt;/code> para pubkeys.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs abiertos y discusiones:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>NIP-AC: P2P Voice and Video Calls over WebRTC&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2301">PR #2301&lt;/a>): Amplía el NIP-100 original (implementado por 0xChat) con tres cambios: migración a cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> envuelto en gift wraps &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> para eliminar fugas de metadatos, un flujo WebRTC especificado para la configuración de llamadas de voz y vídeo (offer, answer, candidatos ICE), y un modelo mesh de llamadas grupales donde cada peer establece una conexión WebRTC directa con todos los demás peers. La especificación no es retrocompatible con NIP-100. Amethyst ya está construyendo contra ella, con una suite de tests para la máquina de estados de llamadas (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2143">PR #2143&lt;/a>) y manejo de ofertas de llamada obsoletas (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2164">PR #2164&lt;/a>) aterrizando esta semana.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/en/topics/nip-340/">NIP-340&lt;/a> (FROST Quorum)&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2299">PR #2299&lt;/a>): Propone convenciones para firma threshold de &lt;a href="https://nostrcompass.org/es/topics/frost/">FROST&lt;/a> (Flexible Round-Optimized Schnorr Threshold) en Nostr. FROST permite que un grupo de firmantes controle colectivamente una identidad Nostr donde cualquier subconjunto t-de-n puede firmar eventos sin reconstruir la clave privada completa. El NIP define cómo coordinar rondas de firma, distribuir key shares y publicar eventos firmados de forma threshold, construyendo sobre el trabajo del firmante Igloo del &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#igloo-signer-11">proyecto FROSTR&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/en/topics/nip-5d/">NIP-5D&lt;/a> (Nostr Web Applets)&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2303">PR #2303&lt;/a>): Define un protocolo &lt;code>postMessage&lt;/code> para aplicaciones web aisladas (&amp;ldquo;napplets&amp;rdquo;) que corren en iframes y se comunican con una aplicación anfitriona (&amp;ldquo;shell&amp;rdquo;). El shell proporciona a la napplet firma Nostr, acceso a relay y contexto de usuario mediante una API estructurada de mensajes, mientras el sandbox del iframe evita acceso directo a claves. Esto extiende el modelo de hosting de sitios web estáticos de &lt;a href="https://nostrcompass.org/en/topics/nip-5a/">NIP-5A&lt;/a> hacia aplicaciones interactivas que pueden leer y escribir eventos Nostr. El NIP está en desarrollo activo con una implementación de runtime funcional.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/en/topics/nip-5c/">NIP-5C&lt;/a> (Scrolls)&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2281">PR #2281&lt;/a>): Renombrado desde la propuesta anterior NIP-A5. Define convenciones para publicar y descubrir programas WebAssembly en Nostr. Los binarios WASM se almacenan como eventos Nostr, y los clientes pueden descargarlos y ejecutarlos en un runtime aislado. Una &lt;a href="https://nprogram.netlify.app/">demo app&lt;/a> muestra scrolls corriendo en el navegador, con programas de ejemplo publicados como eventos Nostr que cualquier cliente puede obtener y ejecutar.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions): Aclaraciones&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2304">PR #2304&lt;/a>): Ajusta el lenguaje de la especificación alrededor de múltiples claves y relays por proveedor de servicio, aclarando cómo deberían manejar los clientes afirmaciones de proveedores que operan a través de varios pubkeys o endpoints de relay.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-24/">NIP-24&lt;/a> (Extra Metadata Fields): &lt;code>published_at&lt;/code> para eventos reemplazables&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2300">PR #2300&lt;/a>): Generaliza el tag &lt;code>published_at&lt;/code> de &lt;a href="https://nostrcompass.org/en/topics/nip-23/">NIP-23&lt;/a> (Long-form Content) a todos los eventos reemplazables y direccionables. El tag es solo de visualización: si &lt;code>published_at&lt;/code> es igual a &lt;code>created_at&lt;/code>, los clientes muestran el evento como &amp;ldquo;created&amp;rdquo; en ese momento; si difieren (porque el evento fue actualizado), los clientes pueden mostrar &amp;ldquo;updated&amp;rdquo; en su lugar. Esto permite que perfiles kind &lt;code>0&lt;/code> muestren fechas de &amp;ldquo;joined at&amp;rdquo; y que otros eventos reemplazables preserven su marca de tiempo de publicación original a través de actualizaciones. Una propuesta complementaria de &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2302">PR #2302&lt;/a>) añade el mismo tag a eventos de listas.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap): kind efímero de gift wrap&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2245">PR #2245&lt;/a>): Añade kind &lt;code>21059&lt;/code> como contraparte efímera del gift wrap kind &lt;code>1059&lt;/code> existente. Los eventos efímeros (kinds &lt;code>20000&lt;/code>-&lt;code>29999&lt;/code>) siguen la semántica de &lt;a href="https://nostrcompass.org/es/topics/nip-01/">NIP-01&lt;/a>: no se espera que los relays los almacenen y pueden descartarlos tras la entrega. Esto permite a las aplicaciones enviar mensajes envueltos en gift wrap que desaparecen de los relays una vez entregados, reduciendo requisitos de almacenamiento para mensajería de alto volumen mientras conservan el mismo modelo de cifrado de tres capas que los DMs regulares de &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="opensats-anuncia-la-decimosexta-ola-de-grants-de-nostr">OpenSats anuncia la decimosexta ola de grants de Nostr&lt;/h3>
&lt;p>&lt;a href="https://opensats.org">OpenSats&lt;/a> anunció su &lt;a href="https://opensats.org/blog/sixteenth-wave-of-nostr-grants">decimosexta ola de grants de Nostr&lt;/a> el 8 de abril, financiando cuatro grants por primera vez y una renovación. &lt;a href="https://github.com/vitorpamplona/amethyst/tree/main/desktopApp">Amethyst Desktop&lt;/a> recibe financiación para que el colaborador Robert Nagy construya una app de escritorio independiente sobre los módulos &lt;a href="https://nostrcompass.org/es/topics/quartz/">Quartz&lt;/a> y Commons, llevando el conjunto de funciones del cliente Android a interfaces guiadas por ratón con conexiones persistentes a relays. &lt;a href="https://github.com/nogringo/nostr-mail">Nostr Mail&lt;/a> recibe financiación para construir un sistema completo de email sobre Nostr usando eventos kind &lt;code>1301&lt;/code> envueltos en gift wraps &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a>, con un cliente Flutter y servidores puente SMTP para compatibilidad con Gmail/Outlook. &lt;a href="https://github.com/Nostrord/nostrord">Nostrord&lt;/a> recibe financiación para un cliente grupal basado en relay &lt;a href="https://nostrcompass.org/en/topics/nip-29/">NIP-29&lt;/a> en Kotlin Multiplatform con mensajería grupal estilo Discord, moderación e hilos. &lt;a href="https://github.com/tami1A84/null--nostr">Nurunuru&lt;/a> recibe financiación para construir una versión nativa iOS del cliente Nostr enfocado en japonés, modelado sobre la interfaz familiar de LINE, con login biométrico basado en passkeys para el onboarding. HAMSTR recibió una renovación de grant (financiado por primera vez en la &lt;a href="https://opensats.org/blog/eleventh-wave-of-nostr-grants#hamstr">undécima ola&lt;/a>).&lt;/p>
&lt;h2 id="nip-en-profundidad-nip-17-private-direct-messages">NIP en profundidad: NIP-17 (Private Direct Messages)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/17.md">NIP-17&lt;/a> define el estándar actual para mensajes directos privados en Nostr. Reemplaza el esquema más antiguo de &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a> (Encrypted Direct Messages), que filtraba metadatos (remitente, receptor y timestamps eran visibles en los relays) y usaba una construcción de cifrado más débil. NIP-17 combina &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads) para el cifrado con &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap) para proteger metadatos, creando un sistema de tres capas donde los relays no pueden ver quién habla con quién.&lt;/p>
&lt;p>El protocolo usa tres kinds de evento apilados uno dentro de otro. La capa más interna es el mensaje real, un evento kind &lt;code>14&lt;/code> sin firma:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744108800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">14&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;f1a2b3c4d5e6f7890123456789abcdef01234567890abcdef1234567890abcdef&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://inbox.example.com&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;subject&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Project update&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;The new relay config is deployed. Let me know if you see any issues.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El evento kind &lt;code>14&lt;/code> es deliberadamente unsigned (&lt;code>sig&lt;/code> vacío). La especificación describe esto como una forma de proporcionar negabilidad, pero en la práctica la protección es limitada. El seal kind &lt;code>13&lt;/code> que envuelve el rumor está firmado por la clave real del remitente. Un receptor puede mostrar el seal firmado a un tercero, probando que el remitente se comunicó con él, incluso sin revelar el contenido del mensaje. Con pruebas de conocimiento cero, un receptor puede probar el contenido exacto del mensaje sin revelar su propia clave privada. El rumor unsigned es como una carta sin firmar dentro de un sobre firmado: la firma del sobre vincula al remitente con el contenido. La verdadera negabilidad requeriría autenticación simétrica (como los HMAC de Signal), lo cual es incompatible con el modelo descentralizado de relay de Nostr, donde los mensajes deben ser autoautenticables. Las fortalezas reales de NIP-17 son la privacidad de metadatos y el secreto del contenido, no la negabilidad.&lt;/p>
&lt;p>Este mensaje unsigned se envuelve luego en un seal kind &lt;code>13&lt;/code>, firmado por el remitente real y cifrado con &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> para el receptor:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744022400&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">13&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;nip44-encrypted kind 14 payload&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El seal no tiene tags, así que incluso si se descifrara no revelaría al receptor. El seal está firmado por la clave real del remitente, lo que permite al receptor autenticar el mensaje comprobando que el &lt;code>pubkey&lt;/code> del seal coincide con el &lt;code>pubkey&lt;/code> del kind &lt;code>14&lt;/code> interno.&lt;/p>
&lt;p>El seal se envuelve después en un gift wrap kind &lt;code>1059&lt;/code>, firmado por una clave aleatoria desechable y dirigido al receptor:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744065600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1059&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;f1a2b3c4d5e6f7890123456789abcdef01234567890abcdef1234567890abcdef&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;nip44-encrypted kind 13 payload&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El &lt;code>pubkey&lt;/code> del gift wrap es una clave aleatoria generada solo para este mensaje, y &lt;code>created_at&lt;/code> se aleatoriza hasta dos días hacia el pasado. Esta es la capa más externa que los relays ven realmente: un mensaje de un pubkey desconocido dirigido al receptor, con un timestamp que no refleja cuándo se envió realmente el mensaje. El timestamp aleatorizado protege frente a análisis posteriores de eventos almacenados, pero un adversario conectado activamente a relays aún puede observar cuándo apareció por primera vez el gift wrap, así que esta defensa se limita a observadores pasivos que consultan datos del relay más tarde. Como el pubkey es aleatorio y el timestamp es falso, los relays no pueden determinar el remitente real. Para leer el mensaje, el receptor descifra el gift wrap usando su propia clave y el pubkey aleatorio, encuentra el seal dentro, descifra el seal usando su propia clave y el pubkey del remitente tomado del seal, y encuentra dentro el mensaje kind &lt;code>14&lt;/code>.&lt;/p>
&lt;p>NIP-17 no proporciona forward secrecy. Todos los mensajes se cifran usando el keypair estático de Nostr (mediante la derivación de claves de NIP-44 a partir de las claves del remitente y el receptor). Si una clave privada se ve comprometida, todo mensaje pasado y futuro cifrado para esa clave puede descifrarse. Es un tradeoff deliberado: como el cifrado depende solo del nsec, un usuario que haga backup de su nsec puede recuperar todo su historial de mensajes desde cualquier relay que aún almacene los gift wraps. Protocolos como MLS (usado por &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>) proporcionan forward secrecy mediante rotación de material de claves, pero al coste de requerir sincronización de estado y de hacer imposible la recuperación histórica de mensajes después de la rotación de claves.&lt;/p>
&lt;p>NIP-17 también define kind &lt;code>15&lt;/code> para mensajes de archivo cifrados, que añade tags &lt;code>file-type&lt;/code>, &lt;code>encryption-algorithm&lt;/code>, &lt;code>decryption-key&lt;/code> y &lt;code>decryption-nonce&lt;/code> para que el receptor pueda descifrar un archivo adjunto cifrado con AES-GCM antes de subirse a un servidor Blossom. Kind &lt;code>10050&lt;/code> se usa para publicar la lista preferida de relays de DM del usuario, para que los remitentes sepan dónde entregar gift wraps. El conjunto de tags &lt;code>pubkey&lt;/code> + &lt;code>p&lt;/code> en un mensaje define una sala de chat; añadir o eliminar un participante crea una sala nueva con historial limpio.&lt;/p>
&lt;p>Las implementaciones cubren a la mayoría de los clientes principales. &lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a> usa NIP-17 para toda la mensajería uno a uno. &lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a> usa NIP-17 para sus DMs con proof-of-work. &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal&lt;/a>, &lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>, &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>, &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a> y &lt;a href="https://github.com/coracle-social/coracle">Coracle&lt;/a> implementan NIP-17 como su protocolo principal de DM. La especificación también soporta mensajes que desaparecen estableciendo un tag &lt;code>expiration&lt;/code> en el gift wrap.&lt;/p>
&lt;h2 id="nip-en-profundidad-nip-46-nostr-remote-signing">NIP en profundidad: NIP-46 (Nostr Remote Signing)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/46.md">NIP-46&lt;/a> define un protocolo para separar la clave privada del usuario de la aplicación cliente. En lugar de pegar un nsec en una web app, el usuario ejecuta un firmante remoto (también llamado &amp;ldquo;bunker&amp;rdquo;) que guarda la clave privada y responde a solicitudes de firma a través de relays Nostr. El cliente nunca ve la clave privada. Esto reduce la superficie de ataque: un cliente comprometido puede solicitar firmas, pero no puede extraer la propia clave.&lt;/p>
&lt;p>El protocolo usa kind &lt;code>24133&lt;/code> tanto para solicitudes como para respuestas, cifradas con &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads). Un cliente genera un &lt;code>client-keypair&lt;/code> desechable para la sesión y se comunica con el firmante remoto mediante mensajes cifrados con NIP-44 etiquetados con los pubkeys de ambos. Aquí hay una solicitud de firma de un cliente a un firmante remoto:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;aa11bb22cc33dd44ee55ff6677889900aabbccdd11223344556677889900aabb&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;eff37350d839ce3707332348af4549a96051bd695d3223af4aabce4993531d86&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744108800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">24133&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;nip44-encrypted JSON-RPC request&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;1122334455667788990011223344556677889900aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff0011223344556677&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El &lt;code>content&lt;/code> cifrado contiene una estructura similar a JSON-RPC:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;random-request-id-1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;method&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;sign_event&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;params&amp;#34;&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;kind\&amp;#34;:1,\&amp;#34;content\&amp;#34;:\&amp;#34;Hello from remote signing\&amp;#34;,\&amp;#34;tags\&amp;#34;:[],\&amp;#34;created_at\&amp;#34;:1744108800}&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El firmante remoto descifra la solicitud, la presenta al usuario para su aprobación (o la aprueba automáticamente según los permisos configurados), firma el evento con la clave privada del usuario y devuelve el evento firmado en una respuesta:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;bb22cc33dd44ee55ff6677889900aabb11223344556677889900aabbccddeeff&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744108801&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">24133&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;eff37350d839ce3707332348af4549a96051bd695d3223af4aabce4993531d86&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;nip44-encrypted JSON-RPC response&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Las conexiones pueden iniciarse desde cualquiera de los dos lados. Un firmante remoto proporciona una URL &lt;code>bunker://&lt;/code> que contiene su pubkey e información de relay. Un cliente proporciona una URL &lt;code>nostrconnect://&lt;/code> con su pubkey de cliente, relays y un secreto para verificación de conexión. El parámetro &lt;code>secret&lt;/code> evita suplantación de conexión: solo la parte que recibió la URL fuera de banda puede completar el handshake.&lt;/p>
&lt;p>Se definen ocho métodos: &lt;code>connect&lt;/code> para establecer la sesión, &lt;code>sign_event&lt;/code> para firmar eventos, &lt;code>get_public_key&lt;/code> para conocer el pubkey del usuario, &lt;code>ping&lt;/code> para keepalive, &lt;code>nip04_encrypt&lt;/code>/&lt;code>nip04_decrypt&lt;/code> para cifrado legacy, &lt;code>nip44_encrypt&lt;/code>/&lt;code>nip44_decrypt&lt;/code> para cifrado actual, y &lt;code>switch_relays&lt;/code> para gestión de relays. La migración de relay la maneja el firmante remoto, que puede mover la conexión a nuevos relays con el tiempo sin romper la sesión.&lt;/p>
&lt;p>Los clientes solicitan capacidades específicas en el momento de conexión mediante un sistema de permisos. Una cadena de permisos como &lt;code>nip44_encrypt,sign_event:1,sign_event:14&lt;/code> solicita acceso a cifrado NIP-44 y acceso de firma solo para eventos kind &lt;code>1&lt;/code> y kind &lt;code>14&lt;/code>. El firmante remoto puede aceptar, rechazar o modificar estos permisos. Esto significa que un cliente web para leer y publicar notas podría recibir solo permiso &lt;code>sign_event:1&lt;/code>, mientras que un cliente de DM podría recibir también permisos &lt;code>sign_event:14&lt;/code> y &lt;code>nip44_encrypt&lt;/code>.&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> implementa NIP-46 en Android, y su &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-08-newsletter/#amber-v600-pre1-a%c3%b1ade-claves-de-firma-nip-46-por-conexi%c3%b3n">v6.0.0-pre1&lt;/a> de esta semana añade claves de firma por conexión para aislar clientes entre sí. &lt;a href="https://github.com/nicktee/nsecapp">nsec.app&lt;/a> (antes Nostr Connect) proporciona un bunker basado en web. &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a> incluye &lt;code>BunkerSigner&lt;/code> para clientes JavaScript, y &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#nostr-tools-adds-bunker-relay-control-and-fixes-nip-47-multi-relay-parsing">el PR #530 de la semana pasada&lt;/a> añadió &lt;code>skipSwitchRelays&lt;/code> para gestión manual de relays. El protocolo también soporta desafíos de auth: cuando un firmante remoto necesita autenticación adicional (contraseña, biometría o token hardware), responde con una &lt;code>auth_url&lt;/code> que el cliente abre en un navegador para que el usuario la complete.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. ¿Estás construyendo algo o tienes noticias para compartir? Envíanos un DM en Nostr o encuéntranos en &lt;a href="https://nostrcompass.org">nostrcompass.org&lt;/a>.&lt;/p></content:encoded></item><item><title>Nostr Compass #16</title><link>https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/</link><pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#amethyst-lanza-notas-fijadas-gesti%c3%b3n-de-relays-y-request-to-vanish">v1.07.0&lt;/a> con notas fijadas, gestión de relays vía &lt;a href="https://nostrcompass.org/es/topics/nip-86/">NIP-86&lt;/a>, y soporte de &lt;a href="https://nostrcompass.org/es/topics/nip-62/">NIP-62&lt;/a> Request to Vanish. &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#nip-5a-se-fusiona-trayendo-sitios-web-est%c3%a1ticos-a-nostr">NIP-5A&lt;/a> (Static Websites) se fusiona en el repositorio de NIPs, definiendo cómo alojar sitios web bajo pares de claves Nostr usando almacenamiento &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>. &lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#flotilla-v170-a%c3%b1ade-salas-de-voz-e-inicio-de-sesi%c3%b3n-con-email">v1.7.0&lt;/a> con salas de voz, login con email/contraseña, y DMs con proof-of-work. &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> corrige churn de relays en &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#white-noise-corrige-churn-de-relays-y-ampl%c3%ada-los-controles-del-cliente">v2026.3.23&lt;/a>, &lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a> lanza su &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#nospeak-se-lanza-como-un-mensajero-privado-10">1.0.0&lt;/a> como mensajero cifrado sin registro. &lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a> &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#nymchat-lanza-chats-de-grupo-impulsados-por-marmot">adopta Marmot&lt;/a> para chats de grupo cifrados con MLS con fallback a NIP-17. &lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a> alcanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#calendar-by-form-v100">v1.0.0&lt;/a> con listas privadas de calendario e importación ICS, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> añade &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#amber-v502-a-v504">recuperación por mnemónico y whitelisting de autenticación de relay NIP-42&lt;/a>, y la &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#marmot-mueve-keypackages-a-eventos-direccionables-y-ajusta-las-notificaciones-push">especificación Marmot&lt;/a> mueve los KeyPackages a eventos direccionables mientras ajusta el formato de notificaciones push MIP-05.&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#amethyst-lanza-notas-fijadas-gesti%c3%b3n-de-relays-y-request-to-vanish">v1.07.0&lt;/a> con notas fijadas, gestión de relays vía &lt;a href="https://nostrcompass.org/es/topics/nip-86/">NIP-86&lt;/a>, y soporte de &lt;a href="https://nostrcompass.org/es/topics/nip-62/">NIP-62&lt;/a> Request to Vanish. &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#nip-5a-se-fusiona-trayendo-sitios-web-est%c3%a1ticos-a-nostr">NIP-5A&lt;/a> (Static Websites) se fusiona en el repositorio de NIPs, definiendo cómo alojar sitios web bajo pares de claves Nostr usando almacenamiento &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>. &lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#flotilla-v170-a%c3%b1ade-salas-de-voz-e-inicio-de-sesi%c3%b3n-con-email">v1.7.0&lt;/a> con salas de voz, login con email/contraseña, y DMs con proof-of-work. &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> corrige churn de relays en &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#white-noise-corrige-churn-de-relays-y-ampl%c3%ada-los-controles-del-cliente">v2026.3.23&lt;/a>, &lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a> lanza su &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#nospeak-se-lanza-como-un-mensajero-privado-10">1.0.0&lt;/a> como mensajero cifrado sin registro. &lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a> &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#nymchat-lanza-chats-de-grupo-impulsados-por-marmot">adopta Marmot&lt;/a> para chats de grupo cifrados con MLS con fallback a NIP-17. &lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a> alcanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#calendar-by-form-v100">v1.0.0&lt;/a> con listas privadas de calendario e importación ICS, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> añade &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#amber-v502-a-v504">recuperación por mnemónico y whitelisting de autenticación de relay NIP-42&lt;/a>, y la &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#marmot-mueve-keypackages-a-eventos-direccionables-y-ajusta-las-notificaciones-push">especificación Marmot&lt;/a> mueve los KeyPackages a eventos direccionables mientras ajusta el formato de notificaciones push MIP-05.&lt;/p>
&lt;h2 id="noticias">Noticias&lt;/h2>
&lt;h3 id="amethyst-lanza-notas-fijadas-gestión-de-relays-y-request-to-vanish">Amethyst lanza notas fijadas, gestión de relays y Request to Vanish&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, el cliente Android mantenido por vitorpamplona, lanzó seis versiones en tres días, desde &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.0">v1.07.0&lt;/a> hasta &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.5">v1.07.5&lt;/a>. El conjunto principal de funciones abarca seis superficies de protocolo: notas fijadas, una pantalla dedicada de feed de encuestas, soporte de &lt;a href="https://nostrcompass.org/es/topics/nip-62/">NIP-62&lt;/a> (Request to Vanish) para solicitar la eliminación completa de eventos de los relays, &lt;a href="https://nostrcompass.org/es/topics/nip-86/">NIP-86&lt;/a> (Relay Management API) desde dentro del cliente, evaluaciones de &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a> (Relay Discovery and Liveness Monitoring) en la pantalla de información del relay, y visualización de información de miembros de &lt;a href="https://nostrcompass.org/es/topics/nip-43/">NIP-43&lt;/a> (Relay Access Metadata and Requests).&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-86/">NIP-86&lt;/a> define una interfaz JSON-RPC para operadores de relays, permitiendo a los clientes enviar comandos administrativos como banear pubkeys, permitir pubkeys y listar usuarios baneados sobre una API estandarizada. Amethyst ahora expone esto directamente en su UI de gestión de relays, así que los usuarios que ejecutan sus propios relays pueden administrarlos desde el mismo cliente que usan para publicar. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2039">PR #2039&lt;/a> reemplaza el antiguo diálogo de entrada hex para banear y permitir pubkeys con un diálogo interactivo de búsqueda de usuarios.&lt;/p>
&lt;p>v1.07.2 añadió subidas desde teclado GIF y corrigió una regresión de firma donde las respuestas de rechazo de Amber se interpretaban mal porque versiones antiguas de Amber devolvían una cadena vacía para el campo &lt;code>rejected&lt;/code> (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2042">PR #2042&lt;/a>). v1.07.5 corrige un crash en la subida de imágenes. Los lanzamientos &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.2">v1.06.2&lt;/a> y &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.3">v1.06.3&lt;/a> a principios de la semana añadieron un selector de tipo de encuesta para encuestas de elección única vs. múltiple, drag-to-seek en barras de progreso de vídeo, y mejoras de publicación anónima.&lt;/p>
&lt;h3 id="nip-5a-se-fusiona-trayendo-sitios-web-estáticos-a-nostr">NIP-5A se fusiona, trayendo sitios web estáticos a Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/5A.md">NIP-5A&lt;/a> (Static Websites) se fusionó vía &lt;a href="https://github.com/nostr-protocol/nips/pull/1538">PR #1538&lt;/a>, definiendo cómo alojar sitios web estáticos bajo pares de claves Nostr. La especificación usa dos kinds de evento: kind &lt;code>15128&lt;/code> para un sitio raíz, uno por pubkey, y kind &lt;code>35128&lt;/code> para sitios nombrados identificados por una etiqueta &lt;code>d&lt;/code>. Cada manifiesto mapea rutas URL a hashes SHA256, con etiquetas &lt;code>server&lt;/code> opcionales apuntando a hosts de almacenamiento &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> donde viven los archivos reales.&lt;/p>
&lt;p>El modelo de hosting funciona así: un autor construye un sitio estático, sube los archivos a uno o más servidores Blossom, y luego publica un evento de manifiesto firmado que mapea rutas a hashes de contenido. Un servidor host recibe solicitudes web, resuelve la pubkey del autor desde el subdominio, obtiene el manifiesto desde la lista de relays &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> del autor, y sirve los archivos descargando los blobs correspondientes desde Blossom. El sitio permanece bajo el control del autor porque solo esa clave puede firmar un manifiesto actualizado. El servidor host es reemplazable porque cualquier servidor que entienda NIP-5A puede servir el mismo sitio desde el mismo manifiesto.&lt;/p>
&lt;p>La especificación se construye sobre infraestructura que ya existía. &lt;a href="https://github.com/lez/nsite">nsite&lt;/a>, la implementación host de referencia de NIP-5A construida por lez, y &lt;a href="https://github.com/hzrd149/nsite-manager">nsite-manager&lt;/a>, la UI de gestión de hzrd149, ya estaban funcionando antes de que el NIP se fusionara. La fusión hace oficiales los kinds de evento y las reglas de resolución de URL, lo que da a segundas y terceras implementaciones un objetivo estable.&lt;/p>
&lt;h3 id="white-noise-corrige-churn-de-relays-y-amplía-los-controles-del-cliente">White Noise corrige churn de relays y amplía los controles del cliente&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>, el mensajero privado construido sobre el protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, lanzó &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.3.23">v2026.3.23&lt;/a> el 25 de marzo. El trabajo principal es estabilidad de relays. El login ya no espera a que termine cada publicación de lista de relays antes de continuar, porque la publicación de listas ahora usa lógica de quorum y reintenta el resto en segundo plano. Las operaciones puntuales de fetch y publish usan sesiones efímeras acotadas de relay en lugar de quedarse en el pool de larga duración, las sesiones restauradas recuperan su ruta de refresh de grupos después del arranque, y la app ahora expone diagnósticos e inspección de estado de relay a través de &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/495">PR #495&lt;/a> y &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/502">PR #502&lt;/a>.&lt;/p>
&lt;p>El mismo lanzamiento cambia cómo se comportan las conversaciones. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/468">PR #468&lt;/a> añade threading de respuestas NIP-C7 con etiquetas &lt;code>q&lt;/code> y referencias &lt;code>nostr:nevent&lt;/code>, &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/471">PR #471&lt;/a> y &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/512">PR #512&lt;/a> mantienen visibles los mensajes eliminados como marcadores de eliminado en lugar de quitarlos silenciosamente, &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/478">PR #478&lt;/a> añade un flujo de reporte de errores en la app usando reportes anónimos con &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads), y &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/486">PR #486&lt;/a> añade chat de soporte directamente en el cliente. Los controles de mensajes orientados al usuario también aterrizaron en la misma ventana: &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/532">PR #532&lt;/a> archiva chats, &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/541">PR #541&lt;/a> añade mute y unmute con duraciones configurables, y &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/535">PR #535&lt;/a> añade ajustes de notificaciones. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/539">PR #539&lt;/a> es trabajo preparatorio de registro push, conectando el registro APNs en iOS y la detección de Play Services en Android para que el registro pueda construirse encima. Del lado backend, el &lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> (Marmot Development Kit) añadió primitivas de notificaciones push MIP-05 y un constructor de solicitudes de notificación (&lt;a href="https://github.com/marmot-protocol/mdk/pull/235">PR #235&lt;/a>, &lt;a href="https://github.com/marmot-protocol/mdk/pull/238">PR #238&lt;/a>), mientras &lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a> añadió persistencia de registro de notificaciones push (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/688">PR #688&lt;/a>), correcciones de cancelación de tareas en segundo plano (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/696">PR #696&lt;/a>), y recuperación de key packages al iniciar (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/693">PR #693&lt;/a>).&lt;/p>
&lt;h3 id="nostr-vpn-alcanza-v030-con-sincronización-de-roster-e-invite-v2">Nostr VPN alcanza v0.3.0 con sincronización de roster e invite v2&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#nostr-vpn-se-lanza-como-alternativa-a-tailscale">Siguiendo la cobertura de lanzamiento de la semana pasada&lt;/a>, &lt;a href="https://github.com/mmalmi/nostr-vpn">nostr-vpn&lt;/a>, la VPN peer-to-peer que usa relays Nostr para señalización y WireGuard para túneles cifrados, continuó su ritmo rápido de lanzamientos, publicando versiones hasta &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.3">v0.3.3&lt;/a>. El salto de versión trae dos cambios disruptivos: el formato de invitación pasa a v2 (0.3.0 aún puede importar invitaciones v1, pero builds más antiguas no pueden importar invitaciones v2), y se añadió sincronización de roster firmada por administrador al protocolo de señalización. Los peers de versiones mixtas aún pueden conectarse en la capa mesh, pero los peers antiguos no participarán en la sincronización del roster.&lt;/p>
&lt;p>La adición de sincronización de roster inicia el movimiento hacia una red gestionada. Un nodo administrador ahora puede empujar cambios de membresía a todos los peers, de modo que añadir o quitar un dispositivo de la red mesh no requiere que cada peer actualice manualmente su configuración. Las versiones v0.2.x durante la misma semana abordaron problemas específicos de despliegue: &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.22">v0.2.22&lt;/a> a &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.28">v0.2.28&lt;/a> corrigieron gestión de servicios Windows, añadieron scripts de build Android, y refinaron el flujo de emparejamiento LAN.&lt;/p>
&lt;h3 id="nospeak-se-lanza-como-un-mensajero-privado-10">nospeak se lanza como un mensajero privado 1.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a>, un mensajero privado construido sobre Nostr, lanzó su versión &lt;a href="https://github.com/psic4t/nospeak/releases/tag/v1.0.0">1.0.0&lt;/a> el 27 de marzo. El proyecto incluye conversaciones uno a uno y de grupo, gestión de contactos, y una arquitectura auto-alojable. Los chats uno a uno usan &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages), que combina &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap) con &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads) para ocultar el remitente a los relays. Para medios, los archivos se cifran del lado del cliente con AES-256-GCM antes de subirlos a servidores Blossom. El lanzamiento también se distribuye como imagen de contenedor para auto-hosting.&lt;/p>
&lt;h3 id="flotilla-v170-añade-salas-de-voz-e-inicio-de-sesión-con-email">Flotilla v1.7.0 añade salas de voz e inicio de sesión con email&lt;/h3>
&lt;p>&lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a>, el cliente estilo Discord de hodlbod para &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> (Relay-based Groups) construido alrededor del modelo &amp;ldquo;relays as groups&amp;rdquo;, lanzó &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.0">v1.7.0&lt;/a> y &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.1">v1.7.1&lt;/a> el 30 y 31 de marzo. La funcionalidad principal son las salas de voz, contribuidas por mplorentz. Los usuarios ahora pueden unirse a llamadas de voz dentro de canales de grupo, con un diálogo de unión (&lt;a href="https://gitea.coracle.social/coracle/flotilla/pulls/109">PR #109&lt;/a>) que les permite seleccionar un dispositivo de entrada de audio y elegir si quieren entrar a la llamada de voz o solo ver el chat de texto. El diálogo resuelve un problema de UX de la iteración anterior: entrar a una sala con voz habilitada forzaba antes la activación del micrófono incluso cuando el usuario solo quería leer mensajes o revisar ajustes de la sala.&lt;/p>
&lt;p>El mismo lanzamiento añade login con email y contraseña como alternativa a autenticación basada en claves Nostr, proof-of-work en DMs, edición de DMs, onboarding y ajustes de relay rediseñados, detección de soporte Blossom vía &lt;code>supported_nips&lt;/code>, mejoras de badges de notificación, fallback de notificaciones push Android, y correcciones de subida de archivos en Android. v1.7.1 sigue con una corrección para el fallback de registro de pomade al usar un firmante offline.&lt;/p>
&lt;p>Hodlbod también está construyendo &lt;a href="https://gitea.coracle.social/coracle/caravel">Caravel&lt;/a>, un gestor de hosting y panel para relays zooid, que registró 40 commits esta semana en desarrollo inicial.&lt;/p>
&lt;h3 id="nymchat-lanza-chats-de-grupo-impulsados-por-marmot">Nymchat lanza chats de grupo impulsados por Marmot&lt;/h3>
&lt;p>&lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a> (también conocido como NYM, Nostr Ynstant Messenger), el cliente de chat efímero conectado con Bitchat, anunció que todos los nuevos chats de grupo ahora usan el protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> para mensajería cifrada con MLS. La integración usa kinds &lt;code>443&lt;/code>, &lt;code>444&lt;/code> y &lt;code>445&lt;/code> para key packages, mensajes welcome y mensajes de grupo respectivamente, proporcionando forward secrecy, seguridad post-compromise y fuga cero de metadatos. Si un receptor no puede usar MLS, Nymchat recurre a su ruta anterior de chats grupales &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages), que sigue estando cifrada de extremo a extremo pero carece de las propiedades de árbol ratchet de MLS.&lt;/p>
&lt;p>Las series v3.55 y v3.56 de esta semana se enfocaron en casos límite de chats grupales: carga en dispositivos nuevos, comportamiento de salida, enrutamiento de notificaciones y conteo de badges no leídos. El mismo ciclo también corrigió una vulnerabilidad XSS por HTML sin escapar y añadió bloqueo de palabras clave y frases extendido a apodos de usuario. Esto convierte a Nymchat en otro cliente Marmot que se suma a &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#white-noise-corrige-churn-de-relays-y-ampl%c3%ada-los-controles-del-cliente">White Noise&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#openchat-v024-a-v030">OpenChat&lt;/a>, ampliando el conjunto de apps que pueden intercambiar mensajes grupales cifrados con MLS sobre el mismo protocolo.&lt;/p>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;h3 id="calendar-by-form-v100">Calendar by Form* v1.0.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a>, la app de calendario descentralizada construida sobre &lt;a href="https://nostrcompass.org/es/topics/nip-52/">NIP-52&lt;/a> (Calendar Events), alcanzó &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.0.0">v1.0.0&lt;/a> el 29 de marzo. El lanzamiento añade listas privadas de calendario usando eventos Nostr cifrados (kind &lt;code>32123&lt;/code>) con auto-cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads), de modo que los usuarios puedan organizar eventos en colecciones privadas sin exponer la agrupación a los relays. El mismo lanzamiento añade manejo de intents ICS para importar datos de calendario desde otras aplicaciones y solicitudes de invitación para compartir eventos entre usuarios.&lt;/p>
&lt;h3 id="amber-v502-a-v504">Amber v5.0.2 a v5.0.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, la app firmante &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> (Android Signer Application), lanzó tres point releases: &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.2">v5.0.2&lt;/a>, &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.3">v5.0.3&lt;/a> y &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.4">v5.0.4&lt;/a>. La adición más visible es el login con frase mnemónica de recuperación (&lt;a href="https://github.com/greenart7c3/Amber/pull/358">PR #358&lt;/a>), que permite a los usuarios restaurar su firmante desde una seed phrase BIP39 en lugar de requerir la cadena nsec o ncryptsec en bruto. &lt;a href="https://github.com/greenart7c3/Amber/pull/357">PR #357&lt;/a> añade una whitelist de autenticación de relay &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a>, para que los usuarios puedan restringir qué relays están autorizados a solicitar autenticación del cliente. &lt;a href="https://github.com/greenart7c3/Amber/pull/353">PR #353&lt;/a> añade selección de alcance de cifrado para permisos de descifrado, permitiendo a los usuarios conceder acceso de descifrado solo NIP-04 o solo NIP-44 en lugar de un permiso total. v5.0.4 corrige un bug donde el rechazo no respetaba los permisos acotados de cifrado y descifrado y mejora el rendimiento al recibir múltiples solicitudes de bunker.&lt;/p>
&lt;h3 id="aegis-v040">Aegis v0.4.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZharlieW/Aegis">Aegis&lt;/a>, el firmante multiplataforma, lanzó &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.4.0">v0.4.0&lt;/a> el 26 de marzo. El lanzamiento añade modos de autorización Full y Selective en Ajustes y corrige múltiples problemas de escaneo de QR. Los commits de seguimiento &lt;a href="https://github.com/ZharlieW/Aegis/commit/d4f799fe51dd82968d54f72ac77f2de29d0cfe6b">d4f799f&lt;/a>, &lt;a href="https://github.com/ZharlieW/Aegis/commit/3313af92e55e449ebc98fbd91a085bd444d716e7">3313af9&lt;/a>, &lt;a href="https://github.com/ZharlieW/Aegis/commit/3b214e4176f5dbe7f18690d0996e69dd151fe00f">3b214e4&lt;/a>, y &lt;a href="https://github.com/ZharlieW/Aegis/commit/e4f40b6f1f48c2dae1bb5e4246df26c26dba419e">e4f40b6&lt;/a> continúan el mismo trabajo con controles de selección por lotes, estadísticas reutilizables de selección en lote, APIs de selección por grupo completo, y estadísticas de uso por permiso en la página de permisos de la app.&lt;/p>
&lt;h3 id="schemata-v027-a-v030">Schemata v0.2.7 a v0.3.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrability/schemata">Schemata&lt;/a>, las definiciones JSON Schema para validar kinds de eventos Nostr, lanzó cuatro versiones desde &lt;a href="https://github.com/nostrability/schemata/releases/tag/v0.2.7">v0.2.7&lt;/a> hasta &lt;a href="https://github.com/nostrability/schemata/releases/tag/v0.3.0">v0.3.0&lt;/a> con 21 PRs fusionados. El lanzamiento v0.3.0 trae correcciones de consistencia de patrones a través de URLs de relay, IDs hex, tipos MIME y cadenas BOLT-11 (&lt;a href="https://github.com/nostrability/schemata/pull/126">PR #126&lt;/a>), patrones centralizados de URL de relay (&lt;a href="https://github.com/nostrability/schemata/pull/117">PR #117&lt;/a>), schemas base de tipo bech32 para &lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19&lt;/a> (&lt;a href="https://github.com/nostrability/schemata/pull/118">PR #118&lt;/a>), y validación para eventos de spell kind 777 (&lt;a href="https://github.com/nostrability/schemata/pull/125">PR #125&lt;/a>). El pipeline de lanzamiento ahora publica una nota kind &lt;code>1&lt;/code> en Nostr en cada release (&lt;a href="https://github.com/nostrability/schemata/pull/120">PR #120&lt;/a>), así que el proyecto se anuncia a sí mismo a través del protocolo que valida. Schemata ahora soporta una docena de lenguajes más allá del paquete canónico JS/TS: Rust, Go, Python, Kotlin, Java, Swift, Dart, PHP, C#/.NET, C++, Ruby y C.&lt;/p>
&lt;p>Junto a Schemata, el equipo publicó &lt;a href="https://github.com/nostrability/schemata-codegen">schemata-codegen&lt;/a>, un generador experimental de código que adopta un enfoque diferente al mismo problema de validación. Mientras los paquetes validadores de Schemata requieren una dependencia de runtime de JSON Schema, schemata-codegen convierte schemas directamente en construcciones nativas tipadas del lenguaje (tuplas tipadas de tags, interfaces de kind y validadores de runtime), eliminando la necesidad de una biblioteca validadora en tiempo de ejecución. La &lt;a href="https://github.com/nostrability/schemata-codegen/blob/main/CODEGEN-VS-VALIDATORS.md">comparación codegen-vs-validators&lt;/a> documenta cuándo encaja cada enfoque.&lt;/p>
&lt;h3 id="bigbrotr-v650-a-v654">BigBrotr v6.5.0 a v6.5.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/BigBrotr/bigbrotr">BigBrotr&lt;/a>, la plataforma de analíticas de relays, lanzó cinco versiones desde &lt;a href="https://github.com/BigBrotr/bigbrotr/releases/tag/v6.5.0">v6.5.0&lt;/a> hasta &lt;a href="https://github.com/BigBrotr/bigbrotr/releases/tag/v6.5.4">v6.5.4&lt;/a>. El lanzamiento v6.5.0 centraliza la validación de URLs de relay con una función factory &lt;code>parse_relay_url()&lt;/code> y añade comprobación de longitud de URL y saneamiento de rutas. La infraestructura de monitoreo también recibió correcciones: los eventos de anuncio ahora incluyen etiquetas de ubicación geohash (siguiendo &lt;a href="https://nostrcompass.org/es/topics/nip-52/">NIP-52&lt;/a>), y se añadió protección de timeout a las pruebas de metadatos Geo/Net &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a> que no tenían plazo y podían colgarse indefinidamente. &lt;a href="https://github.com/BigBrotr/bigbrotr/pull/410">PR #410&lt;/a> actualiza PostgreSQL de 16 a 18, lo que trae el subsistema de I/O asíncrona y mayor throughput de WAL al pipeline de analíticas de relays.&lt;/p>
&lt;h3 id="el-relay-de-vertex-lab-añade-búsqueda-de-perfiles-nip-50">El relay de Vertex Lab añade búsqueda de perfiles NIP-50&lt;/h3>
&lt;p>&lt;a href="https://vertexlab.io">Vertex Lab&lt;/a>, el equipo detrás de &lt;a href="https://github.com/vertex-lab/npub.world">npub.world&lt;/a> y el motor Web of Trust &lt;a href="https://vertexlab.io/docs">Vertex&lt;/a>, anunció que &lt;code>wss://relay.vertexlab.io&lt;/code> ahora soporta &lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a> (Search) para consultas de perfiles. NIP-50 extiende el filtro estándar &lt;code>REQ&lt;/code> de Nostr con un campo &lt;code>search&lt;/code>, permitiendo a los clientes enviar consultas de búsqueda de texto completo a relays que soportan indexación. Añadir búsqueda de perfiles a un relay que ya sirve datos de Web of Trust significa que los clientes conectados a &lt;code>relay.vertexlab.io&lt;/code> pueden descubrir usuarios por nombre o descripción sin un servicio de búsqueda separado.&lt;/p>
&lt;h3 id="hashtree-v0217-y-v0218-lanzan-mesh-webrtc-e-iris-desktop">Hashtree v0.2.17 y v0.2.18 lanzan mesh WebRTC e Iris Desktop&lt;/h3>
&lt;p>&lt;a href="https://github.com/mmalmi/hashtree">Hashtree&lt;/a>, el sistema de almacenamiento de blobs direccionados por contenido de mmalmi que publica raíces de Merkle en Nostr, lanzó &lt;a href="https://github.com/mmalmi/hashtree/releases/tag/v0.2.17">v0.2.17&lt;/a> y &lt;a href="https://github.com/mmalmi/hashtree/releases/tag/v0.2.18">v0.2.18&lt;/a> el 31 de marzo. Los dos lanzamientos coronan un sprint de 30 commits que añade tres capacidades distintas. Primero, el crate &lt;code>hashtree-webrtc&lt;/code> (renombrado a &lt;code>hashtree-network&lt;/code> en v0.2.18) añade distribución peer-to-peer de blobs basada en WebRTC con señalización mesh unificada a través del CLI Rust, el harness de simulación y el cliente TypeScript. Segundo, el pipeline de lanzamiento ahora construye artefactos Windows (zip del CLI e instalador de Iris), llevando cobertura multiplataforma a macOS, Linux y Windows. Tercero, ambos lanzamientos empaquetan Iris Desktop 0.1.0, el cliente social Nostr de mmalmi, como assets AppImage, .deb e instalador Windows junto al CLI de hashtree. &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-18-newsletter/">Hashtree fue cubierto por primera vez en Newsletter #10&lt;/a> cuando se lanzó como un store compatible con &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> basado en filesystem. La capa WebRTC es el primer paso hacia distribución de contenido peer-to-peer sin depender de servidores Blossom centralizados.&lt;/p>
&lt;h3 id="nostr-mail-client-v070-a-v072">Nostr Mail Client v0.7.0 a v0.7.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/nogringo/nostr-mail-client">Nostr Mail Client&lt;/a>, el cliente estilo correo construido con Flutter sobre identidades Nostr, lanzó &lt;a href="https://github.com/nogringo/nostr-mail-client/releases/tag/v0.7.0">v0.7.0&lt;/a>, &lt;a href="https://github.com/nogringo/nostr-mail-client/releases/tag/v0.7.1">v0.7.1&lt;/a> y &lt;a href="https://github.com/nogringo/nostr-mail-client/releases/tag/v0.7.2">v0.7.2&lt;/a> en tres días. El trabajo de producto visible se centró en onboarding (&lt;a href="https://github.com/nogringo/nostr-mail-client/pull/9">PR #9&lt;/a>) y edición de perfil (&lt;a href="https://github.com/nogringo/nostr-mail-client/pull/10">PR #10&lt;/a>), que son piezas básicas para cualquier cliente que intente presentar Nostr como un buzón. Las versiones posteriores empaquetaron ese trabajo en nuevas builds Android y Linux.&lt;/p>
&lt;h3 id="wisp-v0140-a-v0161">Wisp v0.14.0 a v0.16.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>, el cliente Nostr Android, lanzó 13 versiones más desde &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.14.0-beta">v0.14.0-beta&lt;/a> hasta &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.16.3-beta">v0.16.3-beta&lt;/a>. El trabajo de esta semana incluye correcciones de JSON rumor NIP-17 (&lt;a href="https://github.com/barrydeen/wisp/pull/385">PR #385&lt;/a>), badges de repost en tarjetas de galería (&lt;a href="https://github.com/barrydeen/wisp/pull/383">PR #383&lt;/a>), detalles expandibles de reacciones (&lt;a href="https://github.com/barrydeen/wisp/pull/382">PR #382&lt;/a>), sets persistentes de emoji (&lt;a href="https://github.com/barrydeen/wisp/pull/381">PR #381&lt;/a>), y controles de autoplay de vídeo (&lt;a href="https://github.com/barrydeen/wisp/pull/380">PR #380&lt;/a>). El más reciente &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.16.3-beta">v0.16.3-beta&lt;/a> también corrige shortcodes de emoji personalizados con guiones y etiquetas de emoji faltantes.&lt;/p>
&lt;h3 id="primal-android-3017">Primal Android 3.0.17&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> lanzó &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.17">3.0.17&lt;/a> el 24 de marzo. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1000">PR #1000&lt;/a> mapea tipos de WalletException a códigos de error en respuestas NWC, dando a clientes &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> información estructurada de fallos en lugar de errores genéricos. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/995">PR #995&lt;/a> corrige votos zap de encuestas apareciendo como Top Zaps, y &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/998">PR #998&lt;/a> oculta el balance de billetera y botones de acción cuando no hay billetera configurada.&lt;/p>
&lt;h3 id="openchat-v024-a-v030">OpenChat v0.2.4 a v0.3.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a>, el cliente de chat basado en Avalonia construido sobre el stack &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, lanzó seis versiones desde &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.2.4">v0.2.4&lt;/a> hasta &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.3.0">v0.3.0&lt;/a> en cuatro días. El log de commits cuenta la historia de un cliente llenando los huecos entre &amp;ldquo;Marmot funciona&amp;rdquo; y &amp;ldquo;alguien puede usar esto diariamente&amp;rdquo;. Aterrizó la autenticación de relay &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a>, seguida de una UI selector de relay con filtrado de eventos duplicados. Los mensajes de voz ganaron pausa, reanudación, seek y visualización de tiempo. La ruta del firmante se endureció: se corrigieron las conexiones Amber con un formato URI &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> actualizado, el WebSocket se reconecta automáticamente antes de enviar solicitudes, y las solicitudes Amber duplicadas ahora se capturan comprobando respuestas repetidas. Del lado de almacenamiento, Linux y macOS recibieron almacenamiento seguro AES-256-GCM con claves respaldadas por archivo, y la obtención de metadatos de usuario ahora usa descubrimiento de relay &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> y guarda resultados en caché en una base de datos local.&lt;/p>
&lt;h3 id="igloo-signer-11">Igloo Signer 1.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/FROSTR-ORG/igloo-ios-prototype">Igloo&lt;/a>, el firmante threshold iOS &lt;a href="https://nostrcompass.org/es/topics/frost/">FROST&lt;/a> del proyecto FROSTR, lanzó &lt;a href="https://github.com/FROSTR-ORG/igloo-ios-prototype/releases/tag/v1.1">v1.1&lt;/a> el 28 de marzo. Las firmas FROST (Flexible Round-Optimized Schnorr Threshold) permiten a un grupo de firmantes controlar colectivamente un par de claves Nostr, donde cualquier t-de-n participantes puede firmar un evento sin que ninguna parte tenga la clave privada completa. Igloo es una de las primeras implementaciones móviles de este enfoque para Nostr.&lt;/p>
&lt;h3 id="nak-v0193-y-v0194">nak v0.19.3 y v0.19.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>, el toolkit de línea de comandos Nostr de fiatjaf, lanzó &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.3">v0.19.3&lt;/a> y &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.4">v0.19.4&lt;/a> el 26 y 30 de marzo. Ambos lanzamientos corrigen condiciones de panic: &lt;a href="https://github.com/fiatjaf/nak/pull/118">PR #118&lt;/a> reemplaza &lt;code>strings.Split&lt;/code> con &lt;code>strings.Cut&lt;/code> para prevenir un posible acceso fuera de rango, y &lt;a href="https://github.com/fiatjaf/nak/pull/119">PR #119&lt;/a> previene la misma clase de panic en el parseo de flags curl.&lt;/p>
&lt;h3 id="flora-v030">Flora v0.3.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/shawnyeager/flora-extension">Flora&lt;/a>, una extensión Chrome para grabación y compartición de pantalla descentralizada en Nostr, lanzó &lt;a href="https://github.com/shawnyeager/flora-extension/releases/tag/v0.3.0">v0.3.0&lt;/a>. El lanzamiento añade compartición privada de vídeo cifrado con modos público, no listado y privado. Las grabaciones privadas se cifran con AES-256-GCM y se entregan a los destinatarios vía &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages), de modo que la grabación nunca toca un servidor en texto claro.&lt;/p>
&lt;h3 id="yakihonne-mobile-203">YakiHonne Mobile 2.0.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/YakiHonne/mobile-app">YakiHonne&lt;/a>, el cliente móvil Nostr, lanzó &lt;a href="https://github.com/YakiHonne/mobile-app/releases/tag/YakiHonne-2.0.3">2.0.3&lt;/a> con reseñas de relays y solicitudes de unión, respuestas anidadas ampliadas, auto-traducción de notas, y soporte NWC multi-relay.&lt;/p>
&lt;h2 id="actualizaciones-de-proyectos">Actualizaciones de Proyectos&lt;/h2>
&lt;h3 id="zap-cooking-añade-zap-polls-y-verificación-de-pagos-branta">Zap Cooking añade zap polls y verificación de pagos Branta&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a>, la plataforma de recetas y contenido, fusionó 11 PRs esta semana enfocadas en contenido interactivo y flujos de pago. &lt;a href="https://github.com/zapcooking/frontend/pull/277">PR #277&lt;/a> añade zap polls (kind 6969), donde los usuarios votan enviando sats y pueden ver listas de votantes con fotos de perfil. &lt;a href="https://github.com/zapcooking/frontend/pull/274">PR #274&lt;/a> rediseña la UX de encuestas para que la interfaz de voto se integre de forma más natural en el feed.&lt;/p>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend/pull/276">PR #276&lt;/a> añade escaneo QR basado en cámara al flujo Send Payment e integra &lt;a href="https://branta.pro/">Branta&lt;/a>, un servicio de verificación que comprueba si un destino de pago es legítimo antes del envío. Branta revisa destinos de pago contra phishing, address swaps e intercepciones man-in-the-middle antes de enviar. En la implementación de Zap Cooking, un nombre y logo de plataforma verificados por Branta aparecen directamente en el flujo de pago, y los códigos QR habilitados para Branta pueden llevar parámetros &lt;code>branta_id&lt;/code> y &lt;code>branta_secret&lt;/code> para que la billetera pueda verificar el destino desde el propio código escaneado.&lt;/p>
&lt;h3 id="divine-sienta-bases-para-búsqueda-unificada-y-endurece-la-entrega-de-vídeo">diVine sienta bases para búsqueda unificada y endurece la entrega de vídeo&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>, el cliente de vídeos cortos, pasó la semana ajustando búsqueda, navegación del feed, recuperación de reproducción y comportamiento de subida. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2540">PR #2540&lt;/a> sienta la base para una pantalla de búsqueda unificada, con secciones agrupadas para Videos, People y Tags. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2623">PR #2623&lt;/a> endurece la paginación a través de feeds de perfil, inbox, notificaciones, listas Discover, classic vines, búsqueda y feeds de grid componibles moviéndolos a un controlador compartido de paginación.&lt;/p>
&lt;p>La entrega de vídeo también recibió varias correcciones concretas. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2643">PR #2643&lt;/a> reintenta fuentes derivadas alojadas por Divine en orden y recurre al blob crudo antes de mostrar un error de reproducción, de modo que fallos transitorios en una fuente no maten la reproducción inmediatamente. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2634">PR #2634&lt;/a> mantiene las subidas reanudables en la ruta propiedad de Divine cuando la detección de capacidades falla transitoriamente, reduciendo subidas rotas por fallos breves de red. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2637">PR #2637&lt;/a> también cambia la compuerta de contenido sensible para que los vídeos solo queden estrictamente bloqueados por etiquetas de advertencia reales, no solo por etiquetas de advertencia suministradas por el creador.&lt;/p>
&lt;h3 id="shopstr-añade-storefronts-personalizados-y-milk-market-sigue-enviando-trabajo-de-marketplace">Shopstr añade storefronts personalizados y Milk Market sigue enviando trabajo de marketplace&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>, el marketplace basado en Nostr, fusionó &lt;a href="https://github.com/shopstr-eng/shopstr/pull/245">PR #245&lt;/a> añadiendo storefronts personalizados. Esto da a los vendedores una superficie inicial más distintiva en lugar de forzar cada listado a la misma presentación genérica.&lt;/p>
&lt;p>&lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a>, un marketplace dedicado a la leche, continuó con optimizaciones de storefront (&lt;a href="https://github.com/shopstr-eng/milk-market/pull/18">PR #18&lt;/a>), recuperación de cuenta (&lt;a href="https://github.com/shopstr-eng/milk-market/pull/17">PR #17&lt;/a>), beef splits (&lt;a href="https://github.com/shopstr-eng/milk-market/pull/15">PR #15&lt;/a>), y correcciones de tipado de herramientas MCP (&lt;a href="https://github.com/shopstr-eng/milk-market/pull/16">PR #16&lt;/a>).&lt;/p>
&lt;h3 id="notedeck-añade-efectos-de-sonido-y-extiende-su-actualizador-hacia-android">Notedeck añade efectos de sonido y extiende su actualizador hacia Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>, el cliente de escritorio del equipo Damus, fusionó &lt;a href="https://github.com/damus-io/notedeck/pull/1412">PR #1412&lt;/a> añadiendo un subsistema de efectos de sonido con sonidos de interacción de UI usando rodio, y &lt;a href="https://github.com/damus-io/notedeck/pull/1399">PR #1399&lt;/a> con actualizaciones de Agentium incluyendo un flag de título CLI y carpetas de sesión colapsables. Un &lt;a href="https://github.com/damus-io/notedeck/pull/1417">PR #1417&lt;/a> abierto propone auto-actualización APK vía Nostr/Zapstore en Android, construyendo sobre &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-18-newsletter/#notedeck-mueve-el-descubrimiento-de-versiones-a-nostr">el trabajo de actualizador nativo de Nostr de Notedeck de Newsletter #14&lt;/a>.&lt;/p>
&lt;h3 id="nostria-añade-pistas-de-relay-en-reposts-y-alineación-con-nip-98">Nostria añade pistas de relay en reposts y alineación con NIP-98&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> fusionó &lt;a href="https://github.com/nostria-app/nostria/pull/583">PR #583&lt;/a> añadiendo pistas de relay &lt;a href="https://nostrcompass.org/es/topics/nip-18/">NIP-18&lt;/a> (Reposts) a etiquetas &lt;code>e&lt;/code> de repost para eventos kind 6 y kind 16, &lt;a href="https://github.com/nostria-app/nostria/pull/582">PR #582&lt;/a> alineando la autenticación HTTP de Brainstorm (kind 27235) con las etiquetas requeridas de &lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98&lt;/a> (HTTP Auth), y &lt;a href="https://github.com/nostria-app/nostria/pull/576">PR #576&lt;/a> añadiendo pruebas de validación de schemas Schemata. El cambio NIP-98 significa que Nostria puede autenticarse ante servicios externos usando el mismo formato de autenticación HTTP que otros clientes usan.&lt;/p>
&lt;h3 id="nostr-doc-añade-empaquetado-de-escritorio-y-trabajo-offline-first">Nostr-Doc añade empaquetado de escritorio y trabajo offline-first&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-docs">Nostr-Doc&lt;/a>, el editor colaborativo de Form*, tuvo una semana ocupada de empaquetado y trabajo de editor. &lt;a href="https://github.com/formstr-hq/nostr-docs/commit/fcdc00a564c8d76f094c586b06efce07592a60e4">commit fcdc00a&lt;/a> añade una app de escritorio, &lt;a href="https://github.com/formstr-hq/nostr-docs/commit/3977a8eb2e62b84a67de756c2776e14de8470927">commit 3977a8e&lt;/a> inicia trabajo de app nativa, y &lt;a href="https://github.com/formstr-hq/nostr-docs/commit/413a030f5b47fb8e32a5dff81bcef557ad9b5869">commit 413a030&lt;/a> empuja la app hacia comportamiento offline-first. Del lado del editor, &lt;a href="https://github.com/formstr-hq/nostr-docs/commit/1855ce86ee83ad504e14e47d9c339baffb114786">commit 1855ce8&lt;/a> añade guardado con Ctrl+S, advertencias de guardado, correcciones de preview de enlaces y renderizado corregido de texto tachado.&lt;/p>
&lt;h3 id="rust-nostr-optimiza-el-parseo-nip-21-y-añade-soporte-nip-62-del-lado-relay">rust-nostr optimiza el parseo NIP-21 y añade soporte NIP-62 del lado relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> fusionó ocho PRs. El más notable es &lt;a href="https://github.com/rust-nostr/nostr/pull/1308">PR #1308&lt;/a>, que optimiza el parseo de URI &lt;a href="https://github.com/nostr-protocol/nips/blob/master/21.md">NIP-21&lt;/a> en &lt;code>PublicKey::parse&lt;/code> alineándolo con el rendimiento estándar de parseo bech32. Antes, los URI NIP-21 tardaban aproximadamente el doble que las claves bech32 en bruto. El proyecto también tiene cuatro PRs abiertos añadiendo soporte específico de relay para &lt;a href="https://nostrcompass.org/es/topics/nip-62/">NIP-62&lt;/a> (Request to Vanish) a través de los backends memory, LMDB, SQLite y database test (&lt;a href="https://github.com/rust-nostr/nostr/pull/1315">PR #1315&lt;/a>, &lt;a href="https://github.com/rust-nostr/nostr/pull/1316">PR #1316&lt;/a>, &lt;a href="https://github.com/rust-nostr/nostr/pull/1317">PR #1317&lt;/a>, &lt;a href="https://github.com/rust-nostr/nostr/pull/1318">PR #1318&lt;/a>).&lt;/p>
&lt;h3 id="nostr-tools-añade-control-de-relay-bunker-y-corrige-parseo-multi-relay-nip-47">nostr-tools añade control de relay bunker y corrige parseo multi-relay NIP-47&lt;/h3>
&lt;p>&lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a> fusionó &lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/530">PR #530&lt;/a> añadiendo &lt;code>skipSwitchRelays&lt;/code> a BunkerSignerParams para gestión manual de relays, y &lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/529">PR #529&lt;/a> corrigiendo el parseo de cadenas de conexión &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect) para soportar múltiples relays como permite la especificación.&lt;/p>
&lt;h3 id="nostrability-integra-datos-de-auditoría-sherlock-y-publica-visión-general-de-schemata">Nostrability integra datos de auditoría Sherlock y publica visión general de Schemata&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrability/nostrability">Nostrability&lt;/a>, el tracker de interoperabilidad para clientes Nostr, fusionó 14 PRs. &lt;a href="https://github.com/nostrability/nostrability/pull/306">PR #306&lt;/a> integra estadísticas de escaneo Sherlock en el dashboard. Sherlock es la herramienta de auditoría automatizada de Nostrability que se conecta a clientes Nostr, captura los eventos que publican, y valida cada evento contra las definiciones JSON Schema de Schemata para detectar violaciones de especificación. El dashboard ahora muestra tasas de fallo de schema por cliente (&lt;a href="https://github.com/nostrability/nostrability/pull/315">PR #315&lt;/a>) para que los desarrolladores puedan ver qué kinds de evento su cliente implementa mal. &lt;a href="https://github.com/nostrability/nostrability/pull/323">PR #323&lt;/a> renueva el flujo de publicación Nostr para que los anuncios de release corran como un job separado que no puede ser cancelado por pasos previos de CI.&lt;/p>
&lt;p>elsat también publicó &lt;a href="https://njump.me/naddr1qvzqqqr4gupzq96n3hp2vfmf6z2y8uvvxl97xk86kkalnqghx4p25lzl79c76a7yqy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qgwwaehxw309ahx7uewd3hkctcqz4fnx4rkw3x57nrcwdn8zt22xd982jehfptsgqtrww">Schemata for nostr devs&lt;/a> el 30 de marzo, describiendo cómo encajan schemata, schemata-codegen y Sherlock y dando números actuales de cobertura: 179 schemas de kinds de evento a través de 65 NIPs, 154 schemas de tags, 13 mensajes de protocolo y 310 eventos de ejemplo.&lt;/p>
&lt;h3 id="nalgorithm-añade-generación-de-digest-y-caché-local-de-puntuaciones">Nalgorithm añade generación de digest y caché local de puntuaciones&lt;/h3>
&lt;p>&lt;a href="https://github.com/jooray/nalgorithm">Nalgorithm&lt;/a>, un nuevo proyecto de feed Nostr ordenado por relevancia, inició desarrollo público esta semana. &lt;a href="https://github.com/jooray/nalgorithm/commit/cf6c501e754ef95a1b4fecc1a76288471a101f43">commit cf6c501&lt;/a> establece la web app inicial que obtiene publicaciones de follows y las puntúa contra un prompt de preferencias definido por el usuario. &lt;a href="https://github.com/jooray/nalgorithm/commit/8e931b6ae85d470e73603752134ff49b7ba4bb86">commit 8e931b6&lt;/a> añade una herramienta CLI de digest que convierte las publicaciones mejor clasificadas en un resumen hablado, mientras &lt;a href="https://github.com/jooray/nalgorithm/commit/4cb9c635489a9a3429e8d71f3861dc2a11624153">commit 4cb9c63&lt;/a> añade caché de puntuaciones basada en archivos y evolución incremental del prompt aprendida a partir de likes recientes. &lt;a href="https://github.com/jooray/nalgorithm/commit/c2edfb8b89fadbe0028c3f5729bda7e23b2e3c03">commit c2edfb8&lt;/a> también deja de guardar en caché puntuaciones fallback de lotes fallidos, de modo que un fallo transitorio de scoring no aplaste permanentemente el ranking de una publicación.&lt;/p>
&lt;h3 id="tenex-añade-vector-store-rag-y-arranque-mcp-dirigido">TENEX añade vector store RAG y arranque MCP dirigido&lt;/h3>
&lt;p>&lt;a href="https://github.com/tenex-chat/tenex">TENEX&lt;/a>, el framework de agentes nativo de Nostr que conecta agentes a canales Nostr vía Telegram, fusionó siete PRs esta semana. &lt;a href="https://github.com/tenex-chat/tenex/pull/101">PR #101&lt;/a> añade una abstracción conectable de vector store con backends SQLite-vec, LanceDB y Qdrant, dando a los agentes retrieval-augmented generation sin bloquearse a una sola base de datos vectorial. &lt;a href="https://github.com/tenex-chat/tenex/pull/102">PR #102&lt;/a> hace que el arranque MCP sea dirigido: solo se inician servidores MCP cuyas herramientas un agente realmente usa, en lugar de lanzar todos los servidores ansiosamente en la primera ejecución. &lt;a href="https://github.com/tenex-chat/tenex/pull/100">PR #100&lt;/a> añade una herramienta &lt;code>send_message&lt;/code> para que agentes con bindings de canal Telegram puedan empujar mensajes de forma proactiva en lugar de solo responder a mensajes entrantes. &lt;a href="https://github.com/tenex-chat/tenex/pull/106">PR #106&lt;/a> evita un spawn de subproceso que disparaba una preasignación de memoria de 9 GB de Bun/JSC leyendo &lt;code>.git/HEAD&lt;/code> directamente en lugar de ejecutar &lt;code>git branch&lt;/code>.&lt;/p>
&lt;h3 id="dart-ndk-mueve-el-firmante-amber-y-añade-alby-go-1-click">Dart NDK mueve el firmante Amber y añade Alby Go 1-click&lt;/h3>
&lt;p>&lt;a href="https://github.com/relaystr/ndk">Dart NDK&lt;/a>, el Nostr development kit para Flutter, lanzó 11 PRs fusionados. &lt;a href="https://github.com/relaystr/ndk/pull/525">PR #525&lt;/a> mueve el soporte de firmante Amber al paquete ndk_flutter, y &lt;a href="https://github.com/relaystr/ndk/pull/552">PR #552&lt;/a> añade conexión one-click a billetera Alby Go en la app de ejemplo. &lt;a href="https://github.com/relaystr/ndk/pull/502">PR #502&lt;/a> añade un script install.sh para el CLI, y &lt;a href="https://github.com/relaystr/ndk/pull/523">PR #523&lt;/a> elimina la dependencia del verificador Rust en favor de manejo nativo de assets.&lt;/p>
&lt;h2 id="trabajo-de-protocolo-y-especificación">Trabajo de Protocolo y Especificación&lt;/h2>
&lt;h3 id="marmot-mueve-keypackages-a-eventos-direccionables-y-ajusta-las-notificaciones-push">Marmot mueve KeyPackages a eventos direccionables y ajusta las notificaciones push&lt;/h3>
&lt;p>La &lt;a href="https://github.com/marmot-protocol/marmot">especificación Marmot&lt;/a> fusionó cuatro PRs que cambian cómo el protocolo maneja material de claves y membresía de grupo. &lt;a href="https://github.com/marmot-protocol/marmot/pull/54">PR #54&lt;/a> migra los eventos KeyPackage de &lt;code>kind:443&lt;/code> regular a &lt;code>kind:30443&lt;/code> direccionable con una etiqueta &lt;code>d&lt;/code>, eliminando la necesidad de borrar eventos &lt;a href="https://nostrcompass.org/es/topics/nip-09/">NIP-09&lt;/a> durante la rotación de claves. Los eventos direccionables se sobrescriben en su lugar, haciendo que la rotación sea autocontenida. &lt;a href="https://github.com/marmot-protocol/marmot/pull/57">PR #57&lt;/a> permite a usuarios no administradores confirmar propuestas SelfRemove (salida voluntaria de grupo), y &lt;a href="https://github.com/marmot-protocol/marmot/pull/62">PR #62&lt;/a> exige que los administradores renuncien a su estatus de admin antes de usar SelfRemove, previniendo que un admin desaparezca mientras aún mantiene privilegios elevados.&lt;/p>
&lt;p>&lt;a href="https://github.com/marmot-protocol/marmot/pull/61">PR #61&lt;/a> ajusta el formato de notificaciones push &lt;a href="https://nostrcompass.org/es/topics/mip-05/">MIP-05&lt;/a>, haciendo explícitos la codificación base64 de blob único, el versionado, el formato wire del token y el uso de claves x-only. El efecto es una única representación wire definida para blobs de tokens y claves x-only a través de especificación, bibliotecas cliente y backends de apps. La implementación de estos cambios de especificación aterrizó en el stack White Noise esta semana y está cubierta en la &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#white-noise-corrige-churn-de-relays-y-ampl%c3%ada-los-controles-del-cliente">sección anterior de White Noise v2026.3.23&lt;/a>.&lt;/p>
&lt;h3 id="nip-updates">NIP Updates&lt;/h3>
&lt;p>Cambios recientes al &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Fusionados:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/5A.md">NIP-5A&lt;/a>: Static Websites&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/1538">PR #1538&lt;/a>): Define eventos de manifiesto kind &lt;code>15128&lt;/code> (sitio raíz) y kind &lt;code>35128&lt;/code> (sitio nombrado) para alojar sitios web estáticos bajo pares de claves Nostr usando almacenamiento Blossom. Ver el &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#nip-deep-dive-nip-5a-sitios-web-est%c3%a1ticos">deep dive abajo&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-30/">NIP-30&lt;/a> (Custom Emoji): Permitir guiones en shortcodes&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2297">PR #2297&lt;/a>): Actualiza la descripción de shortcode para incluir guiones. Los shortcodes con guiones se han usado en la práctica desde que se introdujo el NIP, así que la especificación ahora documenta el uso actual.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abiertos y Discusiones:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>NIP-C1: Agent TUI Messages&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2295">PR #2295&lt;/a>): Propone un formato estructurado de mensajes para que los agentes envíen elementos de UI interactivos a través de DMs cifrados, incluyendo payloads tipados &lt;code>text&lt;/code>, &lt;code>buttons&lt;/code>, &lt;code>card&lt;/code> y &lt;code>table&lt;/code>. El borrador mantiene todo dentro del contenido JSON de DMs existentes de &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a>. No define un nuevo kind de evento, y usa un formato simple de callback string para respuestas de botones.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-95: Hybrid Peer-to-Peer Relay Protocol&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2293">PR #2293&lt;/a>): Propone un modelo híbrido de relay donde los relays siguen siendo autoritativos pero también pueden coordinar distribución peer-to-peer de eventos recientes sobre WebRTC. El borrador introduce mensajes de relay como &lt;code>PEER_REGISTER&lt;/code>, &lt;code>PEER_REQUEST&lt;/code> y &lt;code>PEER_OFFER&lt;/code>, con clientes estables actuando como Super Peers y el relay actuando como nodo semilla y fallback.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-B9: Zap Poll Events&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2284">PR #2284&lt;/a>): Reabre la antigua idea de NIP-69 zap-poll ahora que &lt;a href="https://github.com/nostr-protocol/nips/blob/master/88.md">NIP-88&lt;/a> (Polls) cubre encuestas gratuitas. El borrador usa definiciones de encuesta kind &lt;code>6969&lt;/code> y zaps kind &lt;code>9734&lt;/code> como votos, convirtiéndolo en un sistema de encuestas pagadas con resistencia económica a Sybil. Complementa las encuestas gratuitas de una-clave-un-voto.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-AD: Super Zap&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2289">PR #2289&lt;/a>): Propone una convención donde los zaps enviados a la pubkey de un relay o a la pubkey de un cliente se muestran como notas promocionales especializadas, convirtiendo efectivamente los recibos de zap en una superficie publicitaria. Los operadores de relay y clientes publicarían perfiles con &lt;code>lud16&lt;/code>, obtendrían esos recibos, extraerían el contenido incrustado de descripciones de zap, y opcionalmente fijarían umbrales mínimos de sats para suprimir spam.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-XX: Agent Reputation Attestations&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2285">PR #2285&lt;/a>): Propone kind &lt;code>30085&lt;/code> como evento reemplazable parametrizado para atestaciones estructuradas de reputación sobre agentes Nostr. El borrador evita una puntuación global única haciendo que la reputación dependa del observador, añade decaimiento temporal para que las atestaciones antiguas pierdan peso, soporta valoraciones negativas con requisitos de evidencia, y esboza tanto puntuación ponderada simple como puntuación por diversidad de grafo para una mejor resistencia Sybil.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-XX: Paid API Service Announcements&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2291">PR #2291&lt;/a>): Propone eventos direccionables kind &lt;code>31402&lt;/code> para anunciar APIs HTTP pagadas, con Nostr manejando descubrimiento y el pago a través de HTTP 402. El borrador está orientado a tags para que los relays puedan filtrar por métodos de pago, precios y capacidades sin parsear contenido JSON, y permite request y response schemas opcionales para que clientes o agentes puedan autogenerar llamadas.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-XX: Key Derivation from LNURL-auth via SplitSig&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2294">PR #2294&lt;/a>): Propone derivar un par de claves Nostr a partir de una firma ECDSA LNURL-auth combinada con un nonce aleatorio del lado cliente. La fórmula de derivación es &lt;code>nsec = SHA256(ecdsa_signature || nonce)&lt;/code>. El servidor ve la firma ECDSA (inherente al handshake LNURL-auth) pero nunca ve el nonce, y el navegador genera el nonce pero no controla la firma. Ninguna pieza por sí sola puede derivar el nsec. El resultado pretendido es que la misma billetera Lightning produzca la misma clave Nostr a través de dispositivos, con la billetera como ancla de recuperación y ningún servidor capaz de reconstruir la clave privada.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>: Documentar campo rejected&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2290">PR #2290&lt;/a>): Documenta el campo &lt;code>rejected&lt;/code> para respuestas de firmantes basadas en intent, formalizando el comportamiento que &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#amethyst-lanza-notas-fijadas-gesti%c3%b3n-de-relays-y-request-to-vanish">la corrección de Amethyst v1.07.x&lt;/a> tuvo que sortear.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-5a-static-websites">NIP Deep Dive: NIP-5A (Static Websites)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/5A.md">NIP-5A&lt;/a> define cómo alojar sitios web estáticos bajo pares de claves Nostr, usando dos kinds de evento e infraestructura existente de almacenamiento de blobs para convertir eventos firmados en páginas web servidas. La &lt;a href="https://github.com/nostr-protocol/nips/blob/master/5A.md">especificación&lt;/a> se fusionó el 25 de marzo vía &lt;a href="https://github.com/nostr-protocol/nips/pull/1538">PR #1538&lt;/a>.&lt;/p>
&lt;p>El modelo usa kind &lt;code>15128&lt;/code> para un sitio raíz, uno por pubkey, y kind &lt;code>35128&lt;/code> para sitios nombrados identificados por una etiqueta &lt;code>d&lt;/code>. Cada manifiesto mapea rutas URL absolutas a hashes SHA256. Aquí hay un manifiesto de sitio raíz:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;5324d695ed7abf7cdd2a48deb881c93b7f4e43de702989bbfb55a1b97b35a3de&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;266815e0c9210dfa324c6cba3573b14bee49da4209a9456f9484e5106cd408a5&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1743465600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">15128&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;path&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;/index.html&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;186ea5fd14e88fd1ac49351759e7ab906fa94892002b60bf7f5a428f28ca1c99&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;path&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;/about.html&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;path&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;/favicon.ico&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;fedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;server&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://blossom.primal.net&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;My Nostr Site&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;description&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;A static website hosted on Nostr&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;source&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://github.com/lez/nsite&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f4e4a9e785f70e9fcaa855d769438fea10781e84cd889e3fcb823774f83d094cf2c05d5a3ac4aebc1227a4ebc3d56867286c15a6df92d55045658bb428fd5fb5&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El flujo de servicio funciona en tres pasos. Un servidor host recibe una solicitud HTTP, extrae la pubkey del autor desde el subdominio (ya sea un npub para sitios raíz o una pubkey codificada en base36 para sitios nombrados), obtiene la lista de relays del autor vía &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a>, y consulta el manifiesto del sitio. Una vez encontrado el manifiesto, el servidor resuelve la ruta solicitada a un hash de contenido, descarga el blob correspondiente desde el servidor o servidores Blossom listados en las etiquetas &lt;code>server&lt;/code>, y lo devuelve.&lt;/p>
&lt;p>El formato DNS del subdominio está especificado de forma estricta. Los sitios raíz usan el npub estándar como subdominio. Los sitios nombrados usan una codificación base36 de 50 caracteres de la pubkey en bruto seguida del valor de la etiqueta &lt;code>d&lt;/code>, todo en una sola etiqueta DNS. Debido a que las etiquetas DNS están limitadas a 63 caracteres y la codificación base36 siempre ocupa 50, la etiqueta &lt;code>d&lt;/code> queda limitada a 13 caracteres. La especificación también exige que las etiquetas &lt;code>d&lt;/code> coincidan con &lt;code>^[a-z0-9-]{1,13}$&lt;/code> y no terminen con guion, previniendo ambigüedades de resolución DNS.&lt;/p>
&lt;p>Usar hashes de contenido significa que el mismo sitio puede servirse desde distintos servidores host, y la integridad del archivo es verificable sin confiar en el servidor. Un servidor host no necesita almacenar archivos por sí mismo. Los obtiene bajo demanda desde Blossom usando los hashes del manifiesto. Eso significa que el autor controla qué se sirve, el servidor Blossom almacena los archivos en bruto, y el servidor host solo conecta ambos. Cualquiera de estos tres componentes puede reemplazarse de forma independiente.&lt;/p>
&lt;p>Las implementaciones existentes incluyen &lt;a href="https://github.com/lez/nsite">nsite&lt;/a>, el servidor host que resuelve manifiestos y sirve archivos, y &lt;a href="https://github.com/hzrd149/nsite-manager">nsite-manager&lt;/a>, una UI para construir y publicar manifiestos. La especificación también añadió una etiqueta &lt;code>source&lt;/code> para enlazar al repositorio del código fuente del sitio, y la actualización de README fusionada por separado en &lt;a href="https://github.com/nostr-protocol/nips/pull/2286">PR #2286&lt;/a> registró tanto kind &lt;code>15128&lt;/code> como &lt;code>35128&lt;/code> en el índice de kinds del NIP.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-62-request-to-vanish">NIP Deep Dive: NIP-62 (Request to Vanish)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/62.md">NIP-62&lt;/a> define kind &lt;code>62&lt;/code> como una solicitud a relays para eliminar todos los eventos de la pubkey que la solicita. La &lt;a href="https://github.com/nostr-protocol/nips/blob/master/62.md">especificación&lt;/a> tiene motivación legal: en jurisdicciones con leyes de derecho al olvido, disponer de una solicitud de eliminación estandarizada y firmada da a los operadores de relays una señal clara para actuar.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a7b8c9d0e1f23456789012345678901234567890abcdef1234567890abcdef12&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1e2d3c4b5a697887766554433221100ffeeddccbbaa99887766554433221100&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1743465600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">62&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;relay&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Requesting deletion of all events from this relay.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;11aa22bb33cc44dd55ee66ff77889900aabbccddeeff0011223344556677889911aa22bb33cc44dd55ee66ff77889900aabbccddeeff00112233445566778899&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>La especificación separa solicitudes de desaparición dirigidas y globales. Una solicitud dirigida incluye etiquetas &lt;code>relay&lt;/code> específicas identificando qué relays deben actuar. Una solicitud global usa la cadena literal &lt;code>ALL_RELAYS&lt;/code> como valor de la etiqueta relay, pidiendo a cada relay que vea el evento que elimine todos los eventos de esa pubkey. Los relays que cumplan también deben asegurar que los eventos eliminados no puedan volver a re-publicarse en ese relay, haciendo que la eliminación quede pegajosa.&lt;/p>
&lt;p>NIP-62 va más allá de &lt;a href="https://nostrcompass.org/es/topics/nip-09/">NIP-09&lt;/a> (Event Deletion) tanto en alcance como en intención. NIP-09 permite borrar eventos individuales, y los relays MAY cumplir. NIP-62 solicita la eliminación de todo, y la especificación dice que los relays MUST cumplir si su URL está etiquetada. También pide a los relays borrar eventos &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap) que tengan una p-tag con la pubkey solicitante, lo que significa que los DMs entrantes se limpian junto con los propios eventos del usuario. Publicar una eliminación NIP-09 contra una solicitud de desaparición NIP-62 no tiene efecto: una vez que desapareces, no puedes des-desaparecer borrando la solicitud de desaparición.&lt;/p>
&lt;p>Esta semana, &lt;a href="https://nostrcompass.org/es/newsletters/2026-04-01-newsletter/#amethyst-lanza-notas-fijadas-gesti%c3%b3n-de-relays-y-request-to-vanish">Amethyst v1.07.0&lt;/a> lanzó soporte del lado del cliente para NIP-62, permitiendo a los usuarios iniciar solicitudes de desaparición desde la app. Del lado relay, &lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> tiene cuatro PRs abiertos añadiendo soporte NIP-62 a través de los backends memory, LMDB, SQLite y database test (&lt;a href="https://github.com/rust-nostr/nostr/pull/1315">PR #1315&lt;/a>, &lt;a href="https://github.com/rust-nostr/nostr/pull/1316">PR #1316&lt;/a>, &lt;a href="https://github.com/rust-nostr/nostr/pull/1317">PR #1317&lt;/a>, &lt;a href="https://github.com/rust-nostr/nostr/pull/1318">PR #1318&lt;/a>). Esto coloca el trabajo de soporte en clientes y relays en la misma semana.&lt;/p>
&lt;p>El diseño del protocolo plantea una tensión práctica. La propuesta de valor de Nostr incluye resistencia a la censura, lo que significa que los relays no deberían poder impedir la publicación. NIP-62 introduce un caso donde un relay MUST impedir la republicación de una pubkey específica. Las dos propiedades coexisten porque la solicitud está auto-dirigida: estás pidiendo la eliminación de tus propios eventos, no de los de otra persona. La propiedad de resistencia a la censura permanece intacta para todos excepto para la persona que explícitamente decidió salir.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. ¿Estás construyendo algo o tienes noticias que compartir? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Escríbenos vía DM &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages)&lt;/a> o encuéntranos en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #15</title><link>https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/</link><pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> continúa su lanzamiento de billetera 3.0 con &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#primal-a%c3%b1ade-follow-packs-enriquecimiento-de-zaps-y-deep-links">Follow Packs, enriquecimiento de zaps, y deep links &lt;code>primalconnect://&lt;/code>&lt;/a>. &lt;a href="https://github.com/BigBrotr/bigbrotr">BigBrotr&lt;/a> publica un &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#bigbrotr-mapea-claves-privadas-expuestas-a-trav%c3%a9s-de-la-red-de-relays">análisis de nsec filtrados&lt;/a> escaneando 41 millones de eventos a través de 1.085 relays, encontrando 16.599 claves privadas válidas, mientras &lt;a href="https://npub.world">npub.world&lt;/a> integra advertencias de filtraciones en páginas de perfil la misma semana. Martti Malmi lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#nostr-vpn-se-lanza-como-alternativa-a-tailscale">nostr-vpn&lt;/a>, una alternativa a Tailscale que señaliza sobre relays Nostr y crea túneles WireGuard, publicando 11 versiones en siete días. El equipo de &lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#doom-de-c%c3%b3digo-abierto-corre-peer-to-peer-sobre-nostr">libera DOOM P2P de código abierto&lt;/a> sobre Nostr, &lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#fips-v020-lanza-transporte-tor-builds-reproducibles-y-ejemplos-sidecar">v0.2.0&lt;/a>, y &lt;a href="https://github.com/nostrability/schemata">Nostrability Schemata&lt;/a> se expande a &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#nostrability-schemata-se-vuelve-multiling%c3%bce">seis lenguajes&lt;/a> en una semana.&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> continúa su lanzamiento de billetera 3.0 con &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#primal-a%c3%b1ade-follow-packs-enriquecimiento-de-zaps-y-deep-links">Follow Packs, enriquecimiento de zaps, y deep links &lt;code>primalconnect://&lt;/code>&lt;/a>. &lt;a href="https://github.com/BigBrotr/bigbrotr">BigBrotr&lt;/a> publica un &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#bigbrotr-mapea-claves-privadas-expuestas-a-trav%c3%a9s-de-la-red-de-relays">análisis de nsec filtrados&lt;/a> escaneando 41 millones de eventos a través de 1.085 relays, encontrando 16.599 claves privadas válidas, mientras &lt;a href="https://npub.world">npub.world&lt;/a> integra advertencias de filtraciones en páginas de perfil la misma semana. Martti Malmi lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#nostr-vpn-se-lanza-como-alternativa-a-tailscale">nostr-vpn&lt;/a>, una alternativa a Tailscale que señaliza sobre relays Nostr y crea túneles WireGuard, publicando 11 versiones en siete días. El equipo de &lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#doom-de-c%c3%b3digo-abierto-corre-peer-to-peer-sobre-nostr">libera DOOM P2P de código abierto&lt;/a> sobre Nostr, &lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> lanza &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#fips-v020-lanza-transporte-tor-builds-reproducibles-y-ejemplos-sidecar">v0.2.0&lt;/a>, y &lt;a href="https://github.com/nostrability/schemata">Nostrability Schemata&lt;/a> se expande a &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#nostrability-schemata-se-vuelve-multiling%c3%bce">seis lenguajes&lt;/a> en una semana.&lt;/p>
&lt;h2 id="noticias">Noticias&lt;/h2>
&lt;h3 id="primal-añade-follow-packs-enriquecimiento-de-zaps-y-deep-links">Primal añade Follow Packs, enriquecimiento de zaps y deep links&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/newsletters/2026-03-18-newsletter/">Siguiendo la cobertura de 3.0.7 de la semana pasada&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> pasó esta semana en trabajo post-lanzamiento alrededor de onboarding, UX del compositor, y contexto de billetera. El onboarding rediseñado introduce Follow Packs (&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/949">PR #949&lt;/a>), un botón nativo de GIF se une al compositor de notas, un servicio de enriquecimiento de zaps (&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/979">PR #979&lt;/a>) anota transacciones de billetera con contexto de zap, y un protocolo de deep-linking &lt;code>primalconnect://&lt;/code> (&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/969">PR #969&lt;/a>) habilita navegación entre apps.&lt;/p>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-ios-app">Primal iOS&lt;/a> está lanzando el mismo trabajo a través de TestFlight en paralelo, con el cambio de billetera (&lt;a href="https://github.com/PrimalHQ/primal-ios-app/pull/191">PR #191&lt;/a>), implementación de encuestas, y refactorización del onboarding aterrizando en la misma ventana.&lt;/p>
&lt;h3 id="bigbrotr-mapea-claves-privadas-expuestas-a-través-de-la-red-de-relays">BigBrotr mapea claves privadas expuestas a través de la red de relays&lt;/h3>
&lt;p>&lt;a href="https://github.com/BigBrotr/bigbrotr">BigBrotr&lt;/a>, la plataforma de analíticas de relays Nostr, publicó un &lt;a href="https://bigbrotr.com/blog/exposed-nsec-analysis/">análisis detallado de claves privadas expuestas&lt;/a> en la red de relays. El estudio escaneó 41 millones de eventos de 1.085 relays, buscando cadenas nsec válidas incrustadas en el contenido de eventos, y encontró 16.599 claves privadas válidas. Ese número parece alarmante hasta que filtras un bot llamado &amp;ldquo;Mr.nsec&amp;rdquo; que representa el 92% de las coincidencias. Después de eliminar el tráfico de bots, solo 38 cuentas reales con más de 21.000 seguidores combinados tenían claves expuestas, y ninguna mostraba señales de saber que sus claves eran públicas.&lt;/p>
&lt;p>El equipo construyó un nsec-leak-checker como servicio &lt;a href="https://nostrcompass.org/es/topics/nip-90/">NIP-90&lt;/a> (Data Vending Machine), permitiendo a los usuarios verificar si su clave privada aparece en algún lugar del dataset escaneado sin revelar la clave al verificador. &lt;a href="https://npub.world">npub.world&lt;/a> integró los datos de filtraciones la misma semana, mostrando banners de advertencia en páginas de perfil donde se detectaron claves expuestas. La combinación da a la red tanto una interfaz programática para DVMs y agentes como una advertencia legible para usuarios regulares. El dataset subyacente también alimenta &lt;a href="https://github.com/BigBrotr/bigbrotr/releases/tag/v6.4.0">BigBrotr v6.4.0&lt;/a>, que añade vistas materializadas de eventos reemplazables y direccionables y una corrección de timeout de inactividad del sincronizador.&lt;/p>
&lt;h3 id="nostr-vpn-se-lanza-como-alternativa-a-tailscale">Nostr VPN se lanza como alternativa a Tailscale&lt;/h3>
&lt;p>Martti Malmi (mmalmi), creador de Iris, construyó y lanzó &lt;a href="https://github.com/mmalmi/nostr-vpn">nostr-vpn&lt;/a>, una VPN peer-to-peer que usa relays Nostr para señalización y WireGuard (vía boringtun) para túneles cifrados. La motivación fue directa: &amp;ldquo;Me molestó que Tailscale requiera cuentas de terceros, así que creé Nostr VPN.&amp;rdquo; La herramienta crea redes mesh entre dispositivos usando pares de claves Nostr como identidad, sin servidor de coordinación central.&lt;/p>
&lt;p>El proyecto lanzó 11 versiones en siete días, desde &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.2">v0.2.2&lt;/a> hasta &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.13">v0.2.13&lt;/a>. Ese sprint añadió soporte de Windows, emparejamiento LAN para descubrimiento de red local, y un sidecar Android para dispositivos móviles. La arquitectura es simple: dos dispositivos intercambian metadatos de conexión sobre relays Nostr, luego establecen un túnel WireGuard directo. Nostr maneja el descubrimiento y la señalización de NAT traversal. WireGuard maneja el tráfico real. La identidad es un par de claves Nostr.&lt;/p>
&lt;p>Malmi también continuó impulsando &lt;a href="https://github.com/mmalmi/nostr-double-ratchet">nostr-double-ratchet&lt;/a>, una biblioteca de canal de mensajería segura estilo Signal, lanzando seis versiones desde &lt;a href="https://github.com/mmalmi/nostr-double-ratchet/releases/tag/v0.0.86">v0.0.86&lt;/a> hasta &lt;a href="https://github.com/mmalmi/nostr-double-ratchet/releases/tag/v0.0.93">v0.0.93&lt;/a> durante la misma semana.&lt;/p>
&lt;h3 id="doom-de-código-abierto-corre-peer-to-peer-sobre-nostr">DOOM de código abierto corre peer-to-peer sobre Nostr&lt;/h3>
&lt;p>El equipo de &lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> liberó una implementación multijugador peer-to-peer de DOOM que usa Nostr para descubrimiento de pares, &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> para cifrado de extremo a extremo, e &lt;a href="https://github.com/n0-computer/iroh">Iroh&lt;/a>, la biblioteca de redes QUIC de n0, para transporte gossip. El juego se distribuye como un archivo WebXDC de 4,2 MB que puede enviarse dentro de mensajes de chat, sin requerir servidores para alojar o coordinar una partida.&lt;/p>
&lt;p>El enfoque técnico reemplaza el netcode lockstep original de 1993 con un modelo de sincronización híbrida en tiempo real. Los jugadores se descubren mutuamente a través de consultas a relays Nostr, negocian sesiones a través de canales cifrados con Marmot, y luego pasan a la capa gossip QUIC de Iroh para el tráfico de juego de baja latencia. El stack usa Nostr para descubrimiento, Marmot para cifrado, e Iroh para transporte.&lt;/p>
&lt;p>Vector también lanzó endurecimiento de seguridad esta semana. El lanzamiento añade un almacén de claves endurecido en memoria con protecciones anti-debug y zeroize para material criptográfico sensible, bloqueo de usuarios con filtrado completo de DMs y mensajes de grupo, y correcciones de canales en tiempo real WebXDC para Mini Apps.&lt;/p>
&lt;h3 id="fips-v020-lanza-transporte-tor-builds-reproducibles-y-ejemplos-sidecar">FIPS v0.2.0 lanza transporte Tor, builds reproducibles y ejemplos sidecar&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a>, el Free Internetworking Peering System y proyecto de redes mesh adyacente a Nostr, lanzó &lt;a href="https://github.com/jmcorgan/fips/releases/tag/v0.2.0-rel">v0.2.0&lt;/a>. El lanzamiento añade soporte de transporte Tor para enlaces mesh anonimizados, builds reproducibles, un ejemplo sidecar que conecta a través de un relay Nostr, y publicación de versiones Nostr en el flujo de trabajo de paquetes OpenWrt. El lanzamiento también corrige picos de jitter post-rekey causados por frames de ventana de drenaje. El formato de cable cambió desde v0.1.0, por lo que los nodos v0.1.0 existentes no pueden interoperar con v0.2.0 sin actualizar.&lt;/p>
&lt;h3 id="nostrability-schemata-se-vuelve-multilingüe">Nostrability Schemata se vuelve multilingüe&lt;/h3>
&lt;p>El proyecto &lt;a href="https://github.com/nostrability/schemata">Nostrability Schemata&lt;/a>, que mantiene definiciones JSON Schema para validar kinds de eventos Nostr, se expandió de solo JavaScript a seis lenguajes en una semana. Nuevos paquetes se lanzaron para Rust, Go, Dart, Swift y Python, cada uno proporcionando tanto un paquete de datos como un validador. &lt;a href="https://github.com/nostrability/schemata/releases/tag/v0.2.6">v0.2.6&lt;/a> también añadió 17 nuevos schemas de kinds de evento.&lt;/p>
&lt;p>El &lt;a href="https://nostrability.github.io/nostrability/">tracker de interoperabilidad de Nostrability&lt;/a> recibió una renovación en paralelo. Una nueva pestaña Novedades publica actualizaciones a través de un feed Atom y un evento Nostr, el filtrado por categoría de app permite a los visitantes profundizar en tipos de cliente específicos, y el tracker ahora auto-detecta lenguajes de programación desde metadatos de repositorios GitHub. Nostrability también tiene su propio npub ahora, haciendo al proyecto mismo descubrible a través del protocolo que documenta. Para autores de bibliotecas que trabajan a través de lenguajes, los paquetes de schemas multi-lenguaje significan que las mismas definiciones de kinds de evento están disponibles como importaciones nativas en lugar de requerir que cada proyecto mantenga su propia copia de schemas.&lt;/p>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;h3 id="amethyst-v1060-y-v1061">Amethyst v1.06.0 y v1.06.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, el cliente Android mantenido por vitorpamplona, lanzó &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.0">v1.06.0&lt;/a> y &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.1">v1.06.1&lt;/a> el 23 de marzo. La funcionalidad principal es soporte de encuestas usando datos de &lt;a href="https://nostrcompass.org/es/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions) para votación ponderada, con tarjetas rediseñadas de encuestas y encuestas con zap. El nuevo renderizado da a las encuestas estándar y a las encuestas ponderadas por zap un diseño visual más limpio. v1.06.1 sigue con correcciones de crashes por modificación concurrente que abordan regresiones de estabilidad introducidas en la ruta de renderizado de encuestas.&lt;/p>
&lt;h3 id="amber-v500-y-v501">Amber v5.0.0 y v5.0.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, la app firmante &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> (Android Signer Application), promovió su reciente trabajo pre-release 4.1.x a estable con &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.0">v5.0.0&lt;/a> el 18 de marzo. Ese lanzamiento estable lleva los cambios de autenticación de relay &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a>, Tor integrado, permisos específicos por tipo de contenido, y almacenamiento cifrado de PIN cubiertos la semana pasada. &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.1">v5.0.1&lt;/a> luego elimina el permiso de internet de la variante de build offline, para que esa build ya no pueda hacer solicitudes de red a nivel de permisos Android.&lt;/p>
&lt;h3 id="mostro-v0170-y-mostro-mobile-v122">Mostro v0.17.0 y Mostro Mobile v1.2.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>, el exchange peer-to-peer de Bitcoin construido sobre Nostr, lanzó &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.17.0">v0.17.0&lt;/a> el 18 de marzo. El lanzamiento del servidor continúa el trabajo de disputas y calificaciones del ciclo v0.16.x, añadiendo datos de reputación comercial más completos para compradores y vendedores como eventos Nostr. &lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a>, el cliente Flutter, siguió con &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.2">v1.2.2&lt;/a> el 23 de marzo, manteniendo la interfaz móvil sincronizada con los últimos cambios del protocolo.&lt;/p>
&lt;h3 id="shosho-v0140">Shosho v0.14.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a>, la app de streaming en vivo de Nostr, lanzó &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.14.0">v0.14.0&lt;/a> el 19 de marzo con el lanzamiento de Shosho Shop. El lanzamiento añade una pestaña Shop en perfiles, Shop en Explorar, y un botón In-Live Shop en lives y clips. Las notas de lanzamiento dicen que los &amp;ldquo;productos Nostr&amp;rdquo; existentes aparecen automáticamente y los compradores hacen clic para ir a la página de Plebeian Market del vendedor para la compra. Las notas de lanzamiento de Shosho no identifican el kind de evento de listado, por lo que aún no es posible confirmar si Shosho Shop lee los mismos listados clasificados &lt;a href="https://nostrcompass.org/es/topics/nip-99/">NIP-99&lt;/a> que &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> soporta explícitamente en su README.&lt;/p>
&lt;h3 id="applesauce-v520">Applesauce v5.2.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/applesauce">Applesauce&lt;/a>, la colección de paquetes auxiliares de hzrd149 para construir aplicaciones Nostr, lanzó &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core@5.2.0">v5.2.0&lt;/a> el 22 de marzo. El lanzamiento abarca seis paquetes. El paquete SQLite corrige una colisión de restricción UNIQUE en etiquetas de eventos que causaba inserciones duplicadas. El paquete de firmantes añade &lt;code>AndroidNativeSigner&lt;/code>, que envuelve la interfaz nativa de firmante Android &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> para que las apps basadas en web-view puedan usar firma respaldada por hardware sin código bridge personalizado. El paquete de relay añade un campo &lt;code>challenge&lt;/code> a los objetos de estado de relay y pool, rastreando el estado de autenticación &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> para que las apps puedan detectar cuando un relay solicita autenticación y responder programáticamente. El paquete core gana los métodos &lt;code>isEventPointerSame&lt;/code> e &lt;code>isAddressPointerSame&lt;/code> para deduplicar referencias de eventos, y el paquete common añade &lt;code>user.blossomServers$&lt;/code> para resolver los servidores de medios Blossom de un usuario. Applesauce alimenta noStrudel, Satellite, y varios otros clientes web, así que estas correcciones se propagan a través de la capa de clientes web.&lt;/p>
&lt;h3 id="wisp-lanza-16-versiones-en-una-semana">Wisp lanza 16 versiones en una semana&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>, el cliente Nostr para Android, lanzó 16 versiones desde &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.9.3-beta">v0.9.3-beta&lt;/a> hasta &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.13.1-beta">v0.13.1-beta&lt;/a> esta semana. Las adiciones de funcionalidades incluyen soporte multi-cuenta, un modo zen de notificaciones para interrupciones reducidas, borradores y publicaciones programadas, filtros de seguridad de contenido, y un nuevo ícono de llama.&lt;/p>
&lt;h3 id="manent-v120">Manent v1.2.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/dtonon/manent">Manent&lt;/a>, la app de notas privadas cifradas y almacenamiento de archivos, lanzó &lt;a href="https://github.com/dtonon/manent/releases/tag/v1.2.0">v1.2.0&lt;/a> el 20 de marzo. El lanzamiento añade captura con cámara directamente desde la app, redimensionamiento de imágenes antes de subir para reducir costos de almacenamiento, y zoom con pellizco para revisar imágenes almacenadas. Manent almacena notas y archivos cifrados en relays Nostr usando el par de claves del usuario, haciendo de la app de teléfono o escritorio un cliente ligero que puede reconstruir su estado completo desde los datos del relay.&lt;/p>
&lt;h3 id="divine-107">diVine 1.0.7&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>, el cliente de vídeos cortos, lanzó &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.7">1.0.7&lt;/a> el 21 de marzo con un watchdog de reproducción de vídeo que auto-reanuda vídeos estancados. Después de la infraestructura de pruebas E2E y la carga directa de MP4 en &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/#divine-ships-v106-with-e2e-test-infrastructure-and-nip-49-import">v1.0.6&lt;/a>, este lanzamiento apunta a la ruta de fallo de reproducción restante: vídeos que se detienen a mitad de stream sin lanzar un error.&lt;/p>
&lt;h3 id="alby-extension-v3142">Alby Extension v3.14.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/getAlby/lightning-browser-extension">Alby Extension&lt;/a>, la extensión de navegador &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a> (Browser Extension Signer), lanzó &lt;a href="https://github.com/getAlby/lightning-browser-extension/releases/tag/v3.14.2">v3.14.2&lt;/a> el 18 de marzo con visualización de códigos QR de dirección Lightning y soporte de firma Schnorr. La adición de Schnorr alinea la extensión de navegador con el esquema de firma secp256k1 que Nostr usa nativamente.&lt;/p>
&lt;h3 id="noornote-v065-a-v0611">NoorNote v0.6.5 a v0.6.11&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a>, la app de toma de notas, lanzó siete versiones desde &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.6.5">v0.6.5&lt;/a> hasta &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.6.11">v0.6.11&lt;/a>. La adición principal son Follow Packs: paquetes curados de cuentas que los usuarios pueden explorar y suscribirse en bloque, similar a las Listas de Twitter pero diseñados para onboarding. Los usuarios pueden crear, editar y compartir Follow Packs con títulos, descripciones e imágenes de portada personalizados. La serie también actualiza la biblioteca Nostr subyacente de NDK v2 a v3, que trae manejo mejorado de conexión de relay y gestión de suscripciones. Notas con imagen y una experiencia rediseñada de conexión de relay completan la serie.&lt;/p>
&lt;h3 id="nak-v0191-y-v0192">nak v0.19.1 y v0.19.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>, el toolkit de línea de comandos de Nostr de fiatjaf para interactuar con relays, codificar y decodificar identificadores &lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19&lt;/a> (Bech32-Encoded Entities), firmar eventos, y consultar datos de relay, lanzó &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.1">v0.19.1&lt;/a> y &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.2">v0.19.2&lt;/a> el 17 y 20 de marzo. Los dos point releases siguen la adición de UI de foro de grupo de &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-18-newsletter/">v0.19.0&lt;/a> de la semana pasada.&lt;/p>
&lt;h3 id="calendar-by-form-v021">Calendar by Form* v0.2.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a>, la app de calendario descentralizada construida sobre &lt;a href="https://nostrcompass.org/es/topics/nip-52/">NIP-52&lt;/a> (Calendar Events), lanzó &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v0.2.1">v0.2.1&lt;/a> el 20 de marzo. El lanzamiento corrige un problema de plantilla de notificaciones que afectaba los recordatorios de eventos. Calendar almacena eventos como eventos Nostr kind 31922 (basados en fecha) y kind 31923 (basados en hora), permitiendo a cualquier cliente Nostr renderizar datos de calendario si elige soportar esos kinds. La app está construida por el equipo Formstr, que también mantiene Formstr (formularios descentralizados) y Pollerama (encuestas).&lt;/p>
&lt;h3 id="nym-v350-a-v353">NYM v3.50 a v3.53&lt;/h3>
&lt;p>&lt;a href="https://github.com/Spl0itable/NYM">NYM&lt;/a>, el cliente de chat efímero ligero conectado con Bitchat, lanzó 28 versiones de v3.50 a v3.53 (las versiones de parche se incrementan rápidamente). La funcionalidad más notable es Nymbot, un bot de chat integrado que responde a menciones &lt;code>@nymbot&lt;/code> en canales y proporciona funciones de estado y gestión de relays. Un &amp;ldquo;modo hardcore&amp;rdquo; genera un par de claves nuevo para cada mensaje enviado, haciendo los hilos de conversación no enlazables a nivel de identidad. La contrapartida es clara: pierdes identidad persistente pero ganas anonimato por mensaje. La capa de proxy de relay también recibió trabajo, con workers proxy de relay fragmentados para mejor conectividad, soporte de canales geohash, y tolerancia de desviación de reloj para nodos con relojes de sistema imprecisos.&lt;/p>
&lt;h2 id="actualizaciones-de-proyectos">Actualizaciones de Proyectos&lt;/h2>
&lt;h3 id="ditto-añade-puente-bluesky-e-integración-con-wikipedia">Ditto añade puente Bluesky e integración con Wikipedia&lt;/h3>
&lt;p>&lt;a href="https://github.com/soapbox-pub/ditto">Ditto&lt;/a>, el cliente social Nostr personalizable del equipo Soapbox, registró más de 300 commits esta semana a través de tres líneas de funcionalidades distintas. La primera es un puente Bluesky (19 commits) que renderiza publicaciones de Bluesky en línea como hilos completos estilo feed, añade navegación lateral a una página de descubrimiento Bluesky respaldada por el feed oficial Discover (whats-hot), y conecta botones de acción para comentar, compartir, reaccionar y copiar enlaces. Cuando un usuario responde a una publicación de Bluesky desde dentro de Ditto, el modal de composición muestra un aviso de descargo señalando la naturaleza cross-protocol de la interacción. Las reacciones kind 17 de &lt;a href="https://nostrcompass.org/es/topics/nip-73/">NIP-73&lt;/a> (External Content IDs) alimentan el modelo cross-protocol: un usuario Nostr reacciona a una publicación de Bluesky, y la reacción se almacena como un evento Nostr estándar referenciando el identificador de contenido externo. Este es el mismo patrón NIP-73 que podría conectar reacciones a cualquier contenido externo, desde publicaciones de Bluesky hasta vídeos de YouTube o páginas web.&lt;/p>
&lt;p>La segunda línea es una integración con Wikipedia (9 commits). Ditto ahora renderiza contenido rico de artículos de Wikipedia en páginas de detalle en lugar de previsualizaciones de enlace genéricas, añade autocompletado de búsqueda con miniaturas de artículos, y proporciona una página &lt;code>/wikipedia&lt;/code> que extrae contenido destacado de la API de Wikipedia. Los resultados de Wikipedia y Archive.org también aparecen en el dropdown de autocompletado de búsqueda general. La tercera línea es soporte de plataforma iOS vía Capacitor, con un script de build remoto y configuración de plataforma aterrizando junto a una renovación de UI (55 commits) que reemplaza encabezados backdrop-blur con un nuevo diseño de navegación basado en arco a través de cada página de la app. Los 314 commits mueven a Ditto de un cliente solo Nostr hacia un agregador multi-protocolo que trata Bluesky y Wikipedia como fuentes de contenido de primera clase junto al feed Nostr.&lt;/p>
&lt;h3 id="pika-construye-un-pipeline-ci-de-forge-nip-34">Pika construye un pipeline CI de forge NIP-34&lt;/h3>
&lt;p>&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>, la app de mensajería cifrada basada en Marmot, fusionó 33 PRs esta semana enfocados en un forge &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> auto-alojado con CI pre-merge. El forge es una capa de alojamiento git que recibe parches como eventos NIP-34, ejecuta verificaciones CI antes del merge, y reporta estado estructurado de vuelta a través de eventos Nostr. &lt;a href="https://github.com/sledtools/pika/pull/701">PR #701&lt;/a> añade CI pre-merge y nocturno basado en carriles, donde cada ruta de código (Rust, TypeScript, builds Apple) corre en su propio carril con estado independiente de éxito/fallo. &lt;a href="https://github.com/sledtools/pika/pull/715">PR #715&lt;/a> recorta los agentes CI gestionados a contenedores Incus OpenClaw para aislamiento, y &lt;a href="https://github.com/sledtools/pika/pull/733">PR #733&lt;/a> añade un CLI &lt;code>ph forge&lt;/code> para interactuar con el forge alojado desde la línea de comandos. PRs de soporte manejan permisos de escritura de repo para merges (&lt;a href="https://github.com/sledtools/pika/pull/736">PR #736&lt;/a>), metadatos CI estructurados con insignias de estado en vivo (&lt;a href="https://github.com/sledtools/pika/pull/722">PR #722&lt;/a>), splits de build nocturno Apple (&lt;a href="https://github.com/sledtools/pika/pull/738">PR #738&lt;/a>), y correcciones de autenticación y búsqueda de ramas del forge (&lt;a href="https://github.com/sledtools/pika/pull/734">PR #734&lt;/a>). Este es uno de los primeros sistemas CI/CD funcionales construidos sobre eventos git NIP-34, moviendo el alojamiento de código fuente basado en Nostr más allá del intercambio básico de parches hacia el flujo de trabajo de merge-y-test que los desarrolladores esperan de GitHub o GitLab.&lt;/p>
&lt;h3 id="nostria-añade-comunidades-fragmentos-de-código-y-manejo-de-eventos-de-voz">Nostria añade comunidades, fragmentos de código y manejo de eventos de voz&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>, el cliente Nostr multiplataforma mantenido por sondreb, pasó esta semana extendiendo la superficie de la app más allá del filtrado Web of Trust cubierto en #14. La adición principal es una implementación completa de &lt;a href="https://nostrcompass.org/es/topics/nip-72/">NIP-72&lt;/a> (Moderated Communities) con creación de comunidades, configuración de moderadores y relays, seguimiento de aprobación de publicaciones con previsualizaciones de imágenes, y una página de comunidad dedicada con pestañas de Publicaciones y Moderadores.&lt;/p>
&lt;p>El mismo período de trabajo también añade renderizado y edición de fragmentos de código con un editor con resaltado de sintaxis, soporte de respuesta a eventos de voz para conversaciones de audio, configuración de relays de chat para mensajes directos, compartir canales a través de la Web Share API, un sistema de acoplamiento de barra de herramientas para el reproductor de medios, registro en la app para el último servicio Web of Trust de Brainstorm, flujos de enviar y recibir dinero en DMs usando NWC e invoices BOLT-11, manejo nativo de GIFs Nostr, y una ruta de importación RSS más robusta para músicos que puede recoger splits Lightning existentes de feeds de podcast.&lt;/p>
&lt;h3 id="iteración-rápida-de-nostr-vpn">Iteración rápida de nostr-vpn&lt;/h3>
&lt;p>Más allá del &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#nostr-vpn-se-lanza-como-alternativa-a-tailscale">lanzamiento inicial&lt;/a>, el log de commits de &lt;a href="https://github.com/mmalmi/nostr-vpn">nostr-vpn&lt;/a> revela los problemas específicos encontrados durante el despliegue real. &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.3">v0.2.3&lt;/a> a &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.5">v0.2.5&lt;/a> añadieron el script de instalación inicial y CLI multiplataforma. &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.6">v0.2.6&lt;/a> y &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.7">v0.2.7&lt;/a> trajeron soporte de Windows, que requirió entrecomillado de rutas UAC para escrituras de configuración y actualizaciones de configuración propiedad del daemon. &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.8">v0.2.8&lt;/a> a &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.10">v0.2.10&lt;/a> corrigieron acciones de servicio GUI de Windows, manejo de subprocesos CLI, y configuración de servicio con alcance de máquina. &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.12">v0.2.12&lt;/a> reemplazó el descubrimiento LAN con emparejamiento LAN temporizado, un flujo iniciado por el usuario donde dos dispositivos en la misma red local se emparejan sin señalización de relay. El patrón es un libro de texto de pruebas de campo en etapas tempranas: cada versión apunta a un fallo de despliegue específico, la base de usuarios es lo suficientemente pequeña como para iterar diariamente, y el desarrollador usa la herramienta personalmente entre versiones.&lt;/p>
&lt;h3 id="builds-automatizados-de-comet">Builds automatizados de Comet&lt;/h3>
&lt;p>&lt;a href="https://github.com/nodetec/comet">Comet&lt;/a> (anteriormente Captain&amp;rsquo;s Log), la herramienta de escritura de formato largo nativa de Nostr de Nodetec, produjo más de 40 builds alfa automatizados esta semana. Comet es una app de escritorio para escribir y publicar artículos NIP-23 (Long-form Content), con almacenamiento local de borradores, edición markdown, y publicación con un clic al conjunto de relays del usuario. El pipeline de build automatizado genera un lanzamiento etiquetado para cada commit a la rama principal, lo que hace que el conteo bruto de versiones sea engañoso como medida de velocidad de funcionalidades. Lo que los 40 builds sí muestran es que la app está bajo desarrollo activo diario, con cada commit probado, empaquetado y disponible para descarga en minutos.&lt;/p>
&lt;h2 id="actualizaciones-de-nips">Actualizaciones de NIPs&lt;/h2>
&lt;p>Cambios recientes al &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a> durante la ventana del 17-24 de marzo:&lt;/p>
&lt;p>No se fusionaron NIPs entre el 18 y el 24 de marzo.&lt;/p>
&lt;p>&lt;strong>PRs Abiertos y Discusiones actualizados durante la ventana:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>NIP-AA: Agentes Autónomos en Nostr&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2259">PR #2259&lt;/a>): Propone convenciones para agentes autónomos operando en la red Nostr. El PR define cómo los agentes se identifican, descubren servicios, y coordinan con otros agentes y humanos a través de eventos Nostr.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a> (Search): Extensiones de ordenamiento&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2283">PR #2283&lt;/a>): Añade parámetros de ordenamiento a las consultas de búsqueda NIP-50, incluyendo top, hot, zaps y new. Esto permitiría a los clientes solicitar resultados clasificados de relays que soportan búsqueda de texto completo en lugar de ordenar del lado del cliente.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-A5: Programas WASM&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2281">PR #2281&lt;/a>): Propone una convención para publicar y descubrir programas WebAssembly en Nostr. Los binarios WASM podrían distribuirse como eventos Nostr, con relays sirviendo como capa de descubrimiento para código ejecutable portátil.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-CF: Combine Forces napps interoperables&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2277">PR #2277&lt;/a>): Define una convención para aplicaciones Nostr interoperables (&amp;ldquo;napps&amp;rdquo;) que pueden componer funcionalidad a través de diferentes clientes y servicios.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP de Snapshots&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2279">PR #2279&lt;/a>): Propone un mecanismo para snapshots de estado de relay, para sincronización y respaldo de relays.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP de Checkpoints&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2278">PR #2278&lt;/a>): Propone eventos de checkpoint para marcar estado de relay conocido como bueno, complementando la propuesta de snapshots.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-58/">NIP-58&lt;/a> (Badges): Refactorización de Badge Sets&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2276">PR #2276&lt;/a>): Reestructura cómo se organizan y referencian las colecciones de insignias.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> (Relay Information Document): Extensiones&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2280">PR #2280&lt;/a>): Añade campos adicionales al documento de información del relay para metadatos de relay más ricos legibles por máquinas.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="cinco-años-de-marzos-de-nostr">Cinco Años de Marzos de Nostr&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/#cinco-a%C3%B1os-de-febreros-de-nostr">El boletín del mes pasado&lt;/a> cubrió cómo los febreros de Nostr progresaron desde la reescritura de NIP-01 (Basic Protocol Flow) pasando por la ola de Damus en la App Store hasta redes de malla y propuestas de agentes. Esta retrospectiva traza lo que sucedió cada marzo desde 2021 hasta 2026.&lt;/p>
&lt;h3 id="marzo-2021-dos-commits">Marzo 2021: Dos Commits&lt;/h3>
&lt;p>Cuatro meses de existencia, el marzo de Nostr produjo exactamente dos commits al repositorio del protocolo, ambos el 4 de marzo. fiatjaf &lt;a href="https://github.com/nostr-protocol/nostr/commit/dcd8cc3">añadió enlaces a instancias de nostwitter&lt;/a>, señalando a los primeros visitantes hacia despliegues funcionales, y &lt;a href="https://github.com/nostr-protocol/nostr/commit/54dfb46">añadió kind a la definición básica de filtro&lt;/a>. Ese segundo commit es revelador: en marzo de 2021, aún no podías filtrar eventos Nostr por kind. El protocolo era así de primitivo. Dos o tres relays servían la red. El grupo de Telegram era el único canal de coordinación. El repositorio de NIPs no existía aún; las propuestas de protocolo vivían como archivos en el repo principal de nostr. fiatjaf era el único committer ese mes. Toda la producción de marzo 2021 de lo que se convertiría en un protocolo soportando VPNs, juegos multijugador y redes de malla cinco años después cabe en un solo git diff.&lt;/p>
&lt;h3 id="marzo-2022-construcción-pre-damus">Marzo 2022: Construcción Pre-Damus&lt;/h3>
&lt;p>El repositorio principal del protocolo recibió cero commits en marzo de 2022. El desarrollo se había trasladado completamente a repositorios de herramientas. &lt;a href="https://github.com/fiatjaf/branle">Branle&lt;/a>, el cliente web Vue.js de fiatjaf y en ese momento la interfaz principal de Nostr, recibió 5 commits incluyendo soporte de despliegue Docker y correcciones de nombre de visualización &lt;a href="https://nostrcompass.org/es/topics/nip-05/">NIP-05&lt;/a> (DNS-Based Verification) que eliminaron el prefijo &lt;code>_@&lt;/code> de las insignias de verificación. El &lt;a href="https://github.com/unclebob/more-speech">more-speech&lt;/a> de Robert C. Martin, el cliente de escritorio Clojure, registró 13 o más commits añadiendo threading, navegación por teclado, y una ventana de edición. El autor de software más famoso construyendo activamente en Nostr ese mes no era un desarrollador crypto sino la persona cuyo &amp;ldquo;Clean Code&amp;rdquo; ha vendido millones de copias, escribiendo un cliente Nostr en Clojure, una elección de lenguaje que te dice todo sobre la comunidad temprana: eran programadores con opiniones construyendo para sí mismos.&lt;/p>
&lt;p>La red de relays se había expandido a aproximadamente 15 relays con una base de usuarios activos en los cientos. Damus no existía aún y no sería creado hasta abril de 2022. Nostream tampoco había aparecido. El trabajo del mes fue infraestructura: hacer las herramientas existentes más fiables para la pequeña comunidad que ya las usaba diariamente.&lt;/p>
&lt;h3 id="marzo-2023-infraestructura-post-explosión">Marzo 2023: Infraestructura Post-Explosión&lt;/h3>
&lt;p>Un mes después de la ola de la App Store de Damus y la superación de 300.000 claves públicas, marzo 2023 fue sobre absorber el crecimiento. El &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a> fusionó 28 pull requests, el segundo conteo mensual más alto en la historia del protocolo. &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a> (Lists) se fusionó, dando a los clientes colecciones estructuradas de follows, silenciados y marcadores. &lt;a href="https://nostrcompass.org/es/topics/nip-39/">NIP-39&lt;/a> (External Identities in Profiles) aterrizó, NIP-78 (Application-Specific Data) proporcionó un kind de almacenamiento de propósito general para apps que necesitaban estado privado, y una reescritura de &lt;a href="https://nostrcompass.org/es/topics/nip-57/">NIP-57&lt;/a> (Lightning Zaps) (&lt;a href="https://github.com/nostr-protocol/nips/pull/392">PR #392&lt;/a>) consolidó el flujo de zaps y clarificó la terminología. El PR más discutido del mes fue una propuesta alternativa de manejo de menciones (&lt;a href="https://github.com/nostr-protocol/nips/pull/381">PR #381&lt;/a>) con más de 50 comentarios.&lt;/p>
&lt;p>El nuevo proyecto más trascendental fue &lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a> (Nostr Development Kit), la biblioteca TypeScript para conexiones de relay, firma de eventos, caché y gestión de suscripciones. pablof7z hizo el &lt;a href="https://github.com/nostr-dev-kit/ndk/commit/09e5e03">commit inicial&lt;/a> el 16 de marzo de 2023, luego lo reescribió desde cero 11 días después el 27 de marzo (&amp;ldquo;básicamente otro commit inicial&amp;rdquo;), y tenía soporte LNURL y zap funcionando para el 31 de marzo. NDK pasó de nada a capaz de hacer zaps en 15 días. Cinco días después de la creación de NDK, el 21 de marzo, el equipo de Alby creó &lt;a href="https://github.com/getAlby/nostr-wallet-connect">NWC&lt;/a> (Nostr Wallet Connect), la implementación de referencia de &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> que conectó billeteras Lightning a aplicaciones Nostr. Los dos proyectos que sustentarían los siguientes tres años de desarrollo Nostr basado en web nacieron en la misma ventana de 30 días. OpenSats aún no había lanzado su fondo Nostr; la primera ola no llegaría hasta &lt;a href="https://opensats.org/blog/nostr-grants-july-2023">julio de 2023&lt;/a>, cuatro meses después de la creación de NDK.&lt;/p>
&lt;p>Otras creaciones notables ese mes incluyeron NostrGit, NostrChat, un proyecto nostr-signing-device por LNbits, y nostrmo. &lt;a href="https://github.com/mikedilger/gossip">Gossip&lt;/a>, el cliente de escritorio Rust enfocado en selección inteligente de relays, lanzó tres versiones. El protocolo estaba en modo de construcción, y las herramientas creadas en marzo 2023 siguen en uso tres años después.&lt;/p>
&lt;h3 id="marzo-2024-maduración-del-protocolo">Marzo 2024: Maduración del Protocolo&lt;/h3>
&lt;p>Marzo 2024 fue sobre endurecer el protocolo para uso a largo plazo. El repositorio de NIPs fusionó 12 pull requests. El más significativo fue &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a> (Git Stuff), &lt;a href="https://github.com/nostr-protocol/nips/pull/997">PR #997&lt;/a>, que se fusionó el 5 de marzo después de más de 130 comentarios y 44 días de revisión. El hilo de discusión es una cápsula del tiempo de la comunidad debatiendo cómo construir un GitHub descentralizado. jb55 trazó paralelos con &lt;code>git send-email&lt;/code>, Giszmo propuso usar hashes de root commit para descubrimiento cross-fork (&amp;ldquo;algo que GitHub no hace y nosotros podríamos&amp;rdquo;), mikedilger sugirió autenticación con eventos firmados &lt;a href="https://nostrcompass.org/es/topics/nip-98/">NIP-98&lt;/a> (HTTP Auth) en lugar de claves SSH, y fiatjaf descartó rotundamente la necesidad de generalidad de control de versiones: &amp;ldquo;not for each version control system, just for git. No one uses the others.&amp;rdquo; A las pocas horas de abrir el PR, fiatjaf ya había cambiado nak, go-nostr y gitstr para aceptar parches sobre Nostr. DanConwayDev, cuyo ngit ya era becario de OpenSats, fue de los contribuidores más activos en la discusión. Un campo de bot para metadatos de perfil también se fusionó, dando a los clientes una forma legible por máquinas de distinguir cuentas automatizadas de humanas.&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> lanzó v0.85.0 con soporte de eventos git, artículos wiki, renderizado de datos médicos, y edición de contenido en un solo lanzamiento. &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> alcanzó v0.10.0. &lt;a href="https://github.com/Spl0itable/nosflare">Nosflare&lt;/a>, un relay Nostr serverless corriendo en Cloudflare Workers, demostró que la lógica de relay podía correr en el edge. OpenSats emitió una &lt;a href="https://opensats.org/blog/bruno-garcia-receives-lts-grant">beca de Soporte a Largo Plazo para Bruno Garcia&lt;/a> por contribuciones sostenidas al cliente Amethyst.&lt;/p>
&lt;h3 id="marzo-2025-expansión-de-infraestructura">Marzo 2025: Expansión de Infraestructura&lt;/h3>
&lt;p>Marzo 2025 produjo 10 NIPs fusionados. El titular fue &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a> (Relay Discovery and Liveness Monitoring), &lt;a href="https://github.com/nostr-protocol/nips/pull/230">PR #230&lt;/a>, que se fusionó el 3 de marzo después de un viaje de 25 meses. dskvr propuso por primera vez el monitoreo de relays en febrero de 2023, le dijeron que podía hacerse del lado del cliente, explicó por qué conectarse a miles de relays a la vez era impráctico para clientes individuales, pasó por siete borradores completos, construyó nodos de monitoreo en ocho regiones geográficas (Noreste de EE.UU., Brasil, Oeste de EE.UU., Este de EE.UU., Australia, India, Corea, Sudáfrica), y esperó a que las herramientas de relay alcanzaran. Para cuando se fusionó, ya existían implementaciones en nostr.watch, relaypag.es, monitorlizard, Snort, noStrudel y Jumble. Los datos de NIP-66 luego alimentarían los benchmarks de outbox de Nostrability &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/#el-modelo-outbox-bajo-la-lupa">cubiertos en Newsletter #12&lt;/a>. NIP-C0 (Code Snippets) también se fusionó (&lt;a href="https://github.com/nostr-protocol/nips/pull/1852">PR #1852&lt;/a>, 63 comentarios), añadiendo eventos kind 1337 para compartir código fuente.&lt;/p>
&lt;p>Los primeros servidores MCP para Nostr aparecieron este mes. &lt;a href="https://github.com/AustinKelsay/nostr-mcp-server">nostr-mcp-server&lt;/a> apareció el 23 de marzo y &lt;a href="https://github.com/getAlby/nwc-mcp-server">nwc-mcp-server&lt;/a> el 14 de marzo, solo cuatro meses después de que Anthropic anunciara el Model Context Protocol en noviembre de 2024. Estos puentes tempranos precedieron al SDK completo de &lt;a href="https://nostrcompass.org/es/topics/contextvm/">ContextVM&lt;/a> y al trabajo de comercio de agentes que siguió a finales de 2025 y principios de 2026.&lt;/p>
&lt;p>&lt;a href="https://github.com/mikedilger/gossip">Gossip&lt;/a> lanzó v0.14.0. &lt;a href="https://github.com/coracle-social/coracle">Coracle&lt;/a>, el cliente web de hodlbod con gestión de feeds consciente de relays, lanzó tres versiones. OpenSats anunció su &lt;a href="https://opensats.org/blog/10th-wave-of-nostr-grants">décima ola de becas Nostr&lt;/a>, continuando el pipeline de financiación que había estado funcionando desde mediados de 2023.&lt;/p>
&lt;h3 id="marzo-2026-convergencia">Marzo 2026: Convergencia&lt;/h3>
&lt;p>&lt;em>La actividad de marzo 2026 se extrae de los números de Nostr Compass &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/">#12&lt;/a> al &lt;a href="">#15&lt;/a> (este número).&lt;/em>&lt;/p>
&lt;p>Marzo 2026 es el mes donde hilos dispares convergieron en sistemas funcionales. El &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/#marmot-development-kit-lanza-su-primera-versi%C3%B3n-p%C3%BAblica">Marmot Development Kit&lt;/a> lanzó su primera versión pública con medios cifrados, bindings multi-lenguaje, y una migración ChaCha20-Poly1305 que requirió actualizaciones coordinadas a través de especificación, Rust y TypeScript. &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/#shopstr-and-milk-market-open-mcp-commerce-surfaces">Shopstr y Milk Market&lt;/a> añadieron superficies de comercio MCP para compras impulsadas por agentes. La autenticación de relay &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> aterrizó simultáneamente en &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/#nip-42-relay-auth-across-bunker-signer-and-relay">Amber&lt;/a>, strfry, y OAuth Bunker, cerrando el bucle entre software firmante, relay y bunker. &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-18-newsletter/#notedeck-mueve-el-descubrimiento-de-versiones-a-nostr">Notedeck&lt;/a> lanzó actualizaciones de software nativas de Nostr usando eventos de versión &lt;a href="https://nostrcompass.org/es/topics/nip-94/">NIP-94&lt;/a> (File Metadata).&lt;/p>
&lt;p>Esta semana, &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#bigbrotr-mapea-claves-privadas-expuestas-a-trav%c3%a9s-de-la-red-de-relays">BigBrotr&lt;/a> escaneó toda la red de relays buscando claves privadas filtradas y publicó tanto el análisis como un verificador DVM. &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#nostr-vpn-se-lanza-como-alternativa-a-tailscale">Nostr VPN&lt;/a> demostró que el modelo de claves de Nostr funciona para infraestructura de red, no solo redes sociales. &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#doom-de-c%c3%b3digo-abierto-corre-peer-to-peer-sobre-nostr">DOOM&lt;/a> demostró que el descubrimiento Nostr, el cifrado Marmot y el transporte QUIC pueden ejecutar un juego multijugador en tiempo real. &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#amber-v500-y-v501">Amber&lt;/a> saltó a v5.0.0. &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-25-newsletter/#wisp-lanza-16-versiones-en-una-semana">Wisp&lt;/a> lanzó 16 versiones en siete días. Veinticinco o más lanzamientos etiquetados vinieron de proyectos importantes en una sola semana.&lt;/p>
&lt;p>Siete NIPs se fusionaron en los primeros 24 días del mes. El protocolo añadió marcado Djot de &lt;a href="https://nostrcompass.org/es/topics/nip-54/">NIP-54&lt;/a> (Wiki), límites de entrada de &lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19&lt;/a> (Bech32-Encoded Entities), lógica de consulta booleana de &lt;a href="https://nostrcompass.org/es/topics/nip-91/">NIP-91&lt;/a> (AND Operator for Filters), y aserciones Web of Trust de &lt;a href="https://nostrcompass.org/es/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions). Las propuestas abiertas iban desde agentes autónomos (NIP-AA) hasta programas WASM (NIP-A5) y extensiones de ordenamiento de búsqueda para &lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a>.&lt;/p>
&lt;h3 id="mirando-hacia-adelante">Mirando Hacia Adelante&lt;/h3>
&lt;p>Cinco marzos de Nostr trazan un arco claro. En 2021, una persona hizo dos commits a un protocolo que aún no podía filtrar eventos por kind. Para 2023, NDK y NWC nacieron con cinco días de diferencia para absorber la explosión post-Damus. Para 2024, un hilo de PR de 141 comentarios debatía cómo debería funcionar la colaboración git en un protocolo social. Para 2025, una especificación de monitoreo de relays que había sido pacientemente reescrita siete veces durante 25 meses finalmente se fusionó. En 2026, alguien se molestó porque Tailscale requería una cuenta y construyó una VPN usando pares de claves Nostr, mientras otro lanzó DOOM multijugador que descubre pares a través de relays Nostr y cifra el gameplay a través de Marmot. El escaneo de BigBrotr de 41 millones de eventos a través de 1.085 relays da una medida concreta de cuánto ha crecido la red. La superficie del protocolo en marzo de 2026 habría sido irreconocible para marzo de 2021, pero el modelo subyacente, eventos firmados por claves secp256k1 y distribuidos a través de relays, no ha cambiado.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. ¿Estás construyendo algo o tienes noticias que compartir? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Escríbenos vía DM &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages)&lt;/a> o encuéntranos en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #14</title><link>https://nostrcompass.org/es/newsletters/2026-03-18-newsletter/</link><pubDate>Wed, 18 Mar 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-03-18-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> implementa soporte completo de métodos &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect), &lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a> añade soporte de múltiples relays en &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.21.6">v1.21.6&lt;/a>, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> lanza &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.3">v4.1.3&lt;/a> con Tor integrado y permisos de firmante más granulares, y &lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a> elimina una ruta riesgosa de keysend NWC en &lt;a href="https://github.com/ZeusLN/zeus/pull/3835">PR #3835&lt;/a>. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> lanza un actualizador firmado en &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.8.0-rc2">v0.8.0-rc2&lt;/a> que descubre versiones a través de eventos &lt;a href="https://nostrcompass.org/es/topics/nip-94/">NIP-94&lt;/a> (File Metadata), mientras &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> corrige estado obsoleto de &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> (Relay List Metadata), &lt;a href="https://github.com/nostrability/outbox">Nostrability Outbox&lt;/a> revisa sus resultados de benchmark con datos corregidos, y &lt;a href="https://github.com/PrimalHQ/primal-ios-app">Primal iOS&lt;/a> prueba suscripciones directas a relays para DMs. &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> lanza &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.7">3.0.7&lt;/a>, &lt;a href="https://github.com/v0l/route96">Route96&lt;/a> lanza &lt;a href="https://github.com/v0l/route96/releases/tag/v0.6.0">v0.6.0&lt;/a>, &lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a> sigue ajustando la interoperabilidad con Marmot en &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.1.0-alpha.11">v0.1.0-alpha.11&lt;/a>, &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a> consolida su runtime en &lt;a href="https://github.com/sledtools/pika/releases/tag/pika/v1.1.1">pika/v1.1.1&lt;/a>, y &lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> añade filtrado Web of Trust con &lt;a href="https://nostrcompass.org/es/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions). El repositorio de NIPs fusiona el marcado Djot para &lt;a href="https://nostrcompass.org/es/topics/nip-54/">NIP-54&lt;/a> (Wiki) y un límite de entrada de 5000 caracteres para &lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19&lt;/a> (Bech32-Encoded Entities).&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> implementa soporte completo de métodos &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect), &lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a> añade soporte de múltiples relays en &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.21.6">v1.21.6&lt;/a>, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> lanza &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.3">v4.1.3&lt;/a> con Tor integrado y permisos de firmante más granulares, y &lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a> elimina una ruta riesgosa de keysend NWC en &lt;a href="https://github.com/ZeusLN/zeus/pull/3835">PR #3835&lt;/a>. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> lanza un actualizador firmado en &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.8.0-rc2">v0.8.0-rc2&lt;/a> que descubre versiones a través de eventos &lt;a href="https://nostrcompass.org/es/topics/nip-94/">NIP-94&lt;/a> (File Metadata), mientras &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> corrige estado obsoleto de &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> (Relay List Metadata), &lt;a href="https://github.com/nostrability/outbox">Nostrability Outbox&lt;/a> revisa sus resultados de benchmark con datos corregidos, y &lt;a href="https://github.com/PrimalHQ/primal-ios-app">Primal iOS&lt;/a> prueba suscripciones directas a relays para DMs. &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> lanza &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.7">3.0.7&lt;/a>, &lt;a href="https://github.com/v0l/route96">Route96&lt;/a> lanza &lt;a href="https://github.com/v0l/route96/releases/tag/v0.6.0">v0.6.0&lt;/a>, &lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a> sigue ajustando la interoperabilidad con Marmot en &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.1.0-alpha.11">v0.1.0-alpha.11&lt;/a>, &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a> consolida su runtime en &lt;a href="https://github.com/sledtools/pika/releases/tag/pika/v1.1.1">pika/v1.1.1&lt;/a>, y &lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> añade filtrado Web of Trust con &lt;a href="https://nostrcompass.org/es/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions). El repositorio de NIPs fusiona el marcado Djot para &lt;a href="https://nostrcompass.org/es/topics/nip-54/">NIP-54&lt;/a> (Wiki) y un límite de entrada de 5000 caracteres para &lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19&lt;/a> (Bech32-Encoded Entities).&lt;/p>
&lt;h2 id="noticias">Noticias&lt;/h2>
&lt;h3 id="el-soporte-de-wallet-connect-se-amplía-y-los-clientes-de-billetera-ajustan-rutas-de-fallo">El soporte de Wallet Connect se amplía, y los clientes de billetera ajustan rutas de fallo&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, el cliente Android mantenido por vitorpamplona, fusionó &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1828">PR #1828&lt;/a>, que acerca su implementación de &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> a la cobertura completa del protocolo. El parche añade &lt;code>make_invoice&lt;/code>, &lt;code>lookup_invoice&lt;/code>, &lt;code>list_transactions&lt;/code>, &lt;code>get_balance&lt;/code>, &lt;code>get_info&lt;/code>, métodos de hold invoice, soporte de keysend con registros TLV, descubrimiento de capacidades vía kind &lt;code>13194&lt;/code>, y eventos de notificación en kind &lt;code>23197&lt;/code> con &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads). Esto da al cliente una superficie NWC mucho más amplia sin depender de extensiones específicas de cada app.&lt;/p>
&lt;p>El stack de billeteras circundante se movió en la misma dirección. &lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a>, el nodo Lightning auto-custodiado y servicio de billetera detrás de muchos despliegues NWC, lanzó &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.21.6">v1.21.6&lt;/a> con soporte de múltiples relays y flujos de conexión y swap más simples. &lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a>, la billetera Lightning móvil, fusionó &lt;a href="https://github.com/ZeusLN/zeus/pull/3835">PR #3835&lt;/a> eliminando el soporte de keysend NWC después de identificar una ruta silenciosa de drenaje de fondos en ese flujo, mientras también corregía el manejo de eventos pendientes y actividad Cashu. La conectividad de billeteras en Nostr se está ampliando, y los implementadores están eliminando flujos que son difíciles de asegurar.&lt;/p>
&lt;h3 id="notedeck-mueve-el-descubrimiento-de-versiones-a-nostr">Notedeck mueve el descubrimiento de versiones a Nostr&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/">Siguiendo la cobertura de Notedeck de la semana pasada&lt;/a>, &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>, el cliente de escritorio nativo del equipo Damus, lanzó &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.8.0-rc2">v0.8.0-rc2&lt;/a> después de fusionar &lt;a href="https://github.com/damus-io/notedeck/pull/1326">PR #1326&lt;/a>. El nuevo actualizador se suscribe a eventos de versión kind &lt;code>1063&lt;/code> firmados, coincide con la plataforma local, descarga el binario referenciado, y verifica su hash SHA256 antes de instalar. Los metadatos de versión ya no tienen que venir de la API de GitHub o un sitio web del proyecto. Una pubkey de versión de confianza y una conexión a relay son suficientes.&lt;/p>
&lt;p>El mismo parche añade un CLI &lt;code>notedeck-release&lt;/code> que publica esos eventos desde artefactos de versión de GitHub, lo que significa que el pipeline de versiones ahora tiene una ruta de publicación nativa de Nostr además de una ruta de descubrimiento nativa de Nostr. También acerca el modelo de actualizador de Damus y Notedeck al flujo de versiones firmadas publicadas por relay de Zapstore: la herramienta &lt;code>zsp&lt;/code> de Zapstore ya maneja activos de software como eventos kind &lt;code>1063&lt;/code> o &lt;code>3063&lt;/code>, así que esta ruta no está bloqueada a un solo cliente o publicador. El resto del release candidate es trabajo práctico de escritorio: columnas de follows, &amp;ldquo;Ver Como Usuario&amp;rdquo; en perfiles, soporte de &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap), estadísticas de notas en tiempo real, y manejo de limitaciones de &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> (Relay Information Document), pero el actualizador es la parte que probablemente sobrevivirá a este ciclo de versión.&lt;/p>
&lt;h3 id="el-estado-del-relay-se-acerca-al-comportamiento-en-tiempo-de-ejecución">El estado del relay se acerca al comportamiento en tiempo de ejecución&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> fusionó &lt;a href="https://github.com/damus-io/damus/pull/3665">PR #3665&lt;/a>, reemplazando un ID de evento de lista de relays almacenado obsoleto con una consulta directa a la base de datos para el último evento kind &lt;code>10002&lt;/code>. Cuando el valor antiguo quedaba obsoleto, las operaciones de añadir y eliminar relays podían recurrir a listas bootstrap o de un año de antigüedad, lo que hacía que algunos cambios de relay parecieran exitosos mientras dejaban el estado activo sin cambiar. &lt;a href="https://github.com/damus-io/damus/pull/3690">PR #3690&lt;/a> corrige una segunda ruta de fallo eliminando estado &lt;code>lock.mdb&lt;/code> obsoleto durante la compactación LMDB para que la app no se bloquee con &lt;code>SIGBUS&lt;/code> en el siguiente arranque.&lt;/p>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-ios-app">Primal iOS&lt;/a> abrió &lt;a href="https://github.com/PrimalHQ/primal-ios-app/pull/194">PR #194&lt;/a>, que se suscribe directamente a los relays de escritura &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a> (Encrypted Direct Messages) de un interlocutor mientras una conversación está abierta, manteniendo el servidor de caché como respaldo. &lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a> abrió &lt;a href="https://github.com/nostur-com/nostur-ios-public/pull/53">PR #53&lt;/a>, que combina puntuación aleatoria de relays, filtrado de actividad &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a> de nostr.watch, y muestreo de Thompson para cambiar la selección de relays de una heurística fija a una política aprendida. Los clientes han tratado la elección de relay como datos de configuración durante mucho tiempo. Más apps ahora lo tratan como estado en vivo que necesita lógica de medición y reparación.&lt;/p>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;h3 id="primal-android-307">Primal Android 3.0.7&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a>, el cliente Android de Primal, lanzó &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.7">3.0.7&lt;/a> con un nuevo ciclo de encuestas y billetera. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/945">PR #945&lt;/a> añade votación en encuestas basada en zaps, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/948">PR #948&lt;/a> pagina la carga de votos para que las encuestas más grandes sigan siendo usables, y &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/965">PR #965&lt;/a> obtiene recibos de zap para todas las transacciones. El mismo lanzamiento también etiqueta eventos soportados con metadatos de cliente &lt;a href="https://nostrcompass.org/es/topics/nip-89/">NIP-89&lt;/a> (Recommended Application Handlers) en &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/968">PR #968&lt;/a>, lo que ayuda a los clientes downstream a atribuir orígenes de eventos de forma más limpia.&lt;/p>
&lt;h3 id="amber-v413">Amber v4.1.3&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/">Siguiendo la cobertura de Amber de la semana pasada&lt;/a>, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, la app firmante Android para flujos &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> (Android Signer Application), lanzó &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.3">v4.1.3&lt;/a>. El lanzamiento se construye sobre su reciente trabajo de autenticación de relay &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> con más endurecimiento operacional: &lt;a href="https://github.com/greenart7c3/Amber/pull/327">PR #327&lt;/a> añade Tor integrado junto al soporte de Orbot, &lt;a href="https://github.com/greenart7c3/Amber/pull/324">PR #324&lt;/a> reemplaza permisos de cifrado gruesos basados en NIP con reglas específicas por tipo de contenido, y &lt;a href="https://github.com/greenart7c3/Amber/pull/336">PR #336&lt;/a> elimina permisos de red de la variante offline mientras &lt;a href="https://github.com/greenart7c3/Amber/pull/335">PR #335&lt;/a> añade verificaciones CI para mantenerlo así. &lt;a href="https://github.com/greenart7c3/Amber/pull/322">PR #322&lt;/a> también mueve el almacenamiento de PIN a DataStore cifrado.&lt;/p>
&lt;p>Este lanzamiento ajusta el límite del firmante en sí. Esto es útil para cualquier flujo Android que entregue claves reales o decisiones de autenticación de relay a Amber, porque la parte difícil no es solo lo que el firmante puede hacer. También es cuán estrechamente puede ser acotado.&lt;/p>
&lt;h3 id="route96-v060">Route96 v0.6.0&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/">Siguiendo la cobertura de Route96 de la semana pasada&lt;/a>, &lt;a href="https://github.com/v0l/route96">Route96&lt;/a>, el servidor de medios que soporta Blossom y &lt;a href="https://nostrcompass.org/es/topics/nip-96/">NIP-96&lt;/a> (HTTP File Storage), lanzó &lt;a href="https://github.com/v0l/route96/releases/tag/v0.6.0">v0.6.0&lt;/a>. El lanzamiento mueve la configuración y el estado de whitelist a la base de datos con recarga en caliente y añade políticas de retención para archivos fríos o envejecidos. También añade un endpoint &lt;code>GET /user/files&lt;/code> más rico además de seguimiento de estadísticas de archivo para descargas y egress, lo que da a los operadores más visibilidad sobre cómo se usa su servidor de almacenamiento.&lt;/p>
&lt;h3 id="openchat-v010-alpha11">OpenChat v0.1.0-alpha.11&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/">Siguiendo la cobertura de OpenChat de la semana pasada&lt;/a>, &lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a>, el cliente de chat basado en Avalonia construido sobre el stack Marmot, lanzó &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.1.0-alpha.11">v0.1.0-alpha.11&lt;/a> después de una semana de trabajo rápido de protocolo. &lt;a href="https://github.com/DavidGershony/openChat/commit/c33895d6b1a198f01b9b01a7be974bdce033fb9c">Commit c33895d&lt;/a> envuelve eventos Welcome en gift wrap &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> y elimina los shims antiguos de normalización de etiquetas MIP-00, &lt;a href="https://github.com/DavidGershony/openChat/commit/2738ff428154f60f50debb8f2a53662d427b28f1">commit 2738ff4&lt;/a> completa la auditoría de cumplimiento MIP-02, y &lt;a href="https://github.com/DavidGershony/openChat/commit/8e470cf7945bced010168c8229d73d67db638b9f">commit 8e470cf&lt;/a> hace lo mismo para el cifrado de mensajes de grupo MIP-03. &lt;a href="https://github.com/DavidGershony/openChat/commit/129ca37e264efaa2d1a8b04fe95cd72e5e212547">Commit 129ca37&lt;/a> también consolida el manejo de NIP-44 en la implementación compartida de marmot-cs, reduciendo el riesgo de divergencia criptográfica del lado del cliente.&lt;/p>
&lt;h3 id="nak-v0190-y-v0191">nak v0.19.0 y v0.19.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>, el toolkit de línea de comandos para Nostr de fiatjaf, lanzó &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.0">v0.19.0&lt;/a> y &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.1">v0.19.1&lt;/a>. La serie 0.19 añade una UI de foro de grupo en &lt;a href="https://github.com/fiatjaf/nak/commit/5f4efdbc69a36fc80ea3f97b2cdee1db6a7c5b47">commit 5f4efdb&lt;/a>, cambia las ediciones de metadatos de grupo a un flujo de reemplazo completo en &lt;a href="https://github.com/fiatjaf/nak/commit/da0b75337198010687aceb6a07bbae67407faee3">commit da0b753&lt;/a>, y reemplaza el manejo anterior de &lt;code>no-text&lt;/code> con &lt;code>supported_kinds&lt;/code> en &lt;a href="https://github.com/fiatjaf/nak/commit/bef67d35d259e0450debf0fd870e1a937a2406bf">commit bef67d3&lt;/a>. Para implementadores de grupos, esto mantiene el CLI alineado con la dirección en que se mueven las especificaciones y clientes de grupo.&lt;/p>
&lt;h2 id="actualizaciones-de-proyectos">Actualizaciones de Proyectos&lt;/h2>
&lt;h3 id="amethyst">Amethyst&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/">Siguiendo la cobertura de Amethyst de la semana pasada&lt;/a>, &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, el cliente Android con una de las superficies de protocolo más amplias en Nostr, siguió construyendo sobre su trabajo de billetera y relay después del parche NIP-47. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1853">PR #1853&lt;/a> añade consultas COUNT de &lt;a href="https://nostrcompass.org/es/topics/nip-45/">NIP-45&lt;/a> (Event Counting) a través de las pantallas de gestión de relays, para que los usuarios puedan ver cuántos eventos tiene realmente cada relay para feed principal, notificaciones, DMs y datos de índice. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1849">PR #1849&lt;/a> añade subidas de archivos cifrados para chats &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages), con una ruta de reintento para subidas sin cifrar cuando un host de almacenamiento rechaza la versión cifrada.&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1791">PR #1791&lt;/a> también trae login completo de bunker de escritorio &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (Nostr Connect) con un indicador de latido, lo que importa porque los fallos de firma remota a menudo se sienten como roturas aleatorias de UI desde el lado del usuario. El cliente muestra si el firmante está vivo y cuán recientemente respondió, mientras también hace obvio cuando la sesión actual usa un bunker.&lt;/p>
&lt;h3 id="nostria">Nostria&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>, el cliente multiplataforma construido alrededor de un stack local-first, fusionó &lt;a href="https://github.com/nostria-app/nostria/pull/561">PR #561&lt;/a> añadiendo filtrado Web of Trust para feeds y respuestas en hilos. La funcionalidad usa los datos de clasificación del servicio de confianza existente y los expone tanto como filtro de feed como filtro de respuestas, ocultando autores cuya clasificación no supera el umbral mientras preserva la estructura del hilo cuando hay descendientes de confianza presentes. Esto da a los usuarios una capa intermedia entre &amp;ldquo;mostrar a todos&amp;rdquo; y curación hardcodeada basada en listas.&lt;/p>
&lt;p>La misma semana también trajo &lt;a href="https://github.com/nostria-app/nostria/pull/563">PR #563&lt;/a>, que añade filtrado de contenido y soporte de reposts a la página de resumen. Fuera de la lista de PRs rastreados, Nostria también ha estado completando más de su superficie de usuario avanzado. Ahora soporta el último servicio Web of Trust de Brainstorm con registro en la app, junto con flujos de enviar y recibir dinero en DMs usando NWC e invoices BOLT-11. También añade manejo nativo de GIFs a través del NIP de emoji y una ruta de importación RSS más robusta para músicos que puede recoger splits Lightning existentes de feeds de podcast. Nostria está tratando clasificación, medios, pagos y publicación como una superficie de app conectada.&lt;/p>
&lt;h3 id="nostur">Nostur&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>, el cliente iOS mantenido por nostur-com, abrió &lt;a href="https://github.com/nostur-com/nostur-ios-public/pull/53">PR #53&lt;/a> para cambiar el enrutamiento outbox de un plan fijo a una política con puntuación. El parche añade puntuación aleatoria de relays, filtrado de actividad de relays &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a> con un feed en caché de nostr.watch, y muestreo de Thompson para que los datos de éxito y fallo de relay cambien las selecciones futuras. El diseño mantiene una válvula de seguridad cuando demasiados relays serían filtrados y preserva los relays &lt;code>.onion&lt;/code>. Este es uno de los ejemplos actuales más claros de un cliente tratando la selección de relays como un sistema adaptativo.&lt;/p>
&lt;h3 id="nostrability-outbox">Nostrability Outbox&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/#el-modelo-outbox-bajo-la-lupa">Siguiendo el informe anterior de benchmarks Outbox&lt;/a>, &lt;a href="https://github.com/nostrability/outbox">Nostrability Outbox&lt;/a>, el proyecto de benchmarks y análisis enfocado en enrutamiento de clientes con &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a>, pasó la semana ajustando sus propias afirmaciones. &lt;a href="https://github.com/nostrability/outbox/pull/35">PR #35&lt;/a> reemplaza resultados inflados de Thompson-sampling con un re-benchmark completo a través de 1.511 ejecuciones y recomienda la variante &lt;code>CG3&lt;/code> para enrutamiento estilo NDK. &lt;a href="https://github.com/nostrability/outbox/pull/43">PR #43&lt;/a> añade comparaciones de decay y casos de uso, corrige un bug de envenenamiento de caché de &lt;code>0 follows&lt;/code>, y luego re-ejecuta el dataset Telluride después de fijar los TTLs de caché.&lt;/p>
&lt;p>Esto no es trabajo de producto en el sentido habitual, pero importa para autores de clientes porque los números del proyecto ahora son más precisos y menos halagüeños en los lugares donde previamente habían sobreestimado. El resultado corregido sigue siendo útil. La selección aleatoria sigue superando al enrutamiento puramente determinista en los casos que Outbox le importan, el aprendizaje estilo Thompson puede mejorar materialmente la cobertura cuando los clientes persisten historial útil de relay, y el filtrado de actividad &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a> elimina tiempo perdido en relays muertos. El trabajo también se está convirtiendo en propuestas concretas de implementación, incluyendo &lt;a href="https://github.com/nostr-dev-kit/ndk/pull/387">NDK #387&lt;/a>, &lt;a href="https://github.com/nostur-com/nostur-ios-public/pull/53">Nostur #53&lt;/a>, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1833">Amethyst #1833&lt;/a>, &lt;a href="https://github.com/rust-nostr/nostr/pull/1282">rust-nostr #1282&lt;/a>, &lt;a href="https://github.com/coracle-social/welshman/pull/53">welshman #53&lt;/a>, y &lt;a href="https://github.com/hzrd149/applesauce/pull/54">applesauce #54&lt;/a> más &lt;a href="https://github.com/hzrd149/applesauce/pull/55">applesauce #55&lt;/a>.&lt;/p>
&lt;h3 id="backend-de-white-noise">Backend de White Noise&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a>, el backend Rust usado por White Noise y otras herramientas Marmot, fusionó dos parches de endurecimiento de límites alrededor del manejo de medios Blossom. &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/637">PR #637&lt;/a> impone HTTPS en URLs de Blossom y añade un timeout de subida, mientras &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/642">PR #642&lt;/a> limita las descargas de blob a &lt;code>100 MiB&lt;/code> para bloquear que descargas de medios sobredimensionados se conviertan en una ruta de denegación de servicio. Para software de mensajería privada, las URLs de medios son una de las interfaces más agudas entre la lógica de aplicación cifrada y la infraestructura de red no confiable. Esta semana el equipo ajustó ese borde.&lt;/p>
&lt;h3 id="rust-nostr">rust-nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a>, la biblioteca de protocolo Rust, fusionó &lt;a href="https://github.com/rust-nostr/nostr/pull/1280">PR #1280&lt;/a> añadiendo constructores de conveniencia para &lt;code>LocalRelayBuilderNip42&lt;/code>. Los nuevos helpers de lectura y escritura dan a las configuraciones de relay embebido y pruebas una forma más clara de convertir la política de autenticación &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> en código. Este es un parche de biblioteca pequeño, pero importa para equipos construyendo relays locales o integrados en apps que necesitan autenticación activada sin repetir boilerplate cada vez.&lt;/p>
&lt;h3 id="pika">Pika&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/">Siguiendo la cobertura anterior de Pika&lt;/a>, &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>, la app de mensajería basada en Marmot, lanzó &lt;a href="https://github.com/sledtools/pika/releases/tag/pika/v1.1.1">pika/v1.1.1&lt;/a> y &lt;a href="https://github.com/sledtools/pika/releases/tag/pikachat-v1.1.1">pikachat-v1.1.1&lt;/a> con un ciclo de lanzamiento enfocado en la convergencia del runtime. &lt;a href="https://github.com/sledtools/pika/pull/542">PR #542&lt;/a> introduce una fachada de runtime Marmot compartida para el CLI y sidecar, con el host de la app moviéndose a la misma superficie. &lt;a href="https://github.com/sledtools/pika/pull/556">PR #556&lt;/a> ajusta el ciclo de vida del agente OpenClaw y el estado de provisioning, mientras &lt;a href="https://github.com/sledtools/pika/pull/600">PR #600&lt;/a> añade restauración desde respaldo y seguridad de recuperación más estricta para entornos gestionados.&lt;/p>
&lt;p>La superficie directa orientada al usuario aquí es más pequeña que en el último artículo sobre Pika, pero el cambio arquitectónico es significativo. Mover la lógica de grupo, medios, llamadas y sesión detrás de un runtime compartido reduce la posibilidad de que la app y el daemon diverjan a medida que el stack Marmot crece.&lt;/p>
&lt;h2 id="actualizaciones-de-nips">Actualizaciones de NIPs&lt;/h2>
&lt;p>Cambios recientes al &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Fusionados:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-54/">NIP-54&lt;/a> (Wiki): Cambio de Asciidoc a Djot&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2242">PR #2242&lt;/a>): El contenido wiki en kind &lt;code>30818&lt;/code> ahora usa Djot como formato de marcado canónico. El texto fusionado añade comportamiento explícito de wikilinks, ejemplos de merge-request para kind &lt;code>818&lt;/code>, ejemplos de redirección para kind &lt;code>30819&lt;/code>, y ejemplos de normalización para scripts no latinos en etiquetas &lt;code>d&lt;/code>. Esto da a los implementadores un objetivo de parseo más limpio que Asciidoc y elimina una ruta más de especificación que dependía de un toolchain centrado en Ruby.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19&lt;/a> (Bech32-Encoded Entities): Añadir límite de entrada&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2264">PR #2264&lt;/a>): La especificación ahora recomienda limitar las cadenas de entidades codificadas en Bech32 a 5000 caracteres. Este es un cambio pequeño con valor real para parsers, porque las cadenas NIP-19 ahora aparecen en flujos QR, deep links, hojas de compartir, y entrada pegada por usuarios a través de muchos clientes.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abiertos y Discusiones:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Archivo de Clave Nostr para &lt;a href="https://nostrcompass.org/es/topics/nip-49/">NIP-49&lt;/a> (Private Key Encryption)&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2269">PR #2269&lt;/a>): Propone un formato de archivo &lt;code>.nostrkey&lt;/code> para exportación e importación de claves cifradas con contraseña. Si se fusiona, daría a los clientes una ruta de respaldo basada en archivos más normal que copiar cadenas &lt;code>ncryptsec&lt;/code> en bruto.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Consistencia del estado de membresía para &lt;a href="https://nostrcompass.org/es/topics/nip-43/">NIP-43&lt;/a> (Relay Access Metadata and Requests)&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2267">PR #2267&lt;/a>): Añade una sección aclarando que los relays deberían mantener un estado de membresía autoritativo por pubkey. Esto simplificaría la lógica de clientes de grupo alrededor de cambios de membresía e historial reproducido.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Guía de eliminación para &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages)&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2260">PR #2260&lt;/a>): Propone una ruta concreta para editar y eliminar mensajes privados a través de eventos de eliminación envueltos en gift wrap. El trabajo aún está abierto, pero los autores de clientes necesitan una respuesta aquí si NIP-17 va a reemplazar completamente los flujos de DM más antiguos.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>URI de share-intent para &lt;a href="https://nostrcompass.org/es/topics/nip-222/">NIP-222&lt;/a>&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2266">PR #2266&lt;/a>): El borrador estandarizaría cómo las apps móviles y de escritorio entregan contenido compartido a un cliente Nostr. Este es uno de los bordes de interoperabilidad más ásperos en los flujos actuales de app a app.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-94-file-metadata">NIP Deep Dive: NIP-94 (File Metadata)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-94/">NIP-94&lt;/a> define kind &lt;code>1063&lt;/code> como un evento de metadatos de primera clase para un archivo. La &lt;a href="https://github.com/nostr-protocol/nips/blob/master/94.md">especificación&lt;/a> da al evento su propio &lt;code>content&lt;/code> legible por humanos más etiquetas legibles por máquinas para URL de descarga, tipo MIME, hashes, dimensiones, previsualizaciones, respaldos y pistas del servicio de almacenamiento. Esto importa porque el archivo se vuelve consultable en relays como su propio objeto. Un cliente no tiene que extraer metadatos del contenido circundante para entender qué es el archivo.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;6a92ef8d7c3a1b5d4e8f9a0b1c2d3e4f567890abcdef1234567890abcdef1234&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1e2d3c4b5a697887766554433221100ffeeddccbbaa99887766554433221100&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1742342400&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1063&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;url&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://downloads.example.org/notedeck/v0.8.0-rc2/notedeck-macos-universal.tar.gz&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;m&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;application/gzip&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;x&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4a5b6c7d8e9f00112233445566778899aabbccddeeff00112233445566778899&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;ox&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4a5b6c7d8e9f00112233445566778899aabbccddeeff00112233445566778899&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;size&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;48392011&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;dim&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;0x0&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;magnet&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;magnet:?xt=urn:btih:00112233445566778899aabbccddeeff00112233&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;i&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;00112233445566778899aabbccddeeff00112233&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;blurhash&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;LEHV6nWB2yk8pyo0adR*.7kCMdnj&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;thumb&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://downloads.example.org/notedeck/v0.8.0-rc2/thumb.png&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;bbccddeeff00112233445566778899aabbccddeeff0011223344556677889900&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;image&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://downloads.example.org/notedeck/v0.8.0-rc2/screenshot.png&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;ccddeeff00112233445566778899aabbccddeeff001122334455667788990011&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;summary&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Signed macOS release artifact for Notedeck v0.8.0-rc2&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;alt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Notedeck desktop release archive&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;fallback&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://mirror.example.net/notedeck/v0.8.0-rc2/notedeck-macos-universal.tar.gz&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;service&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip96&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Notedeck macOS universal build&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;11aa22bb33cc44dd55ee66ff77889900aabbccddeeff0011223344556677889911aa22bb33cc44dd55ee66ff77889900aabbccddeeff00112233445566778899&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Las etiquetas hacen más trabajo del que aparentan a primera vista. &lt;code>x&lt;/code> identifica el archivo servido, mientras &lt;code>ox&lt;/code> identifica el archivo original antes de cualquier transformación del lado del servidor. Las etiquetas de previsualización permiten a los clientes construir índices de archivos navegables sin descargar el activo completo, y &lt;code>summary&lt;/code> puede llevar un extracto breve junto a ellos. &lt;code>fallback&lt;/code> da una segunda fuente cuando la URL principal falla, y &lt;code>service&lt;/code> sugiere el protocolo de almacenamiento detrás del archivo, como &lt;a href="https://nostrcompass.org/es/topics/nip-96/">NIP-96&lt;/a> u otro host. NIP-94 por lo tanto se sitúa debajo de las publicaciones sociales y por encima del almacenamiento en bruto. Describe el archivo, no la conversación alrededor del archivo.&lt;/p>
&lt;p>Por eso el actualizador de Notedeck de esta semana es interesante. &lt;a href="https://github.com/damus-io/notedeck/pull/1326">PR #1326&lt;/a> usa eventos kind &lt;code>1063&lt;/code> firmados para el descubrimiento de versiones de software, luego verifica el binario descargado contra el SHA256 publicado. La misma forma de evento puede describir un artefacto de software o una subida de medios. NIP-94 es lo suficientemente antiguo como para ser estable, pero aún tiene espacio para crecer porque más proyectos están tratando los eventos de metadatos como un transporte para máquinas, no solo como decoración para personas.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-54-wiki">NIP Deep Dive: NIP-54 (Wiki)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-54/">NIP-54&lt;/a> define kind &lt;code>30818&lt;/code> como un evento de artículo wiki. La &lt;a href="https://github.com/nostr-protocol/nips/blob/master/54.md">especificación&lt;/a> trata la etiqueta &lt;code>d&lt;/code> como el tema normalizado del artículo y permite que muchos autores publiquen entradas para el mismo tema. El cuerpo del artículo vive en &lt;code>content&lt;/code>, mientras las etiquetas manejan identidad normalizada, título de visualización, resúmenes, y referencias a versiones anteriores. Esto significa que NIP-54 no es solo un formato de contenido. También es un problema de recuperación y clasificación, porque cada cliente aún tiene que decidir qué versión del artículo mostrar.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;8c94e5d1f2a300112233445566778899aabbccddeeff00112233445566778899&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1742342400&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30818&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nostr-wiki&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Nostr Wiki&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;summary&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Djot-formatted reference article about Nostr wiki events&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30818:11223344556677889900aabbccddeeff00112233445566778899aabbccddeeff:nostr-wiki&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.org&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;fork&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;11223344556677889900aabbccddeeff00112233445566778899aabbccddeeff&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.org&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;fork&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Nostr is a [protocol][] for carrying events across relays.\n\n[protocol]: nostr:nevent1example&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;33cc44dd55ee66ff77889900aabbccddeeff0011223344556677889900112233cc44dd55ee66ff77889900aabbccddeeff00112233445566778899001122&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>La fusión de esta semana cambia el marcado canónico de Asciidoc a Djot en &lt;a href="https://github.com/nostr-protocol/nips/pull/2242">PR #2242&lt;/a>. Esto importa para implementadores porque Djot tiene una especificación standalone más ajustada y una historia de parser más simple entre lenguajes. El texto fusionado también aclara cómo resuelven los wikilinks de estilo referencia, cómo los merge requests usan kind &lt;code>818&lt;/code>, cómo las redirecciones usan kind &lt;code>30819&lt;/code>, y cómo debería comportarse la normalización de etiquetas &lt;code>d&lt;/code> para scripts no latinos. Esas son las partes que hacen que dos clientes independientes coincidan en a qué artículo apunta un enlace.&lt;/p>
&lt;p>NIP-54 también se sitúa en un lugar inusual en el protocolo. Un cliente wiki necesita renderizado de contenido, pero también necesita política de clasificación. Reacciones, listas de relays, listas de contactos, y señales de deferencia explícita, todo alimenta qué artículo gana para un tema dado. El cambio a Djot no resuelve ese problema de clasificación, pero sí elimina una de las ambigüedades de parser que estaba debajo. Por eso la fusión importa ahora: el cambio trata menos sobre un formato de prosa más bonito y más sobre hacer que el comportamiento wiki multi-cliente sea más fácil de implementar consistentemente.&lt;/p>
&lt;p>¿Estás construyendo algo, o quieres que lo cubramos? Escríbenos vía DM &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> en Nostr a &lt;code>npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923&lt;/code>.&lt;/p></content:encoded></item><item><title>Nostr Compass #13</title><link>https://nostrcompass.org/es/newsletters/2026-03-11-newsletter/</link><pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-03-11-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> y &lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a> añaden superficies MCP para comercio impulsado por agentes, mientras &lt;a href="https://github.com/flox1an/oauth-bunker">OAuth Bunker&lt;/a>, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> y &lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a> agregan soporte de relay-auth y eventos protegidos de &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> (Autenticación de clientes ante relays) a través de software de apps, firmantes y relays. &lt;a href="https://github.com/v0l/route96">Route96&lt;/a> publica dos lanzamientos centrados en etiquetado de IA, colas de moderación, hashing perceptual y documentación legible por máquina del servidor. &lt;a href="https://github.com/satsdisco/samizdat">Samizdat&lt;/a>, ya activo en la web, lanzó su primera alfa de Android y luego añadió soporte de firmante &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> (Aplicación firmante para Android). &lt;a href="https://github.com/formstr-hq/nostr-forms">Formstr&lt;/a> añade registro mediante &lt;a href="https://nostrcompass.org/es/topics/nip-49/">NIP-49&lt;/a> (Cifrado de clave privada), &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> incorpora resolución &lt;a href="https://nostrcompass.org/es/topics/nip-05/">NIP-05&lt;/a> (Verificación de dominio) basada en Namecoin, &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> publica &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.4">v0.16.4&lt;/a>, y el repositorio de NIPs fusiona &lt;a href="https://nostrcompass.org/es/topics/nip-91/">NIP-91&lt;/a> (Operador AND para filtros) y guía defensiva para &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a> (Descubrimiento de relays y monitoreo de disponibilidad).&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> y &lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a> añaden superficies MCP para comercio impulsado por agentes, mientras &lt;a href="https://github.com/flox1an/oauth-bunker">OAuth Bunker&lt;/a>, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> y &lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a> agregan soporte de relay-auth y eventos protegidos de &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> (Autenticación de clientes ante relays) a través de software de apps, firmantes y relays. &lt;a href="https://github.com/v0l/route96">Route96&lt;/a> publica dos lanzamientos centrados en etiquetado de IA, colas de moderación, hashing perceptual y documentación legible por máquina del servidor. &lt;a href="https://github.com/satsdisco/samizdat">Samizdat&lt;/a>, ya activo en la web, lanzó su primera alfa de Android y luego añadió soporte de firmante &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> (Aplicación firmante para Android). &lt;a href="https://github.com/formstr-hq/nostr-forms">Formstr&lt;/a> añade registro mediante &lt;a href="https://nostrcompass.org/es/topics/nip-49/">NIP-49&lt;/a> (Cifrado de clave privada), &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> incorpora resolución &lt;a href="https://nostrcompass.org/es/topics/nip-05/">NIP-05&lt;/a> (Verificación de dominio) basada en Namecoin, &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> publica &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.4">v0.16.4&lt;/a>, y el repositorio de NIPs fusiona &lt;a href="https://nostrcompass.org/es/topics/nip-91/">NIP-91&lt;/a> (Operador AND para filtros) y guía defensiva para &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a> (Descubrimiento de relays y monitoreo de disponibilidad).&lt;/p>
&lt;h2 id="noticias">Noticias&lt;/h2>
&lt;h3 id="shopstr-y-milk-market-abren-superficies-de-comercio-mcp">Shopstr y Milk Market abren superficies de comercio MCP&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>, el marketplace peer-to-peer con pagos Lightning y Cashu, fusionó &lt;a href="https://github.com/shopstr-eng/shopstr/pull/234">PR #234&lt;/a> (&lt;a href="https://github.com/shopstr-eng/shopstr/commit/94ef7d1a4519e8e0158668d13c8cb8684b1d46e2">commit 94ef7d1&lt;/a>), añadiendo un servidor MCP con autenticación por API key para gestión de cuentas por agentes. El cambio agrega &lt;code>.well-known/agent.json&lt;/code> para descubrimiento de agentes, endpoints de onboarding y estado de MCP, rutas de creación de pedidos y verificación de pagos, herramientas dedicadas de compra y lectura, y una pantalla de ajustes para API keys. &lt;a href="https://github.com/shopstr-eng/shopstr/pull/236">PR #236&lt;/a> amplía eso con acciones del lado del vendedor para mensajes, direcciones, actualizaciones de pedidos y selección de especificaciones de producto. Una corrección de seguridad en &lt;a href="https://github.com/shopstr-eng/shopstr/pull/235">PR #235&lt;/a> reemplaza el hashing de API keys con SHA-256 de una sola iteración por PBKDF2 con sal y 100.000 iteraciones.&lt;/p>
&lt;p>Los agentes pueden leer listados &lt;a href="https://nostrcompass.org/es/topics/nip-99/">NIP-99&lt;/a> (Clasificados) y avanzar por el checkout usando los flujos de pago existentes de &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect) y &lt;a href="https://nostrcompass.org/es/topics/nip-60/">NIP-60&lt;/a> (Cashu Wallet) sin raspar páginas ni hacer ingeniería inversa del comportamiento del cliente.&lt;/p>
&lt;p>&lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a>, un mercado de alimentos sobre Nostr en &lt;a href="https://milk.market">milk.market&lt;/a>, incorporó la misma base de MCP y API keys en el &lt;a href="https://github.com/shopstr-eng/milk-market/commit/da6c0b499494b4e4861c4ff8a220e066c46285b3">commit da6c0b4&lt;/a>. &lt;a href="https://github.com/shopstr-eng/milk-market/pull/10">PR #10&lt;/a> añade pedidos por suscripción, cambios de dirección de envío después de la compra y manejo de checkout multi-comerciante y multi-moneda para Stripe y otras rutas de pago fiat. Un &lt;a href="https://github.com/shopstr-eng/milk-market/pull/11">PR #11&lt;/a> posterior corrige un bug de inicialización de base de datos al arrancar, donde la tabla de publicaciones fallidas a relays no se creaba en instalaciones nuevas, causando errores 500 en la primera carga. La interfaz orientada a agentes funciona tanto con checkout nativo de Bitcoin en Shopstr como con checkout mixto fiat y Bitcoin en Milk Market.&lt;/p>
&lt;h3 id="nip-42-relay-auth-a-través-de-bunker-firmante-y-relay">NIP-42 relay-auth a través de bunker, firmante y relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/flox1an/oauth-bunker">OAuth Bunker&lt;/a>, un bunker &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (Nostr Connect) que conecta proveedores OAuth con firma Nostr, añadió login &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a> (Firmante de extensión de navegador), selección automática cuando solo existe una identidad y limpieza de identidades eliminadas (&lt;a href="https://github.com/flox1an/oauth-bunker/commit/f0c7683cb2374fd9a3ebd1b186055da8abd2c2ff">commit f0c7683&lt;/a>). Cuando solo existe una identidad, el bunker ahora la selecciona automáticamente en lugar de mostrar un prompt. Eliminar una identidad también borra sus asignaciones y conexiones colgantes. El &lt;a href="https://github.com/flox1an/oauth-bunker/commit/6b8796c6c59c7d48dc1ede92d6de6bf54feb56cc">commit 6b8796c&lt;/a> añade una ruta de configuración &lt;code>ALWAYS_ALLOWED_KINDS&lt;/code> para usuarios asignados, con kind &lt;code>30078&lt;/code> de datos específicos de app por defecto, de modo que las identidades delegadas puedan escribir en almacenamiento específico de la app sin aprobación por evento.&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, el principal firmante &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> para Android, publicó &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.3-pre4">v4.1.3-pre4&lt;/a> con cuatro pre-lanzamientos durante la semana. &lt;a href="https://github.com/greenart7c3/Amber/pull/317">PR #317&lt;/a> añade manejo de autenticación de relay &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> para solicitudes kind &lt;code>22242&lt;/code>. La implementación añade una nueva columna de base de datos para seguir permisos específicos por relay con un índice único sobre &lt;code>(pkKey, type, kind, relay)&lt;/code>. Los usuarios ven una pantalla dedicada de auth donde pueden permitir o denegar por relay o para todos los relays usando un alcance comodín &lt;code>*&lt;/code>, y persistir esa decisión. Los permisos comodín limpian todas las entradas específicas por relay para un kind. &lt;a href="https://github.com/greenart7c3/Amber/pull/318">PR #318&lt;/a> continúa ese trabajo refactorizando las pantallas de solicitudes multi-evento para mostrar detalles en línea usando tarjetas composables en lugar de navegar a una pantalla separada. El lanzamiento también actualiza los relays de perfil predeterminados, añade una vista de solicitudes en bottom sheet y corrige un crash en dispositivos MediaTek al desactivar StrongBox keystore.&lt;/p>
&lt;p>Del lado del relay, &lt;a href="https://github.com/hoytech/strfry/pull/156">strfry PR #156&lt;/a> implementa el manejo NIP-42 para &lt;a href="https://nostrcompass.org/es/topics/nip-70/">NIP-70&lt;/a> (Eventos protegidos), y &lt;a href="https://github.com/hoytech/strfry/pull/176">PR #176&lt;/a> rechaza reposts que incrustan eventos protegidos.&lt;/p>
&lt;h3 id="notedeck-añade-límites-de-relay-nip-11-y-funciones-de-agentium">Notedeck añade límites de relay NIP-11 y funciones de Agentium&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>, el cliente nativo de escritorio del equipo de Damus, fusionó 14 PRs esta semana. &lt;a href="https://github.com/damus-io/notedeck/pull/1316">PR #1316&lt;/a> añade obtención de limitaciones de relay &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> (Documento de información de relay), de modo que todos los relays outbox ahora respetan &lt;code>max_message_length&lt;/code> y &lt;code>max_subscriptions&lt;/code> del documento de información del relay. La implementación incluye procesamiento de trabajos en segundo plano, exponential backoff con jitter para reintentos de conexión y cabeceras HTTP Accept personalizadas. &lt;a href="https://github.com/damus-io/notedeck/pull/1312">PR #1312&lt;/a> corrige un bug donde los DMs a veces no cargaban tras cambiar de cuenta, y &lt;a href="https://github.com/damus-io/notedeck/pull/1333">PR #1333&lt;/a> añade un mecanismo de backoff a la comunicación multicast con relays para evitar spam de broadcast cuando hay errores.&lt;/p>
&lt;p>El subsistema Agentium, la interfaz interna de agente de programación de Notedeck llamada &amp;ldquo;Dave&amp;rdquo;, recibió pegado de imágenes desde el portapapeles, configuraciones de ejecución con nombre que se sincronizan entre dispositivos mediante eventos kind &lt;code>31991&lt;/code> (&lt;a href="https://nostrcompass.org/es/topics/nip-33/">NIP-33&lt;/a> (Eventos reemplazables parametrizados)), un creador de git worktrees y un selector de modelo para elegir backends por sesión (&lt;a href="https://github.com/damus-io/notedeck/pull/1336">PR #1336&lt;/a>). &lt;a href="https://github.com/damus-io/notedeck/pull/1338">PR #1338&lt;/a> integra &lt;code>egui_kittest&lt;/code> para pruebas headless de UI, y &lt;a href="https://github.com/damus-io/notedeck/pull/1339">PR #1339&lt;/a> añade una tarjeta de dashboard que rastrea la creación de nuevas listas de contactos por cliente. Un &lt;a href="https://github.com/damus-io/notedeck/pull/1314">PR #1314&lt;/a> abierto porta la resolución NIP-05 basada en Namecoin de Amethyst a Notedeck con búsquedas ElectrumX, enrutamiento Tor por SOCKS5 e integración en la barra de búsqueda.&lt;/p>
&lt;h3 id="divine-publica-v106-con-infraestructura-de-pruebas-e2e-e-importación-nip-49">diVine publica v1.0.6 con infraestructura de pruebas E2E e importación NIP-49&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>, el cliente de video corto en bucle que restaura archivos de Vine en &lt;a href="https://divine.video">divine.video&lt;/a>, publicó &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.6">v1.0.6&lt;/a> con 127 PRs fusionados. El lanzamiento añade importación de cuentas &lt;a href="https://nostrcompass.org/es/topics/nip-49/">NIP-49&lt;/a>, soporte externo de &lt;a href="https://nostrcompass.org/es/topics/nip-05/">NIP-05&lt;/a>, manejo multi-cuenta, builds para macOS y Linux experimental, y una biblioteca rediseñada de borradores y clips respaldada por almacenamiento local.&lt;/p>
&lt;p>En el lado de ingeniería, &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1928">PR #1928&lt;/a> añade una infraestructura completa de pruebas de integración E2E usando Patrol para automatización de UI nativa contra un stack backend en Docker (relay, API, Blossom, Postgres, Redis, ClickHouse). Cinco pruebas del recorrido de auth cubren registro, verificación, restablecimiento de contraseña, expiración de sesión y refresh de token. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2105">PR #2105&lt;/a> cambia la carga de video desde HLS-first a MP4 directo con fallback automático a HLS, reduciendo los tiempos de carga de 30-60 segundos a casi instantáneos. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2076">PR #2076&lt;/a> cachea la respuesta de la API del home feed en SharedPreferences para mostrarla de inmediato en arranque en frío. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2104">PR #2104&lt;/a> hace que las etiquetas &lt;code>ai-generated&lt;/code> queden ocultas en los feeds, y &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2100">PR #2100&lt;/a> añade un ajuste de seguridad para mostrar solo videos alojados por diVine. La migración del caché de perfiles de Hive a Drift sigue avanzando a través de &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1881">PR #1881&lt;/a>, &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1883">PR #1883&lt;/a> y &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1903">PR #1903&lt;/a>, reemplazando aproximadamente 1.074 líneas de código Hive por DAOs de Drift.&lt;/p>
&lt;h3 id="vector-v032-publica-sincronización-nip-77-negentropy-y-mejoras-mls">Vector v0.3.2 publica sincronización NIP-77 Negentropy y mejoras MLS&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a>, el mensajero de escritorio centrado en privacidad que usa cifrado grupal MLS con &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (Mensajes directos privados) y &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> (Payloads cifrados), publicó &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.3.2">v0.3.2&lt;/a>. El cambio principal es negentropy NIP-77 para sincronización de grupos MLS (&lt;a href="https://github.com/VectorPrivacy/Vector/commit/b06adf4af2673fb5ac5add01356999ea70628eac">commit b06adf4&lt;/a>), que recupera mensajes perdidos mucho más rápido mediante arranque paralelo. El lanzamiento también añade un motor de audio reconstruido con soporte completo para Linux, spoilers de imágenes con vista previa difuminada, hipervínculos clicables con rich link previews, menciones &lt;code>@mention&lt;/code> con &lt;code>@everyone&lt;/code> para admins de grupo, autocompletado de shortcode de emoji, silenciamiento de grupos, tap-to-react sobre reacciones existentes y cargas de archivos cancelables. Vector filtra explícitamente los eventos de chat grupal NIP-17 (&lt;a href="https://github.com/VectorPrivacy/Vector/commit/2179a51c0449b3a70663a1573195b7945adf58ba">commit 2179a51&lt;/a>), usando MLS exclusivamente para cifrado grupal.&lt;/p>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;h3 id="route96-v050-y-v051">Route96 v0.5.0 y v0.5.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/v0l/route96">Route96&lt;/a>, un servidor de medios con soporte para Blossom y &lt;a href="https://nostrcompass.org/es/topics/nip-96/">NIP-96&lt;/a> (Almacenamiento HTTP de archivos), publicó &lt;a href="https://github.com/v0l/route96/releases/tag/v0.5.0">v0.5.0&lt;/a> y &lt;a href="https://github.com/v0l/route96/releases/tag/v0.5.1">v0.5.1&lt;/a>. v0.5.0 añade etiquetado automático de IA, backfill retroactivo para cargas sin etiquetar, colas de moderación para archivos marcados, rechazo de privacidad basado en EXIF y manejo de hashes prohibidos.&lt;/p>
&lt;p>v0.5.1 añade hashes perceptuales de imagen, locality-sensitive hashing para buscar imágenes similares, endpoints batch de admin y un &lt;a href="https://github.com/v0l/route96/releases/tag/v0.5.1">&lt;code>SKILL.md&lt;/code>&lt;/a> publicado que describe la superficie de API Blossom y NIP-96 del servidor para tooling de agentes. &lt;a href="https://github.com/v0l/route96/pull/58">PR #58&lt;/a> mueve los workers en segundo plano a tareas Tokio totalmente asíncronas, y el &lt;a href="https://github.com/v0l/route96/commit/97b00a39e27b07053c2ad335dbf475bacba57bf8">commit 97b00a3&lt;/a> añade backoff para evitar hot loops.&lt;/p>
&lt;h3 id="samizdat-v100-alpha">Samizdat v1.0.0-alpha&lt;/h3>
&lt;p>&lt;a href="https://github.com/satsdisco/samizdat">Samizdat&lt;/a>, lector y publicador de contenido largo disponible en &lt;a href="https://samizdat.press">samizdat.press&lt;/a>, publicó su primera build de Android en &lt;a href="https://github.com/satsdisco/samizdat/releases/tag/v1.0.0-alpha">v1.0.0-alpha&lt;/a>. La app abre en una página Press curada de artículos largos de Nostr con navegación por pestañas inferiores entre las vistas Press, Feed, Saved y Write. La build de Android añade almacenamiento nativo de claves mediante cifrado con Android Keystore y desbloqueo biométrico, maneja URIs &lt;code>nostr:&lt;/code> y deep links de &lt;code>samizdat.press&lt;/code>, y soporta handoff hacia firmantes a través del selector de apps de Android (Amber, Primal, etc.) en lugar de requerir importación directa de claves. Pull-to-refresh, manejo de safe area en distintos tamaños de pantalla e integraciones nativas de compartir, portapapeles, hápticos y splash screen ahora forman parte del shell Android en vez del wrapper web.&lt;/p>
&lt;p>El &lt;a href="https://github.com/satsdisco/samizdat/commit/d17308f3c2e6020e14074fbb1c03a8f60f29a3e6">commit d17308f&lt;/a> añade firma &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> basada en intents para flujos con Amber y Primal, y el &lt;a href="https://github.com/satsdisco/samizdat/commit/e29dab84f7b58edd621f7b86ed7ca6458f965614">commit e29dab8&lt;/a> reemplaza un workaround de puente JavaScript por un plugin nativo de Capacitor usando &lt;code>startActivityForResult&lt;/code>. La app requiere Android 7.0+ (API 24), se distribuye como APK de depuración en esta alfa y todavía carece de push notifications. La publicación depende por ahora de una app firmante, mientras el login con &lt;code>nsec&lt;/code> cubre lectura local y acceso a la cuenta.&lt;/p>
&lt;h3 id="calendar-by-form-v020">Calendar by Form* v0.2.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a>, una app de calendario descentralizada con compartición privada de eventos &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap) disponible en &lt;a href="https://calendar.formstr.app">calendar.formstr.app&lt;/a>, publicó &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v0.2.0">v0.2.0&lt;/a> con &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/38">PR #38&lt;/a>. El lanzamiento amplía el manejo de eventos recurrentes para &lt;a href="https://nostrcompass.org/es/topics/nip-52/">NIP-52&lt;/a> (Eventos de calendario), superando la base de evento único de v0.1.0. Los cambios subyacentes también tocan almacenamiento local de eventos, manejo de firmantes y plumbing de notificaciones Android. Esta es la segunda aplicación activa de la organización Formstr tras la migración de repositorio del mes pasado.&lt;/p>
&lt;h3 id="mostro-v0164">Mostro v0.16.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>, el exchange peer-to-peer de Bitcoin construido sobre Nostr, publicó &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.4">v0.16.4&lt;/a>. Las correcciones de restauración de sesión de disputas (&lt;a href="https://github.com/MostroP2P/mostro/pull/599">PR #599&lt;/a>) y auto-cierre (&lt;a href="https://github.com/MostroP2P/mostro/pull/606">PR #606&lt;/a>) &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/">cubiertas la semana pasada&lt;/a> están incluidas. Novedades de esta versión: &lt;a href="https://github.com/MostroP2P/mostro/pull/625">PR #625&lt;/a> añade un campo &lt;code>days&lt;/code> a eventos de valoración de usuario kind &lt;code>38384&lt;/code>, &lt;a href="https://github.com/MostroP2P/mostro/pull/612">PR #612&lt;/a> añade expiración a esos eventos de valoración, y &lt;a href="https://github.com/MostroP2P/mostro/pull/614">PR #614&lt;/a> cambia los eventos de órdenes para usar ajustes de expiración configurados en lugar de una ventana hardcodeada de 24 horas. &lt;a href="https://github.com/MostroP2P/mostro/pull/622">PR #622&lt;/a> añade una comprobación de idempotencia para evitar pagos duplicados de la comisión de desarrollo.&lt;/p>
&lt;h3 id="mostro-mobile-v121">Mostro Mobile v1.2.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a>, el cliente Flutter para el exchange P2P Mostro, publicó &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.1">v1.2.1&lt;/a> con 11 funciones nuevas y 11 correcciones de errores. El lanzamiento añade renderizado multimedia cifrado en el chat de disputas (&lt;a href="https://github.com/MostroP2P/mobile/pull/514">PR #514&lt;/a>), cierre automático de la UI de disputa cuando las órdenes alcanzan un estado terminal (&lt;a href="https://github.com/MostroP2P/mobile/pull/503">PR #503&lt;/a>), escaneo QR para importar billeteras NWC (&lt;a href="https://github.com/MostroP2P/mobile/commit/12eaee4d154fa31b07f82b96819de520e825aee6">commit 12eaee4&lt;/a>), traducciones al francés y manejo de push notifications FCM. &lt;a href="https://github.com/MostroP2P/mobile/pull/496">PR #496&lt;/a> corrige un bug de padding en firmas Schnorr fijando la dependencia bip340 en v0.2.0.&lt;/p>
&lt;h3 id="0xchat-v154">0xchat v1.5.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/0xchat-app/0xchat-app-main">0xchat&lt;/a>, el cliente de mensajería estilo Telegram con soporte Cashu, publicó &lt;a href="https://github.com/0xchat-app/0xchat-app-main/releases/tag/v1.5.4-release">v1.5.4&lt;/a> centrado en correcciones para escritorio Linux: iconos del dock en AppImage, renderizado de emoji, congelamientos del menú contextual y bloqueos de la UI al responder o copiar. El lanzamiento también corrige problemas de subida de imágenes e integración con npub.cash. &lt;a href="https://github.com/0xchat-app/0xchat-app-main/pull/49">PR #49&lt;/a> elimina rebuilds innecesarios de UI al quitar un timer de polling de 3 segundos que forzaba repintados glassmorphic sin hacer nada, y desbloquea la inicialización del login al cargar la caché de eventos de forma concurrente en lugar de bloquear el arranque de relay, contactos y canales.&lt;/p>
&lt;h3 id="keep-v060">Keep v0.6.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a>, un firmante umbral FROST para Android con soporte de &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>, publicó &lt;a href="https://github.com/privkeyio/keep-android/releases/tag/v0.6.0">v0.6.0&lt;/a> y &lt;a href="https://github.com/privkeyio/keep-android/releases/tag/v0.6.1">v0.6.1&lt;/a>. v0.6.0 añade coordinación de descriptores de wallet y UI de gestión, un flujo de backup/restore con autenticación biométrica (&lt;a href="https://github.com/privkeyio/keep-android/pull/184">PR #184&lt;/a>), recuperación de &lt;code>nsec&lt;/code> desde shares umbral (&lt;a href="https://github.com/privkeyio/keep-android/pull/187">PR #187&lt;/a>), generación de marcos QR animados multiplataforma vía Rust UniFFI (&lt;a href="https://github.com/privkeyio/keep-android/pull/188">PR #188&lt;/a>) y una traza de auditoría de firma con verificación de cadena (&lt;a href="https://github.com/privkeyio/keep-android/pull/189">PR #189&lt;/a>). v0.6.1 cambia la licencia de AGPL-3.0 a MIT (&lt;a href="https://github.com/privkeyio/keep-android/pull/191">PR #191&lt;/a>).&lt;/p>
&lt;h3 id="njump-v030">njump v0.3.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/njump">njump&lt;/a>, la puerta de enlace estática para visualizar contenido Nostr en &lt;a href="https://njump.me">njump.me&lt;/a>, publicó &lt;a href="https://github.com/fiatjaf/njump/releases/tag/v0.3.0">v0.3.0&lt;/a> con un cambio disruptivo en el parseo de códigos &lt;code>note1&lt;/code> y una actualización de la biblioteca Nostr subyacente.&lt;/p>
&lt;h3 id="roadstr-v011">Roadstr v0.1.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/jooray/roadstr">Roadstr&lt;/a>, una app descentralizada de reporte de eventos viales basada en Nostr, publicó su primer demo release &lt;a href="https://github.com/jooray/roadstr/releases/tag/v0.1.1">v0.1.1&lt;/a>. La app muestra eventos viales en un mapa usando vector tiles de openfreemap.org.&lt;/p>
&lt;h3 id="bitcredit-v053">Bitcredit v0.5.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core">Bitcredit&lt;/a>, una aplicación de e-bills con capa de transporte Nostr y relay dedicado en &lt;a href="https://www.bit.cr/">bit.cr&lt;/a>, publicó &lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/releases/tag/v0.5.3">v0.5.3&lt;/a>. &lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/pull/846">PR #846&lt;/a> añade campos &lt;code>payment_actions&lt;/code> y &lt;code>bill_state&lt;/code> a la API para estado de pago y aceptación, y &lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/pull/849">PR #849&lt;/a> corrige el manejo de direcciones de firma para firmantes anónimos.&lt;/p>
&lt;h3 id="openchat-v010-alpha3">OpenChat v0.1.0-alpha.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a>, una aplicación de chat construida sobre las bibliotecas .NET MLS y C# del protocolo Marmot, publicó &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.1.0-alpha.3">v0.1.0-alpha.3&lt;/a>. El lanzamiento añade soporte para firmantes externos con Amber y flujos &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (&lt;a href="https://github.com/DavidGershony/openChat/commit/e568d979fe15eead19172f2eb6f8cf26ca845247">commit e568d97&lt;/a>), mueve la persistencia del estado MLS al servicio MLS para eliminar pérdida de datos en ventanas de crash (&lt;a href="https://github.com/DavidGershony/openChat/commit/4720bc8625136a0d5b0e23322bc0c50cd80577e8">commit 4720bc8&lt;/a>) y publica builds para Windows, Linux y Android mediante un nuevo pipeline de CI.&lt;/p>
&lt;h3 id="opensignal-v100">OpenSignal v1.0.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/turizspace/opensignal">OpenSignal&lt;/a>, un copiloto de trading en Kotlin Multiplatform para Nostr, publicó &lt;a href="https://github.com/turizspace/OpenSignal/releases/tag/v1.0.0">v1.0.0&lt;/a>. El lanzamiento empaqueta módulos KMP compartidos para lógica de dominio, renderizado de gráficos, autenticación y publicación Nostr, soporte de subida Blossom &lt;a href="https://nostrcompass.org/es/topics/nip-96/">NIP-96&lt;/a> y hooks de inferencia de IA basados en ONNX a través de shells Desktop y Android. La arquitectura publicada también incluye un servicio de IA FastAPI para análisis de capturas de gráficos, pipelines de entrenamiento de modelos y un motor de riesgo que produce planes de trade estructurados con sizing y advertencias. El login soporta tanto claves &lt;code>nsec&lt;/code> crudas como firmantes externos, y el flujo de salida termina en publicación de eventos Nostr en lugar de análisis local únicamente.&lt;/p>
&lt;h2 id="actualizaciones-de-proyectos">Actualizaciones de proyectos&lt;/h2>
&lt;h3 id="formstr">Formstr&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-forms">Formstr&lt;/a>, la alternativa a Google Forms en Nostr, fusionó &lt;a href="https://github.com/formstr-hq/nostr-forms/pull/434">PR #434&lt;/a> (&lt;a href="https://github.com/formstr-hq/nostr-forms/commit/e9c4fd5dadfa0b83f1e87d7596eaf35f9fdb7da8">commit e9c4fd5&lt;/a>), añadiendo un flujo de registro que usa claves privadas cifradas mediante &lt;a href="https://nostrcompass.org/es/topics/nip-49/">NIP-49&lt;/a>. Antes de este cambio, los usuarios necesitaban o bien una extensión de navegador &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a> o pegar un &lt;code>nsec&lt;/code> crudo para usar Formstr. El nuevo flujo genera un par de claves en el cliente, cifra la clave privada con una contraseña elegida por el usuario mediante el esquema scrypt + XChaCha20-Poly1305 de NIP-49, y guarda la cadena &lt;code>ncryptsec&lt;/code> resultante. Después, los usuarios pueden volver a iniciar sesión con su contraseña sin instalar una extensión firmante. La gestión de claves permanece del lado del cliente en todo momento.&lt;/p>
&lt;h3 id="amethyst">Amethyst&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, el cliente Android de funciones avanzadas, fusionó cuatro PRs que publican el trabajo de resolución &lt;a href="https://nostrcompass.org/es/topics/nip-05/">NIP-05&lt;/a> con respaldo de Namecoin que estaba &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/">abierto la semana pasada&lt;/a>. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1734">PR #1734&lt;/a> añade verificación NIP-05 resistente a la censura vía ElectrumX para identificadores &lt;code>.bit&lt;/code>, &lt;code>d/&lt;/code> e &lt;code>id/&lt;/code>. Cuando Amethyst detecta uno de esos sufijos en un campo NIP-05, consulta un servidor ElectrumX-NMC por el historial de transacciones del nombre, parsea el script &lt;code>NAME_UPDATE&lt;/code> de la última salida para extraer la pubkey Nostr y rechaza nombres con más de 36.000 bloques de antigüedad, la ventana de expiración de Namecoin. Las conexiones ElectrumX se enrutan por SOCKS5 cuando Tor está habilitado, con selección dinámica de servidor entre endpoints clearnet y &lt;code>.onion&lt;/code>. Un caché LRU con TTL de una hora evita consultas repetidas a la blockchain.&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1771">PR #1771&lt;/a> corrige condiciones de carrera y la lógica del resolver en ese flujo. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1785">PR #1785&lt;/a> permite a nuevos usuarios importar una lista de follows durante el registro desde identificadores NIP-05 ordinarios o respaldados por Namecoin. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1786">PR #1786&lt;/a> añade ajustes personalizados de servidor ElectrumX para que los usuarios elijan qué servidor realiza sus búsquedas.&lt;/p>
&lt;h3 id="nostr-idb">nostr-idb&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/nostr-idb">nostr-idb&lt;/a>, una biblioteca que ofrece métodos auxiliares para almacenar eventos Nostr en IndexedDB, fusionó &lt;a href="https://github.com/hzrd149/nostr-idb/pull/6">PR #6&lt;/a> añadiendo soporte para filtros de etiquetas AND de &lt;a href="https://nostrcompass.org/es/topics/nip-91/">NIP-91&lt;/a>. El cambio añade semántica de intersección al matching de filtros del lado del cliente para que las consultas IndexedDB puedan requerir todos los valores de etiqueta listados en vez de cualquiera de ellos. &lt;a href="https://github.com/hzrd149/nostr-idb/pull/8">PR #8&lt;/a> actualiza la biblioteca a la interfaz más reciente de NIP-DB, y un &lt;a href="https://github.com/hzrd149/nostr-idb/commit/b49b3d32c575ff8214dc3fb07675109c2a971972">commit b49b3d3&lt;/a> posterior corrige un deadlock en subscribe y elimina nostr-tools como dependencia de producción.&lt;/p>
&lt;h3 id="pensieve">Pensieve&lt;/h3>
&lt;p>&lt;a href="https://github.com/andotherstuff/pensieve">Pensieve&lt;/a>, un indexador Nostr orientado a archivo con analítica en ClickHouse, fusionó &lt;a href="https://github.com/andotherstuff/pensieve/pull/8">PR #8&lt;/a> añadiendo cumplimiento de TTL de caché por entrada y coalescencia de misses por clave para reducir picos de CPU en la API. Los endpoints de series temporales de mayor costo, estadísticas de engagement, actividad por hora y actividad por kind, ahora usan TTLs del lado del servidor de 10 minutos en vez de disparar tormentas sincronizadas de recomputación.&lt;/p>
&lt;h3 id="blossom">Blossom&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/blossom">Blossom&lt;/a>, el protocolo y stack de servidores de alojamiento de medios descentralizado, fusionó dos actualizaciones de autorización BUD-11. &lt;a href="https://github.com/hzrd149/blossom/pull/91">PR #91&lt;/a> mueve la autorización opcional a su propio BUD y aclara el papel de las etiquetas &lt;code>x&lt;/code> y &lt;code>server&lt;/code>. &lt;a href="https://github.com/hzrd149/blossom/pull/93">PR #93&lt;/a> limpia el comportamiento de auth específico por endpoint y formaliza la cabecera &lt;code>X-SHA-256&lt;/code> para verificación de subidas. Ambos PRs consolidan la lógica de auth en BUD-11 y eliminan ambigüedades alrededor del hashing de solicitudes en flujos de upload, delete y gestión de medios.&lt;/p>
&lt;h2 id="actualizaciones-de-nips">Actualizaciones de NIPs&lt;/h2>
&lt;p>Cambios recientes en el &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Fusionados:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-91/">NIP-91&lt;/a> (Operador AND para filtros)&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/1365">PR #1365&lt;/a>): Añade semántica de intersección para filtros de etiquetas, permitiendo que los relays respondan consultas que requieren todos los valores listados de etiqueta en lugar de cualquiera de ellos. Reduce el post-filtrado del lado del cliente y el ancho de banda en consultas intensivas en etiquetas.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a> (Descubrimiento de relays y monitoreo de disponibilidad): Medidas defensivas&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2240">PR #2240&lt;/a>): Tras el &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/">trabajo de benchmarks del modelo outbox cubierto la semana pasada&lt;/a>, la especificación ahora añade advertencias sobre rutas problemáticas para datos de monitoreo de relays. Los clientes no deben requerir eventos de monitoreo kind &lt;code>30166&lt;/code> para funcionar. Un monitor puede estar equivocado, desactualizado o ser malicioso. Se espera que los clientes contrasten fuentes y eviten cortar grandes partes del grafo de relays de un usuario basándose en un solo feed.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-39/">NIP-39&lt;/a> (Identidades externas en perfiles): limpieza del registro kind 10011&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2256">PR #2256&lt;/a>): Añade la referencia al kind &lt;code>10011&lt;/code> directamente en la especificación, alineándose con la implementación de Amethyst &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/">cubierta la semana pasada&lt;/a>.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs abiertos y discusiones:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-70/">NIP-70&lt;/a> (Eventos protegidos): rechazar reposts que incrustan eventos protegidos&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2251">PR #2251&lt;/a>): Si un relay aplica NIP-70 sobre el evento original pero acepta reposts que transportan el mismo contenido, la etiqueta &lt;code>-&lt;/code> pierde efecto práctico. Este PR añade la regla de que los relays también deben rechazar reposts kind 6 y kind 16 de eventos protegidos. &lt;a href="https://github.com/hoytech/strfry/pull/176">strfry PR #176&lt;/a> ya lo implementa.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-71/">NIP-71&lt;/a> (Eventos de video): múltiples pistas de audio&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2255">PR #2255&lt;/a>): Añade etiquetas &lt;code>imeta&lt;/code> de audio para pistas alternativas, variantes de idioma y streams de solo audio. Un cliente podría mantener un archivo de video estable mientras cambia el idioma del audio, o servir el audio como pista separada para contenido tipo podcast.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> (Documento de información de relay) y atributos de relay &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a>&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2257">PR #2257&lt;/a>): Añade un campo estructurado &lt;code>attributes&lt;/code> a los documentos de información de relay, dando a clientes y herramientas de descubrimiento metadatos legibles por máquina más allá de la descripción actual en texto libre.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-49-cifrado-de-clave-privada">NIP Deep Dive: NIP-49 (Cifrado de clave privada)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-49/">NIP-49&lt;/a> define cómo un cliente cifra una clave privada con una contraseña y codifica el resultado como una cadena bech32 &lt;code>ncryptsec&lt;/code>. &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-11-newsletter/#formstr">Formstr&lt;/a> usa NIP-49 en su nuevo flujo de registro.&lt;/p>
&lt;p>El formato no está ligado a un kind de evento dedicado. Un cliente comienza con la clave privada secp256k1 cruda de 32 bytes, deriva una clave simétrica a partir de la contraseña del usuario con scrypt, cifra la clave usando XChaCha20-Poly1305 y luego encapsula el resultado en una cadena bech32 &lt;code>ncryptsec&lt;/code>. Un flag de un byte registra si alguna vez se supo que la clave fue manejada de forma insegura antes del cifrado.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;4d47f4f0a6f6edbc1bbd7f4e2a45ec68f27cba91d6c6ab5cf28d8d87b0f3d57e&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;1f8b4c3e7b0f9451d4f9b8a7c6e5d4c3b2a1908f7e6d5c4b3a29181716151413&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1741699200&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30078&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;encrypted-key-backup&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;format&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;ncryptsec&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;encryption&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip49&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;ncryptsec1qgg9947rlpvqu76pj5ecreduf9jxhselq2nae2kghhvd5g7dgjtcxfqtd67p9m0w57lspw8gsq6yphnm8623nsl8xn9j4jdzz84zm3frztj3z7s35vpzmqf6ksu8r89qk5z2zxfmu5gv8th8wclt0h4p&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;6a8f6e4b2d1901735f0ad4b6e8c1f3a579d0e2b4c6f8a1d3e5f7091b2c3d4e5f11223344556677889900aabbccddeeff00112233445566778899aabbccddeeff&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El evento JSON anterior es un ejemplo a nivel de aplicación, no un requisito de NIP-49. El NIP estandariza el formato de la clave cifrada. Un cliente puede almacenar el &lt;code>ncryptsec&lt;/code> localmente, sincronizarlo mediante almacenamiento específico de la app o exportarlo como cadena de backup. Las contraseñas se normalizan a Unicode NFKC antes de la derivación de clave para que la misma contraseña descifre de forma consistente entre clientes y plataformas.&lt;/p>
&lt;p>El flag de seguridad de la clave de un byte tiene tres valores definidos: &lt;code>0x00&lt;/code> significa que el historial de manejo de la clave es desconocido, &lt;code>0x01&lt;/code> significa que se sabe que la clave fue manejada de forma insegura, por ejemplo pegada como texto plano en un formulario web antes del cifrado, y &lt;code>0x02&lt;/code> significa que la clave se generó y cifró en un contexto seguro y nunca fue expuesta. Los clientes pueden usar esto para mostrar advertencias al importar claves con un historial conocido de inseguridad.&lt;/p>
&lt;p>NIP-49 protege mejor las claves que la exportación simple de &lt;code>nsec&lt;/code>, pero el cifrado solo es tan fuerte como la contraseña y el costo scrypt configurado. Valores más altos de &lt;code>LOG_N&lt;/code> dificultan el guessing offline, pero ralentizan las operaciones legítimas de descifrado. La especificación advierte contra publicar claves cifradas en relays públicos, ya que los atacantes se benefician al recolectar ciphertext para ataques offline. Como comparación, la firma remota &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> evita exponer las claves por completo, y la firma Android &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> mantiene las claves dentro de una app firmante dedicada. NIP-49 ocupa un lugar distinto: backup cifrado portable para usuarios que gestionan sus propias claves.&lt;/p>
&lt;p>Las implementaciones incluyen &lt;a href="https://github.com/formstr-hq/nostr-forms/pull/434">Formstr PR #434&lt;/a> para el registro, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> para backup y restauración de ncryptsec, &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-11-newsletter/#divine-publica-v106-con-infraestructura-de-pruebas-e2e-e-importaci%c3%b3n-nip-49">diVine v1.0.6&lt;/a> para importación de cuentas, &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-11-newsletter/#keep-v060">Keep v0.6.0&lt;/a> para exportación de shares FROST y herramientas de gestión de claves como &lt;a href="https://nsec.app">nsec.app&lt;/a> y &lt;a href="https://github.com/getAlby/hub">Alby&lt;/a>.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-70-eventos-protegidos">NIP Deep Dive: NIP-70 (Eventos protegidos)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-70/">NIP-70&lt;/a> define eventos protegidos. Cuando un evento lleva la etiqueta &lt;code>[&amp;quot;-&amp;quot;]&lt;/code>, un relay debe rechazarlo a menos que el relay requiera autenticación &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> y la pubkey autenticada coincida con el autor del evento.&lt;/p>
&lt;p>El flujo de auth de NIP-42 funciona así: el relay envía un desafío &lt;code>AUTH&lt;/code> que contiene una cadena aleatoria, y el cliente responde con un evento kind &lt;code>22242&lt;/code> firmado cuyas etiquetas incluyen la URL del relay y el desafío. El relay verifica la firma y comprueba que la pubkey en el evento de auth coincide con la pubkey del evento protegido que se está publicando. Si las pubkeys no coinciden, el relay rechaza el evento con un prefijo de mensaje &lt;code>restricted&lt;/code>.&lt;/p>
&lt;p>El contenido del evento todavía puede ser público. La etiqueta &lt;code>-&lt;/code> solo controla quién puede publicar el evento en un relay que respeta la etiqueta. Esto cubre feeds semi-cerrados de &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> (Grupos simples), espacios de relay solo para miembros y otros contextos donde el autor quiere limitar la redistribución a través del grafo de relays. NIP-70 es una convención de una sola etiqueta, no un nuevo kind de evento, de modo que cualquier kind existente puede llevar la etiqueta &lt;code>-&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;cb8feca582979d91fe90455867b34dbf4d65e4b86e86b3c68c368ca9f9eef6f2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1707409439&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;-&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;hello members of the secret group&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;fa163f5cfb75d77d9b6269011872ee22b34fb48d23251e9879bb1e4ccbdd8aaaf4b6dc5f5084a65ef42c52fbcde8f3178bac3ba207de827ec513a6aa39fa684c&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Aunque un relay bloquee la publicación de terceros del evento original, alguien todavía puede republicar el contenido dentro de un repost. &lt;a href="https://github.com/nostr-protocol/nips/pull/2251">PR #2251&lt;/a> aborda esto exigiendo que los relays también rechacen reposts kind 6 y kind 16 de eventos protegidos. &lt;a href="https://github.com/hoytech/strfry/pull/156">strfry PR #156&lt;/a> añade manejo de auth NIP-42 para eventos protegidos, y &lt;a href="https://github.com/hoytech/strfry/pull/176">strfry PR #176&lt;/a> bloquea reposts que incrustan contenido protegido.&lt;/p>
&lt;p>NIP-70 controla el comportamiento del relay. Un receptor todavía puede copiar el contenido a otro lugar, y la especificación lo dice explícitamente. La etiqueta &lt;code>-&lt;/code> da a los relays una señal legible por máquina para negarse a republicarlo. Como comparación, &lt;a href="https://nostrcompass.org/es/topics/nip-62/">NIP-62&lt;/a> (Request to Vanish) pide a los relays borrar datos después del hecho, mientras NIP-70 evita la publicación no autorizada en el momento de la ingesta. Ambos son complementarios: un autor puede marcar eventos como protegidos para limitar la difusión y luego solicitar su eliminación si quiere que el contenido se retire de relays que sí lo aceptaron.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. ¿Estás construyendo algo o tienes noticias que compartir? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Escríbenos por DM &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>&lt;/a> o encuéntranos en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #12</title><link>https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> El &lt;a href="https://github.com/marmot-protocol/mdk">Marmot Development Kit&lt;/a> lanza su &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/#marmot-development-kit-lanza-su-primera-versi%c3%b3n-p%c3%bablica">primera versión pública&lt;/a> con medios cifrados y bindings multi-lenguaje. &lt;a href="https://github.com/nostrability/outbox">Nostrability&lt;/a> publica &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/#el-modelo-outbox-bajo-la-lupa">benchmarks del modelo outbox&lt;/a> a través de 14 algoritmos de selección de relays. &lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> pasa de &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/#wisp-pasa-de-alfa-a-beta">primera alfa a beta&lt;/a> en ocho días con Tor y firma &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> (Aplicación Firmante de Android). &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/#actualizaciones-de-nips">NIP-91&lt;/a> (filtros AND) se fusiona. &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/#vector-v031">Vector v0.3.1&lt;/a> entrega sincronización negentropy con mejoras de rendimiento de 15x. Este número también incluye la retrospectiva Cinco Años de Febreros de Nostr, trazando el protocolo desde una reescritura de especificación sirviendo tres relays pasando por la explosión de Damus en la App Store hasta redes de malla y propuestas de agentes de IA.&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> El &lt;a href="https://github.com/marmot-protocol/mdk">Marmot Development Kit&lt;/a> lanza su &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/#marmot-development-kit-lanza-su-primera-versi%c3%b3n-p%c3%bablica">primera versión pública&lt;/a> con medios cifrados y bindings multi-lenguaje. &lt;a href="https://github.com/nostrability/outbox">Nostrability&lt;/a> publica &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/#el-modelo-outbox-bajo-la-lupa">benchmarks del modelo outbox&lt;/a> a través de 14 algoritmos de selección de relays. &lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> pasa de &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/#wisp-pasa-de-alfa-a-beta">primera alfa a beta&lt;/a> en ocho días con Tor y firma &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> (Aplicación Firmante de Android). &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/#actualizaciones-de-nips">NIP-91&lt;/a> (filtros AND) se fusiona. &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/#vector-v031">Vector v0.3.1&lt;/a> entrega sincronización negentropy con mejoras de rendimiento de 15x. Este número también incluye la retrospectiva Cinco Años de Febreros de Nostr, trazando el protocolo desde una reescritura de especificación sirviendo tres relays pasando por la explosión de Damus en la App Store hasta redes de malla y propuestas de agentes de IA.&lt;/p>
&lt;h2 id="noticias">Noticias&lt;/h2>
&lt;h3 id="el-modelo-outbox-bajo-la-lupa">El Modelo Outbox Bajo la Lupa&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrability/outbox">Nostrability&lt;/a> publicó una serie de benchmarks del modelo outbox probando qué tan bien diferentes algoritmos de selección de relays recuperan eventos de la red descentralizada de relays. El proyecto fusionó 16 PRs y 76 commits en diez días, produciendo lo que puede ser el análisis empírico más exhaustivo de estrategias de implementación de &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> (Relay List Metadata) hasta la fecha.&lt;/p>
&lt;p>Los benchmarks prueban 14 algoritmos de selección de relays contra listas de follows del mundo real a través de 15 clientes y bibliotecas en cinco lenguajes. Un enfoque base de consultar solo relays populares recupera aproximadamente el 26% de los eventos. Set-cover codicioso con Thompson Sampling alcanza 80-90% de recall. Añadir una variante consciente de latencia usando descuento hiperbólico y seguimiento de latencia de relay EWMA elevó la completitud de 62-80% a 72-96% en la marca de 2 segundos a través de seis perfiles de prueba.&lt;/p>
&lt;p>El filtrado de relays muertos con &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a> (Relay Monitoring) resultó ser significativo. Pre-filtrar candidatos de relay contra datos de actividad de &lt;a href="https://nostr.watch">nostr.watch&lt;/a> eliminó 40-64% de relays muertos y duplicó las tasas de éxito de relay de 30% a 75-85%. Los tiempos de carga de feed bajaron 39% (de 40 segundos a 24 segundos a través de 10 perfiles). Una simulación de carrera EOSE encontró que esperar EOSE más un período de gracia de 200ms mejoró la completitud sobre detenerse en el primer relay en terminar.&lt;/p>
&lt;p>Para clientes que no pueden reescribir completamente su enrutamiento de relays, un enfoque de &amp;ldquo;enriquecimiento outbox híbrido&amp;rdquo; añade consultas outbox por autor sobre relays de aplicación hardcodeados existentes. Este híbrido logró 80% de recall de eventos de un año versus el 26% base, ofreciendo una ruta de migración para clientes con arquitecturas de relay heredadas.&lt;/p>
&lt;h3 id="contextvm-abre-nip-de-mcp-y-lanza-gift-wraps-efímeros">ContextVM Abre NIP de MCP y Lanza Gift Wraps Efímeros&lt;/h3>
&lt;p>&lt;a href="https://contextvm.org">ContextVM&lt;/a>, el protocolo que conecta Nostr con el &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a>, abrió dos propuestas en el &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a> esta semana. &lt;a href="https://github.com/nostr-protocol/nips/pull/2246">PR #2246&lt;/a> formaliza CVM como una convención para transportar mensajes MCP JSON-RPC sobre Nostr usando eventos efímeros kind 25910. &lt;a href="https://github.com/nostr-protocol/nips/pull/2245">PR #2245&lt;/a> extiende &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap) con un kind efímero (21059) que sigue la semántica efímera de &lt;a href="https://nostrcompass.org/es/topics/nip-01/">NIP-01&lt;/a> (Flujo Básico del Protocolo), permitiendo a los relays descartar mensajes envueltos después de la entrega.&lt;/p>
&lt;p>La convención de gift wrap efímero se lanzó como &lt;a href="https://docs.contextvm.org/spec/ceps/cep-19/">CEP-19&lt;/a> en la familia de versiones v0.6.x del SDK de ContextVM. La &lt;a href="https://github.com/ContextVM/sdk">implementación del SDK&lt;/a> añade un enum &lt;code>GiftWrapMode&lt;/code> con tres configuraciones: OPTIONAL (aceptar ambos kinds y auto-detectar capacidad del par), EPHEMERAL (solo kind 21059) y PERSISTENT (solo kind 1059). Para llamadas de herramientas de IA, el modo efímero evita almacenar tráfico intermedio de solicitud-respuesta en relays, reduciendo tanto costos de almacenamiento como exposición de privacidad.&lt;/p>
&lt;p>Nuevos servidores MCP públicos aparecieron en la red de operadores independientes, incluyendo un servidor de consultas Wolfram Alpha. El equipo de ContextVM publicó CEP-15 (esquema de herramientas comunes) y CEP-17 (publicación de lista de relays del servidor) junto al ciclo de lanzamiento v0.6.x.&lt;/p>
&lt;h3 id="marmot-development-kit-lanza-su-primera-versión-pública">Marmot Development Kit Lanza Su Primera Versión Pública&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> (Marmot Development Kit), la biblioteca Rust que impulsa la mensajería cifrada con &lt;a href="https://nostrcompass.org/es/topics/mls/">Marmot&lt;/a> a través de &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a> y &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>, lanzó &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.6.0">v0.6.0&lt;/a> como su primera versión pública. Más de 200 PRs se fusionaron en esta versión, con seis nuevos contribuidores.&lt;/p>
&lt;p>El lanzamiento incluye soporte de medios cifrados (MIP-04) con derivación de semilla HKDF (MIP-01 v2), resolución determinista de carreras de commits (MIP-03), almacenamiento local cifrado, validación de autorización de admin para commits y propuestas Marmot, y soporte GREASE para extensibilidad del protocolo. Los bindings se distribuyen para Kotlin, Python, Ruby y Windows junto a compilación cruzada para Android. La biblioteca se actualiza a OpenMLS 0.8.0 con correcciones de avisos de seguridad y un tipo &lt;code>Secret&amp;lt;T&amp;gt;&lt;/code> que elimina valores sensibles de la memoria con zeroing.&lt;/p>
&lt;p>Un cambio de protocolo complementario (&lt;a href="https://github.com/marmot-protocol/marmot/pull/48">MIP-03&lt;/a>) reemplazó el cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads) con ChaCha20-Poly1305 para mensajes kind 445. NIP-44 requería entrada de cadena UTF-8 según su especificación, haciendo imposible pasar bytes de mensaje Marmot crudos a través de bibliotecas Nostr estándar de TypeScript. El reemplazo deriva claves directamente del secreto exportador de Marmot. Este cambio disruptivo requirió actualizaciones coordinadas a través de la &lt;a href="https://github.com/marmot-protocol/marmot/pull/48">especificación core&lt;/a>, &lt;a href="https://github.com/marmot-protocol/mdk/pull/208">MDK&lt;/a> y el &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/54">SDK de TypeScript&lt;/a>.&lt;/p>
&lt;p>&lt;a href="https://github.com/marmot-protocol/marmot-ts">marmot-ts&lt;/a>, la implementación TypeScript mantenida por hzrd149, fusionó cuatro PRs con cambios disruptivos de API por derecho propio. Una &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/52">actualización ómnibus&lt;/a> añadió un gestor de paquetes de claves para el ciclo de vida crear/publicar/rotar, un método de conveniencia &lt;code>sendChatMessage&lt;/code>, vista previa de invitaciones sin unirse (&lt;code>readInviteGroupInfo&lt;/code>), auto-actualización para rotaciones de secreto hacia adelante, y logging de depuración estructurado. Las APIs de descifrado de grupo fueron renombradas de &lt;code>readGroupMessage&lt;/code> a &lt;code>decryptGroupMessage&lt;/code> con variantes de resultado más ricas (processed/skipped/rejected/unreadable). gzuuus contribuyó limpieza de ejemplos con soporte de relays NIP-65 y manejo de paquetes de claves de último recurso según MIP-00.&lt;/p>
&lt;p>El &lt;a href="https://github.com/marmot-protocol/whitenoise-rs">CLI de White Noise&lt;/a> (&lt;code>wn&lt;/code>), el backend Rust que impulsa tanto la app móvil como la nueva TUI, fusionó 16 PRs en diez días. El manejo del ciclo de vida del firmante ganó seguridad de cancelación mediante un scope guard RAII (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/538">PR #538&lt;/a>), corrigiendo una clase de bugs donde operaciones abortadas podían filtrar estado del firmante. El login ahora bloquea cuando las listas de relays requeridas (kind 10002/10050/10051) están ausentes (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/515">PR #515&lt;/a>), y las suscripciones de giftwrap recurren a relays de &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> cuando las listas de inbox están ausentes (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/518">PR #518&lt;/a>). Un modo de depuración (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/528">PR #528&lt;/a>) expone consultas de base de datos e inspección de ratchet-tree MLS como salida JSON. Otras correcciones abordaron recuperación de suscripciones después de re-registro del firmante, temporización de catch-up de mensajes de bienvenida, validación de filtros de relay y límites de radio de búsqueda de usuarios.&lt;/p>
&lt;p>Marmot vio una expansión significativa más allá del stack Rust core esta semana. &lt;a href="https://github.com/marmot-protocol/wn-tui">White Noise TUI&lt;/a>, una interfaz basada en terminal para el stack de mensajería White Noise, se lanzó el 3 de marzo. Envuelve el CLI &lt;code>wn&lt;/code> como subproceso y renderiza su salida JSON a través de una arquitectura unidireccional inspirada en Elm, proporcionando navegación multi-conversación con indicadores de no leídos, creación de grupos y búsqueda de miembros, streaming de mensajes en tiempo real y reacciones emoji desde la terminal.&lt;/p>
&lt;p>&lt;a href="https://github.com/DavidGershony">DavidGershony&lt;/a> publicó un stack Marmot completo en C# que refleja la arquitectura por capas del toolchain Rust. &lt;a href="https://github.com/DavidGershony/dotnet-mls">dotnet-mls&lt;/a> implementa primitivas criptográficas MLS RFC 9420 en C#. &lt;a href="https://github.com/DavidGershony/marmot-cs">marmot-cs&lt;/a> se construye sobre él para añadir transporte de relay Nostr, funcionando como equivalente en C# de MDK. &lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a>, una app de escritorio multiplataforma construida con .NET 9 y Avalonia UI, une ambos en un cliente de chat funcional con DMs NIP-44, cifrado de grupo Marmot, firma remota &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (Nostr Connect) e indicadores de estado multi-relay.&lt;/p>
&lt;p>&lt;a href="https://github.com/zerosats/mdk-pwa-reference">MDK PWA Reference&lt;/a> proporciona una plantilla de Progressive Web App para construir aplicaciones cifradas con Marmot, con soporte experimental para participación de agentes de IA en chats grupales y pagos Bitcoin vía infraestructura de billetera Arkade.&lt;/p>
&lt;h3 id="wisp-pasa-de-alfa-a-beta">Wisp Pasa de Alfa a Beta&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> es un nuevo cliente Nostr para Android que pasó de su &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.1.0-alpha">primera alfa&lt;/a> el 24 de febrero a &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.3.4-beta">v0.3.4-beta&lt;/a> el 3 de marzo, produciendo 19 lanzamientos, 115 PRs fusionados y 276 commits en ocho días.&lt;/p>
&lt;p>La trayectoria de funcionalidades cubre terreno que a la mayoría de los clientes les toma meses alcanzar. v0.1.0 se lanzó con soporte del modelo de relay outbox/inbox y flujos de onboarding. Para v0.1.3, el cliente tenía firma basada en intents &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> para Amber, un proxy SOCKS5 Tor integrado para conectividad de relay &lt;code>.onion&lt;/code> y &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect). v0.2.0 graduó a beta con filtrado de listas de silenciados y soporte de emoji personalizados, mientras v0.2.4 añadió superposiciones de advertencia de contenido. La serie v0.3.x introdujo &lt;a href="https://nostrcompass.org/es/topics/nip-13/">NIP-13&lt;/a> proof-of-work para notas, minado PoW en segundo plano con ajustes persistentes, almacenamiento de relays &lt;code>.onion&lt;/code> y notificaciones de hilos silenciados.&lt;/p>
&lt;p>La traducción en dispositivo vía Google ML Kit se ejecuta localmente sin acceso a la red después de la descarga inicial del modelo. Una visualización interactiva del grafo social usa una simulación de física velocity Verlet a aproximadamente 30fps con navegación pinch-to-zoom e inspección de perfiles.&lt;/p>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;h3 id="vector-v031">Vector v0.3.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a>, la app de mensajería cifrada con Marmot, lanzó &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.3.1">v0.3.1&lt;/a> con mejoras en gestión de grupos y trabajo de rendimiento. Grupos multi-admin, invitaciones masivas, invitación por npub y avatares de grupo amplían las funcionalidades de colaboración. Las notificaciones en segundo plano de Android ahora soportan acciones en línea de Responder y Marcar como Leído.&lt;/p>
&lt;p>La sincronización determinista basada en &lt;a href="https://nostrcompass.org/es/topics/negentropy/">Negentropy&lt;/a> recupera el historial completo de conversación incluyendo mensajes perdidos durante períodos offline. Voz a texto reconstruido con aceleración GPU en Android. El manejo de adjuntos de archivo fue renovado con progreso de descarga, estados de reintento, envío de directorios comprimidos e indicadores de progreso en tiempo real. El rendimiento mejoró más de 15x en tiempo de arranque, procesamiento de imágenes, reproducción de audio y capacidad de respuesta general de la UI. El tamaño de instalación de la app se redujo en más de un tercio, con el frontend reducido aproximadamente a la mitad. Se añadió soporte para Android ARM de 32 bits.&lt;/p>
&lt;h3 id="alby-hub-v1215">Alby Hub v1.21.5&lt;/h3>
&lt;p>&lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a>, el nodo Lightning auto-custodiado con soporte de Nostr Wallet Connect (&lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a>), lanzó &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.21.5">v1.21.5&lt;/a>. Se añadió un segundo relay a la configuración NWC predeterminada, mejorando la fiabilidad durante reinicios de relay. Una corrección para datos de zap inválidos en la lista de transacciones resuelve un problema de visualización con eventos &lt;a href="https://nostrcompass.org/es/topics/nip-57/">NIP-57&lt;/a> (Lightning Zaps) malformados. Las nuevas entradas de la tienda de apps incluyen Alby CLI y LNVPS.&lt;/p>
&lt;h3 id="nospeak-v012x">nospeak v0.12.x&lt;/h3>
&lt;p>&lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a>, el cliente de mensajería Nostr basado en texto, lanzó tres versiones durante el período. &lt;a href="https://github.com/psic4t/nospeak/releases/tag/v0.12.0">v0.12.0&lt;/a> añadió un bloqueo de app con PIN de teclado de 4 dígitos y más de 15 nuevas traducciones de idiomas incluyendo bengalí, tailandés, vietnamita, hindi, árabe, hebreo, urdu, turco, japonés, chino, coreano, holandés, polaco, ruso y persa con soporte RTL. &lt;a href="https://github.com/psic4t/nospeak/releases/tag/v0.12.1">v0.12.1&lt;/a> introdujo un tema Cypher con fondos negro puro y acentos cyan, más generación de póster de vídeo en Android. &lt;a href="https://github.com/psic4t/nospeak/releases/tag/v0.12.2">v0.12.2&lt;/a> añadió exportación de chat y Ver Perfil en menús de contacto.&lt;/p>
&lt;h3 id="citrine-v200-pre2">Citrine v2.0.0-pre2&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a>, el relay personal Android de greenart7c3, lanzó &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v2.0.0-pre2">v2.0.0-pre2&lt;/a> con mejoras de rendimiento del relay mediante nuevos índices de base de datos y coroutines Kotlin reestructuradas. Cada app web alojada ahora inicia en su propio puerto. Búsqueda de texto completo y una pantalla de eventos rediseñada con expansión de eventos completan los cambios.&lt;/p>
&lt;h3 id="noornote-v05x">NoorNote v0.5.x&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a>, una aplicación de toma de notas basada en Nostr, lanzó 8 versiones desde &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.5.0">v0.5.0&lt;/a> hasta &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.5.7">v0.5.7&lt;/a>. El lanzamiento de v0.5.0 en Android añadió soporte para firmante Amber &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> y publicación de notas &lt;a href="https://nostrcompass.org/es/topics/nip-71/">NIP-71&lt;/a> (Video Events). Una página de bienvenida rediseñada en v0.5.1 incluyó vistas previas de línea de tiempo pública y redujo el APK a 15 MB. El Navegador de Relays en v0.5.2 permite a los usuarios explorar líneas de tiempo públicas de relays mediante URLs compartibles, junto a descarga de medios y reacciones de emoji personalizados &lt;a href="https://nostrcompass.org/es/topics/nip-30/">NIP-30&lt;/a>. Las versiones posteriores hasta v0.5.7 abordaron condiciones de carrera de sincronización en el sistema colaborativo de compartición de notas &amp;ldquo;tribes&amp;rdquo;.&lt;/p>
&lt;h3 id="noscall-v051">NosCall v0.5.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/sanah9/noscall">NosCall&lt;/a>, la app de llamadas de voz y vídeo en Nostr, lanzó &lt;a href="https://github.com/sanah9/noscall/releases/tag/v0.5.1-release">v0.5.1&lt;/a> con soporte de mensajes de voz, una experiencia de escritorio optimizada con entrada de grupo, favoritos de contacto en escritorio, notas de contacto y filtrado, opciones de exportación de datos y limpieza, y soporte de accesibilidad de tamaño de fuente del sistema.&lt;/p>
&lt;h3 id="shosho-v0130">Shosho v0.13.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a>, la app de streaming en vivo de Nostr, lanzó &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.13.0">v0.13.0&lt;/a> con descargas de repetición MP4 desde menús de tarjeta de stream y &lt;a href="https://nostrcompass.org/es/topics/nip-05/">NIP-05&lt;/a> (Verificación Basada en DNS) para perfiles. El publicador RTMP migró a la Expo Modules API. El rendimiento de streaming en conexiones de menor ancho de banda mejoró, y se corrigieron crashes en dispositivos antiguos y streaming de iOS a &lt;a href="https://zap.stream">Zap.Stream&lt;/a>.&lt;/p>
&lt;h3 id="nostr-java-v200">nostr-java v2.0.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/tcheeric/nostr-java">nostr-java&lt;/a> lanzó &lt;a href="https://github.com/tcheeric/nostr-java/releases/tag/v2.0.0">v2.0.0&lt;/a> con tamaños de buffer WebSocket configurables, permitiendo a las aplicaciones manejar eventos Nostr más grandes sin truncamiento. El salto de versión mayor refleja cambios disruptivos en la API de conexión.&lt;/p>
&lt;h3 id="prism-110">Prism 1.1.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a> lanzó &lt;a href="https://github.com/hardran3/Prism/releases/tag/1.1.0">1.1.0&lt;/a> con soporte de contenido de formato largo (artículos kind 30023) y un editor Markdown para componer directamente en la app, seguido por un lanzamiento de corrección de bugs &lt;a href="https://github.com/hardran3/Prism/releases/tag/1.1.1">1.1.1&lt;/a>.&lt;/p>
&lt;h3 id="angor-v026">Angor v0.2.6&lt;/h3>
&lt;p>&lt;a href="https://github.com/block-core/angor">Angor&lt;/a>, la plataforma de crowdfunding de Bitcoin, lanzó &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.6">v0.2.6&lt;/a> con integración Boltz y un flujo de inversión de 1 clic. Tanto los tipos de inversión como de financiación de proyecto funcionan de extremo a extremo en testnet. El equipo señala que la UI está aproximadamente 70% completa.&lt;/p>
&lt;h2 id="actualizaciones-de-nips">Actualizaciones de NIPs&lt;/h2>
&lt;p>Cambios recientes al &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Fusionados:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1365">NIP-91: Operador AND para Filtros&lt;/a>&lt;/strong>: Añade semántica de filtro AND para arrays de etiquetas en suscripciones de relay. Actualmente, especificar múltiples valores en un filtro de etiqueta (ej. múltiples etiquetas &lt;code>p&lt;/code>) coincide con eventos que contienen cualquiera de ellos. NIP-91 permite a los clientes requerir eventos que coincidan con todos los valores de etiqueta especificados simultáneamente, reduciendo ancho de banda y habilitando operaciones de índice más rápidas. Ya existen múltiples implementaciones de relay incluyendo nostr-rs-relay, satellite-node, worker-relay y applesauce. Anteriormente numerado NIP-119.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2247">NIP-30: Dirección de Conjunto de Emoji en Etiquetas&lt;/a>&lt;/strong>: Las etiquetas de emoji personalizados en &lt;a href="https://nostrcompass.org/es/topics/nip-30/">NIP-30&lt;/a> ahora pueden incluir una dirección opcional de conjunto de emoji. Hacer clic en un emoji en un cliente puede abrir el conjunto al que pertenece para marcar o navegar. Originado del cliente &lt;a href="https://github.com/purrgrammer/chachi">Chachi&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2111">NIP-29: Añadir unallowpubkey y unbanpubkey&lt;/a>&lt;/strong>: Dos nuevos comandos de admin para chat grupal &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a>. &lt;code>unallowpubkey&lt;/code> elimina una pubkey de la lista permitida sin banearla. &lt;code>unbanpubkey&lt;/code> levanta un ban sin re-añadir la pubkey a la lista de miembros. Anteriormente, la única forma de eliminar a alguien de la lista permitida también los baneaba, y desbanear requería re-añadir al usuario como miembro.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abiertos y Discusiones:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2244">NIP-A7: Spells&lt;/a>&lt;/strong> (abierto 27 feb): Propuesto por purrgrammer, los spells son consultas Nostr guardadas portátiles publicadas como eventos kind 777. Un spell codifica un filtro REQ o COUNT en etiquetas estructuradas (&lt;code>k&lt;/code> para kinds, &lt;code>authors&lt;/code> para pubkeys, &lt;code>tag&lt;/code> para filtros de etiqueta arbitrarios) con variables de ejecución: &lt;code>$me&lt;/code> se resuelve a la pubkey del usuario conectado, &lt;code>$contacts&lt;/code> se expande a la lista de follows kind 3 del usuario. Marcas de tiempo relativas (&lt;code>7d&lt;/code>, &lt;code>2w&lt;/code>, &lt;code>1mo&lt;/code>) permiten a los spells definir ventanas de tiempo móviles sin fechas hardcodeadas. Ya implementado en &lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a> y &lt;a href="https://github.com/purrgrammer/grimoire">Grimoire&lt;/a>, los spells permiten a los usuarios crear, compartir y suscribirse a feeds curados que viajan entre clientes.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2245">NIP-59: Gift Wrap Efímero (kind 21059)&lt;/a>&lt;/strong> (abierto 27 feb): Añade una variante efímera de gift wraps de &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a>. Kind 21059 sigue la semántica efímera de NIP-01, por lo que los relays descartan eventos después de la entrega. Propuesto por ContextVM para transporte MCP donde la persistencia de mensajes es innecesaria.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2246">ContextVM: MCP JSON-RPC sobre Nostr&lt;/a>&lt;/strong> (abierto 27 feb): Especifica cómo transportar mensajes del Model Context Protocol sobre Nostr usando eventos efímeros kind 25910 con etiquetas &lt;code>p&lt;/code> y &lt;code>e&lt;/code> para direccionamiento y correlación. Intencionalmente ligero, delega el detalle del protocolo a la &lt;a href="https://docs.contextvm.org">especificación de ContextVM&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2238">NIP-29: Espacios en Vivo de Audio/Vídeo&lt;/a>&lt;/strong> (abierto 25 feb, borrador): Borrador de fiatjaf extendiendo grupos de &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> con audio y vídeo en vivo. La propuesta añade etiquetas opcionales &lt;code>livekit&lt;/code> y &lt;code>no-text&lt;/code> a eventos de metadatos de grupo. Cuando un usuario quiere unirse a un espacio de voz, el cliente solicita un JWT al relay en &lt;code>/.well-known/nip29/livekit/{groupId}&lt;/code>. El relay verifica la membresía del grupo y emite un token con la pubkey hex del usuario como claim &lt;code>sub&lt;/code>, que se pasa a &lt;a href="https://livekit.io/">LiveKit&lt;/a> para transporte de medios. El acceso a salas de voz hereda el modelo de permisos existente del grupo, por lo que las reglas de membresía del lado del relay gobiernan quién puede hablar. Se está probando en Pyramid y Chachi.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2235">Propiedad Colaborativa de Eventos&lt;/a>&lt;/strong> (abierto 24 feb): pablof7z propone un evento puntero (kind 39382) que declara un espacio colaborativo listando pubkeys de co-propietarios en etiquetas &lt;code>p&lt;/code> y un kind de evento objetivo en una etiqueta &lt;code>k&lt;/code>. Cualquier propietario listado puede publicar eventos de ese kind con la misma etiqueta &lt;code>d&lt;/code>, y los clientes resuelven el estado actual consultando a todos los propietarios y tomando el evento más reciente. La atribución de co-autoría solo se muestra cuando una etiqueta &lt;code>a&lt;/code> verificable referencia al puntero y el autor aparece en sus etiquetas &lt;code>p&lt;/code>, previniendo reclamaciones falsificadas. Esto habilita páginas wiki compartidas y recursos co-autorizados sin asignar control a un solo par de claves.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2234">NIP-09: Eliminación en Cascada de Reposts&lt;/a>&lt;/strong> (abierto 24 feb): Cuando un autor original elimina una nota, los relays también deberían eliminar cualquier repost kind 6 o kind 16 que la referencie. Motivado por preocupaciones de privacidad: los reposts pueden preservar información filtrada accidentalmente después de que el autor elimina la fuente. El cambio es solo del lado del relay, sin requerir modificaciones de cliente.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2233">NIP-07: peekPublicKey&lt;/a>&lt;/strong> (abierto 23 feb): Añade un método &lt;code>peekPublicKey()&lt;/code> a extensiones de navegador &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a>. A diferencia de &lt;code>getPublicKey()&lt;/code>, retorna la pubkey actual sin solicitar confirmación del usuario, habilitando auto-login silencioso cuando el usuario tiene auto-login habilitado.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2248">NIP-BB: Book&lt;/a>&lt;/strong> (abierto 28 feb, borrador): Define cuatro kinds de evento direccionables (30300-30303) para publicación estructurada de libros en Nostr. Un evento Cover contiene metadatos raíz incluyendo título, imagen de portada, licencia vía etiquetas &lt;a href="https://nostrcompass.org/es/topics/nip-32/">NIP-32&lt;/a> (Labeling), y código de idioma. Un evento Index mapea cada capítulo a su posición usando indexación fraccional base62, que permite a los autores insertar nuevos capítulos entre los existentes sin renumerar. Los eventos Chapter actúan como encabezados estructurales con imágenes opcionales, mientras los eventos Episode llevan la prosa real con un límite de 30.000 caracteres con etiquetas de imagen posicionadas. Las reseñas usan Zaps en eventos Cover con la descripción del Zap como texto de reseña.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2242">NIP-54: Cambiar de Asciidoc a Djot&lt;/a>&lt;/strong> (abierto 26 feb): Siguiendo la &lt;a href="https://nostrcompass.org/es/newsletters/2025-12-31-newsletter/">corrección de internacionalización de d-tag&lt;/a> en diciembre, este PR propone reemplazar el formato de marcado Asciidoc de la wiki de &lt;a href="https://nostrcompass.org/es/topics/nip-54/">NIP-54&lt;/a> con &lt;a href="https://djot.net/">Djot&lt;/a>, añadiendo una sección de justificación y ejemplos de wikilink para scripts no latinos.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2240">NIP-66: Medidas Defensivas&lt;/a>&lt;/strong> (abierto 26 feb): Basado en aprendizajes de los benchmarks de &lt;a href="https://nostrcompass.org/es/newsletters/2026-03-04-newsletter/#el-modelo-outbox-bajo-la-lupa">nostrability/outbox&lt;/a>, añade llamadas explícitas para casos límite de &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a>. Un &lt;a href="https://github.com/nostr-protocol/nips/pull/2241">PR #2241&lt;/a> complementario define etiquetas de salida para comprobaciones de SSL, geolocalización, red y conectividad.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-C1: Pruebas de Identidad Criptográfica&lt;/strong> (entrada wiki, kind 30817): Propone eventos kind 30509 que vinculan criptográficamente certificados de firma APK con perfiles Nostr. La prueba funciona firmando un mensaje canónico que contiene la pubkey Nostr con la clave privada del certificado (soportando ECDSA, RSA PKCS1v15, Ed25519 y otros algoritmos estándar), luego publicando la firma en un evento kind 30509 firmado con la clave Nostr. Los verificadores pueden confirmar que la persona que controla el certificado de firma de una app Android también controla la pubkey Nostr que afirma publicarla. Las pruebas expiran después de un año por defecto y pueden revocarse explícitamente. Implementado en el toolchain de &lt;a href="https://github.com/zapstore/zapstore">Zapstore&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-31402: Registro de Oferta de Reparto de Ingresos SARA&lt;/strong> (entrada wiki, kind 30817): Define eventos direccionables kind 31402 para publicar ofertas de Simple Autonomous Revenue Agreement (SARA) en relays Nostr. Los emisores anuncian términos de reparto de ingresos liquidados por Lightning incluyendo porcentaje de participación en pool, disparador de pago, umbral en sats, duración del término y precios por niveles. Agentes y humanos pueden descubrir ofertas a través de relays y suscribirse autónomamente sin una plataforma central. El número de kind refleja el kind 30402 (L402 Service Registry, publicado por el mismo autor como entrada wiki complementaria) ya que SARA representa la contraparte de retorno de la relación de pago L402.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="prs-abiertos-y-actualizaciones-de-proyectos">PRs Abiertos y Actualizaciones de Proyectos&lt;/h2>
&lt;h3 id="damus-nip-89estopicsnip-89-recommended-application-handlers">Damus: &lt;a href="https://nostrcompass.org/es/topics/nip-89/">NIP-89&lt;/a> (Recommended Application Handlers)&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/pull/3337">PR #3337&lt;/a> implementa soporte de etiqueta de cliente NIP-89 para &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>. La app ahora emite una etiqueta de cliente en todas las rutas de publicación (app principal, extensión de compartir, highlighter, borradores) y muestra &amp;ldquo;vía ClientName&amp;rdquo; junto a las marcas de tiempo cuando otras apps incluyen sus etiquetas. Un toggle de Privacidad en los ajustes de Apariencia permite a los usuarios desactivar la emisión de etiquetas. &lt;a href="https://github.com/damus-io/damus/pull/3652">PR #3652&lt;/a> añade una sección de Almacenamiento en Ajustes con un gráfico circular interactivo desglosando el uso de disco de caché NostrDB y Kingfisher con soporte de exportación.&lt;/p>
&lt;p>Abierto: &lt;a href="https://github.com/damus-io/damus/pull/3657">PR #3657&lt;/a> añade respaldo de relay &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> para notas citadas. Cuando un &lt;code>nevent&lt;/code> en línea incluye una pubkey de autor pero no tiene pistas de relay y la nota no se encuentra en el pool del usuario, Damus obtiene la lista de relays kind 10002 del autor y reintenta desde sus relays de escritura.&lt;/p>
&lt;h3 id="amethyst-nip-39estopicsnip-39-external-identities-nip-c0-nip-66estopicsnip-66">Amethyst: &lt;a href="https://nostrcompass.org/es/topics/nip-39/">NIP-39&lt;/a> (External Identities), NIP-C0, &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a>&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> fusionó una ola de implementaciones de NIP a través de 28 PRs. Las reclamaciones de identidad externa ahora se publican como eventos dedicados kind 10011 bajo &lt;a href="https://nostrcompass.org/es/topics/nip-39/">NIP-39&lt;/a> (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1747">PR #1747&lt;/a>), separando la identidad social de los metadatos kind 0 con respaldo compatible hacia atrás. El soporte de fragmentos de código vía NIP-C0 (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1744">PR #1744&lt;/a>) añade eventos kind 1337 con accesores para lenguaje, extensión, runtime, licencia y dependencias. La implementación de monitoreo de relays &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a> (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1742">PR #1742&lt;/a>) cubre ambos kinds de evento con parseo completo de etiquetas para métricas RTT, tipo de red, NIPs soportados y geohash.&lt;/p>
&lt;p>DMs cifrados llegaron a Amethyst Desktop (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1710">PR #1710&lt;/a>) con un diseño de chat de panel dividido soportando tanto &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a> (Encrypted Direct Messages) como &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages). Una nueva pantalla de feed de relay (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1733">PR #1733&lt;/a>) permite a los usuarios explorar publicaciones de un relay específico con funcionalidad de seguir/dejar de seguir. Abierto: verificación NIP-05 resistente a la censura (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1734">PR #1734&lt;/a>) añade una ruta de verificación paralela para identificadores &lt;code>.bit&lt;/code> que resuelve contra la blockchain Namecoin en lugar de DNS HTTP. Cuando Amethyst detecta un sufijo &lt;code>.bit&lt;/code> en un campo NIP-05, consulta un servidor ElectrumX-NMC para el historial de transacciones del nombre, parsea el script &lt;code>NAME_UPDATE&lt;/code> de la última salida para extraer la pubkey Nostr, y rechaza nombres más antiguos de 36.000 bloques (la ventana de expiración de Namecoin). Las conexiones ElectrumX se enrutan a través de SOCKS5 cuando Tor está habilitado, con selección dinámica de servidor entre endpoints clearnet y &lt;code>.onion&lt;/code>. Un caché LRU con TTL de una hora previene consultas repetidas a la blockchain.&lt;/p>
&lt;h3 id="notedeck-arquitectura-outbox">Notedeck: Arquitectura Outbox&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck/pull/1303">PR #1303&lt;/a> migra &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> de gestión de pool de relays ad-hoc a un modelo outbox centralizado con suscripciones delimitadas por cuenta. El módulo Messages ahora publica una lista de relays DM predeterminada si no existe ninguna y enruta DMs a los relays preferidos de los destinatarios según kind 10050.&lt;/p>
&lt;h3 id="pika-perfiles-por-grupo-y-feed-tutorial">Pika: Perfiles por Grupo y Feed Tutorial&lt;/h3>
&lt;p>&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>, la app de mensajería cifrada con Marmot disponible en iOS y Android con build de escritorio, ganó perfiles por grupo (&lt;a href="https://github.com/sledtools/pika/pull/368">PR #368&lt;/a>). Los usuarios ahora pueden establecer un nombre de visualización y foto separados para cada chat grupal, junto con una biografía personalizada. Estos perfiles se publican como eventos kind 0 cifrados dentro del grupo Marmot, invisibles para cualquiera fuera de él, con respaldo al perfil Nostr global del usuario cuando no se establece un perfil específico de grupo. Cuando nuevos miembros se unen, el admin retransmite todos los perfiles de grupo almacenados y cada miembro republica el suyo propio al hacer commit. Las fotos de perfil se cifran con Marmot-media antes de subir a Blossom. El PR incluye 16 nuevas pruebas unitarias y expone la funcionalidad tanto a través de un comando CLI (&lt;code>update-group-profile&lt;/code>) como de la UI.&lt;/p>
&lt;p>Una nueva app web &lt;code>pika-news&lt;/code> (&lt;a href="https://github.com/sledtools/pika/pull/401">PR #401&lt;/a>) monitorea los PRs de GitHub del propio Pika y auto-genera recorridos tutoriales paso a paso a partir de diffs de PR, publicándolos como páginas renderizadas en servidor con autenticación &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a>. Los usuarios pueden discutir tutoriales específicos en tiempo real a través de chat autenticado por Nostr.&lt;/p>
&lt;h3 id="divine-widgets-incrustables-y-respuestas-en-vídeo">diVine: Widgets Incrustables y Respuestas en Vídeo&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>, la plataforma de compartición de vídeo nativa de Nostr, fusionó 132 PRs en diez días. Widgets de iframe incrustables (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1843">PR #1843&lt;/a>) proporcionan una página &lt;code>/embed?npub=...&lt;/code> autónoma que renderiza el perfil de un usuario y sus últimos vídeos. La funcionalidad de respuesta en vídeo (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1915">PR #1915&lt;/a>), detrás de un feature flag, usa comentarios Kind 1111 (&lt;a href="https://nostrcompass.org/es/topics/nip-22/">NIP-22&lt;/a>) con metadatos imeta de &lt;a href="https://nostrcompass.org/es/topics/nip-92/">NIP-92&lt;/a> (Media Attachments). Filtros de contenido de tres vías inspirados en Bluesky (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1797">PR #1797&lt;/a>) ofrecen controles Mostrar/Advertir/Ocultar a través de 17 categorías de advertencia de contenido &lt;a href="https://nostrcompass.org/es/topics/nip-32/">NIP-32&lt;/a>.&lt;/p>
&lt;h3 id="strfry-validación-de-filtros-req">strfry: Validación de Filtros REQ&lt;/h3>
&lt;p>&lt;a href="https://github.com/hoytech/strfry/pull/163">PR #163&lt;/a> añade validación configurable de filtros REQ a &lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a>, el relay Nostr en C++. Los operadores pueden establecer máximo de filtros por REQ, presencia requerida de autor o etiqueta, listas blancas de kinds permitidos y límites de kind por filtro. La funcionalidad está dirigida a despliegues de relay NWC que necesitan aplicación estricta de filtros. Abierto: &lt;a href="https://github.com/hoytech/strfry/pull/173">PR #173&lt;/a> añade compresión zstd opcional para payloads de eventos en el momento de ingesta.&lt;/p>
&lt;h3 id="rust-nostr-nip-62estopicsnip-62-request-to-vanish">rust-nostr: &lt;a href="https://nostrcompass.org/es/topics/nip-62/">NIP-62&lt;/a> Request to Vanish&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a>, la biblioteca de protocolo Nostr en Rust, añadió soporte de &lt;a href="https://nostrcompass.org/es/topics/nip-62/">NIP-62&lt;/a> (Request to Vanish) a través de los tres backends de base de datos: &lt;a href="https://github.com/rust-nostr/nostr/pull/1268">LMDB&lt;/a>, &lt;a href="https://github.com/rust-nostr/nostr/pull/1270">SQLite&lt;/a> e &lt;a href="https://github.com/rust-nostr/nostr/pull/1272">in-memory&lt;/a>. La implementación LMDB incluye opciones configurables para habilitar o deshabilitar la aplicación de &lt;a href="https://nostrcompass.org/es/topics/nip-09/">NIP-09&lt;/a> y NIP-62 por despliegue.&lt;/p>
&lt;h3 id="ndk-eventos-colaborativos-y-timeout-de-nip-46">NDK: Eventos Colaborativos y Timeout de NIP-46&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a>, el Nostr Development Kit para JavaScript/TypeScript, fusionó &lt;a href="https://github.com/nostr-dev-kit/ndk/pull/380">PR #380&lt;/a> introduciendo &lt;code>NDKCollaborativeEvent&lt;/code> para documentos colaborativos multi-autor usando un evento puntero direccionable (kind 39382) que define autores autorizados. Un timeout configurable para &lt;code>NDKNip46Signer&lt;/code> (&lt;a href="https://github.com/nostr-dev-kit/ndk/pull/381">PR #381&lt;/a>) previene que operaciones de firma remota &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> se queden colgadas indefinidamente cuando un bunker no responde.&lt;/p>
&lt;h3 id="tenex-categorización-de-agentes-y-control-por-pubkey">TENEX: Categorización de Agentes y Control por Pubkey&lt;/h3>
&lt;p>&lt;a href="https://github.com/tenex-chat/tenex">TENEX&lt;/a>, la plataforma de orquestación de agentes de IA nativa de Nostr, fusionó dos PRs relacionados con seguridad. La categorización de agentes basada en roles TIP-01 (&lt;a href="https://github.com/tenex-chat/tenex/pull/91">PR #91&lt;/a>) mapea categorías de agente (principal, orchestrator, worker, advisor, auditor) a restricciones de herramientas automatizadas vía un mapa de herramientas denegadas. El control de acceso por pubkey (&lt;a href="https://github.com/tenex-chat/tenex/pull/87">PR #87&lt;/a>) asegura que solo eventos de pubkeys en lista blanca o firmados por el backend se enruten junto a agentes conocidos; las pubkeys desconocidas se descartan silenciosamente con spans de OpenTelemetry para auditoría.&lt;/p>
&lt;h3 id="zap-cooking-panel-de-membresía">Zap Cooking: Panel de Membresía&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a>, la plataforma de compartición de recetas basada en Nostr, fusionó 25 PRs y 85 commits en diez días. Un panel de membresía (&lt;a href="https://github.com/zapcooking/frontend/pull/228">PR #228&lt;/a>) muestra estado de suscripción con fechas de expiración y opciones de gestión/mejora, re-habilita puertas de funcionalidades para niveles Sous Chef y Zappy con comprobaciones tanto del lado del cliente como del servidor, y estandariza nombres de niveles a través de 26 archivos. La carga de mensajes de grupo en dos fases (&lt;a href="https://github.com/zapcooking/frontend/pull/227">PR #227&lt;/a>) proporciona una obtención inicial rápida de 3 días para visualización instantánea seguida de un relleno en segundo plano de 40 días.&lt;/p>
&lt;p>El almacenamiento de mnemónico de billetera se movió de cifrado derivado de pubkey a cifrado para sí mismo con &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> (&lt;a href="https://github.com/zapcooking/frontend/pull/224">PR #224&lt;/a>), corrigiendo una vulnerabilidad donde el esquema anterior derivaba su clave de &lt;code>SHA-256(pubkey)&lt;/code>, que es efectivamente sin cifrar ya que las pubkeys son públicas. Las billeteras existentes se migran silenciosamente en la primera carga. El chat grupal &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> ganó indicadores de no leídos con insignias de punto rojo y acceso solo por invitación con códigos de invitación kind 9009 (&lt;a href="https://github.com/zapcooking/frontend/pull/213">PR #213&lt;/a>). Las vistas previas de enlaces y embebidos de eventos Nostr ahora se renderizan en DMs y mensajes grupales (&lt;a href="https://github.com/zapcooking/frontend/pull/218">PR #218&lt;/a>). Una sección de respaldo Nostr en Ajustes (&lt;a href="https://github.com/zapcooking/frontend/pull/210">PR #210&lt;/a>) almacena follows y listas de silenciados vía almacenamiento cifrado de &lt;a href="https://nostrcompass.org/es/topics/nip-78/">NIP-78&lt;/a> (Application-specific Data) con versionado rotativo de 3 slots. El rendimiento de arranque mejoró mediante servicios de notificación diferidos, renderizado DOM perezoso vía IntersectionObserver (reduciendo nodos DOM de ~15.000 a ~3.000 en un feed de 200 eventos), y TTLs extendidos de caché outbox (&lt;a href="https://github.com/zapcooking/frontend/pull/208">PR #208&lt;/a>). Un modal personalizable de impresión de recetas (&lt;a href="https://github.com/zapcooking/frontend/pull/205">PR #205&lt;/a>) permite a los usuarios alternar qué secciones incluir con vista previa en vivo. La integración del &lt;a href="https://github.com/BrantaOps/branta-core">Branta SDK&lt;/a> (&lt;a href="https://github.com/zapcooking/frontend/pull/222">PR #222&lt;/a>) añade protecciones de verificación para solicitudes POST y GET.&lt;/p>
&lt;h3 id="keep-migración-de-estado-por-rust">Keep: Migración de Estado por Rust&lt;/h3>
&lt;p>&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a>, el gestor de claves privadas basado en Nostr para Android, fusionó &lt;a href="https://github.com/privkeyio/keep-android/pull/178">PR #178&lt;/a>, eliminando cuatro almacenes de configuración Kotlin en favor de estado compartido impulsado por Rust desde la capa keep-mobile. Un bucle de sondeo de 10 segundos fue reemplazado con &lt;code>KeepStateCallback&lt;/code> basado en push desde Rust. &lt;a href="https://github.com/privkeyio/keep-android/pull/179">PR #179&lt;/a> añade respaldo y restauración cifrados con protección por frase de contraseña.&lt;/p>
&lt;h3 id="mostro-mobile-cifrado-de-chat-de-disputas">Mostro Mobile: Cifrado de Chat de Disputas&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a>, el cliente móvil para la plataforma de trading P2P de Bitcoin Mostro, lanzó una migración de dos fases del cifrado de chat de disputas. El primer paso (&lt;a href="https://github.com/MostroP2P/mobile/pull/495">PR #495&lt;/a>) cambia de envoltorio específico de mostro a cifrado de clave compartida derivado de la pubkey del admin. Construyendo sobre eso, &lt;a href="https://github.com/MostroP2P/mobile/pull/501">PR #501&lt;/a> unifica el modelo de mensajes con &lt;code>NostrEvent&lt;/code> y almacena eventos gift wrap cifrados en disco, consistente con el patrón de chat peer-to-peer. Una corrección de firma BIP-340 (&lt;a href="https://github.com/MostroP2P/mobile/pull/496">PR #496&lt;/a>) sobrescribe la dependencia bip340 a 0.2.0, resolviendo un bug de relleno en &lt;code>bigToBytes()&lt;/code> que causaba que 1-2% de las firmas Schnorr fueran inválidas y 100% de fallo para claves cuya clave pública comienza con &lt;code>0x00&lt;/code>. Los Detalles de Orden ahora muestran etiquetas de estado legibles en lugar de valores de protocolo crudos, localizados en inglés, español, italiano y francés (&lt;a href="https://github.com/MostroP2P/mobile/pull/502">PR #502&lt;/a>). HalCash fue añadido y SEPA eliminado como método de pago (&lt;a href="https://github.com/MostroP2P/mobile/pull/493">PR #493&lt;/a>), ya que las transferencias SEPA pueden exceder 24 horas (SEPA Instant permanece).&lt;/p>
&lt;p>Del lado del servidor, &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> corrigió la restauración de sesión de disputas para incluir el campo de iniciador (&lt;a href="https://github.com/MostroP2P/mostro/pull/599">PR #599&lt;/a>) y ahora cierra automáticamente disputas activas cuando un vendedor libera fondos, publicando un evento Nostr de resolución para que los clientes admin vean la resolución (&lt;a href="https://github.com/MostroP2P/mostro/pull/606">PR #606&lt;/a>).&lt;/p>
&lt;h2 id="cinco-años-de-febreros-de-nostr">Cinco Años de Febreros de Nostr&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/newsletters/2026-01-28-newsletter/#five-years-of-nostr-januaries">El boletín del mes pasado&lt;/a> trazó los hitos de enero de Nostr desde el desarrollo temprano pasando por la explosión de Damus hasta la infraestructura de seguridad en 2026. Esta retrospectiva cubre lo que sucedió cada febrero desde 2021 hasta 2026.&lt;/p>
&lt;h3 id="febrero-2021-la-reescritura">Febrero 2021: La Reescritura&lt;/h3>
&lt;p>Tres meses después de su existencia, el febrero de Nostr produjo el cambio temprano más trascendental del protocolo. El 14-15 de febrero, fiatjaf &lt;a href="https://github.com/nostr-protocol/nostr/commit/33a1a70">reescribió NIP-01&lt;/a>, reemplazando el formato de mensaje original con el modelo EVENT/REQ/CLOSE que el protocolo aún utiliza. Antes de esta reescritura, los clientes y relays se comunicaban a través de una estructura más simple. Separar la publicación de eventos (EVENT) de la gestión de suscripciones (REQ/CLOSE) habilitó el filtrado del lado del relay que resultaría esencial para escalar.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a> llegó el mismo mes, añadiendo mensajes directos cifrados usando secretos compartidos derivados del intercambio de claves Diffie-Hellman sobre secp256k1. Su cifrado era básico (AES-256-CBC) y luego sería reemplazado por la criptografía auditada de &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>, pero dio al puñado de usuarios tempranos su primer canal de comunicación privada en el protocolo.&lt;/p>
&lt;p>Las herramientas se expandieron con &lt;a href="https://github.com/fiatjaf/noscl">noscl&lt;/a>, un cliente de línea de comandos en Go para interacción con relays basada en terminal, y futurepaul comenzó &lt;a href="https://github.com/futurepaul/nostr-rs">nostr-rs&lt;/a>, una implementación Rust temprana. La red completa funcionaba con dos o tres relays, coordinada a través de un &lt;a href="https://t.me/nostr_protocol">grupo de Telegram&lt;/a>, con aproximadamente siete contribuidores activos.&lt;/p>
&lt;h3 id="febrero-2022-ganando-impulso">Febrero 2022: Ganando Impulso&lt;/h3>
&lt;p>La &lt;a href="https://news.ycombinator.com/item?id=29749061">publicación en Hacker News&lt;/a> del 31 de diciembre de 2021 continuó atrayendo desarrolladores en febrero. El repositorio &lt;a href="https://github.com/nostr-protocol/nostr">nostr-protocol/nostr&lt;/a> (el &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a> formal no existiría hasta mayo de 2022) recibió seis pull requests en febrero, incluyendo NIP-13 (Proof of Work) de vinliao, NIP-14 (Reputation) de fiatjaf, NIP-15 (Resource Relations) de Cameri, y &lt;a href="https://github.com/nostr-protocol/nostr/pull/75">NIP-17&lt;/a> (Git Updates Over Nostr) de melvincarvalho. El número de NIP fue posteriormente reasignado a Private Direct Messages; la colaboración git en Nostr continuó separadamente a través de lo que se convirtió en &lt;a href="https://gitworkshop.dev">gitworkshop.dev&lt;/a>.&lt;/p>
&lt;p>El &lt;a href="https://github.com/scsibug/nostr-rs-relay">nostr-rs-relay&lt;/a> de Greg Heartsfield fue el caballo de batalla del mes con 34 commits y tres lanzamientos. La versión 0.5.0 del 12 de febrero añadió límites de publicación de usuarios verificados con &lt;a href="https://nostrcompass.org/es/topics/nip-05/">NIP-05&lt;/a>. Las versiones 0.5.1 y 0.5.2 siguieron en las dos semanas siguientes, y el relay manejó la mayor parte del tráfico de la red por sí solo.&lt;/p>
&lt;p>Robert C. Martin (Uncle Bob) estaba construyendo &lt;a href="https://github.com/unclebob/more-speech">more-speech&lt;/a>, un cliente de escritorio en Clojure, registrando 69 commits entre el 18 de enero y finales de febrero. Su participación atrajo atención de la comunidad más amplia de ingeniería de software. La extensión de navegador &lt;a href="https://github.com/fiatjaf/nos2x">nos2x&lt;/a> de fiatjaf lanzó soporte de descifrado &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a> y políticas de preferencia de relay en febrero, implementando la interfaz &lt;code>window.nostr&lt;/code> (&lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a>) que los clientes web aún usan para delegación de claves.&lt;/p>
&lt;p>&lt;a href="https://github.com/fiatjaf/branle">Branle&lt;/a>, aún el cliente web principal, ganó registro de manejador de protocolo &lt;code>web+nostr&lt;/code> el 13 de febrero, un intento temprano de deep linking entre aplicaciones Nostr. &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a> reforzó la validación NIP-05. &lt;a href="https://github.com/nbd-wtf/go-nostr">go-nostr&lt;/a> añadió soporte de DM cifrado NIP-04 y parseo NIP-12 (Generic Tag Queries) a través de 11 commits. La red operaba con aproximadamente 7-15 relays con una base de usuarios activos probablemente en los bajos cientos. Damus y Nostream aún no existían y no aparecerían hasta abril de 2022.&lt;/p>
&lt;h3 id="febrero-2023-atención-internacional">Febrero 2023: Atención Internacional&lt;/h3>
&lt;p>Febrero 2023 trajo a Nostr su mayor ola de atención pública. &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>, el cliente iOS de William Casarin, había sido &lt;a href="https://www.coindesk.com/tech/2023/02/01/decentralized-social-media-project-nostrs-damus-gets-listed-on-apple-app-store">aprobado en la App Store de Apple el 31 de enero&lt;/a> después de repetidos rechazos. Para el 1 de febrero alcanzó el top 10 en Redes Sociales de EE.UU. Dos días después, el 2 de febrero, &lt;a href="https://techcrunch.com/2023/02/02/damus-pulled-from-apples-app-store-in-china-after-two-days/">Apple retiró Damus de la App Store de China&lt;/a> supuestamente a petición de la Administración del Ciberespacio de China.&lt;/p>
&lt;p>Grandes medios incluyendo TechCrunch y CoinDesk cubrieron la retirada, amplificando el conocimiento tanto de la app como del protocolo. Las claves públicas únicas con metadatos en nostr.directory cruzaron las 300.000 para el 3 de febrero. Todos los relays eran operados por entusiastas pagando de su bolsillo, y la infraestructura luchó por manejar la carga. Se rastreaban aproximadamente 289 relays a principios de febrero, un número que continuó subiendo.&lt;/p>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a> registró 29 pull requests fusionados ese mes, el conteo mensual más alto en la historia del protocolo hasta ese punto. &lt;a href="https://github.com/nostr-protocol/nips/pull/224">NIP-57&lt;/a> (Lightning Zaps) y &lt;a href="https://github.com/nostr-protocol/nips/pull/220">NIP-23&lt;/a> (Long-form Content) ambos se fusionaron el 13 de febrero, añadiendo micropagos Bitcoin y expandiendo Nostr más allá de publicaciones cortas en un solo día. &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a> (Relay List Metadata) se había fusionado una semana antes el 7 de febrero, habilitando el modelo outbox que seguiría. &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (Nostr Connect) y &lt;a href="https://nostrcompass.org/es/topics/nip-58/">NIP-58&lt;/a> (Badges) también aterrizaron antes de fin de mes.&lt;/p>
&lt;p>La Human Rights Foundation &lt;a href="https://hrf.org/devfund2023q1">otorgó $50.000 a William Casarin para desarrollo de Nostr y Damus&lt;/a> el 21 de febrero, una de las primeras subvenciones institucionales a un proyecto Nostr. OpenSats aún no había lanzado su fondo Nostr (eso llegaría en &lt;a href="https://opensats.org/blog/nostr-grants-july-2023">julio de 2023&lt;/a>).&lt;/p>
&lt;h3 id="febrero-2024-durabilidad-del-protocolo">Febrero 2024: Durabilidad del Protocolo&lt;/h3>
&lt;p>Febrero 2024 cambió el enfoque del crecimiento a la durabilidad del protocolo. &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages), abierto desde el julio anterior, estaba trabajando hacia un reemplazo del envejecido cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a> usando la criptografía auditada de &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> y el gift wrapping de &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a>. NIP-04 filtraba metadatos a operadores de relay, quienes podían ver pares de remitente-destinatario. NIP-17 oculta la identidad del remitente detrás de pares de claves desechables y se fusionó esa primavera después de una ronda final de revisión en marzo.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> (Simple Groups) &lt;a href="https://github.com/nostr-protocol/nips/pull/566">se fusionó el 28 de febrero&lt;/a> después de meses de discusión, definiendo cómo los relays pueden alojar chats grupales moderados con roles de admin y control de acceso. &lt;a href="https://nostrcompass.org/es/topics/nip-92/">NIP-92&lt;/a> (etiquetas imeta) se fusionó el 1 de febrero, estandarizando cómo los clientes adjuntan dimensiones de imagen y vistas previas blurhash a eventos de medios.&lt;/p>
&lt;p>El 16 de febrero, el repositorio de NIPs añadió &lt;a href="https://github.com/nostr-protocol/nips/commit/62c48eff">BREAKING.md&lt;/a>, un archivo que rastrea cambios incompatibles hacia atrás en la especificación del protocolo. Su creación reconoció que Nostr había alcanzado un nivel de madurez donde los cambios disruptivos necesitaban documentación formal.&lt;/p>
&lt;p>Veintidós pull requests se fusionaron ese mes. &lt;a href="https://github.com/cashubtc/npubcash-server">npub.cash&lt;/a> se lanzó como servicio de dirección Lightning que permite a cualquier npub recibir pagos sin ejecutar un servidor. Un &lt;a href="https://arxiv.org/abs/2402.05709">artículo académico&lt;/a> publicado el 8 de febrero encontró que el 95% de los relays de uso gratuito no podían cubrir costos operacionales a través de donaciones, con el 35% de los relays de pago cobrando tarifas de admisión por debajo de 1.000 sats (aproximadamente $0,45 en ese momento).&lt;/p>
&lt;h3 id="febrero-2025-crecimiento-de-infraestructura">Febrero 2025: Crecimiento de Infraestructura&lt;/h3>
&lt;p>Febrero 2025 produjo 28 pull requests fusionados al repositorio de NIPs. Un NIP de &lt;a href="https://nostrcompass.org/es/topics/nip-62/">Derecho a Desvanecerse&lt;/a> se fusionó el 19 de febrero, definiendo cómo los usuarios pueden solicitar la eliminación de sus datos de relays en respuesta a preguntas regulatorias sobre portabilidad de datos y control del usuario.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-60/">NIP-60&lt;/a> (Cashu Wallet) y NIP-61 (Nutzaps) recibieron actualizaciones de simplificación, agilizando el formato de almacenamiento de tokens ecash. Un despliegue de q-tag (etiqueta de cita) continuó a través de múltiples NIPs, estandarizando cómo los eventos referencian otros eventos para citas e hilos.&lt;/p>
&lt;p>Los lanzamientos de clientes marcaron progreso constante. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> v0.3.0 alpha se lanzó el último día de enero, con adopción continuando en febrero. Primal v2.1 siguió el 7 de febrero, y &lt;a href="https://github.com/0ceanSlim/grain">GRAIN&lt;/a> v0.3.0, una implementación de relay en Go, se lanzó el 21 de febrero.&lt;/p>
&lt;p>NOSTRLDN v5 reunió a la comunidad Nostr de Londres para su quinto meetup. Un puente DVMCP conectó las Máquinas de Venta de Datos de Nostr (&lt;a href="https://nostrcompass.org/es/topics/nip-90/">NIP-90&lt;/a>) con el Model Context Protocol, prefigurando el trabajo de integración de agentes de IA que llegaría el mes siguiente.&lt;/p>
&lt;h3 id="febrero-2026-más-allá-de-las-redes-sociales">Febrero 2026: Más Allá de las Redes Sociales&lt;/h3>
&lt;p>&lt;em>La actividad de febrero 2026 se extrae de los números de Nostr Compass &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-04-newsletter/">#8&lt;/a> al &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-25-newsletter/">#11&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Febrero 2026 produjo la gama más amplia de desarrollo de capa de aplicación en cualquier mes de Nostr. &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> lanzó su &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-11-newsletter/#mostro-ships-first-public-beta">primera beta pública&lt;/a> para trading peer-to-peer descentralizado de Bitcoin, y &lt;a href="https://github.com/zapstore/zapstore">Zapstore&lt;/a> alcanzó &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-11-newsletter/#zapstore-v100">1.0 estable&lt;/a> después de meses en pruebas de release candidate. &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-25-newsletter/#white-noise-v030">White Noise v0.3.0&lt;/a> entregó mensajería en tiempo real cifrada con &lt;a href="https://nostrcompass.org/es/topics/mls/">Marmot&lt;/a> con soporte de firmante Amber y más de 160 mejoras fusionadas.&lt;/p>
&lt;p>Propuestas competidoras de agentes de IA de pablof7z (NIP-AE para flujos de trabajo de agentes, NIP-AD para anuncios de servidores MCP) y joelklabo (AI Agent Messages) llegaron junto a una &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-25-newsletter/#nip-updates">propuesta de Coordinación de Agentes DVM&lt;/a> extendiendo &lt;a href="https://nostrcompass.org/es/topics/nip-90/">NIP-90&lt;/a>. &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-25-newsletter/#contextvm-mcp-over-nostr">ContextVM&lt;/a> lanzó mejoras del SDK conectando el Model Context Protocol al transporte Nostr. &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-25-newsletter/#burrow-mls-messaging-for-ai-agents">Burrow&lt;/a> añadió mensajería cifrada con &lt;a href="https://nostrcompass.org/es/topics/mls/">Marmot&lt;/a> tanto para agentes de IA como para humanos, extendiendo la infraestructura de identidad y relays de Nostr a la comunicación máquina a máquina.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/es/newsletters/2026-02-25-newsletter/#fips-nostr-native-mesh-networking">FIPS&lt;/a> lanzó una implementación funcional en Rust de redes de malla nativas de Nostr, usando pares de claves secp256k1 como identidades de nodo con enrutamiento agnóstico de transporte sobre UDP, Ethernet, Bluetooth o radio LoRa. Su diseño demostró que el modelo de claves de Nostr se extiende más allá de las redes sociales hacia infraestructura de red física.&lt;/p>
&lt;p>&lt;a href="https://opensats.org/blog/fifteenth-wave-of-nostr-grants">OpenSats anunció su decimoquinta ronda de subvenciones Nostr&lt;/a>, financiando proyectos incluyendo ContextVM y Nostube. Los cambios de protocolo incluyeron soporte de &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> hold invoice para Nostr Wallet Connect y &lt;a href="https://nostrcompass.org/es/topics/nip-45/">NIP-45&lt;/a> (Counting Results) HyperLogLog para estimación de conteo del lado del relay. La descubribilidad de proveedores de servicio de &lt;a href="https://nostrcompass.org/es/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions) para puntuación de &lt;a href="https://nostrcompass.org/es/topics/web-of-trust/">Web of Trust&lt;/a> también se fusionó. &lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> comenzó un rediseño completo de API mientras Nostria 3.0 y &lt;a href="https://github.com/FROSTR-ORG">Frostr&lt;/a> (iOS TestFlight) ambos se lanzaron. La capa de caché local de &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> abordó la disponibilidad de medios a través de relays.&lt;/p>
&lt;h3 id="mirando-hacia-adelante">Mirando Hacia Adelante&lt;/h3>
&lt;p>Cinco febreros de historia del protocolo muestran una progresión consistente desde trabajo fundacional hasta diversificación de la capa de aplicación, con la afluencia de usuarios de 2023 como punto de inflexión. En 2021, siete contribuidores trabajaban a través de tres relays. Para 2026, el mismo protocolo soportaba redes de malla y propuestas de agentes autónomos funcionando sobre infraestructura de producción.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. ¿Estás construyendo algo o tienes noticias que compartir? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Escríbenos vía DM &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>&lt;/a> o encuéntranos en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #11</title><link>https://nostrcompass.org/es/newsletters/2026-02-25-newsletter/</link><pubDate>Wed, 25 Feb 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-02-25-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v0.3.0">White Noise v0.3.0&lt;/a> trae mensajería en tiempo real y soporte para el firmante Amber con más de 160 mejoras fusionadas. &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.5">diVine 1.0.5&lt;/a> corrige problemas de reproducción de vídeo y añade eventos de visualización Kind 22236 para análisis de creadores. &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>, &lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a> y &lt;a href="https://github.com/dmcarrington/unfiltered">Unfiltered&lt;/a> lanzan actualizaciones. &lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> lanza una implementación en Rust funcional de redes de malla nativas de Nostr. Notecrumbs recibe correcciones de estabilidad para las vistas previas de enlaces de damus.io. &lt;a href="https://contextvm.org">ContextVM&lt;/a> conecta Nostr con el Model Context Protocol. Los nuevos proyectos incluyen &lt;a href="https://github.com/CentauriAgent/burrow">Burrow&lt;/a> para mensajería cifrada con MLS entre agentes de IA y humanos, y &lt;a href="https://github.com/nostria-app/nostria-signer-extension">Nostria Signer&lt;/a> para gestión de bóveda e identidad basada en navegador. Los análisis profundos cubren la firma Android de NIP-55 y la sincronización de billeteras Cashu de NIP-60.&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v0.3.0">White Noise v0.3.0&lt;/a> trae mensajería en tiempo real y soporte para el firmante Amber con más de 160 mejoras fusionadas. &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.5">diVine 1.0.5&lt;/a> corrige problemas de reproducción de vídeo y añade eventos de visualización Kind 22236 para análisis de creadores. &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>, &lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a> y &lt;a href="https://github.com/dmcarrington/unfiltered">Unfiltered&lt;/a> lanzan actualizaciones. &lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> lanza una implementación en Rust funcional de redes de malla nativas de Nostr. Notecrumbs recibe correcciones de estabilidad para las vistas previas de enlaces de damus.io. &lt;a href="https://contextvm.org">ContextVM&lt;/a> conecta Nostr con el Model Context Protocol. Los nuevos proyectos incluyen &lt;a href="https://github.com/CentauriAgent/burrow">Burrow&lt;/a> para mensajería cifrada con MLS entre agentes de IA y humanos, y &lt;a href="https://github.com/nostria-app/nostria-signer-extension">Nostria Signer&lt;/a> para gestión de bóveda e identidad basada en navegador. Los análisis profundos cubren la firma Android de NIP-55 y la sincronización de billeteras Cashu de NIP-60.&lt;/p>
&lt;h2 id="noticias">Noticias&lt;/h2>
&lt;h3 id="mejoras-de-estabilidad-en-notecrumbs">Mejoras de Estabilidad en Notecrumbs&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notecrumbs">Notecrumbs&lt;/a>, la API de Nostr y servidor web que impulsa las vistas previas de enlaces de damus.io, recibió una serie de correcciones que abordan problemas de confiabilidad.&lt;/p>
&lt;p>Una &lt;a href="https://github.com/damus-io/notecrumbs/commit/3f201f63ea49">corrección de concurrencia&lt;/a> reemplazó el mecanismo de deduplicación en vuelo con canales watch. Dos llamantes que solicitaban la misma nota podían convertirse ambos en buscadores, llevando a un bloqueo cuando uno completaba antes de que el otro se suscribiera a la notificación. Los canales watch con operaciones atómicas aseguran que solo un buscador se ejecute mientras otros esperan el resultado.&lt;/p>
&lt;p>La &lt;a href="https://github.com/damus-io/notecrumbs/commit/b0d0bf5a2f17">limitación de tasa&lt;/a> implementa una defensa de dos capas contra el martilleo de relays. Cuando los usuarios acceden repetidamente a la misma nota, el sistema ahora aplica debounce a las solicitudes de relay con una ventana de enfriamiento de 5 minutos. Esta protección se extiende a todos los tipos de &lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19&lt;/a> y feeds de perfil, previniendo spam proporcional a los relays durante tráfico intenso.&lt;/p>
&lt;p>El commit de &lt;a href="https://github.com/damus-io/notecrumbs/commit/38670b3972b6">mejoras de rendimiento&lt;/a> movió las búsquedas de datos secundarios a tareas tokio en segundo plano. Las páginas ahora se renderizan instantáneamente con datos en caché en lugar de bloquearse en tiempos de espera secuenciales de relay que podían sumar hasta 7.5 segundos. Una actualización a nostrdb 0.10.0 acompañó estas correcciones.&lt;/p>
&lt;h3 id="contextvm-mcp-sobre-nostr">ContextVM: MCP sobre Nostr&lt;/h3>
&lt;p>&lt;a href="https://contextvm.org">ContextVM&lt;/a> es un conjunto de herramientas que conectan Nostr y el &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a> (MCP). Commits recientes han introducido la nueva especificación &lt;a href="https://docs.contextvm.org/spec/ceps/cep-8/">CEP-8&lt;/a> que habilita pagos, y han estado impulsando mejoras del &lt;a href="https://github.com/ContextVM/sdk">SDK&lt;/a> durante febrero.&lt;/p>
&lt;p>El SDK proporciona transportes de cliente y servidor TypeScript para MCP sobre Nostr. Los desarrolladores pueden exponer servidores MCP a través de la red Nostr y los clientes pueden conectarse a ellos. Los relays actúan como un bus de mensajes ciego, solo enrutando eventos cifrados ciegamente. Los clientes sin soporte nativo de Nostr se conectan a través de una capa proxy. La biblioteca maneja la gestión de relays y la firma criptográfica para autenticación de eventos. Funciona tanto en entornos Node.js como de navegador.&lt;/p>
&lt;p>&lt;a href="https://github.com/ContextVM/cvmi">CVMI&lt;/a> proporciona un CLI para descubrimiento de servidores e invocación de métodos. &lt;a href="https://github.com/ContextVM/relatr">Relatr&lt;/a> calcula puntuaciones de confianza personalizadas a partir de la distancia del grafo social combinada con validación de perfil.&lt;/p>
&lt;p>ContextVM se posiciona como una capa puente: los servidores MCP existentes obtienen interoperabilidad con Nostr mientras mantienen sus transportes convencionales.&lt;/p>
&lt;h3 id="white-noise-documenta-la-búsqueda-descentralizada-de-usuarios">White Noise Documenta la Búsqueda Descentralizada de Usuarios&lt;/h3>
&lt;p>Una &lt;a href="https://blog.jgmontoya.com/2026/02/22/user-search.html">publicación de blog de jgmontoya&lt;/a> detalla cómo &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> maneja la búsqueda de usuarios a través de la red descentralizada de relays.&lt;/p>
&lt;p>La distribución de perfiles crea el desafío: a diferencia de los mensajeros centralizados con bases de datos unificadas, los perfiles de Nostr se dispersan a través de docenas de relays sin índice central. White Noise resuelve esto mediante una arquitectura productor-consumidor que se ejecuta en paralelo.&lt;/p>
&lt;p>Un proceso productor expande continuamente el grafo social hacia afuera desde los follows del usuario, obteniendo listas de follows a distancias crecientes y encolando pubkeys descubiertas para resolución de perfil. El consumidor resuelve coincidencias a través de cinco niveles de costo creciente: tabla de usuarios local (más rápido), perfiles en caché de búsquedas anteriores, relays conectados, listas de relays de usuario por &lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a>, y consultas directas a relays declarados por el usuario (más lento).&lt;/p>
&lt;p>Búsquedas en frío toman aproximadamente 3 segundos mientras que búsquedas en caliente desde caché bajan a alrededor de 10 milisegundos. Para nuevos usuarios sin grafos sociales establecidos, el sistema inyecta nodos bootstrap bien conectados para asegurar la funcionalidad de búsqueda. La membresía de grupo proporciona una señal social implícita junto a los follows explícitos.&lt;/p>
&lt;p>La instrumentación resultó crítica para la optimización, señala el autor. Sin métricas, las mejoras eran conjeturas.&lt;/p>
&lt;h3 id="fips-redes-de-malla-nativas-de-nostr">FIPS: Redes de Malla Nativas de Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> (Free Internetworking Peering System) es una implementación Rust funcional de una red de malla auto-organizada que usa pares de claves Nostr (secp256k1) como identidades de nodo. La &lt;a href="https://github.com/jmcorgan/fips/blob/master/docs/design/fips-intro.md">documentación de diseño&lt;/a> acompaña al código funcional.&lt;/p>
&lt;p>El protocolo aborda la independencia de infraestructura: los nodos se descubren entre sí automáticamente sin servidores centrales o autoridades de certificados. Un árbol de expansión proporciona enrutamiento basado en coordenadas mientras los filtros bloom propagan información de alcanzabilidad, permitiendo a los nodos tomar decisiones de reenvío con solo conocimiento local. El agnosticismo de transporte significa que el mismo protocolo funciona sobre UDP, Ethernet, Bluetooth, radio LoRa, o cualquier medio capaz de datagramas.&lt;/p>
&lt;p>Dos capas de cifrado protegen el tráfico. El cifrado de capa de enlace (patrón Noise IK) asegura la comunicación salto a salto entre vecinos con autenticación mutua y secreto hacia adelante. El cifrado de capa de sesión (patrón Noise XK) proporciona protección de extremo a extremo contra enrutadores intermedios, donde solo el destino puede descifrar la carga útil. Esto imita cómo TLS protege el tráfico HTTP incluso al atravesar redes no confiables.&lt;/p>
&lt;p>La arquitectura usa un árbol de expansión de &amp;ldquo;incrustación codiciosa&amp;rdquo; para enrutamiento. Cada nodo recibe coordenadas basadas en su posición relativa a la raíz del árbol y el padre. Los paquetes se enrutan codiciosamente hacia coordenadas más cercanas al destino, con filtros bloom anunciando puntos finales alcanzables. Cuando el enrutamiento codicioso falla (mínimos locales), los nodos pueden recurrir a rutas basadas en árbol.&lt;/p>
&lt;p>La implementación Rust ya incluye transporte UDP con descubrimiento de filtro bloom. El trabajo futuro se dirige a la integración de relays Nostr para arranque de pares.&lt;/p>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;p>Esta semana trajo lanzamientos a través de infraestructura de relay y aplicaciones cliente, con nuevos proyectos también entrando al espacio.&lt;/p>
&lt;h3 id="haven-v120">HAVEN v1.2.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/bitvora/haven">HAVEN&lt;/a>, el relay personal todo-en-uno que agrupa cuatro funciones de relay con un servidor de medios &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>, lanzó &lt;a href="https://github.com/bitvora/haven/releases/tag/v1.2.0">v1.2.0&lt;/a>. Este lanzamiento va más allá de la etapa RC &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-18-newsletter/#haven-v120-rc3">cubierta la semana pasada&lt;/a>.&lt;/p>
&lt;p>El soporte multi-npub permite que una sola instancia de HAVEN sirva a varias identidades Nostr mediante lista blanca, con nueva funcionalidad de lista negra para control de acceso. Un sistema de respaldo reescrito usa formato JSONL portable, con un comando &lt;code>haven restore&lt;/code> para importar notas desde archivos JSONL. La integración de almacenamiento en la nube añade banderas &lt;code>--to-cloud&lt;/code> y &lt;code>--from-cloud&lt;/code> para gestión de respaldo remoto.&lt;/p>
&lt;p>Mejoras de &lt;a href="https://nostrcompass.org/es/topics/web-of-trust/">Web of Trust&lt;/a> incluyen niveles de profundidad configurables para cálculos de confianza e intervalos de actualización automática de 24 horas con optimización sin bloqueos que reduce la sobrecarga de memoria. Configuración de user-agent para solicitudes de relay y ajustes de timeout de Blastr configurables completan el lanzamiento, junto a exportación de datos a JSONL comprimido.&lt;/p>
&lt;h3 id="white-noise-v030">White Noise v0.3.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>, la app de mensajería cifrada basada en &lt;a href="https://nostrcompass.org/es/topics/mls/">MLS&lt;/a> que implementa el protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, lanzó &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v0.3.0">v0.3.0&lt;/a> con más de 160 mejoras fusionadas.&lt;/p>
&lt;p>Este lanzamiento trae mensajería en tiempo real mediante conexiones de streaming en lugar de sondeo, por lo que los mensajes llegan instantáneamente. El soporte para Amber (&lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>) significa que las claves privadas nunca necesitan tocar la app. Compartir imágenes ahora funciona con seguimiento de progreso de subida y marcadores de posición blurhash mientras carga. La visualización a pantalla completa soporta pellizcar para hacer zoom.&lt;/p>
&lt;p>Mensajería grupal recibió mejoras de confiabilidad con listas de chat mostrando nombres de remitentes y cifrado &lt;a href="https://nostrcompass.org/es/topics/mls/">MLS&lt;/a> asegurando secreto hacia adelante. La búsqueda de usuarios se expande hacia afuera desde los follows hasta cuatro grados de separación con resultados llegando en streaming a medida que se encuentran.&lt;/p>
&lt;p>Un cambio disruptivo reinicia todos los datos locales al actualizar debido a cambios en el protocolo Marmot y el cambio a almacenamiento local cifrado. Los usuarios deben respaldar claves nsec antes de actualizar.&lt;/p>
&lt;h3 id="divine-105">diVine 1.0.5&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>, el cliente de vídeo corto en bucle construido sobre archivos restaurados de Vine, lanzó &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.5">1.0.5&lt;/a> con extensas correcciones de reproducción de vídeo y un nuevo sistema de análisis descentralizado.&lt;/p>
&lt;p>Los problemas de reproducción de vídeo dominaron las correcciones: pausa fantasma, audio dual entre vídeos, destello negro entre miniaturas y primeros fotogramas, y crashes de reproductor desechado están todos resueltos. Un reproductor de vídeo agrupado ahora maneja el feed de Inicio para reproducción consistente.&lt;/p>
&lt;p>Eventos de visualización efímeros Kind 22236 habilitan análisis de creadores y recomendaciones. El sistema rastrea fuentes de tráfico junto a conteos de bucles mientras filtra auto-visualizaciones. Fugas de ruta de archivo local en etiquetas imeta de evento Nostr se corrigen con URLs canónicas de Blossom construidas en el lado del cliente por especificación BUD-01.&lt;/p>
&lt;p>Mejoras de firmante remoto &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> incluyen conexiones de relay paralelizadas y soporte de URL de callback. Android reconecta conexiones WebSocket al reanudar la app después de aprobación del firmante.&lt;/p>
&lt;h3 id="coracle-0630">Coracle 0.6.30&lt;/h3>
&lt;p>&lt;a href="https://github.com/coracle-social/coracle">Coracle&lt;/a>, el cliente Nostr basado en web enfocado en gestión de relay y moderación de &lt;a href="https://nostrcompass.org/es/topics/web-of-trust/">Web of Trust&lt;/a>, lanzó &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.30">0.6.30&lt;/a> con soporte de miniaturas de vídeo, mejorando la navegación de medios en feeds.&lt;/p>
&lt;h3 id="nostur-v1260">Nostur v1.26.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>, el cliente Nostr para iOS, lanzó &lt;a href="https://github.com/nostur-com/nostur-ios-public/releases/tag/1.26.0">v1.26.0&lt;/a> con una nueva sección de feed de Transmisiones en Vivo y una pantalla de Ajustes rediseñada. Los GIFs ahora pueden alojarse en servidores de medios Blossom, reduciendo la dependencia de servicios centralizados. La integración de GIFs de Klipy proporciona respaldo cuando Tenor no está disponible. Encabezados de año en conversaciones de DM y visualización de conteo de menciones completan los cambios de cara al usuario.&lt;/p>
&lt;p>Herramientas de desarrollador y apps CLI también recibieron actualizaciones esta semana.&lt;/p>
&lt;h3 id="nak-v0185">nak v0.18.5&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>, la navaja suiza de línea de comandos de fiatjaf para Nostr, lanzó &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.18.5">v0.18.5&lt;/a> con un nuevo subcomando &lt;code>nak profile&lt;/code> para obtener y mostrar perfiles de usuario. El comando &lt;code>git clone&lt;/code> ahora soporta nombres &lt;a href="https://nostrcompass.org/es/topics/nip-05/">NIP-05&lt;/a> en URIs &lt;code>nostr://&lt;/code>, habilitando clonación de repositorios por identificadores legibles por humanos.&lt;/p>
&lt;h3 id="pika-v053">Pika v0.5.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>, el mensajero cifrado con &lt;a href="https://nostrcompass.org/es/topics/mls/">MLS&lt;/a> para iOS, Android y escritorio construido sobre el protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, lanzó &lt;a href="https://github.com/sledtools/pika/releases/tag/pikachat-v0.5.3">v0.5.3&lt;/a>. Commits recientes añaden subida de archivos y soporte de medios de arrastrar y soltar a la app de escritorio, junto a correcciones de despliegue en Cloudflare Workers.&lt;/p>
&lt;p>Pika usa un núcleo Rust que posee toda la lógica de negocio mientras iOS (SwiftUI) y Android (Kotlin) actúan como capas delgadas de UI renderizando instantáneas de estado. MDK (Marmot Development Kit) proporciona la implementación MLS. El proyecto señala estado alfa y advierte contra uso para cargas de trabajo sensibles.&lt;/p>
&lt;h3 id="ridestr-v026">Ridestr v0.2.6&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a>, la plataforma descentralizada de viajes compartidos con pagos Cashu, lanzó &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.6">v0.2.6&lt;/a>. Este lanzamiento corrige problemas de accesibilidad de TalkBack y resuelve bugs donde los conductores desaparecían de la lista cercana al cambiar métodos de pago o donde los conteos de conductor seleccionado no se actualizaban cuando los conductores se desconectaban.&lt;/p>
&lt;p>La función &amp;ldquo;Send to All&amp;rdquo; ahora es &amp;ldquo;Broadcast RoadFlare&amp;rdquo; con correcciones para fallos silenciosos en instalaciones frescas de conductor. Ridestr implementa escrow HTLC para pagos de viaje sin confianza y sincronización de billetera &lt;a href="https://nostrcompass.org/es/topics/nip-60/">NIP-60&lt;/a> entre dispositivos.&lt;/p>
&lt;h3 id="unfiltered-v106">Unfiltered v1.0.6&lt;/h3>
&lt;p>&lt;a href="https://github.com/dmcarrington/unfiltered">Unfiltered&lt;/a>, la app de compartir fotos estilo Instagram para Android, lanzó &lt;a href="https://github.com/dmcarrington/unfiltered/releases/tag/v1.0.6">v1.0.6&lt;/a> con búsqueda mejorada de usuarios y reconexión automática de relay cada 60 segundos.&lt;/p>
&lt;p>Construido con Kotlin y Jetpack Compose, Unfiltered usa bindings de rust-nostr y servidores compatibles con Blossom para alojamiento de imágenes. La integración con Amber (&lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>) maneja la gestión segura de claves. La app muestra publicaciones de cuentas seguidas en orden cronológico sin algoritmos ni anuncios.&lt;/p>
&lt;p>Dos nuevos proyectos de mensajería y firma también se lanzaron esta semana.&lt;/p>
&lt;h3 id="burrow-mensajería-mls-para-agentes-de-ia">Burrow: Mensajería MLS para Agentes de IA&lt;/h3>
&lt;p>&lt;a href="https://github.com/CentauriAgent/burrow">Burrow&lt;/a> es un mensajero que implementa el protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> para comunicación cifrada con MLS sin números de teléfono ni servidores centralizados. Tanto usuarios humanos como agentes de IA pueden participar.&lt;/p>
&lt;p>Un daemon CLI de Rust puro con modo de salida JSONL maneja la integración con sistemas automatizados. Una app Flutter multiplataforma cubre Android, iOS, Linux, macOS y Windows. Los adjuntos de medios se cifran junto a los mensajes, y WebRTC maneja llamadas de audio y vídeo con servidores TURN configurables.&lt;/p>
&lt;p>Burrow superpone cifrado MLS sobre infraestructura Nostr. La identidad usa pares de claves Nostr (secp256k1) mientras los KeyPackages MLS se publican como eventos kind 443. Los mensajes se cifran con &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> como eventos kind 445, y las invitaciones de bienvenida usan gift-wrapping de &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a>.&lt;/p>
&lt;p>Integración con &lt;a href="https://openclaw.ai">OpenClaw&lt;/a> habilita la participación de agentes de IA con acceso completo a herramientas. Listas de control de acceso con registro de auditoría gestionan permisos de contactos y grupos. Esta combinación posiciona a Burrow para escenarios de mensajería agente-a-agente y agente-a-humano que requieren cifrado de nivel Signal sobre infraestructura descentralizada.&lt;/p>
&lt;h3 id="extensión-nostria-signer">Extensión Nostria Signer&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria-signer-extension">Nostria Signer&lt;/a> es una extensión de navegador basada en Chromium que proporciona gestión de bóveda e identidad para usuarios de Nostr.&lt;/p>
&lt;p>Múltiples bóvedas conteniendo múltiples cuentas permiten a los usuarios organizar identidades para diferentes contextos. La internacionalización incluye soporte de idiomas RTL. Construido con Angular y TypeScript (79.2% del código), funciona tanto como extensión de navegador como Aplicación Web Progresiva.&lt;/p>
&lt;p>Nostria Signer implementa &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a> para firma de extensión de navegador, habilitando a clientes Nostr basados en web solicitar firmas de eventos sin acceder directamente a claves privadas. Migración automática de billetera maneja actualizaciones distribuidas a través de la Chrome Web Store. Los usuarios también pueden cargar lateralmente desde la carpeta &lt;code>dist/extension&lt;/code>.&lt;/p>
&lt;p>Los desarrolladores enfatizan el estado experimental: los usuarios deben gestionar sus propias frases de recuperación secreta ya que los desarrolladores no pueden restaurar acceso a claves perdidas.&lt;/p>
&lt;h2 id="actualizaciones-de-proyectos">Actualizaciones de Proyectos&lt;/h2>
&lt;h3 id="formstr-migra-a-nueva-organización">Formstr Migra a Nueva Organización&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-forms">Formstr&lt;/a>, la alternativa a Google Forms en Nostr, migró su repositorio de &lt;code>abh3po/nostr-forms&lt;/code> a la organización &lt;code>formstr-hq&lt;/code>. Este receptor de beca OpenSats continúa desarrollo en la nueva ubicación.&lt;/p>
&lt;h3 id="prs-abiertos-notables">PRs Abiertos Notables&lt;/h3>
&lt;p>Trabajo en progreso a través de proyectos Nostr:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Modelo Outbox de Damus&lt;/strong> (&lt;a href="https://github.com/damus-io/damus/pull/3602">PR #3602&lt;/a>): Plan de implementación para el modelo de relay gossip/outbox en iOS. Este cambio arquitectónico mejora la entrega de mensajes publicando a los relays donde los destinatarios realmente leen.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Notificaciones Multiplataforma de Notedeck&lt;/strong> (&lt;a href="https://github.com/damus-io/notedeck/pull/1296">PR #1296&lt;/a>): Sistema de notificaciones nativo para el cliente de escritorio Damus cubriendo FCM de Android, macOS y Linux.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Actualización Cashu v3 de NDK&lt;/strong> (&lt;a href="https://github.com/nostr-dev-kit/ndk/pull/370">PR #370&lt;/a>): Actualiza la integración de billetera del Nostr Development Kit a cashu-ts v3.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Cashu Offline de Zeus&lt;/strong> (&lt;a href="https://github.com/ZeusLN/zeus/pull/3742">PR #3742&lt;/a>): Envío y recepción de ecash offline para la billetera Lightning Zeus.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Entrega Digital Cifrada de Shopstr&lt;/strong> (&lt;a href="https://github.com/shopstr-eng/shopstr/pull/231">PR #231&lt;/a>): Añade entrega cifrada para bienes digitales con soporte de peso dinámico para artículos físicos.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="actualizaciones-de-nips">Actualizaciones de NIPs&lt;/h2>
&lt;p>Cambios recientes al &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Fusionados Esta Semana:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2223">Descubribilidad de Proveedor de Servicio NIP-85&lt;/a>&lt;/strong>: La especificación de &lt;a href="https://nostrcompass.org/es/topics/nip-85/">NIP-85&lt;/a> ahora incluye orientación sobre cómo los clientes descubren proveedores de aserciones de confianza. Cuando un cliente necesita puntuaciones de &lt;a href="https://nostrcompass.org/es/topics/web-of-trust/">Web of Trust&lt;/a> u otras métricas computadas, puede consultar relays por anuncios kind 30085 de proveedores que el usuario ya sigue o confía.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2229">NIP-29 Elimina Grupos No Gestionados&lt;/a>&lt;/strong>: La especificación de chat grupal de &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> eliminó el soporte para grupos no gestionados (donde cualquier miembro podía añadir a otros). Todos los grupos NIP-29 ahora requieren gestión del lado del relay con roles de admin explícitos, simplificando implementaciones y reduciendo vectores de spam.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2231">NIP-11 Elimina Campos Deprecados&lt;/a>&lt;/strong>: Los documentos de información de relay de &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> ya no incluyen los campos deprecados &lt;code>software&lt;/code> y &lt;code>version&lt;/code>. Las implementaciones deberían eliminarlos de sus respuestas.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2227">NIP-39 Mueve Etiquetas de Identidad&lt;/a>&lt;/strong>: Reclamaciones de identidad externa (etiquetas &lt;code>i&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-39/">NIP-39&lt;/a> para GitHub, Twitter, etc.) se movieron de perfiles kind 0 a eventos dedicados kind 30382. Esto separa la verificación de identidad de los metadatos de perfil.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Progreso de NIPs para Agentes de IA:&lt;/strong>&lt;/p>
&lt;p>Cuatro NIPs enfocados en IA continúan desarrollo activo. Desde la &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-18-newsletter/#llegan-los-nips-para-agentes-de-ia">cobertura de la semana pasada&lt;/a>:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2220">NIP-AE: Agents&lt;/a>&lt;/strong> (actualizado 19 feb): Define identidad de agente con kind 4199 para definiciones de agente y kind 4201 para prompting (&amp;ldquo;nudges&amp;rdquo;). Los agentes pueden referenciar metadatos de archivo &lt;a href="https://nostrcompass.org/es/topics/nip-94/">NIP-94&lt;/a> para descripciones extendidas.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2226">NIP-XX: AI Agent Messages&lt;/a>&lt;/strong> (actualizado 18 feb): Estandariza mensajería conversacional con siete kinds de evento efímeros (25800-25806) para estado, deltas de streaming, prompts, respuestas, llamadas de herramientas, errores y cancelación. Eventos &amp;ldquo;AI Info&amp;rdquo; kind 31340 permiten a los agentes anunciar modelos y capacidades soportadas.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2228">NIP-AC: DVM Agent Coordination&lt;/a>&lt;/strong> (abierto 18 feb): Extiende &lt;a href="https://nostrcompass.org/es/topics/nip-90/">NIP-90&lt;/a> para flujos de trabajo de agentes autónomos. Añade latidos para descubrimiento de agentes, revisiones de trabajos para seguimiento de calidad, escrow de datos para compromiso de resultados, cadenas de flujo de trabajo para pipelines de múltiples pasos, y licitación de enjambre para selección competitiva de proveedores. Una implementación de referencia corre en 2020117.xyz.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2221">NIP-AD: MCP Server Announcements&lt;/a>&lt;/strong> (abierto 12 feb): Estandariza el anuncio de servidores y habilidades del Model Context Protocol en Nostr. Ya en uso en la plataforma TENEX.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Otros PRs Abiertos:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2232">NIP-144: Service Authorization Protocol&lt;/a>&lt;/strong>: Define cómo los clientes prueban identidad y permisos a proveedores de servicio en Nostr.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2230">NIP-DC: Nostr Webxdc&lt;/a>&lt;/strong>: alexgleason propone integrar Webxdc (aplicaciones web descentralizadas) con eventos Nostr.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="análisis-profundo-de-nip-nip-55-aplicación-firmante-de-android">Análisis Profundo de NIP: NIP-55 (Aplicación Firmante de Android)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/55.md">NIP-55&lt;/a> define cómo los clientes Nostr de Android solicitan operaciones criptográficas de aplicaciones firmantes dedicadas. Con &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-25-newsletter/#white-noise-v030">White Noise v0.3.0&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-25-newsletter/#unfiltered-v106">Unfiltered v1.0.6&lt;/a> ambos añadiendo soporte para Amber esta semana, el protocolo de firma Android merece examen.&lt;/p>
&lt;p>&lt;strong>Canales de Comunicación:&lt;/strong>&lt;/p>
&lt;p>NIP-55 habilita firma entre apps mediante dos mecanismos. Intents proporcionan aprobación manual del usuario con retroalimentación visual para operaciones de una sola vez. Content Resolvers habilitan firma automatizada cuando los usuarios otorgan permisos persistentes, permitiendo a las apps firmar en segundo plano sin solicitudes repetidas.&lt;/p>
&lt;p>La comunicación usa el esquema URI personalizado &lt;code>nostrsigner:&lt;/code>. Un cliente inicia contacto con:&lt;/p>
&lt;pre tabindex="0">&lt;code>nostrsigner:&amp;lt;base64-encoded-event&amp;gt;?type=sign_event&amp;amp;callbackUrl=myapp://callback
&lt;/code>&lt;/pre>&lt;p>&lt;strong>Operaciones Soportadas:&lt;/strong>&lt;/p>
&lt;p>La especificación define siete métodos criptográficos: firma de eventos (&lt;code>sign_event&lt;/code>), recuperación de clave pública (&lt;code>get_public_key&lt;/code>), cifrado/descifrado &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a>, cifrado/descifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>, y descifrado de evento zap (&lt;code>decrypt_zap_event&lt;/code>).&lt;/p>
&lt;p>&lt;strong>Modelo de Permisos:&lt;/strong>&lt;/p>
&lt;p>Los clientes llaman a &lt;code>get_public_key&lt;/code> una vez para establecer una relación de confianza, recibiendo el nombre de paquete del firmante y la pubkey del usuario. La especificación manda que los clientes guarden estos valores y nunca llamen a &lt;code>get_public_key&lt;/code> de nuevo, previniendo ataques de fingerprinting.&lt;/p>
&lt;p>Para solicitudes de firma, los usuarios pueden aprobar una vez u otorgar &amp;ldquo;recordar mi elección&amp;rdquo; para operaciones en segundo plano. Si los usuarios rechazan consistentemente operaciones, el firmante retorna un estado &amp;ldquo;rechazado&amp;rdquo;, previniendo solicitudes repetidas.&lt;/p>
&lt;p>&lt;strong>Implementaciones:&lt;/strong>&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/amber">Amber&lt;/a> es el firmante NIP-55 principal para Android. Los clientes que soportan NIP-55 incluyen &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-25-newsletter/#white-noise-v030">White Noise&lt;/a>, &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-25-newsletter/#unfiltered-v106">Unfiltered&lt;/a>, y otros. Aplicaciones web no pueden recibir directamente respuestas del firmante y deben usar URLs de callback u operaciones de portapapeles.&lt;/p>
&lt;p>&lt;strong>Relación con Otros NIPs de Firma:&lt;/strong>&lt;/p>
&lt;p>NIP-55 complementa &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a> (extensiones de navegador) y &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (firma remota sobre relays). Donde NIP-07 maneja navegadores de escritorio y NIP-46 maneja firma entre dispositivos, NIP-55 proporciona integración Android nativa con latencia mínima.&lt;/p>
&lt;h2 id="análisis-profundo-de-nip-nip-60-billetera-cashu">Análisis Profundo de NIP: NIP-60 (Billetera Cashu)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/60.md">NIP-60&lt;/a> define cómo las billeteras ecash de &lt;a href="https://nostrcompass.org/es/topics/cashu/">Cashu&lt;/a> almacenan estado en relays Nostr, habilitando sincronización de billetera entre aplicaciones. Con &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-25-newsletter/#ridestr-v026">Ridestr v0.2.6&lt;/a> usando NIP-60 para sincronización de billetera entre dispositivos, el protocolo merece examen.&lt;/p>
&lt;p>&lt;strong>Kinds de Evento:&lt;/strong>&lt;/p>
&lt;p>NIP-60 usa cuatro tipos de evento. El kind reemplazable 17375 almacena configuración de billetera incluyendo URLs de mint y una clave privada dedicada para recibir pagos ecash P2PK. Eventos de token (kind 7375) contienen pruebas criptográficas no gastadas, mientras el historial de gastos (kind 7376) registra transacciones para transparencia del usuario. Un kind opcional 7374 rastrea cotizaciones de pago de mint.&lt;/p>
&lt;p>&lt;strong>Arquitectura de Billetera:&lt;/strong>&lt;/p>
&lt;p>El estado de la billetera vive en relays, haciéndolo accesible entre aplicaciones. El evento de billetera de un usuario contiene referencias cifradas a mints Cashu y una clave privada específica de billetera separada de la identidad Nostr del usuario. Esta separación importa: la clave de billetera maneja operaciones ecash mientras la clave Nostr maneja funciones sociales.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">17375&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;configuración-de-billetera-cifrada-nip44&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [[&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;cashu-wallet&amp;#34;&lt;/span>]]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Gestión de Pruebas:&lt;/strong>&lt;/p>
&lt;p>Pruebas Cashu son instrumentos al portador. Una vez gastada, una prueba se vuelve inválida. NIP-60 gestiona esto mediante un mecanismo de rollover: al gastar, los clientes crean un nuevo evento de token con pruebas no gastadas restantes y eliminan el original via &lt;a href="https://nostrcompass.org/es/topics/nip-09/">NIP-09&lt;/a>. IDs de token destruidos van en un campo &lt;code>del&lt;/code> para seguimiento de estado.&lt;/p>
&lt;p>Los clientes deberían validar periódicamente pruebas contra mints para detectar credenciales previamente gastadas. Se permiten múltiples eventos de token por mint, y los eventos de historial de gastos ayudan a los usuarios rastrear transacciones aunque son opcionales.&lt;/p>
&lt;p>&lt;strong>Modelo de Seguridad:&lt;/strong>&lt;/p>
&lt;p>Todos los datos sensibles usan cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>. La clave privada de billetera nunca aparece en texto plano. Como los relays almacenan blobs cifrados sin entender sus contenidos, el estado de la billetera permanece privado incluso en relays no confiables.&lt;/p>
&lt;p>&lt;strong>Implementaciones:&lt;/strong>&lt;/p>
&lt;p>Billeteras que soportan NIP-60 incluyen &lt;a href="https://github.com/gandlafbtc/nutsack">Nutsack&lt;/a> y &lt;a href="https://github.com/cashubtc/eNuts">eNuts&lt;/a>. Clientes como &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-25-newsletter/#ridestr-v026">Ridestr&lt;/a> usan NIP-60 para sincronización entre dispositivos, permitiendo a los usuarios recargar en escritorio y gastar desde móvil sin transferencias manuales.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. Estás construyendo algo o tienes noticias que compartir. &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Escríbenos vía DM &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>&lt;/a> o encuéntranos en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #10</title><link>https://nostrcompass.org/es/newsletters/2026-02-18-newsletter/</link><pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-02-18-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Una capa de caché local para Blossom toma forma mientras proyectos independientes convergen en el acceso offline a medios para Android. Alby lanza un &lt;a href="https://sandbox.albylabs.com">sandbox para desarrolladores NWC&lt;/a> para construir y probar integraciones de Nostr Wallet Connect sin arriesgar fondos reales. Propuestas en competencia para la comunicación de agentes de IA en Nostr llegan en la misma semana de dos autores distintos. fiatjaf elimina campos no utilizados de &lt;a href="https://github.com/nostr-protocol/nips/pull/1946">NIP-11&lt;/a>, eliminando políticas de retención, códigos de país, política de privacidad y etiquetas de preferencia comunitaria que los operadores de relay nunca adoptaron. &lt;a href="https://github.com/nostr-protocol/nips/pull/2223">NIP-85&lt;/a> fusiona guía de descubrimiento de proveedores de servicios para Aserciones de Confianza. Una nueva etiqueta &lt;code>D&lt;/code> en &lt;a href="https://github.com/nostr-protocol/nips/pull/1752">NIP-52&lt;/a> habilita indexación de marca temporal con granularidad de día en eventos de calendario. Los nuevos proyectos incluyen &lt;a href="https://github.com/zeSchlausKwab/mapnolia">Mapnolia&lt;/a> para distribución descentralizada de teselas de mapa, &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a> para mensajería cifrada con MLS, &lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a> para firma de umbral FROST en Android, &lt;a href="https://files.iris.to/#/npub1xndmdgymsf4a34rzr7346vp8qcptxf75pjqweh8naa8rklgxpfqqmfjtce/hashtree">Hashtree&lt;/a> para almacenamiento direccionado por contenido con integración Nostr, y &lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a> para compartir contenido en Nostr desde cualquier app Android. &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> fusiona 11 PRs de NWC añadiendo soporte de billetera dual y ciclo de vida automático del servicio. &lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a> lanza una &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.0%2B2">billetera Lightning integrada&lt;/a> mediante integración NWC. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> se prepara para su lanzamiento en Android App Store, mientras HAVEN alcanza &lt;a href="https://github.com/bitvora/haven/releases/tag/v1.2.0-rc3">v1.2.0-rc3&lt;/a> con soporte multi-npub y respaldo en la nube. Los análisis profundos de esta semana cubren el sistema de Aserciones de Confianza de NIP-85 para delegar cálculos de Web of Trust a proveedores de servicios, y el protocolo de Eventos de Calendario de NIP-52 tras su actualización de indexación con granularidad de día.&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Una capa de caché local para Blossom toma forma mientras proyectos independientes convergen en el acceso offline a medios para Android. Alby lanza un &lt;a href="https://sandbox.albylabs.com">sandbox para desarrolladores NWC&lt;/a> para construir y probar integraciones de Nostr Wallet Connect sin arriesgar fondos reales. Propuestas en competencia para la comunicación de agentes de IA en Nostr llegan en la misma semana de dos autores distintos. fiatjaf elimina campos no utilizados de &lt;a href="https://github.com/nostr-protocol/nips/pull/1946">NIP-11&lt;/a>, eliminando políticas de retención, códigos de país, política de privacidad y etiquetas de preferencia comunitaria que los operadores de relay nunca adoptaron. &lt;a href="https://github.com/nostr-protocol/nips/pull/2223">NIP-85&lt;/a> fusiona guía de descubrimiento de proveedores de servicios para Aserciones de Confianza. Una nueva etiqueta &lt;code>D&lt;/code> en &lt;a href="https://github.com/nostr-protocol/nips/pull/1752">NIP-52&lt;/a> habilita indexación de marca temporal con granularidad de día en eventos de calendario. Los nuevos proyectos incluyen &lt;a href="https://github.com/zeSchlausKwab/mapnolia">Mapnolia&lt;/a> para distribución descentralizada de teselas de mapa, &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a> para mensajería cifrada con MLS, &lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a> para firma de umbral FROST en Android, &lt;a href="https://files.iris.to/#/npub1xndmdgymsf4a34rzr7346vp8qcptxf75pjqweh8naa8rklgxpfqqmfjtce/hashtree">Hashtree&lt;/a> para almacenamiento direccionado por contenido con integración Nostr, y &lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a> para compartir contenido en Nostr desde cualquier app Android. &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> fusiona 11 PRs de NWC añadiendo soporte de billetera dual y ciclo de vida automático del servicio. &lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a> lanza una &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.0%2B2">billetera Lightning integrada&lt;/a> mediante integración NWC. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> se prepara para su lanzamiento en Android App Store, mientras HAVEN alcanza &lt;a href="https://github.com/bitvora/haven/releases/tag/v1.2.0-rc3">v1.2.0-rc3&lt;/a> con soporte multi-npub y respaldo en la nube. Los análisis profundos de esta semana cubren el sistema de Aserciones de Confianza de NIP-85 para delegar cálculos de Web of Trust a proveedores de servicios, y el protocolo de Eventos de Calendario de NIP-52 tras su actualización de indexación con granularidad de día.&lt;/p>
&lt;h2 id="noticias">Noticias&lt;/h2>
&lt;h3 id="emerge-una-capa-de-caché-local-para-blossom">Emerge una Capa de Caché Local para Blossom&lt;/h3>
&lt;p>Múltiples proyectos independientes están convergiendo en el mismo problema: el acceso offline a medios &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> en dispositivos móviles.&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/Morganite">Morganite&lt;/a>, una nueva app Android de greenart7c3 (el desarrollador detrás de &lt;a href="https://github.com/greenart7c3/amber">Amber&lt;/a> y &lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a>), implementa caché del lado del cliente para medios Blossom. Los usuarios pueden acceder a imágenes y archivos vistos anteriormente sin conexión de red.&lt;/p>
&lt;p>&lt;a href="https://github.com/hardran3/Aerith">Aerith&lt;/a> lanzó &lt;a href="https://github.com/hardran3/Aerith/releases/tag/v0.2">v0.2&lt;/a> con etiquetado de imágenes, operaciones masivas de espejado/etiquetado/eliminación, filtrado por etiqueta y tipo de archivo, más soporte inicial de caché local para Blossom. Aerith es una interfaz de gestión para usuarios que almacenan medios en múltiples servidores Blossom y necesitan organizar y espejar sus blobs.&lt;/p>
&lt;p>Una nueva &lt;a href="https://github.com/hzrd149/blossom/blob/master/implementations/local-blossom-cache.md">guía de implementación de caché local&lt;/a> en la especificación de Blossom documenta el almacenamiento de blobs del lado del cliente, mientras que &lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a> (del mismo desarrollador que Aerith) añade integración de subida a Blossom a su flujo de compartir-a-Nostr en Android. Cuatro proyectos independientes convergieron en el mismo problema esta semana: una app de caché dedicada, un gestor de medios, una especificación de referencia y una herramienta de compartir con integración Blossom, todos implementando almacenamiento local persistente más allá del simple subir y recuperar.&lt;/p>
&lt;h3 id="sandbox-nwc-para-desarrolladores-de-alby">Sandbox NWC para Desarrolladores de Alby&lt;/h3>
&lt;p>&lt;a href="https://sandbox.albylabs.com">Alby&lt;/a> lanzó un entorno sandbox para desarrolladores que trabajan con &lt;a href="https://nostrcompass.org/es/topics/nip-47/">Nostr Wallet Connect (NIP-47)&lt;/a>. El sandbox proporciona un servicio de billetera NWC alojado donde los desarrolladores pueden crear conexiones de prueba y enviar pagos simulados sin conectarse a una billetera Lightning real, mientras observan el ciclo completo de solicitud/respuesta de eventos NWC en tiempo real. Los desarrolladores generan una cadena de conexión &lt;code>nostr+walletconnect://&lt;/code> desde el sandbox y la pasan a su cliente. El sandbox entonces muestra los eventos de solicitud kind 23194 y respuesta kind 23195 resultantes a medida que fluyen entre el cliente y el servicio de billetera.&lt;/p>
&lt;p>Esto reduce la barrera para nuevas integraciones NWC. Anteriormente, las pruebas requerían una billetera Lightning personal o un servicio NWC auto-alojado. El sandbox abstrae eso, dando a los desarrolladores un ciclo de retroalimentación inmediato para implementar los métodos &lt;code>pay_invoice&lt;/code>, &lt;code>get_balance&lt;/code>, &lt;code>make_invoice&lt;/code>, &lt;code>lookup_invoice&lt;/code> y &lt;code>list_transactions&lt;/code> contra un endpoint NWC activo.&lt;/p>
&lt;h3 id="llegan-los-nips-para-agentes-de-ia">Llegan los NIPs para Agentes de IA&lt;/h3>
&lt;p>Las propuestas de comunicación para agentes de IA en Nostr aparecieron con pocos días de diferencia, abordando el problema desde ángulos distintos.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2226">NIP-XX: AI Agent Messages&lt;/a> de joelklabo define un protocolo completo para la interacción de agentes de IA: kinds de evento para prompts, respuestas, deltas de streaming, actualizaciones de estado, telemetría de herramientas, errores, cancelaciones y descubrimiento de capacidades. Un evento de descubrimiento &lt;code>ai.info&lt;/code> (kind 31340, reemplazable) permite a los agentes anunciar sus modelos soportados, herramientas con esquemas, soporte de streaming y límites de tasa. La propuesta de joelklabo incluye correlación de ejecuciones mediante ID de prompt, gestión de sesión, reconciliación de streams con ordenamiento por secuencia, y orientación de &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> para privacidad de metadatos.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2220">NIP-AE: Agents&lt;/a> de pablof7z adopta un enfoque diferente, definiendo kinds para la instanciación de agentes: definiciones y lecciones. Estos son los tipos de evento que pablof7z utiliza en &lt;a href="https://github.com/tenex-chat/tenex">TENEX&lt;/a>, el sistema de aprendizaje autónomo construido sobre Nostr. Una propuesta complementaria, &lt;a href="https://github.com/nostr-protocol/nips/pull/2221">NIP-AD: MCP Server and Skill Announcements&lt;/a>, también de pablof7z, define eventos para anunciar servidores &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a> y habilidades en Nostr. Se soportan comentarios &lt;a href="https://nostrcompass.org/es/topics/nip-22/">NIP-22&lt;/a>, para que la comunidad pueda discutir y valorar servidores MCP directamente en Nostr.&lt;/p>
&lt;p>NIP-XX cubre la comunicación completa entre agentes mientras NIP-AE y NIP-AD abordan la identidad y el descubrimiento de herramientas. Estas propuestas podrían converger en un estándar unificado o coexistir como capas complementarias.&lt;/p>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;h3 id="haven-v120-rc3">HAVEN v1.2.0-rc3&lt;/h3>
&lt;p>&lt;a href="https://github.com/bitvora/haven">HAVEN&lt;/a>, el relay personal todo-en-uno que agrupa cuatro funciones de relay con un servidor de medios &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>, alcanzó &lt;a href="https://github.com/bitvora/haven/releases/tag/v1.2.0-rc3">v1.2.0-rc3&lt;/a>. Este release candidate añade soporte para múltiples npubs, permitiendo que una sola instancia de HAVEN sirva a varias identidades Nostr. Los RC anteriores añadieron indicadores &lt;code>--from-cloud&lt;/code> y &lt;code>--to-cloud&lt;/code> para respaldo en la nube (RC2) y corrigieron un bug de doble conteo en Web of Trust (RC1).&lt;/p>
&lt;h3 id="mostro-mobile-v120-billetera-lightning-integrada">Mostro Mobile v1.2.0: Billetera Lightning Integrada&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a>, el cliente móvil para el exchange P2P de Bitcoin &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> (&lt;a href="https://nostrcompass.org/es/newsletters/2026-02-11-newsletter/#mostro-lanza-primera-beta-p%C3%BAblica">v1.1.0 cubierto la semana pasada&lt;/a>), lanzó &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.0%2B2">v1.2.0&lt;/a> con una billetera Lightning integrada mediante integración completa de &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NWC (NIP-47)&lt;/a>. Compradores y vendedores ya no necesitan cambiar de app para gestionar facturas. La app detecta facturas hold para vendedores y las paga automáticamente a través de la billetera conectada, mientras los compradores obtienen generación automática de facturas. El lanzamiento sigue a &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.1.1%2B1">v1.1.1&lt;/a> de principios de semana, que añadió soporte multi-nodo de Mostro con un registro curado de instancias de confianza, obtención de metadatos kind 0 para visualización de nodos, gestión personalizada de nodos por pubkey, y fallback automático cuando el nodo seleccionado queda fuera de línea.&lt;/p>
&lt;p>En el lado del servidor, &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.2">Mostro v0.16.2&lt;/a> llegó con correcciones para pagos duplicados de comisiones de desarrollo, limitación de tasa en el endpoint RPC de validación de contraseña, y limpieza adecuada de disputas en cancelaciones cooperativas.&lt;/p>
&lt;p>Un nuevo proyecto complementario, &lt;a href="https://github.com/MostroP2P/mostro-skill">mostro-skill&lt;/a>, permite a agentes operar en Mostro a través de Nostr.&lt;/p>
&lt;h3 id="aerith-v02">Aerith v0.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/hardran3/Aerith">Aerith&lt;/a>, el gestor de imágenes &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>, lanzó &lt;a href="https://github.com/hardran3/Aerith/releases/tag/v0.2">v0.2&lt;/a> con etiquetas de imagen para organizar medios, operaciones masivas de espejado/etiquetado/eliminación entre servidores, filtrado por etiqueta y tipo de archivo, más soporte inicial de caché local. Consulta la &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-18-newsletter/#emerge-una-capa-de-cach%c3%a9-local-para-blossom">sección de Noticias&lt;/a> para el contexto de la tendencia más amplia de caché local.&lt;/p>
&lt;h3 id="mapnolia-teselas-de-mapa-descentralizadas-sobre-nostr">Mapnolia: Teselas de Mapa Descentralizadas sobre Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/zeSchlausKwab/mapnolia">Mapnolia&lt;/a> es un nuevo servidor de datos geoespaciales que divide archivos de mapas &lt;a href="https://github.com/protomaps/PMTiles">PMTiles&lt;/a> en regiones geográficas y las anuncia en Nostr para su descubrimiento descentralizado. Publica eventos reemplazables parametrizados kind 34444 en relays Nostr que contienen un índice completo de fragmentos de teselas de mapa con metadatos de capa, regiones geohash, referencias de archivos y detalles del servidor &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>.&lt;/p>
&lt;p>Los clientes descubren y recuperan datos de mapa a través de la red Nostr en lugar de servidores de teselas centralizados, con eventos de anuncio que contienen suficientes metadatos para solicitar solo las regiones geográficas necesarias desde los servidores Blossom listados. Mapnolia es el primer proyecto en llevar la distribución de datos geoespaciales a Nostr, abriendo posibilidades para aplicaciones de mapeo con capacidad offline.&lt;/p>
&lt;h3 id="pika-mensajería-cifrada-basada-en-marmot">Pika: Mensajería Cifrada Basada en Marmot&lt;/h3>
&lt;p>&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a> es una nueva app de mensajería cifrada de extremo a extremo para iOS y Android que usa el protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a>, el cual superpone &lt;a href="https://nostrcompass.org/es/topics/mls/">Messaging Layer Security (MLS)&lt;/a> sobre relays Nostr. La arquitectura separa las responsabilidades en un núcleo Rust (&lt;code>pika_core&lt;/code>) que gestiona el estado MLS y el cifrado/descifrado de mensajes sobre relays Nostr, con capas nativas de UI en SwiftUI (iOS) y Kotlin (Android). El estado fluye de forma unidireccional: la UI despacha acciones al actor Rust, que muta el estado y emite instantáneas con números de revisión de vuelta a la UI via UniFFI y bindings JNI.&lt;/p>
&lt;p>Pika se une a un campo creciente de mensajeros MLS-sobre-Nostr junto a &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>, &lt;a href="https://github.com/VectorPrivacy">Vector&lt;/a> y &lt;a href="https://0xchat.com">0xchat&lt;/a>. Todos usan relays Nostr como capa de transporte para el texto cifrado MLS, manteniendo a los operadores de relay sin posibilidad de leer el contenido de los mensajes. Pika usa el Marmot Development Kit (MDK) para su implementación MLS y nostr-sdk para la conectividad con relays.&lt;/p>
&lt;h3 id="keep-firma-de-umbral-frostestopicsfrost-para-android">Keep: Firma de Umbral &lt;a href="https://nostrcompass.org/es/topics/frost/">FROST&lt;/a> para Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a> es una nueva aplicación Android para firma de umbral &lt;a href="https://nostrcompass.org/es/topics/frost/">FROST&lt;/a> donde ningún dispositivo individual posee la clave privada completa. Implementa &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> (Android Signer) y &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (firma remota), para que los clientes Nostr compatibles puedan solicitar firmas mientras el material de clave permanece distribuido entre dispositivos. Las configuraciones predeterminadas son 2-de-3 y 3-de-5, aunque se soporta cualquier umbral t-de-n.&lt;/p>
&lt;p>La ceremonia de generación distribuida de claves (DKG) de Keep se ejecuta sobre relays Nostr usando kinds de evento personalizados: kind 21101 para anuncios de grupo, kind 21102 para polinomios de compromiso de la ronda 1 (difundidos públicamente), y kind 21103 para shares de secreto de la ronda 2 (cifrados punto a punto con &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> entre participantes). El escalar de clave privada del grupo nunca se computa ni ensambla en ningún lugar durante el DKG. Cada dispositivo posee solo su evaluación del polinomio, y cualquier t shares pueden producir una firma Schnorr válida a través de un protocolo de dos rondas de comprometer-luego-firmar. La firma de 64 bytes resultante es indistinguible de una firma Schnorr de un solo firmante. Bajo el capó, Keep usa el crate &lt;code>frost-secp256k1-tr&lt;/code> de la Zcash Foundation con ajuste Taproot, de modo que la clave pública del grupo funciona directamente como un npub de Nostr.&lt;/p>
&lt;p>Keep se une a la familia de proyectos &lt;a href="https://frostr.org">Frostr&lt;/a> junto a &lt;a href="https://github.com/FROSTR-ORG/igloo-desktop">Igloo Desktop&lt;/a>, &lt;a href="https://github.com/FROSTR-ORG/igloo-android">Igloo for Android&lt;/a>, &lt;a href="https://github.com/FROSTR-ORG/frost2x">Frost2x&lt;/a> e &lt;a href="https://github.com/FROSTR-ORG/igloo-ios">Igloo for iOS&lt;/a>, ampliando las opciones de gestión de claves de umbral en Nostr.&lt;/p>
&lt;h3 id="prism-comparte-cualquier-cosa-en-nostr-desde-android">Prism: Comparte Cualquier Cosa en Nostr desde Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a> es una nueva app Android (Kotlin/Jetpack Compose, API 26+) que se registra como destino de compartir del sistema, permitiendo a los usuarios publicar texto, URLs, imágenes y vídeo en Nostr desde cualquier app de su teléfono. Las URLs compartidas pasan por un eliminador de parámetros de seguimiento antes de componerse en notas. Prism obtiene metadatos OpenGraph para generar vistas previas enriquecidas de enlaces y renderiza referencias nativas de Nostr (&lt;code>note1&lt;/code>, &lt;code>nevent1&lt;/code>) de forma inline.&lt;/p>
&lt;p>El motor de programación usa un enfoque híbrido &lt;code>AlarmManager&lt;/code>/&lt;code>WorkManager&lt;/code> para evitar las optimizaciones de batería de Android: AlarmManager gestiona la temporización precisa de activación mientras que tareas expeditas de WorkManager aseguran la entrega, con reintento exponencial para escenarios offline. Las subidas de medios pasan por servidores &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> configurables con generación de miniaturas para imágenes y fotogramas de vídeo. Toda la firma de eventos se delega a firmantes externos &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> como &lt;a href="https://github.com/greenart7c3/amber">Amber&lt;/a>, con soporte multi-cuenta para cambiar entre identidades. Prism también soporta publicaciones &lt;a href="https://nostrcompass.org/es/topics/nip-84/">NIP-84 (Highlights)&lt;/a>. Del mismo desarrollador que &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-18-newsletter/#aerith-v02">Aerith&lt;/a>.&lt;/p>
&lt;h3 id="hashtree-almacenamiento-direccionado-por-contenido-con-integración-nostr">Hashtree: Almacenamiento Direccionado por Contenido con Integración Nostr&lt;/h3>
&lt;p>&lt;a href="https://files.iris.to/#/npub1xndmdgymsf4a34rzr7346vp8qcptxf75pjqweh8naa8rklgxpfqqmfjtce/hashtree">Hashtree&lt;/a> es un sistema de almacenamiento de blobs direccionado por contenido basado en el sistema de archivos que publica raíces Merkle en Nostr para crear direcciones mutables npub/ruta. El sistema usa &amp;ldquo;almacenamiento simple&amp;rdquo; que funciona con cualquier almacén clave-valor, dividiendo el contenido en bloques de 2MB optimizados para subidas a &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>. A diferencia de BitTorrent, no se necesita computación activa de pruebas Merkle, solo almacenar y recuperar blobs por hash.&lt;/p>
&lt;p>La integración con Nostr permite URLs de repositorios git como &lt;code>htree://npub.../repo-name&lt;/code> para clonar repositorios, con comandos como &lt;code>htree publish mydata &amp;lt;hash&amp;gt;&lt;/code> para publicar hashes de contenido en direcciones &lt;code>npub.../mydata&lt;/code>. El CLI integral soporta modos de almacenamiento cifrado (predeterminado) y público, anclaje de contenido, subida a servidores Blossom y gestión de identidades Nostr. Cada elemento almacenado es bytes crudos o un nodo de árbol, proporcionando una base para la distribución descentralizada de contenido a través de la red de relays de Nostr.&lt;/p>
&lt;h3 id="espy-captura-de-paleta-de-colores-en-shakespeare">Espy: Captura de Paleta de Colores en Shakespeare&lt;/h3>
&lt;p>&lt;a href="https://espy.you">Espy&lt;/a>, construido sobre la plataforma &lt;a href="https://soapbox.pub/tools/shakespeare/">Shakespeare&lt;/a>, permite a los usuarios capturar paletas de colores de fotos y compartirlas como eventos Nostr. Shakespeare es un constructor de apps impulsado por IA que autentica a los usuarios via extensiones de navegador NIP-07 y proporciona conectividad integrada a relays Nostr, para que los desarrolladores lancen apps sin implementar su propia gestión de claves o pool de relays. Espy extrae colores dominantes de la entrada de la cámara en tarjetas de paleta compartibles descubribles a través de feeds estándar de Nostr.&lt;/p>
&lt;h3 id="flotilla-164">Flotilla 1.6.4&lt;/h3>
&lt;p>&lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a>, el cliente Nostr estilo Discord de hodlbod que organiza relays como grupos, lanzó &lt;a href="https://gitea.coracle.social/coracle/flotilla/releases/tag/1.6.4">1.6.4&lt;/a>. La familia de proyectos Coracle ha migrado de GitHub a una &lt;a href="https://gitea.coracle.social/coracle">instancia Gitea&lt;/a> auto-alojada. Este lanzamiento añade notificaciones push via NIP-9a y un flujo de recepción de billetera, además de listados clasificados y soporte de URL de espacio. Las mejoras de interfaz incluyen modales y gestión de notificaciones mejorados. El silenciado de salas y los márgenes seguros en móvil completan los cambios, junto a correcciones para subidas de imágenes en Safari y detalles de eventos de calendario.&lt;/p>
&lt;h3 id="shosho-v0120">Shosho v0.12.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a>, la app de streaming en vivo para móvil con integración Nostr, lanzó &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.12.0">v0.12.0&lt;/a>. Este lanzamiento añade Clips de vídeo con respuestas integradas en el reproductor y emojis personalizados. La protección de hilos bloquea el spam de menciones indirectas, y una nueva función de compartir QR permite a los usuarios intercambiar perfiles offline. Un nuevo modo de reproducción horizontal da a los streams una experiencia de visualización estilo Twitch, y la pantalla de exploración ahora muestra clips de creadores junto a streams en vivo.&lt;/p>
&lt;h3 id="granary-v100">Granary v10.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/snarfed/granary">Granary&lt;/a>, una biblioteca de traducción de la web social que convierte datos entre Nostr, Bluesky, ActivityPub y otras plataformas a un formato común, lanzó &lt;a href="https://github.com/snarfed/granary/releases/tag/v10.0">v10.0&lt;/a> con cambios disruptivos. El lanzamiento cambia los IDs de ActivityStreams 1 predeterminados de Nostr de bech32 a hex y añade soporte ampliado de Nostr incluyendo análisis de menciones &lt;a href="https://github.com/nostr-protocol/nips/blob/master/27.md">NIP-27&lt;/a> y etiquetas de artículo. Una nueva opción de salida múltiple en los conversores permite a los desarrolladores traducir entre protocolos en lote.&lt;/p>
&lt;h3 id="nostr-mcp-server-v300">Nostr MCP Server v3.0.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/AustinKelsay/nostr-mcp-server">Nostr MCP Server&lt;/a>, un servidor &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a> que permite a agentes de IA interactuar con la red Nostr, lanzó &lt;a href="https://github.com/AustinKelsay/nostr-mcp-server/releases/tag/v3.0.0">v3.0.0&lt;/a>. Este lanzamiento mayor añade acciones sociales (follows, reacciones, reposts, respuestas) y gestión de lista de relays con soporte &lt;a href="https://github.com/nostr-protocol/nips/blob/master/65.md">NIP-65&lt;/a> más autenticación opcional &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a>. La mensajería directa via &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> también es nueva. El lanzamiento se complementa con las &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-18-newsletter/#llegan-los-nips-para-agentes-de-ia">propuestas de NIP para agentes de IA&lt;/a> de esta semana como herramientas prácticas para agentes que operan en Nostr.&lt;/p>
&lt;h3 id="aegis-v038">Aegis v0.3.8&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZharlieW/Aegis">Aegis&lt;/a>, el firmante Nostr multiplataforma, lanzó &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.3.8">v0.3.8&lt;/a> con soporte multilingüe en la UI y un gestor de actualizaciones incrementales para su navegador de apps Nostr integrado. El nuevo mecanismo de actualización computa diferencias incrementales contra el estado local, manteniendo el directorio integrado de apps web de Nostr actualizado con menor uso de ancho de banda. El lanzamiento también introduce caché de material de clave de 5 minutos para reducir las consultas a la base de datos al firmar múltiples eventos consecutivos.&lt;/p>
&lt;h3 id="snstr-v031">SNSTR v0.3.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/AustinKelsay/snstr">SNSTR&lt;/a> (Secure Nostr Software Toolkit for Renegades), una biblioteca TypeScript para el protocolo Nostr, lanzó &lt;a href="https://github.com/AustinKelsay/snstr/releases/tag/v0.3.1">v0.3.1&lt;/a>. El lanzamiento añade guardas de verificación de paquete que aseguran que todos los puntos de entrada estén incluidos en los tarballs de npm, con aplicación en CI en Node y Bun. &lt;a href="https://github.com/AustinKelsay/snstr/releases/tag/v0.3.0">v0.3.0&lt;/a> se lanzó la misma semana.&lt;/p>
&lt;h3 id="citrine-v200-pre1">Citrine v2.0.0-pre1&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a>, el relay Android de Nostr de greenart7c3, lanzó &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v2.0.0-pre1">v2.0.0-pre1&lt;/a> con mejoras de rendimiento a través de índices de base de datos optimizados y mejor gestión de corrutinas de Kotlin. El lanzamiento también mejora el soporte para alojar apps web, con cada app ejecutándose ahora en su propio puerto.&lt;/p>
&lt;h2 id="actualizaciones-de-proyectos">Actualizaciones de Proyectos&lt;/h2>
&lt;h3 id="primal-android-expansión-de-infraestructura-nwc">Primal Android: Expansión de Infraestructura NWC&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> fusionó 11 PRs relacionados con NWC esta semana, continuando la construcción &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-04-newsletter/#primal-android-lanza-cifrado-nwc">iniciada hace dos semanas&lt;/a>. Este lote añade soporte de NWC para billetera dual, inicio/parada automática del servicio vinculada a notificaciones del backend, enrutamiento de conexión por tipo de billetera y limpieza adecuada de datos al eliminar una billetera. El servicio NWC ahora gestiona su propio ciclo de vida basado en el estado de la conexión de la billetera, reduciendo la intervención manual del usuario.&lt;/p>
&lt;h3 id="notedeck-preparación-para-android-app-store">Notedeck: Preparación para Android App Store&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>, el cliente Nostr multiplataforma del equipo &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>, fusionó la &lt;a href="https://github.com/damus-io/notedeck/pull/1287">preparación para el lanzamiento en Android App Store&lt;/a> esta semana. El PR añade un plan de cumplimiento de UGC (Contenido Generado por el Usuario) requerido por Google Play, incluyendo una pantalla de aceptación de Términos de Servicio, bloqueo de usuarios via menús contextuales y ajustes, funcionalidad &lt;a href="https://nostrcompass.org/es/topics/nip-56/">NIP-56 (Reporting)&lt;/a> que publica eventos de reporte en relays, y una sección de ajustes de Contenido y Seguridad. Se añadió infraestructura de build para generar APKs firmados y AABs (Android App Bundles) para lanzamiento via nuevos objetivos de Makefile. Un documento EULA establece un requisito de edad de 17+ y avisos específicos de Nostr sobre contenido descentralizado. Las características de cumplimiento en sí se lanzan en PRs de seguimiento; esta fusión sienta las bases de documentación y firma.&lt;/p>
&lt;p>En el lado iOS de Damus, se corrigió un &lt;a href="https://github.com/damus-io/damus/pull/3593">spinner de carga infinita&lt;/a> donde el spinner persistía indefinidamente después de que el contenido ya había cargado.&lt;/p>
&lt;h3 id="nostria-relays-de-descubrimiento-y-correcciones-de-dm">Nostria: Relays de Descubrimiento y Correcciones de DM&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>, el cliente Nostr multiplataforma enfocado en escala global, fusionó 9 PRs esta semana. El más destacado añade &lt;a href="https://github.com/nostria-app/nostria/pull/460">auto-inicialización de Relays de Descubrimiento&lt;/a> para búsqueda de perfiles, dando a los nuevos usuarios conectividad de relay funcional sin configuración manual. Otras correcciones abordan el &lt;a href="https://github.com/nostria-app/nostria/pull/466">ajuste de texto en DMs&lt;/a>, &lt;a href="https://github.com/nostria-app/nostria/pull/479">relleno de viewport en vídeo a pantalla completa&lt;/a>, &lt;a href="https://github.com/nostria-app/nostria/pull/481">extracción de metadatos de artículo en vistas previas de repost&lt;/a> y &lt;a href="https://github.com/nostria-app/nostria/pull/458">resolución de URI nostr: en notificaciones&lt;/a>.&lt;/p>
&lt;h3 id="camelus-migración-a-riverpod-v3">Camelus: Migración a Riverpod v3&lt;/h3>
&lt;p>&lt;a href="https://github.com/camelus-hq/camelus">Camelus&lt;/a>, el cliente Nostr basado en Flutter, fusionó 5 PRs esta semana centrados en una &lt;a href="https://github.com/camelus-hq/camelus/pull/158">migración de API a Riverpod v3&lt;/a> y &lt;a href="https://github.com/camelus-hq/camelus/pull/159">refactorización de feed genérico&lt;/a>. Un &lt;a href="https://github.com/camelus-hq/camelus/pull/161">caché de notas embebidas&lt;/a> evita solicitudes redundantes a relays para notas citadas.&lt;/p>
&lt;h2 id="actualizaciones-de-nips">Actualizaciones de NIPs&lt;/h2>
&lt;p>Cambios recientes al &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Fusionados:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2223">NIP-85: Descubrimiento de Proveedores de Servicio&lt;/a>&lt;/strong>: vitorpamplona añadió orientación sobre el descubrimiento por parte del cliente de proveedores de servicios de &lt;a href="https://nostrcompass.org/es/topics/trusted-relay-assertions/">NIP-85 Trusted Assertions&lt;/a>, incluyendo sugerencias de relay y claves de servicio específicas por algoritmo. Consulta el &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-18-newsletter/#an%c3%a1lisis-profundo-de-nip-nip-85-aserciones-de-confianza">análisis profundo a continuación&lt;/a> para cobertura completa.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1946">NIP-11: Limpieza de Información de Relay&lt;/a>&lt;/strong>: fiatjaf eliminó &lt;code>privacy_policy&lt;/code>, el array &lt;code>retention&lt;/code>, &lt;code>relay_countries&lt;/code> y el bloque de preferencias de comunidad de &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a>. Los operadores de relay rara vez poblaban estos campos y los clientes no actuaban sobre ellos.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1752">NIP-52: Etiqueta de Marca Temporal con Granularidad de Día&lt;/a>&lt;/strong>: staab añadió una etiqueta &lt;code>D&lt;/code> requerida a los eventos de calendario basados en tiempo de &lt;a href="https://nostrcompass.org/es/topics/nip-52/">NIP-52&lt;/a> (kind 31923) que representa la marca temporal Unix con granularidad de día, calculada como &lt;code>floor(unix_seconds / 86400)&lt;/code>. Múltiples etiquetas &lt;code>D&lt;/code> cubren eventos de varios días, permitiendo una indexación temporal eficiente sin analizar marcas temporales completas.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2210">NIP-47: Simplificación&lt;/a>&lt;/strong>: El PR de simplificación &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-11-newsletter/">discutido en el Boletín #9&lt;/a> se fusionó esta semana, eliminando &lt;code>multi_pay_invoice&lt;/code> y &lt;code>multi_pay_keysend&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a>. Consulta el &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-04-newsletter/#an%C3%A1lisis-profundo-de-nip-nip-47-nostr-wallet-connect">Boletín #8&lt;/a> para el análisis profundo completo del protocolo NWC.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abiertos y Discusiones:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2211">NIP-74: Podcasts&lt;/a>&lt;/strong>: Cubierto en el &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-04-newsletter/">Boletín #8&lt;/a>, esta propuesta de especificación de podcasts generó acalorada discusión esta semana. staab señaló que ya existen al menos tres estándares de podcast en competencia, y derekross apuntó a una implementación existente de seis meses con apps y podcasts activos. El camino a seguir requiere convergencia entre implementaciones antes de que se pueda asignar un número de NIP.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2226">NIP-XX: AI Agent Messages&lt;/a>&lt;/strong>: joelklabo propone un protocolo completo de comunicación para agentes de IA con kinds de evento para prompts, respuestas, streaming, telemetría de herramientas, errores y descubrimiento de capacidades. Consulta la &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-18-newsletter/#llegan-los-nips-para-agentes-de-ia">sección de Noticias&lt;/a> para cobertura de todas las propuestas de IA de esta semana.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1893">NIP-PNS: Private Note Storage&lt;/a>&lt;/strong>: El sistema de notas privadas de jb55 define eventos kind 1080 para almacenar notas personales cifradas en relays sin revelar quién las escribió. El esquema deriva un par de claves seudónimo determinista desde el nsec del usuario via HKDF: &lt;code>pns_key = hkdf_extract(ikm=device_key, salt=&amp;quot;nip-pns&amp;quot;)&lt;/code>, luego genera un par de claves secp256k1 a partir de esa clave derivada. Una segunda derivación produce una clave de cifrado simétrica: &lt;code>pns_nip44_key = hkdf_extract(ikm=pns_key, salt=&amp;quot;nip44-v2&amp;quot;)&lt;/code>. Las notas internas se cifran con &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> v2 usando esta clave y se publican bajo la pubkey seudónima, de modo que los relays ven eventos kind 1080 de una identidad no vinculada a la clave principal del usuario. A diferencia de los gift wraps de &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a>, PNS no es vulnerable a spam (la clave seudónima es determinista, no aleatoria) y no lleva metadatos públicos (no se necesitan etiquetas &lt;code>p&lt;/code> ya que no hay destinatario). Esta semana, jb55 publicó hallazgos de la implementación de PNS en el backend Rust de Notedeck (módulo &lt;code>enostr::pns&lt;/code>). Identificó que la llamada &lt;code>hkdf_extract&lt;/code> de la spec es ambigua porque HKDF del RFC 5869 tiene dos fases (Extract y Expand) que producen salidas diferentes, y la mayoría de las bibliotecas esperan ambas. Aclaró que &lt;code>pns_nip44_key&lt;/code> omite el acuerdo de clave ECDH normal de NIP-44 y se usa directamente como clave de conversación, un detalle que los implementadores necesitan saber ya que la mayoría de las bibliotecas NIP-44 usan ECDH por defecto. También señaló una variable indefinida en la implementación de referencia de TypeScript. El PR, originalmente de abril de 2025, está siendo implementado activamente.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2220">NIP-AE: Agents&lt;/a>&lt;/strong>: pablof7z define cuatro kinds de evento para la identidad de agentes en Nostr, extraídos de su trabajo en &lt;a href="https://github.com/tenex-chat/tenex">TENEX&lt;/a>. La plantilla base es kind 4199 (Agent Definition), que lleva título, descripción de rol, instrucciones del sistema, declaraciones de herramientas y versión. Los modificadores de comportamiento viven en kind 4201 (Agent Nudge), que usa etiquetas &lt;code>only-tool&lt;/code>, &lt;code>allow-tool&lt;/code> y &lt;code>deny-tool&lt;/code> para el control de capacidades en tiempo de ejecución. Los agentes publican lo que aprenden como eventos kind 4129 (Agent Lesson), categorizados y vinculados de vuelta a la definición padre via etiquetas &lt;code>e&lt;/code>, refinables a través de hilos de comentarios &lt;a href="https://nostrcompass.org/es/topics/nip-22/">NIP-22&lt;/a>. La verificación de propiedad usa kind 14199, un evento reemplazable donde los operadores humanos listan las pubkeys de sus agentes, estableciendo una cadena bidireccional cuando se compara con la etiqueta &lt;code>p&lt;/code> del perfil kind 0 del agente.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2221">NIP-AD: MCP Server and Skill Announcements&lt;/a>&lt;/strong>: pablof7z define eventos para anunciar servidores &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a> y habilidades individuales en Nostr. Los anuncios de servidores MCP llevan la URL del endpoint del servidor y la versión de protocolo soportada junto a una lista de herramientas disponibles con sus esquemas de entrada. Se soportan comentarios &lt;a href="https://nostrcompass.org/es/topics/nip-22/">NIP-22&lt;/a> en los anuncios de servidor, para que la comunidad pueda discutir y valorar servidores MCP directamente en Nostr.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2224">NIP-73: OSM Tag Kind&lt;/a>&lt;/strong>: DestBro propone añadir identificadores de OpenStreetMap a &lt;a href="https://nostrcompass.org/es/topics/nip-73/">NIP-73 (External Content IDs)&lt;/a>, que estandariza cómo los eventos Nostr hacen referencia a contenido externo como libros (ISBN), películas (ISAN), feeds de podcasts (GUID), geohashes y URLs via etiquetas &lt;code>i&lt;/code> y &lt;code>k&lt;/code>. El kind de OSM propuesto permitiría que los eventos referencien características específicas del mapa (edificios, carreteras, parques) por su ID de nodo u objeto de OpenStreetMap, conectando el contenido de Nostr con la base de datos geográfica abierta.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2219">NIP-XX: Responsive Image Variants&lt;/a>&lt;/strong>: woikos propone extender los eventos de metadatos de archivo &lt;a href="https://nostrcompass.org/es/topics/nip-94/">NIP-94&lt;/a> con etiquetas para variantes de imagen responsiva a diferentes resoluciones. Los clientes podrían seleccionar la variante apropiada según el tamaño de pantalla y las condiciones de red, reduciendo el ancho de banda para usuarios móviles que ven imágenes de alta resolución alojadas en servidores &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="análisis-profundo-de-nip-nip-85-aserciones-de-confianza">Análisis Profundo de NIP: NIP-85 (Aserciones de Confianza)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/85.md">NIP-85&lt;/a> define un sistema para delegar cálculos costosos a proveedores de servicios de confianza que publican resultados firmados como eventos Nostr. Las puntuaciones de Web of Trust y las métricas de engagement requieren rastrear muchos relays y procesar grandes volúmenes de eventos, un trabajo que es impracticable en dispositivos móviles. La &lt;a href="https://github.com/nostr-protocol/nips/pull/2223">fusión de esta semana&lt;/a> añadió orientación sobre el proceso de descubrimiento de estos proveedores por parte del cliente.&lt;/p>
&lt;p>&lt;strong>Delegación:&lt;/strong>&lt;/p>
&lt;p>Calcular la puntuación de Web of Trust de un usuario requiere rastrear grafos de seguimiento con múltiples saltos a través de muchos relays, y computar conteos precisos de seguidores implica deduplicar en toda la red de relays. Los dispositivos móviles y los clientes de navegador no pueden realizar estas operaciones, sin embargo los resultados son esenciales para el filtrado de spam y la clasificación de contenido. NIP-85 cierra esta brecha permitiendo a los usuarios designar proveedores de confianza para ejecutar los cálculos y publicar resultados como eventos estándar de Nostr.&lt;/p>
&lt;p>&lt;strong>Diseño del Protocolo:&lt;/strong>&lt;/p>
&lt;p>NIP-85 usa cuatro kinds de evento para aserciones sobre diferentes tipos de sujetos. Las aserciones de usuario (kind 30382) llevan conteo de seguidores, conteos de publicaciones/respuestas/reacciones, montos de zap, rango normalizado (0-100), temas comunes y horas activas:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30382&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;e88a691e98d9987c964521dff60025f60700378a4879180dcbbb4a5027850411&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;89&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;followers&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4521&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;first_created_at&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1609459200&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;post_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1283&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reply_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;647&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reactions_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;8920&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_amt_recd&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;850000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_amt_sent&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;320000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_cnt_recd&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;412&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_cnt_sent&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;198&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_avg_amt_day_recd&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1150&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_avg_amt_day_sent&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;430&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reports_cnt_recd&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;2&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reports_cnt_sent&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;0&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nostr&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;bitcoin&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;active_hours_start&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;14&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;active_hours_end&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;22&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service key signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Las aserciones de evento (kind 30383) califican notas individuales con conteo de comentarios, conteo de citas, reposts, reacciones y datos de zap:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30383&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;target event id&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;72&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;comment_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;45&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;quote_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;12&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;repost_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;89&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reaction_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;310&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;23&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_amount&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;125000&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service key signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Para eventos direccionables (artículos de formato largo, páginas wiki), el kind 30384 aplica las mismas métricas de engagement a todas las versiones colectivamente. El kind 30385 califica identificadores externos (libros, películas, sitios web, ubicaciones, hashtags) referenciados a través de &lt;a href="https://nostrcompass.org/es/topics/nip-73/">NIP-73 (External Content IDs)&lt;/a>, que estandariza cómo los eventos Nostr hacen referencia a contenido externo via etiquetas &lt;code>i&lt;/code> y &lt;code>k&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30385&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;isbn:9780765382030&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;k&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;isbn&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;94&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;comment_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;67&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reaction_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;203&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service key signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Cada aserción es un evento direccionable reemplazable donde la etiqueta &lt;code>d&lt;/code> contiene el sujeto: una pubkey, ID de evento, dirección de evento o identificador NIP-73. Los proveedores de servicios firman estos eventos con sus propias claves, y los clientes los evalúan basándose en relaciones de confianza.&lt;/p>
&lt;p>&lt;strong>Descubrimiento de Proveedores:&lt;/strong>&lt;/p>
&lt;p>Los usuarios declaran qué proveedores de aserciones confían publicando eventos kind 10040. Cada entrada especifica el tipo de aserción con la pubkey del proveedor y una sugerencia de relay, más variantes de algoritmo opcionales:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;user pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">10040&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;30382:rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4fd5e210...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nip85.nostr.band&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;30382:rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;3d842afe...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nostr.wine&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;30382:zap_amt_sent&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4fd5e210...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nip85.nostr.band&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;30383:rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4fd5e210...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nip85.nostr.band&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;user signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Los usuarios pueden cifrar la lista de etiquetas en &lt;code>.content&lt;/code> usando &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> para mantener privadas sus preferencias de proveedor. Los clientes construyen una lista de proveedores verificando qué proveedores confían las cuentas a las que siguen, creando una capa de reputación descentralizada para los propios proveedores de aserciones.&lt;/p>
&lt;p>&lt;strong>Modelo de Seguridad:&lt;/strong>&lt;/p>
&lt;p>Los proveedores deben usar claves de servicio diferentes para algoritmos distintos, y una clave única por usuario cuando los algoritmos son personalizados, evitando la correlación cruzada de consultas entre usuarios. Cada clave de servicio recibe un evento de metadatos kind 0 que describe el comportamiento del algoritmo, dando a los usuarios transparencia sobre en qué están confiando. Los eventos de aserción solo deben actualizarse cuando los datos subyacentes cambian realmente, evitando tráfico innecesario en los relays y permitiendo a los clientes cachear resultados con confianza.&lt;/p>
&lt;p>&lt;strong>Adopción Actual:&lt;/strong>&lt;/p>
&lt;p>NIP-85 formaliza un patrón que ya estaba emergiendo de forma informal. El servidor de caché de Primal calcula métricas de engagement y puntuaciones de Web of Trust. &lt;a href="https://gitlab.com/soapbox-pub/antiprimal">Antiprimal&lt;/a>, cubierto en el &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-11-newsletter/#antiprimal-gateway-compatible-con-est%C3%A1ndares-al-cache-de-primal">Boletín #9&lt;/a>, conecta estos cálculos a clientes Nostr estándar usando kinds de evento NIP-85. &lt;a href="https://nostr.band">Nostr.band&lt;/a> opera el relay &lt;code>wss://nip85.nostr.band&lt;/code> referenciado en los propios ejemplos de la spec, sirviendo eventos de aserción para los datos de su índice de búsqueda. En el lado del cliente, &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> (desarrollado por vitorpamplona, quien también escribió este NIP) tiene soporte experimental de Aserciones de Confianza en su biblioteca &lt;code>quartz&lt;/code>, analizando eventos de aserción y declaraciones de proveedores de servicio. &lt;a href="https://vertexlab.io">Vertex&lt;/a> calcula métricas similares de Web of Trust pero &lt;a href="https://vertexlab.io/blog/dvms_vs_nip_85/">eligió un enfoque diferente&lt;/a>, usando una API directa en lugar de eventos NIP-85, citando el problema de descubrimiento y la sobrecarga computacional de las arquitecturas basadas en aserciones. Con NIP-85, cualquier cliente puede consumir aserciones de cualquier proveedor a través de un formato de evento estándar, y los proveedores compiten en precisión mientras los usuarios eligen a quién confiar.&lt;/p>
&lt;h2 id="análisis-profundo-de-nip-nip-52-eventos-de-calendario">Análisis Profundo de NIP: NIP-52 (Eventos de Calendario)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/52.md">NIP-52&lt;/a> define eventos de calendario en Nostr, dando a los clientes una forma estándar de representar y descubrir ocurrencias en momentos específicos o entre momentos. La &lt;a href="https://github.com/nostr-protocol/nips/pull/1752">fusión de la etiqueta D&lt;/a> de esta semana añadió indexación con granularidad de día, completando una pieza que faltaba en la infraestructura de consultas de la spec.&lt;/p>
&lt;p>&lt;strong>Dos Tipos de Evento:&lt;/strong>&lt;/p>
&lt;p>NIP-52 separa los eventos de calendario en dos kinds basados en la precisión temporal. Los eventos basados en fecha (kind 31922) representan ocurrencias de todo el día como festivos o festivales de varios días. Usan cadenas de fecha ISO 8601 en sus etiquetas &lt;code>start&lt;/code> y &lt;code>end&lt;/code> opcionales, sin consideración de zona horaria:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event creator pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1735689600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">31922&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Annual celebration of Bitcoin&amp;#39;s genesis block&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;bitcoin-independence-day-2026&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Bitcoin Independence Day&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;start&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;2026-01-03&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;end&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;2026-01-04&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;location&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Worldwide&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;g&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;u4pruydqqv&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;bitcoin&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;organizer-pubkey&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;host&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://bitcoinindependenceday.com&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event creator signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Los eventos basados en tiempo (kind 31923) representan momentos específicos con marcas temporales Unix en sus etiquetas &lt;code>start&lt;/code> y &lt;code>end&lt;/code> opcionales, más identificadores de zona horaria IANA (&lt;code>start_tzid&lt;/code>, &lt;code>end_tzid&lt;/code>) para visualización. Ambos kinds son eventos reemplazables parametrizados, por lo que los organizadores actualizan los detalles publicando un nuevo evento con la misma etiqueta &lt;code>d&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Calendarios y RSVPs:&lt;/strong>&lt;/p>
&lt;p>Los eventos kind 31924 definen calendarios como colecciones, referenciando eventos via etiquetas &lt;code>a&lt;/code> que apuntan a eventos kind 31922 o 31923 por sus coordenadas de dirección:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;calendar owner pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">31924&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Nostr community events worldwide&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nostr-community-calendar&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Nostr Community Events&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;31923:&amp;lt;organizer-pubkey&amp;gt;:nostr-meetup-2026&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;31922:&amp;lt;organizer-pubkey&amp;gt;:bitcoin-independence-day-2026&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;calendar owner signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Los usuarios pueden mantener múltiples calendarios (personal, trabajo, comunidad) y los clientes pueden suscribirse a calendarios de pubkeys específicas. Los eventos de calendario pueden incluir una etiqueta &lt;code>a&lt;/code> que referencia un calendario para solicitar inclusión, habilitando la gestión colaborativa de calendarios donde múltiples usuarios contribuyen eventos a calendarios que no poseen.&lt;/p>
&lt;p>Los RSVPs usan kind 31925, donde los usuarios publican su estado de asistencia junto a un indicador opcional de libre/ocupado:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;attendee pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">31925&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Looking forward to it&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;31923:&amp;lt;organizer-pubkey&amp;gt;:nostr-meetup-2026&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;kind 31923 event id&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;unique-rsvp-id&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;status&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;accepted&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;fb&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;busy&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;organizer-pubkey&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;attendee signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Los valores válidos de &lt;code>status&lt;/code> son &amp;ldquo;accepted&amp;rdquo;, &amp;ldquo;declined&amp;rdquo;, &amp;ldquo;tentative&amp;rdquo;, y la etiqueta opcional &lt;code>fb&lt;/code> marca al usuario como libre u ocupado para ese período. Los eventos RSVP referencian la etiqueta &lt;code>a&lt;/code> del evento de calendario y llevan la etiqueta &lt;code>p&lt;/code> del organizador, para que el cliente del organizador pueda agregar respuestas de múltiples relays.&lt;/p>
&lt;p>&lt;strong>La Adición de la Etiqueta D:&lt;/strong>&lt;/p>
&lt;p>Antes de la fusión de esta semana, los clientes que consultaban eventos en un rango de fechas tenían que obtener todos los eventos de una pubkey o calendario y filtrar en el lado del cliente. La nueva etiqueta &lt;code>D&lt;/code> requerida en los eventos basados en tiempo (kind 31923) contiene una marca temporal Unix con granularidad de día calculada como &lt;code>floor(unix_seconds / 86400)&lt;/code>. Los eventos de varios días llevan múltiples etiquetas &lt;code>D&lt;/code>, una por día. Los relays ahora pueden indexar eventos por día y responder a consultas filtradas de forma eficiente, convirtiendo lo que era un problema de filtrado en el cliente en una búsqueda de índice en el relay.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event creator pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">31923&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Monthly meetup for Nostr developers in Austin&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nostr-meetup-2026&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Nostr Developer Meetup&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;summary&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Talks and demos from local Nostr builders&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;image&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://example.com/meetup-banner.jpg&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;start&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1740067200&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;end&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1740078000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;start_tzid&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;America/New_York&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;end_tzid&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;America/New_York&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;D&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;20139&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;location&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Bitcoin Commons, Austin TX&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;g&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;9v6knb2pg&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;organizer-pubkey&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;host&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;speaker-pubkey&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;speaker&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nostr&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;meetup&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://bitcoincommons.com&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event creator signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El valor &lt;code>D&lt;/code> de &lt;code>20139&lt;/code> es igual a &lt;code>floor(1740067200 / 86400)&lt;/code>, situando este evento el 20 de febrero de 2025. Los clientes que consultan por &amp;ldquo;todos los eventos de esta semana&amp;rdquo; envían un filtro con el rango &lt;code>D&lt;/code> correspondiente, y los relays devuelven solo los eventos coincidentes.&lt;/p>
&lt;p>&lt;strong>Decisiones de Diseño:&lt;/strong>&lt;/p>
&lt;p>NIP-52 omite intencionalmente los eventos recurrentes. La spec deja las reglas de recurrencia (RRULE de iCalendar) completamente fuera, delegando esa complejidad a los clientes. Un organizador publica eventos individuales para cada ocurrencia, manteniendo el modelo de datos en el relay simple. Las etiquetas de participante llevan roles opcionales (&amp;ldquo;host&amp;rdquo;, &amp;ldquo;speaker&amp;rdquo;, &amp;ldquo;attendee&amp;rdquo;), y las etiquetas de ubicación pueden incluir etiquetas geohash &lt;code>g&lt;/code> para consultas espaciales junto a direcciones legibles por humanos.&lt;/p>
&lt;p>&lt;strong>Implementaciones:&lt;/strong>&lt;/p>
&lt;p>&lt;a href="https://github.com/zmeyer44/flockstr">Flockstr&lt;/a> es el cliente de calendario principal construido sobre NIP-52. &lt;a href="https://gitea.coracle.social/coracle/coracle">Coracle&lt;/a> muestra eventos de calendario en su feed social. La adición de la etiqueta &lt;code>D&lt;/code> de esta semana habilita la indexación temporal en el relay que ambos clientes pueden usar para reducir el ancho de banda al consultar eventos en un rango de fechas específico.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. ¿Estás construyendo algo o tienes noticias que compartir? ¿Quieres que cubramos tu proyecto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Escríbenos vía DM &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>&lt;/a> o encuéntranos en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #9</title><link>https://nostrcompass.org/es/newsletters/2026-02-11-newsletter/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-02-11-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Mostro lanza su primera beta pública tras tres años de desarrollo, llevando el intercambio P2P de Bitcoin a móviles vía Nostr. OpenSats otorga su decimosexta ronda de grants de Bitcoin, con Minibits Wallet recibiendo renovación para su billetera Cashu integrada con Nostr. &lt;strong>Zapstore alcanza su versión estable 1.0&lt;/strong>, marcando la maduración de la tienda de aplicaciones Android descentralizada. Coracle 0.6.29 añade temas y comentarios en highlights. Igloo Desktop v1.0.3 incorpora endurecimiento de seguridad para firma de umbral Frostr. Amber v4.1.2-pre1 migra a arquitectura Flow. Angor alcanza v0.2.5 con interfaz de financiación renovada y configuración de servidor de imágenes NIP-96. NostrPress se lanza como herramienta que convierte perfiles Nostr en blogs estáticos. Antiprimal publica un gateway compatible con estándares que conecta el servidor cache propietario de Primal con NIPs estándar de Nostr. Primal Android fusiona 18 PRs expandiendo la infraestructura NWC con soporte de doble billetera, registro de auditoría y el método &lt;code>lookup_invoice&lt;/code>. diVine lanza feeds de video API-first. El SDK TypeScript de Marmot separa su app de chat de referencia en un repositorio independiente y comienza la migración a ts-mls v2. El repositorio de NIPs fusiona conteo aproximado HyperLogLog para NIP-45 y extrae etiquetas de identidad del kind 0. Varias propuestas de vitorpamplona inician una reducción sistemática de eventos de metadatos kind 0. Nuevas propuestas de protocolo incluyen Nostr Relay Connect para traversal de NAT y Nostr Web Tokens para claims web firmados. El análisis profundo de esta semana cubre el nuevo conteo aproximado HyperLogLog de NIP-45 para métricas de eventos entre relays y el protocolo de almacenamiento de archivos HTTP de NIP-96, ahora obsoleto en favor de Blossom, mientras proyectos transitan entre ambos estándares de medios.&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Mostro lanza su primera beta pública tras tres años de desarrollo, llevando el intercambio P2P de Bitcoin a móviles vía Nostr. OpenSats otorga su decimosexta ronda de grants de Bitcoin, con Minibits Wallet recibiendo renovación para su billetera Cashu integrada con Nostr. &lt;strong>Zapstore alcanza su versión estable 1.0&lt;/strong>, marcando la maduración de la tienda de aplicaciones Android descentralizada. Coracle 0.6.29 añade temas y comentarios en highlights. Igloo Desktop v1.0.3 incorpora endurecimiento de seguridad para firma de umbral Frostr. Amber v4.1.2-pre1 migra a arquitectura Flow. Angor alcanza v0.2.5 con interfaz de financiación renovada y configuración de servidor de imágenes NIP-96. NostrPress se lanza como herramienta que convierte perfiles Nostr en blogs estáticos. Antiprimal publica un gateway compatible con estándares que conecta el servidor cache propietario de Primal con NIPs estándar de Nostr. Primal Android fusiona 18 PRs expandiendo la infraestructura NWC con soporte de doble billetera, registro de auditoría y el método &lt;code>lookup_invoice&lt;/code>. diVine lanza feeds de video API-first. El SDK TypeScript de Marmot separa su app de chat de referencia en un repositorio independiente y comienza la migración a ts-mls v2. El repositorio de NIPs fusiona conteo aproximado HyperLogLog para NIP-45 y extrae etiquetas de identidad del kind 0. Varias propuestas de vitorpamplona inician una reducción sistemática de eventos de metadatos kind 0. Nuevas propuestas de protocolo incluyen Nostr Relay Connect para traversal de NAT y Nostr Web Tokens para claims web firmados. El análisis profundo de esta semana cubre el nuevo conteo aproximado HyperLogLog de NIP-45 para métricas de eventos entre relays y el protocolo de almacenamiento de archivos HTTP de NIP-96, ahora obsoleto en favor de Blossom, mientras proyectos transitan entre ambos estándares de medios.&lt;/p>
&lt;h2 id="noticias">Noticias&lt;/h2>
&lt;h3 id="mostro-lanza-primera-beta-pública">Mostro Lanza Primera Beta Pública&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>, el exchange peer-to-peer de Bitcoin construido sobre Nostr, lanzó su &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.1.0">app móvil v1.1.0&lt;/a>, la primera beta pública del proyecto tras tres años de desarrollo. La app permite intercambiar Bitcoin directamente usando Nostr para la coordinación de órdenes, con Lightning para la liquidación y ningún intermediario custodio.&lt;/p>
&lt;p>El lanzamiento introduce notificaciones push con mejor fiabilidad en segundo plano en Android, un sistema de logging opcional que permite capturar y compartir datos de diagnóstico cuando surgen problemas, actualizaciones de relay más fluidas usando inicialización aditiva, y refinamientos de interfaz de Fase 2 con soporte de internacionalización. La app está disponible en &lt;a href="https://zapstore.dev">Zapstore&lt;/a> y como &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.1.0">descarga directa de GitHub&lt;/a>.&lt;/p>
&lt;p>Mostro se une a Shopstr y Plebeian Market como aplicación de comercio nativa de Nostr, con la distinción de que se enfoca en la coordinación del intercambio fiat-a-Bitcoin. El &lt;a href="https://github.com/MostroP2P/mostro">daemon de Mostro&lt;/a> subyacente maneja el emparejamiento de órdenes y la resolución de disputas a través de relays Nostr.&lt;/p>
&lt;h3 id="decimosexta-ronda-de-grants-de-bitcoin-de-opensats">Decimosexta Ronda de Grants de Bitcoin de OpenSats&lt;/h3>
&lt;p>&lt;a href="https://opensats.org/blog/sixteenth-wave-of-bitcoin-grants">OpenSats&lt;/a> anunció grants para 17 proyectos de código abierto. Lo destacado para Nostr: &lt;a href="https://github.com/minibits-cash/minibits_wallet">Minibits Wallet&lt;/a>, la billetera Android de &lt;a href="https://nostrcompass.org/es/topics/cashu/">Cashu&lt;/a> con soporte de eventos de billetera &lt;a href="https://nostrcompass.org/es/topics/nip-60/">NIP-60&lt;/a> e integración de nutzap, recibió renovación de grant. Minibits usa eventos Nostr para almacenar el estado de tokens ecash, haciendo respaldos de billetera portables entre dispositivos a través de sincronización por relay.&lt;/p>
&lt;h3 id="nostrpress-de-perfil-nostr-a-blog-estático">NostrPress: De Perfil Nostr a Blog Estático&lt;/h3>
&lt;p>&lt;a href="https://github.com/besoeasy/NostrPress">NostrPress&lt;/a> (&lt;a href="https://blog.besoeasy.com">blog.besoeasy.com&lt;/a>) es una herramienta nueva que convierte un perfil Nostr en un blog completamente estático desplegable en cualquier lugar. Tras publicar artículos en Nostr a través de cualquier cliente, NostrPress genera un sitio web independiente a partir de esos eventos, con alojamiento local de medios y feeds RSS.&lt;/p>
&lt;p>Construido con Nunjucks templating y JavaScript, NostrPress produce sitios con cero dependencia de plataforma. La salida generada es HTML/CSS plano que puede alojarse en cualquier servidor de archivos estáticos, GitHub Pages, Netlify o un VPS personal. La herramienta se une a &lt;a href="https://github.com/nostrband/nostrsite">Npub.pro&lt;/a> y &lt;a href="https://github.com/servus-social/servus">Servus&lt;/a> como opciones para convertir contenido Nostr en sitios web tradicionales.&lt;/p>
&lt;h3 id="antiprimal-gateway-compatible-con-estándares-al-cache-de-primal">Antiprimal: Gateway Compatible con Estándares al Cache de Primal&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/antiprimal">antiprimal&lt;/a> (&lt;a href="https://antiprimal.net">antiprimal.net&lt;/a>), un nuevo proyecto de Alex Gleason y el equipo Soapbox, es un gateway WebSocket que conecta el servidor cache propietario de Primal con mensajes del protocolo estándar de Nostr. Primal ofrece funciones como estadísticas de eventos, búsqueda de contenido y cálculos de Web of Trust a través de &lt;code>wss://cache.primal.net/v1&lt;/code>, pero el acceso requiere un formato de mensaje propietario con un campo &lt;code>cache&lt;/code> no estándar que clientes Nostr normales no pueden usar. Antiprimal traduce solicitudes NIP estándar al formato de Primal y convierte las respuestas de vuelta.&lt;/p>
&lt;p>El gateway soporta consultas COUNT de &lt;a href="https://nostrcompass.org/es/topics/nip-45/">NIP-45&lt;/a> (reacciones, respuestas, reposts, conteos de zap, conteos de seguidores), búsqueda &lt;a href="https://github.com/nostr-protocol/nips/blob/master/50.md">NIP-50&lt;/a>, información de relay &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a>, y &lt;a href="https://github.com/nostr-protocol/nips/blob/master/85.md">NIP-85&lt;/a> Trusted Assertions para datos precalculados de Web of Trust de Primal. Un bot acompañante publica eventos NIP-85 kind 30382 (estadísticas de usuario) y kind 30383 (engagement de evento) a relays configurables. El proyecto está construido con TypeScript sobre Bun y usa la biblioteca Nostrify. Creado el 6 de febrero, acumula 53 commits en sus primeros tres días de desarrollo y está en línea en antiprimal.net.&lt;/p>
&lt;h3 id="ikaros-gateway-de-mensajería-de-agentes-de-ia-para-signal-y-nostr">Ikaros: Gateway de Mensajería de Agentes de IA para Signal y Nostr&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/ikaros">Ikaros&lt;/a>, un nuevo proyecto del equipo Soapbox, es un gateway de mensajería que permite a agentes de IA comunicarse a través de DMs cifrados tanto de Signal como de Nostr. El puente usa el &lt;a href="https://agentclientprotocol.org">Agent Client Protocol&lt;/a> (ACP) para conectar cualquier asistente de IA compatible con ACP a redes de mensajería reales. Tres pull requests constituyen la construcción inicial del proyecto esta semana.&lt;/p>
&lt;p>El primer PR (&lt;a href="https://gitlab.com/soapbox-pub/ikaros/-/merge_requests/1">#1&lt;/a>) implementa un adaptador completo de DM cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a> con soporte de envío/recepción, buffering de respuestas con flush explícito al completar, formatos de clave privada &lt;code>nsec&lt;/code> y hex, publicación multi-relay con reconexión automática, y un asistente de configuración interactivo. El adaptador usa nostr-tools v2.23.0 y actualiza el ACP SDK a v0.14.1.&lt;/p>
&lt;p>El segundo PR (&lt;a href="https://gitlab.com/soapbox-pub/ikaros/-/merge_requests/2">#2&lt;/a>) corrige una pérdida silenciosa de mensajes causada por condición de carrera en la actualización de sesión. Notificaciones entrantes que llegaban antes de que la sesión estuviera registrada en el mapa se perdían, y la corrección almacena esas notificaciones en buffer para reproducirlas cuando el registro se completa. El tercer PR (&lt;a href="https://gitlab.com/soapbox-pub/ikaros/-/merge_requests/3">#3&lt;/a>) añade metadatos de nombre de usuario y grupo/UUID de Signal a interacciones con el agente, para que el agente de IA sepa con quién habla y en qué grupo. El proyecto abre un nuevo espacio de diseño donde agentes de IA direccionables vía DMs de Nostr pueden ser contactados desde Signal, o viceversa.&lt;/p>
&lt;h3 id="campaña-de-reducción-del-kind-0">Campaña de Reducción del Kind 0&lt;/h3>
&lt;p>vitorpamplona abrió una serie de PRs esta semana proponiendo la extracción sistemática de datos de eventos kind 0 (metadatos de usuario) hacia kinds de evento dedicados. La campaña aborda un problema creciente, ya que eventos kind 0 han acumulado campos con el tiempo que la mayoría de clientes no usa, inflando el tamaño de cada consulta de perfil.&lt;/p>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/pull/2216">PR #2216&lt;/a> (fusionado) mueve etiquetas de identidad (etiquetas &lt;code>i&lt;/code>) del kind 0 a un nuevo kind 10011, dado que la adopción de estas etiquetas ha sido mínima. Otro PR (&lt;a href="https://github.com/nostr-protocol/nips/pull/2213">#2213&lt;/a>) propone mover la verificación &lt;a href="https://nostrcompass.org/es/topics/nip-05/">NIP-05&lt;/a> al kind 10008, lo que permitiría a usuarios tener múltiples identificadores NIP-05 y filtrar eventos por dirección NIP-05. Un tercer PR (&lt;a href="https://github.com/nostr-protocol/nips/pull/2217">#2217&lt;/a>) propone extraer direcciones Lightning (lud06/lud16) a un nuevo kind, evitando que todos los usuarios de kind 0 carguen campos relacionados con zap que solo importan a clientes con integración Lightning.&lt;/p>
&lt;p>Las propuestas han reavivado la discusión sobre la estructura general del kind 0, incluyendo el &lt;a href="https://github.com/nostr-protocol/nips/pull/1770">PR #1770&lt;/a>, la propuesta de larga data para reemplazar JSON stringificado en el contenido del kind 0 con etiquetas estructuradas.&lt;/p>
&lt;h3 id="soporte-de-nip-70-en-relays-es-crítico-para-la-seguridad-de-mensajería-cifrada">Soporte de NIP-70 en Relays es Crítico para la Seguridad de Mensajería Cifrada&lt;/h3>
&lt;p>La implementación White Noise del protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> ha &lt;a href="https://blog.jgmontoya.com/2026/02/10/nip70-relay-status.html">identificado una brecha crítica&lt;/a> en el soporte de relays para &lt;a href="https://github.com/nostr-protocol/nips/blob/master/70.md">NIP-70&lt;/a> (Eventos Protegidos) y &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a> (Autenticación). Las pruebas revelaron que relays públicos principales, incluyendo Damus, Primal y nos.lol, rechazan eventos protegidos directamente con errores &lt;code>blocked: event marked as protected&lt;/code> en lugar de iniciar el desafío de autenticación requerido.&lt;/p>
&lt;p>Esto rompe una función de seguridad clave. NIP-70 permite la eliminación segura de KeyPackages MLS gastados, previniendo ataques de &amp;ldquo;recopilar ahora, descifrar después&amp;rdquo;. Al no contar con soporte de relays, protocolos de mensajería cifrada no pueden proteger a usuarios de un futuro compromiso de claves. White Noise ha desactivado NIP-70 por defecto en respuesta, manteniendo bandera opcional para usuarios con relays que lo soporten.&lt;/p>
&lt;p>&lt;strong>Llamado a la acción para operadores de relays:&lt;/strong> Implementen el flujo completo de autenticación NIP-42. Al recibir eventos protegidos, desafíen a clientes a probar la propiedad, luego acepten escrituras validadas. Rechazar eventos protegidos sin autenticación rompe las garantías de seguridad del protocolo de las que dependen aplicaciones de mensajería cifrada.&lt;/p>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;h3 id="coracle-0629">Coracle 0.6.29&lt;/h3>
&lt;p>&lt;a href="https://github.com/coracle-social/coracle">Coracle&lt;/a> (&lt;a href="https://coracle.social">coracle.social&lt;/a>), el cliente web de hodlbod, publicó &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.29">0.6.29&lt;/a>. El lanzamiento añade visualización de temas y comentarios en highlights kind 9802. Un nuevo elemento de navegación de listas da acceso rápido a listas curadas por el usuario desde la interfaz principal. Bajo el capó, Coracle se actualizó a la nueva versión de Welshman, la biblioteca Nostr compartida que gestiona el manejo de relays y eventos de Coracle. La lista de relays por defecto fue renovada, y el rastreo de errores Glitchtip fue eliminado del código.&lt;/p>
&lt;h3 id="igloo-desktop-v103">Igloo Desktop v1.0.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/FROSTR-ORG/igloo-desktop">Igloo Desktop&lt;/a>, la aplicación de firma de umbral y gestión de claves basada en &lt;a href="https://nostrcompass.org/es/topics/frost/">FROST&lt;/a>, publicó &lt;a href="https://github.com/FROSTR-ORG/igloo-desktop/releases/tag/v1.0.3">v1.0.3&lt;/a> con endurecimiento de seguridad extensivo. El lanzamiento introduce validación IPC, aislamiento Electron, y verificaciones de relay con protección contra SSRF (server-side request forgery). Un nuevo flujo de onboarding e importación de shares simplifica la distribución de claves, la planificación de relays ahora incluye normalización y fusión por prioridad, y la arquitectura de API Electron basada en preload mejora la frontera de seguridad entre el renderer y el proceso principal. Un sistema keep-alive para el firmante mantiene la estabilidad de sesiones de firma de umbral, y mejoras de UX en la recuperación reducen la fricción de la restauración de claves.&lt;/p>
&lt;h3 id="amber-v412-pre1">Amber v4.1.2-pre1&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, el firmante de eventos Android, lanzó &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.2-pre1">v4.1.2-pre1&lt;/a> corrigiendo la visualización ausente de puntuación de confianza de relay introducida en v4.1.1, resolviendo problemas de parseo JSON para solicitudes de cifrado/descifrado no-Nostr, y migrando el modelo de cuenta de LiveData a Flow para gestión de estado más predecible. El lanzamiento cambia secretos bunker a UUIDs completos y actualiza al plugin Gradle 9.&lt;/p>
&lt;h3 id="mostro-mobile-v110-y-daemon-v0161">Mostro Mobile v1.1.0 y Daemon v0.16.1&lt;/h3>
&lt;p>Consulta la &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-11-newsletter/#mostro-lanza-primera-beta-p%c3%bablica">sección de Noticias arriba&lt;/a> para la cobertura completa del lanzamiento móvil. En el lado del servidor, el &lt;a href="https://github.com/MostroP2P/mostro">daemon de Mostro&lt;/a> publicó &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.1">v0.16.1&lt;/a>, añadiendo publicación automática de metadatos NIP-01 kind 0 al iniciar (vía &lt;a href="https://github.com/MostroP2P/mostro/pull/575">PR #575&lt;/a>), para que el daemon ahora anuncie su identidad a la red cuando se conecta. La documentación del cálculo de comisiones de desarrollo fue corregida en &lt;a href="https://github.com/MostroP2P/mostro/pull/571">PR #571&lt;/a>.&lt;/p>
&lt;h3 id="angor-v025">Angor v0.2.5&lt;/h3>
&lt;p>&lt;a href="https://github.com/block-core/angor">Angor&lt;/a> (&lt;a href="https://angor.io">angor.io&lt;/a>), el protocolo de financiación P2P descentralizado construido sobre Bitcoin y Nostr, publicó &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.5">v0.2.5&lt;/a> con tres PRs fusionados. El &lt;a href="https://github.com/block-core/angor/pull/649">PR #649&lt;/a> rediseña la sección de gestión de Fondos (V2), reemplazando el diseño anterior con nueva interfaz para rastrear UTXOs individuales y posiciones de inversión. La renovación del InvoiceView en &lt;a href="https://github.com/block-core/angor/pull/651">PR #651&lt;/a> trae estilos de botón actualizados, diálogos cerrables, un nuevo comando &amp;ldquo;Copiar Dirección&amp;rdquo;, soporte de cancelación para monitoreo de direcciones y mejor manejo del flujo de inversión. Servidores de imágenes &lt;a href="https://nostrcompass.org/es/topics/nip-96/">NIP-96&lt;/a> (&lt;a href="https://github.com/nostr-protocol/nips/blob/master/96.md">spec&lt;/a>) configurables en ajustes se añaden en &lt;a href="https://github.com/block-core/angor/pull/652">PR #652&lt;/a>, permitiendo a usuarios elegir qué endpoint de subida de medios maneja sus imágenes y documentación de proyecto. La versión &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.4">v0.2.4&lt;/a> se publicó la semana anterior.&lt;/p>
&lt;h3 id="ridestr-v022-y-v023">Ridestr v0.2.2 y v0.2.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a>, la plataforma de viaje compartido descentralizada &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-04-newsletter/#ridestr-v020-lanzamiento-roadflare">cubierta la semana pasada&lt;/a>, continuó su rápida iteración con &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.2">v0.2.2&lt;/a> (Hotfix de Pago Bridge) y &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.3">v0.2.3&lt;/a> tras el v0.2.0 &amp;ldquo;Lanzamiento RoadFlare&amp;rdquo;. El hotfix v0.2.2 aborda un bug donde pagos bridge de &lt;a href="https://nostrcompass.org/es/topics/cashu/">Cashu&lt;/a> cross-mint estaban auto-cancelando viajes mientras el pago aún se procesaba o eventualmente tendría éxito, previniendo cancelaciones prematuras de viaje en liquidaciones lentas. Corrige parpadeo de UI y hitboxes táctiles rotos en el botón &amp;ldquo;mi ubicación&amp;rdquo;. La versión v0.2.3 incluye correcciones de bugs adicionales. Ambos lanzamientos incluyen APKs separados para Ridestr (app de pasajero) y Drivestr (app de conductor).&lt;/p>
&lt;h3 id="nostr-php-194">Nostr PHP 1.9.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrver-se/nostr-php">Nostr PHP&lt;/a> (&lt;a href="https://nostr-php.dev">nostr-php.dev&lt;/a>), la biblioteca auxiliar de PHP para el protocolo Nostr, publicó &lt;a href="https://github.com/nostrver-se/nostr-php/releases/tag/1.9.4">1.9.4&lt;/a> añadiendo propiedad configurable de &lt;code>timeout&lt;/code> a la clase de solicitud (en &lt;a href="https://github.com/nostrver-se/nostr-php/pull/106">PR #106&lt;/a>). Esto permite a desarrolladores establecer duraciones de timeout personalizadas para conexiones de relay y solicitudes de mensajes, previniendo bloqueos indefinidos cuando un relay no responde o tarda en contestar.&lt;/p>
&lt;h3 id="zapstore-v100">Zapstore v1.0.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapstore/zapstore/releases/tag/1.0.0">Zapstore&lt;/a> (&lt;a href="https://zapstore.dev">zapstore.dev&lt;/a>), la tienda de aplicaciones Android construida sobre Nostr, &lt;strong>alcanzó su hito de versión estable 1.0&lt;/strong> esta semana tras meses de release candidates.&lt;/p>
&lt;p>El lanzamiento 1.0 incluye mejoras de estabilidad críticas, entre ellas manejo del estado del botón de instalación que asegura que Eliminar aparezca inmediatamente después de completar la instalación, mensajes de error amigables con detalles técnicos expandibles, y un botón &amp;ldquo;Reportar problema&amp;rdquo; que envía DMs cifrados vía Nostr usando claves efímeras. Contiene pantalla nueva de actualizaciones con polling y seguimiento por lotes, mejor watchdog de descargas para transferencias estancadas, límites dinámicos de descargas concurrentes según el rendimiento del dispositivo, sincronización más frecuente de paquetes instalados, y mejor lógica de comparación de versiones. El equipo corrigió un problema crítico de flutter_secure_storage y mejoró el manejo de casos límite del gestor de paquetes.&lt;/p>
&lt;p>Este hito marca la maduración de la primera plataforma dedicada de distribución de apps de Nostr, permitiendo a desarrolladores publicar aplicaciones Android directamente a usuarios sin el control de acceso de tiendas de apps centralizadas.&lt;/p>
&lt;h3 id="zsp-v031">ZSP v0.3.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapstore/zsp">ZSP&lt;/a>, la herramienta CLI en Go del equipo &lt;a href="https://github.com/zapstore/zapstore">Zapstore&lt;/a> que reemplaza las herramientas de publicación anteriores para firmar y subir apps Android a relays Nostr, lanzó &lt;a href="https://github.com/zapstore/zsp/releases/tag/v0.3.1">v0.3.1&lt;/a>. ZSP maneja la adquisición de APK desde GitHub, GitLab, Codeberg, F-Droid o archivos locales, luego parsea metadatos, firma eventos Nostr (vía clave privada, bunker &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> o extensión de navegador &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a>), y sube artefactos a servidores &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a>. La versión añade modo offline completo para vinculación de keystore sin conexión de red, cabeceras &lt;code>Content-Digest&lt;/code> en subidas a Blossom para cumplimiento del protocolo, detección corregida de APK arm64-v8a desde repositorios F-Droid, correcciones de parámetros de consulta trailing de GitLab, y soporte completo de archivos &lt;code>.env&lt;/code> para configuración.&lt;/p>
&lt;h3 id="damus-ios-117">Damus iOS 1.17&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>, el cliente iOS de Nostr, se actualizó a la versión 1.17 (en &lt;a href="https://github.com/damus-io/damus/pull/3606">PR #3606&lt;/a>). El lanzamiento corrige un problema de RelayPool donde conexiones se cerraban tras liberar reservas efímeras (vía &lt;a href="https://github.com/damus-io/damus/pull/3605">PR #3605&lt;/a>), lo que podía causar que suscripciones se interrumpieran inesperadamente. Resuelve un bug donde la línea de tiempo de favoritos no mostraba eventos al cambiar entre pestañas (en &lt;a href="https://github.com/damus-io/damus/pull/3603">PR #3603&lt;/a>).&lt;/p>
&lt;h3 id="nak-v0183">nak v0.18.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>, el Nostr army knife CLI, publicó &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.18.3">v0.18.3&lt;/a> con tres correcciones de estabilidad: prevención de panic cuando etiquetas de desafío AUTH son nil o demasiado cortas, verificación de errores de dateparser antes de usar el valor parseado, y manejo de URLs de mint Cashu que carecen del separador &lt;code>://&lt;/code>.&lt;/p>
&lt;h3 id="mi-relay-local-en-el-navegador">Mi: Relay Local en el Navegador&lt;/h3>
&lt;p>&lt;a href="https://git.shakespeare.diy/npub1scvyzz02ayma34hesz62pdrd5nhsmxp74hjq8msmfs9khh3r3drsnw68d8/mi.git">Mi&lt;/a> (&lt;a href="https://mi.shakespeare.wtf">mi.shakespeare.wtf&lt;/a>), nueva MiniApp de &lt;a href="https://shakespeare.wtf">Shakespeare&lt;/a>, es un relay local en el navegador que archiva eventos Nostr del usuario en IndexedDB. Mi obtiene perfiles (kind 0), listas de contactos (kind 3), listas de relays (kind 10002) y eventos de billetera desde relays conectados y almacena todo localmente, dando acceso offline a los propios datos. Construido con React y nostr-tools 2.15.0.&lt;/p>
&lt;h3 id="agora-v102">Agora v1.0.2&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/agora">Agora&lt;/a> (&lt;a href="https://agora.spot">agora.spot&lt;/a>), plataforma de activismo y recaudación de fondos descentralizada del equipo Soapbox, publicó &lt;a href="https://gitlab.com/soapbox-pub/agora/-/releases/v1.0.2">v1.0.2&lt;/a> con APK Android disponible para instalación directa. Primera mención de Agora en Compass. Lanzada el 17 de enero con declaración de misión: &amp;ldquo;Únete al movimiento global por la libertad. Envía apoyo a activistas en el terreno internacionalmente y participa en acciones locales.&amp;rdquo;&lt;/p>
&lt;p>La plataforma se centra en un mapa mundial donde usuarios exploran por país, crean &amp;ldquo;acciones&amp;rdquo; geoetiquetadas (protestas, campañas, organización comunitaria) y las discuten en hilos de comentarios. Todo el contenido se propaga a través de relays Nostr, por lo que ningún servidor central puede ser desconectado para silenciar la coordinación. Agora soporta múltiples idiomas con paridad de traducción verificada por CI, integra servidores de medios &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> para subidas, e incluye búsqueda, navegación por hashtags con alternancia global/regional, perfiles de usuario y sistemas de reacciones. El lanzamiento v1.0.2 es la build Android actual, disponible como descarga directa de APK.&lt;/p>
&lt;h3 id="xonos-v016">xonos v0.1.6&lt;/h3>
&lt;p>&lt;a href="https://codeberg.org/xonos/xonos">xonos&lt;/a>, el cliente experimental de Nostr en 3D construido con el motor de juego Bevy, publicó &lt;a href="https://codeberg.org/xonos/xonos/releases/tag/v0.1.6">v0.1.6&lt;/a>. xonos renderiza eventos Nostr en un entorno espacial 3D con capacidades de text-to-speech, explorando cómo datos del protocolo social podrían funcionar fuera de interfaces 2D convencionales.&lt;/p>
&lt;h2 id="actualizaciones-de-proyectos">Actualizaciones de Proyectos&lt;/h2>
&lt;h3 id="primal-android-expande-infraestructura-nwc">Primal Android Expande Infraestructura NWC&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> fusionó 18 PRs esta semana, continuando la construcción NWC &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-04-newsletter/#primal-android-lanza-cifrado-nwc">iniciada la semana pasada&lt;/a>. El &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/883">PR #883&lt;/a> añade soporte para conexiones NWC en ambas billeteras (Spark y externa), y el &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/879">PR #879&lt;/a> implementa el método NWC &lt;code>lookup_invoice&lt;/code> para verificar el estado de pagos.&lt;/p>
&lt;p>El registro de auditoría de solicitud-respuesta NWC para depuración de interacciones de billetera llega en &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/880">PR #880&lt;/a>. El soporte multi-cuenta para &lt;code>PrimalNwcService&lt;/code> se incorpora en &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/877">PR #877&lt;/a>, permitiendo a usuarios con múltiples perfiles mantener conexiones de billetera separadas. La limpieza periódica de retenciones de presupuesto expiradas en &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/882">PR #882&lt;/a> previene que reservas de pago obsoletas bloqueen operaciones de billetera.&lt;/p>
&lt;p>El trabajo de UI incluye rediseños de la pantalla de actualización de billetera (&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/889">PR #889&lt;/a>), FAQ de actualización de billetera (&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/885">PR #885&lt;/a>), configuración de dirección Lightning durante onboarding (&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/888">PR #888&lt;/a>), y corrección para transacciones de zap que aparecían como pagos regulares en tipos no-Lightning (&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/887">PR #887&lt;/a>).&lt;/p>
&lt;h3 id="divine-lanza-feeds-de-video-api-first">diVine Lanza Feeds de Video API-First&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>, el cliente de video de formato corto, fusionó 19 PRs esta semana, orientándose hacia arquitectura API-first. Los feeds de video API-first llegan en &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1468">PR #1468&lt;/a>, y endpoints API de tendencias, recientes y home en &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1466">PR #1466&lt;/a>. La indexación de controladores de video específicos para renderizado eficiente de feeds se implementa en &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1433">PR #1433&lt;/a>.&lt;/p>
&lt;p>El manejo de perfiles mejoró con un patrón cache-plus-fresh para ver otros perfiles en &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1440">PR #1440&lt;/a>, reduciendo tiempos de carga mientras asegura datos actualizados. El equipo envió correcciones de notificaciones (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1437">PR #1437&lt;/a>), refactorización del flujo de comentarios (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1431">PR #1431&lt;/a>), y deslizamiento de pestañas en la pantalla de Notificaciones (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1388">PR #1388&lt;/a>).&lt;/p>
&lt;h3 id="white-noise-unificación-de-keyring-y-búsqueda-de-usuarios">White Noise: Unificación de Keyring y Búsqueda de Usuarios&lt;/h3>
&lt;p>El backend &lt;a href="https://github.com/marmot-protocol/whitenoise-rs">White Noise&lt;/a> para el protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> fusionó 4 PRs esta semana. Dos PRs mejoraron el manejo de keyring: el &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/468">PR #468&lt;/a> hace el identificador del servicio de keyring configurable vía &lt;code>WhitenoiseConfig&lt;/code>, y el &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/475">PR #475&lt;/a> unifica la implementación en un solo crate &lt;code>keyring-core&lt;/code> con almacenes nativos de plataforma, reemplazando código fragmentado específico por plataforma. Por separado, el &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/470">PR #470&lt;/a> añade funcionalidad de búsqueda de usuarios.&lt;/p>
&lt;h3 id="marmot-ts-extrae-la-app-de-chat-de-referencia">Marmot TS Extrae la App de Chat de Referencia&lt;/h3>
&lt;p>El SDK TypeScript de &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> (&lt;a href="https://github.com/marmot-protocol/marmot-ts">marmot-ts&lt;/a>) fusionó el &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/40">PR #40&lt;/a>, eliminando la aplicación de chat de referencia integrada y separándola en un repositorio independiente: &lt;a href="https://github.com/marmot-protocol/marmots-web-chat">marmots-web-chat&lt;/a>. El nuevo repositorio, creado el 6 de febrero, es implementación de referencia del SDK TypeScript de Marmot con su propio pipeline CI, vista de chat con pestañas y sistema de build independiente. La separación permite al SDK enfocarse en asuntos de biblioteca mientras la app de chat itera en UX de forma independiente.&lt;/p>
&lt;p>Un PR abierto (&lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/41">#41&lt;/a>) migra marmot-ts a ts-mls v2.0.0, trayendo API rediseñada con objetos de contexto unificados, nuevas utilidades de manejo de mensajes (creación de eventos, lectura, deserialización), helpers de metadatos de key package, y soporte de eventos de eliminación.&lt;/p>
&lt;h3 id="actualizaciones-de-alby-hub">Actualizaciones de Alby Hub&lt;/h3>
&lt;p>&lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a> fusionó 5 PRs esta semana. La adición de Alby CLI a la interfaz de la tienda de apps llega en &lt;a href="https://github.com/getAlby/hub/pull/2049">PR #2049&lt;/a>. El manejo de datos de zap inválidos en la lista de transacciones se corrige en &lt;a href="https://github.com/getAlby/hub/pull/2033">PR #2033&lt;/a>, y el método &lt;code>ListTransactions&lt;/code> no utilizado de la interfaz LNClient se elimina en &lt;a href="https://github.com/getAlby/hub/pull/2046">PR #2046&lt;/a>.&lt;/p>
&lt;h3 id="notedeck-lanza-dashboard-y-agentium">Notedeck Lanza Dashboard y Agentium&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>, el cliente Nostr multiplataforma de Damus, fusionó 6 PRs esta semana. La app de dashboard inicial llega en &lt;a href="https://github.com/damus-io/notedeck/pull/1247">PR #1247&lt;/a>. Agentium, un entorno de desarrollo multi-agente que transforma el asistente de IA Dave en un sistema con modos de IA duales y gestión de agentes basada en escenas, se introduce en &lt;a href="https://github.com/damus-io/notedeck/pull/1293">PR #1293&lt;/a>. Un compositor de mensajes multilínea con keybindings estilo Signal llega en &lt;a href="https://github.com/damus-io/notedeck/pull/1276">PR #1276&lt;/a>, y mejoras de rendimiento de medios en &lt;a href="https://github.com/damus-io/notedeck/pull/1278">PR #1278&lt;/a>. PRs abiertos a destacar incluyen &lt;a href="https://github.com/damus-io/notedeck/pull/1288">infraestructura outbox&lt;/a> y &lt;a href="https://github.com/damus-io/notedeck/pull/1289">planificación de App Git&lt;/a> &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34&lt;/a>.&lt;/p>
&lt;h3 id="agora-lanza-mayor-renovación-de-ui">Agora Lanza Mayor Renovación de UI&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/agora">Agora&lt;/a> fusionó 7 PRs esta semana junto a su lanzamiento v1.0.2. El más grande es &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/106">PR #106&lt;/a>, cerrando 11 tareas de UI en ajustes, edición de perfil, interacciones de mapa, resultados de búsqueda, filtrado de comentarios y gestión de servidor Blossom. La fusión desactivó botones de reacción para usuarios no autenticados (que antes obtenían fallos silenciosos al intentar reaccionar a posts en el mapa), corrigió el paneo de mapa en la línea de fecha, y añadió texto coincidente en negrita en resultados de búsqueda.&lt;/p>
&lt;p>Conteos de comentarios bajo posts del feed y en páginas de hilos llegan en &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/108">PR #108&lt;/a>. El reintento automático en fallos de carga de eventos con botón de recarga explícito cuando reintentos se agotan se añade en &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/107">PR #107&lt;/a>. La navegación de hashtags pasa a alcance global por defecto en &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/104">PR #104&lt;/a>, ya que el alcance por país anterior frecuentemente retornaba cero resultados.&lt;/p>
&lt;p>Un paso CI que verifica paridad de traducción en todos los idiomas, fallando el build si alguna clave carece de valor, se incorpora en &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/109">PR #109&lt;/a>. El recorte de notas grandes en feeds para preservar el ritmo de scroll llega en &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/110">PR #110&lt;/a>, y la corrección de un problema de zoom en iOS móvil al comentar acciones causado por tamaños de fuente pequeños en &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/111">PR #111&lt;/a>.&lt;/p>
&lt;h3 id="clawstr-lanza-cli-y-botones-de-lightning-zap">Clawstr Lanza CLI y Botones de Lightning Zap&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/clawstr">Clawstr&lt;/a>, la plataforma inspirada en Reddit donde agentes de IA crean y gestionan comunidades en Nostr, fusionó 3 PRs esta semana. En &lt;a href="https://gitlab.com/soapbox-pub/clawstr/-/merge_requests/11">PR #11&lt;/a>, todos los comandos manuales de nak en definiciones de habilidades del agente de IA se reemplazan con el nuevo paquete &lt;code>@clawstr/cli&lt;/code> (&lt;code>npx -y @clawstr/cli@latest&lt;/code>), eliminando la construcción manual de eventos JSON a favor de comandos CLI y añadiendo operaciones de billetera (init, balance, zap, npc) y búsqueda de texto completo &lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a>.&lt;/p>
&lt;p>La página de documentación &amp;ldquo;Para Humanos&amp;rdquo; y el componente &lt;code>ProfileZapDialog&lt;/code> llegan en &lt;a href="https://gitlab.com/soapbox-pub/clawstr/-/merge_requests/13">PR #13&lt;/a>. El botón de zap aparece en páginas de perfil cuando el usuario tiene dirección Lightning configurada y funciona sin login, usando LNURL-pay directamente con cantidades preestablecidas de sats y visualización de código QR. La documentación del comando &lt;code>wallet sync&lt;/code> en &lt;a href="https://gitlab.com/soapbox-pub/clawstr/-/merge_requests/12">PR #12&lt;/a> explica cómo pagos a direcciones Lightning son retenidos por NPC hasta que agentes sincronizan explícitamente sus billeteras.&lt;/p>
&lt;h2 id="actualizaciones-de-nips">Actualizaciones de NIPs&lt;/h2>
&lt;p>Cambios recientes al &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Fusionados:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1561">NIP-45: Respuesta HyperLogLog de Relay&lt;/a>&lt;/strong> - &lt;a href="https://nostrcompass.org/es/topics/nip-45/">NIP-45 (Conteo de Eventos)&lt;/a> ahora soporta conteo aproximado HyperLogLog (HLL). Relays pueden retornar valores de registro HLL de 256 bytes junto a respuestas COUNT. Al fusionar estos registros de múltiples relays, clientes computan cardinalidad aproximada sin descargar conjuntos completos de eventos. El caso de uso principal son conteos de seguidores y reacciones sin depender de un único relay como fuente autoritativa. Incluso dos eventos de reacción consumen más ancho de banda que el payload HLL de 256 bytes. Correcciones HyperLogLog++ mejoran la precisión en cardinalidades pequeñas.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2216">NIP-39: Etiquetas de Identidad Movidas del Kind 0&lt;/a>&lt;/strong> - Las etiquetas de claim de identidad (etiquetas &lt;code>i&lt;/code>) de &lt;a href="https://nostrcompass.org/es/topics/nip-39/">NIP-39&lt;/a> han sido extraídas de eventos de metadatos kind 0 a un nuevo kind dedicado 10011. La razón: casi ningún cliente soporta estas etiquetas, por lo que añaden tamaño a cada consulta de kind 0 sin proporcionar valor. Primer PR de la serie de extracción del kind 0 de vitorpamplona (ver &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-11-newsletter/#campa%c3%b1a-de-reducci%c3%b3n-del-kind-0">sección de Noticias&lt;/a>).&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abiertos y Discusiones:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2214">NIP-XX: Nostr Relay Connect (NRC)&lt;/a>&lt;/strong> - woikos propone un protocolo para acceder a relays Nostr a través de tunneling cifrado vía relay de rendez-vous público. El mecanismo permite acceso a relays detrás de NAT o firewalls, incluyendo relays personales ejecutándose en servidores domésticos o dispositivos móviles. El tunneling usa eventos kind 24891/24892 con cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> vía relay de rendez-vous que no puede descifrar el tráfico. Aplicación práctica: cualquier cliente Nostr puede exponer almacenamiento local (IndexedDB, SQLite) como endpoint de relay para sincronización entre dispositivos. La semántica estándar de NIP-01 (REQ, EVENT, CLOSE, COUNT) pasa a través del túnel de forma transparente. Existen implementaciones de referencia en Go (ORLY Relay) y TypeScript (Smesh).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2187">Nostr Web Tokens (NWT)&lt;/a>&lt;/strong> - pippellia-btc propone Nostr Web Tokens, formato de evento Nostr para transmitir claims firmados entre partes web, inspirado en JSON Web Tokens (JWTs). NWT puede representar tanto &lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">NIP-98&lt;/a> (HTTP Auth) como &lt;a href="https://nostrcompass.org/es/topics/blossom/">eventos de autorización Blossom&lt;/a>, dando a clientes flexibilidad en cómo y por cuánto tiempo los tokens permanecen válidos. Hay biblioteca de referencia en Go disponible. La &lt;a href="https://github.com/pippellia-btc/nostr-web-tokens">explicación en video&lt;/a> y la &lt;a href="https://github.com/pippellia-btc/nostr-web-tokens?tab=readme-ov-file#comparisons">comparación detallada&lt;/a> con NIP-98 y Blossom Auth están enlazadas en el PR.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2210">Simplificación de NIP-47&lt;/a>&lt;/strong> - rolznz propone eliminar los métodos &lt;code>multi_&lt;/code> de &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a>, que eran complejos de implementar y no ganaron adopción. El PR reduce duplicación en cifrado y manejo de compatibilidad hacia atrás, limpiando la spec tras la &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-04-newsletter/#actualizaciones-de-nips">adición de facturas hold de la semana pasada&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2213">NIP-05: Mover a Kind de Evento Propio&lt;/a>&lt;/strong> - vitorpamplona propone mover la verificación NIP-05 del kind 0 a nuevo kind 10008, habilitando múltiples identificadores NIP-05 por usuario y filtrado por dirección NIP-05. Parte de la campaña de reducción del kind 0.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2217">NIP-57: Direcciones Lightning del Kind 0&lt;/a>&lt;/strong> - vitorpamplona propone extraer lud06/lud16 (direcciones Lightning) del kind 0 a kind de evento dedicado según &lt;a href="https://nostrcompass.org/es/topics/nip-57/">NIP-57&lt;/a>, continuando el esfuerzo de reducción del kind 0.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2165">Hiperpersonalización de Perfiles&lt;/a>&lt;/strong> - fiatjaf propone capacidades extendidas de personalización de perfil más allá de lo que el kind 0 soporta actualmente.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="análisis-profundo-de-nip-nip-45-conteo-de-eventos-y-hyperloglog">Análisis Profundo de NIP: NIP-45 (Conteo de Eventos) y HyperLogLog&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-45/">NIP-45&lt;/a> (&lt;a href="https://github.com/nostr-protocol/nips/blob/master/45.md">spec&lt;/a>) define cómo clientes pueden pedir a relays que cuenten eventos que coincidan con un filtro sin transferir los eventos en sí. La fusión de &lt;a href="https://github.com/nostr-protocol/nips/pull/1561">soporte HyperLogLog&lt;/a> esta semana añade estructura de datos probabilística que resuelve un problema fundamental: cómo contar cosas a través de múltiples relays independientes.&lt;/p>
&lt;p>&lt;strong>El Problema:&lt;/strong>&lt;/p>
&lt;p>Contar eventos en un único relay es simple: envía solicitud COUNT, recibe un número. Contar a través de la red es más difícil. Si el relay A reporta 50 reacciones y el relay B reporta 40, el total no es 90 porque muchos eventos existen en ambos relays. Al no descargar todos los eventos para deduplicar, el cliente no puede calcular el conteo real.&lt;/p>
&lt;p>&lt;strong>HyperLogLog:&lt;/strong>&lt;/p>
&lt;p>HyperLogLog (HLL) es un algoritmo probabilístico que estima el número de elementos distintos en un conjunto usando cantidad fija de memoria. La implementación de NIP-45 usa 256 registros de un byte cada uno, consumiendo exactamente 256 bytes sin importar cuántos eventos se cuenten. El algoritmo funciona examinando la representación binaria de cada ID de evento y rastreando la posición de ceros iniciales. Eventos cuyos IDs comienzan con muchos ceros son estadísticamente raros, por lo que su ocurrencia indica un conjunto grande.&lt;/p>
&lt;p>&lt;strong>Cómo Funciona en NIP-45:&lt;/strong>&lt;/p>
&lt;p>Un relay que responde a solicitud COUNT puede incluir un campo &lt;code>hll&lt;/code> conteniendo valores de registro codificados en base64:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>[&lt;span style="color:#e6db74">&amp;#34;COUNT&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;subscription_id&amp;gt;&amp;#34;&lt;/span>, {&lt;span style="color:#f92672">&amp;#34;count&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">4527&lt;/span>, &lt;span style="color:#f92672">&amp;#34;hll&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;base64 encoded 256 bytes&amp;gt;&amp;#34;&lt;/span>}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El cliente recolecta valores HLL de múltiples relays y los fusiona tomando el valor máximo en cada posición de registro. El HLL fusionado representa la unión de todos los conjuntos de eventos a través de relays, manejando la deduplicación automáticamente. La estimación final de cardinalidad se calcula a partir de registros fusionados.&lt;/p>
&lt;p>&lt;strong>Precisión:&lt;/strong>&lt;/p>
&lt;p>El error estándar con 256 registros es aproximadamente 5.2%. Para un conteo real de 1,000, la estimación típicamente caerá entre 948 y 1,052. Para conteos más grandes, el error relativo se mantiene constante: un conteo real de 100,000 estimará aproximadamente entre 94,800 y 105,200. Correcciones HyperLogLog++ mejoran la precisión para cardinalidades pequeñas (menores a ~200), donde el algoritmo básico tiende a sobreestimar.&lt;/p>
&lt;p>&lt;strong>Por Qué Importa:&lt;/strong>&lt;/p>
&lt;p>Métricas sociales (conteos de seguidores, conteos de reacciones, conteos de reposts) son función central de clientes de redes sociales. El cliente que no cuente con HLL debe consultar un único relay &amp;ldquo;de confianza&amp;rdquo; (centralizando el conteo) o descargar todos los eventos de todos los relays (desperdiciando ancho de banda). HLL permite obtener buen conteo aproximado de múltiples relays con overhead total de 256 bytes por relay, sin importar el conteo real. Incluso dos eventos de reacción consumen más ancho de banda que un payload HLL completo.&lt;/p>
&lt;p>La spec fija el número de registros en 256 para interoperabilidad. Todos los relays producen valores HLL que clientes pueden fusionar, sin importar qué implementación de relay ejecuten. Esta estandarización significa que el cliente puede implementar soporte HLL una vez y beneficiarse de cada relay que lo soporte.&lt;/p>
&lt;p>&lt;strong>Estado Actual:&lt;/strong>&lt;/p>
&lt;p>El PR fue abierto por fiatjaf y había estado en discusión durante varios meses antes de fusionarse esta semana. Implementaciones de relay necesitarán añadir computación HLL a sus manejadores COUNT. Implementaciones de clientes necesitarán añadir fusión HLL a su lógica de agregación de conteos.&lt;/p>
&lt;h2 id="análisis-profundo-de-nip-nip-96-almacenamiento-de-archivos-http-y-la-transición-a-blossom">Análisis Profundo de NIP: NIP-96 (Almacenamiento de Archivos HTTP) y la Transición a Blossom&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-96/">NIP-96&lt;/a> (&lt;a href="https://github.com/nostr-protocol/nips/blob/master/96.md">spec&lt;/a>) definió cómo clientes Nostr suben, descargan y gestionan archivos en servidores de medios HTTP. Ahora marcado como &amp;ldquo;no recomendado&amp;rdquo; en favor de &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> (alojamiento de medios basado en BUD), NIP-96 sigue siendo relevante esta semana porque Angor v0.2.5 &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-11-newsletter/#angor-v025">añadió configuración de servidor NIP-96&lt;/a> y ZSP v0.3.1 &lt;a href="https://nostrcompass.org/es/newsletters/2026-02-11-newsletter/#zsp-v031">sube a servidores Blossom&lt;/a>, ilustrando la transición de protocolo en curso.&lt;/p>
&lt;p>&lt;strong>Cómo Funciona NIP-96:&lt;/strong>&lt;/p>
&lt;p>El cliente descubre las capacidades de un servidor de archivos consultando &lt;code>/.well-known/nostr/nip96.json&lt;/code>, que retorna la URL de API, tipos de contenido soportados, límites de tamaño y transformaciones de medios disponibles:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;api_url&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;https://file-server.example/api&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;download_url&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;https://cdn.example/files&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content_types&amp;#34;&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;image/jpeg&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;video/webm&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;audio/*&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;plans&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;free&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;is_nip98_required&amp;#34;&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_byte_size&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">10485760&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;media_transformations&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;image&amp;#34;&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;resizing&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Para subir, el cliente envía POST &lt;code>multipart/form-data&lt;/code> a la URL de API con cabecera de autorización &lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">NIP-98&lt;/a> (evento Nostr firmado que prueba la identidad del uploader). El servidor retorna estructura de metadatos de archivo &lt;a href="https://nostrcompass.org/es/topics/nip-94/">NIP-94&lt;/a> conteniendo la URL del archivo, hashes SHA-256 original y transformado, tipo MIME y dimensiones:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;status&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;success&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;nip94_event&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;url&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://cdn.example/files/&amp;lt;hash&amp;gt;.png&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;ox&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;original-file-hash&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;x&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;transformed-file-hash&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;m&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;image/png&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;dim&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;800x600&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Las descargas usan solicitudes GET a &lt;code>&amp;lt;api_url&amp;gt;/&amp;lt;sha256-hash&amp;gt;&lt;/code>, con parámetros de consulta opcionales para transformaciones del lado del servidor como redimensionamiento de imágenes (&lt;code>?w=320&lt;/code>). La eliminación usa DELETE con auth NIP-98, y solo el uploader original puede eliminar sus archivos. Un endpoint de listado retorna resultados paginados de subidas del usuario.&lt;/p>
&lt;p>Cada usuario declara sus servidores de subida preferidos publicando eventos kind 10096, permitiendo a clientes seleccionar automáticamente el servidor correcto sin configuración manual.&lt;/p>
&lt;p>&lt;strong>Por Qué Fue Obsoletado:&lt;/strong>&lt;/p>
&lt;p>NIP-96 ataba URLs de archivos a servidores específicos. Si &lt;code>files.example.com&lt;/code> dejaba de funcionar, cada nota Nostr que referenciaba las URLs de ese servidor perdía sus medios. El servidor era la dirección, y la dirección era frágil.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> (Blobs Stored Simply on Mediaservers) invierte esto haciendo del hash SHA-256 del contenido del archivo el identificador canónico. Una URL de Blossom luce como &lt;code>https://blossom.example/&amp;lt;sha256&amp;gt;.png&lt;/code>, pero cualquier servidor Blossom que aloje el mismo archivo lo sirve en la misma ruta de hash. Si un servidor desaparece, el cliente consulta otro servidor por el mismo hash. El direccionamiento por contenido hace datos portables entre servidores por defecto.&lt;/p>
&lt;p>Blossom simplifica la API. NIP-96 usaba subidas multipart form con respuestas JSON, políticas de transformación y endpoint de descubrimiento. Blossom usa PUT simple para subidas, GET para descargas y eventos Nostr firmados (no cabeceras HTTP) para autorización. La especificación de Blossom se divide en documentos modulares: BUD-01 cubre protocolo de servidor, autorización y recuperación, BUD-02 cubre subida de blobs, BUD-03 cubre servidores de usuarios, y BUD-04 cubre espejeo entre servidores.&lt;/p>
&lt;p>La obsolescencia ocurrió en septiembre 2025 vía &lt;a href="https://github.com/nostr-protocol/nips/pull/2047">PR #2047&lt;/a>, que marcó NIP-96 como &amp;ldquo;no recomendado&amp;rdquo; en el índice de NIPs.&lt;/p>
&lt;p>&lt;strong>La Transición en la Práctica:&lt;/strong>&lt;/p>
&lt;p>Servidores como nostr.build y void.cat soportaban NIP-96 y han añadido o migrado a endpoints Blossom. Cada cliente está en distinta etapa de adopción. El lanzamiento v0.2.5 de Angor esta semana añadió configuración de servidor NIP-96 para imágenes de proyecto, mientras el lanzamiento v0.3.1 de ZSP sube artefactos exclusivamente a servidores Blossom con cabeceras &lt;code>Content-Digest&lt;/code> para cumplimiento del protocolo. Amethyst y Primal soportan subidas Blossom. La coexistencia probablemente continuará hasta que implementaciones restantes de NIP-96 completen su migración.&lt;/p>
&lt;p>&lt;strong>Qué Se Mantiene:&lt;/strong>&lt;/p>
&lt;p>Eventos kind 10096 de preferencia de servidor siguen siendo útiles para la selección de servidor Blossom. Metadatos de archivo NIP-94 (eventos kind 1063) siguen describiendo propiedades de archivos con independencia de qué protocolo de subida los creó. El hashing SHA-256 que NIP-96 usaba para URLs de descarga se convirtió en la base del direccionamiento por contenido de Blossom. El diseño de NIP-96 informó lo que Blossom simplificó: la lección fue que el alojamiento de medios en red descentralizada requiere almacenamiento direccionado por contenido para igualar la resistencia a la censura de la capa de relays.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. Envíanos noticias, sugerencias de cobertura o información sobre tu proyecto. &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Escríbenos vía DM NIP-17&lt;/a> o encuéntranos en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #8</title><link>https://nostrcompass.org/es/newsletters/2026-02-04-newsletter/</link><pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-02-04-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> rust-nostr lanza un importante rediseño de API con 21 PRs reformulando la arquitectura del SDK. Nostria 3.0 se lanza con navegación de panel dual, gestión de listas y una renovación completa de la interfaz. Vector añade aceleración SIMD logrando mejoras de velocidad de 65x-184x y lanza soporte del protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> para mensajería grupal cifrada. Frostr trae firma de umbral a iOS vía TestFlight. Damus implementa pistas de relay &lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19 (Entidades Codificadas en Bech32)&lt;/a> para descubrimiento de contenido entre relays. Primal Android añade cifrado NWC y exportación de transacciones de billetera. nostr-tools y NDK reciben mejoras de confiabilidad. NIP-82 (Aplicaciones de Software) se expande para cubrir el 98% de plataformas de dispositivos. El repositorio de NIPs fusiona soporte de facturas hold para &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a>. Nuevas propuestas de protocolo incluyen NIP-74 para podcasting, NIP-DB para bases de datos de eventos en navegador, y una suite de Filtros TRUSTed para curación de contenido descentralizada. Nuevos proyectos incluyen Instagram to Nostr v2 para migración de contenido, Pod21 lanzando un marketplace descentralizado de impresión 3D, Clawstr introduciendo comunidades gestionadas por agentes de IA, y Shosho y NosCall expandiendo capacidades de streaming en vivo y videollamadas.&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> rust-nostr lanza un importante rediseño de API con 21 PRs reformulando la arquitectura del SDK. Nostria 3.0 se lanza con navegación de panel dual, gestión de listas y una renovación completa de la interfaz. Vector añade aceleración SIMD logrando mejoras de velocidad de 65x-184x y lanza soporte del protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> para mensajería grupal cifrada. Frostr trae firma de umbral a iOS vía TestFlight. Damus implementa pistas de relay &lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19 (Entidades Codificadas en Bech32)&lt;/a> para descubrimiento de contenido entre relays. Primal Android añade cifrado NWC y exportación de transacciones de billetera. nostr-tools y NDK reciben mejoras de confiabilidad. NIP-82 (Aplicaciones de Software) se expande para cubrir el 98% de plataformas de dispositivos. El repositorio de NIPs fusiona soporte de facturas hold para &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a>. Nuevas propuestas de protocolo incluyen NIP-74 para podcasting, NIP-DB para bases de datos de eventos en navegador, y una suite de Filtros TRUSTed para curación de contenido descentralizada. Nuevos proyectos incluyen Instagram to Nostr v2 para migración de contenido, Pod21 lanzando un marketplace descentralizado de impresión 3D, Clawstr introduciendo comunidades gestionadas por agentes de IA, y Shosho y NosCall expandiendo capacidades de streaming en vivo y videollamadas.&lt;/p>
&lt;h2 id="noticias">Noticias&lt;/h2>
&lt;h3 id="rust-nostr-lanza-mayor-rediseño-de-api">rust-nostr Lanza Mayor Rediseño de API&lt;/h3>
&lt;p>El SDK &lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> experimentó una reformulación significativa de arquitectura esta semana con 21 PRs fusionados introduciendo cambios incompatibles en toda la biblioteca. El rediseño afecta APIs centrales de las que dependen la mayoría de los desarrolladores de Rust.&lt;/p>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr/pull/1245">PR #1245&lt;/a> rediseña APIs de notificación, mientras &lt;a href="https://github.com/rust-nostr/nostr/pull/1244">PR #1244&lt;/a> reemplaza &lt;code>RelayNotification::Shutdown&lt;/code> con &lt;code>RelayStatus::Shutdown&lt;/code> para un manejo de estado más limpio. Las APIs de firmante ahora se alinean con otros patrones del SDK vía &lt;a href="https://github.com/rust-nostr/nostr/pull/1243">PR #1243&lt;/a>. Los métodos de Client y Relay recibieron limpieza en &lt;a href="https://github.com/rust-nostr/nostr/pull/1242">PR #1242&lt;/a>, y las opciones de cliente ahora usan un patrón builder (&lt;a href="https://github.com/rust-nostr/nostr/pull/1241">PR #1241&lt;/a>).&lt;/p>
&lt;p>Las APIs de envío de mensajes fueron rediseñadas en &lt;a href="https://github.com/rust-nostr/nostr/pull/1240">PR #1240&lt;/a>, la desuscripción REQ en &lt;a href="https://github.com/rust-nostr/nostr/pull/1239">PR #1239&lt;/a>, y la eliminación de relay en &lt;a href="https://github.com/rust-nostr/nostr/pull/1229">PR #1229&lt;/a>. Un &lt;a href="https://github.com/rust-nostr/nostr/pull/1246">PR abierto #1246&lt;/a> añade soporte para APIs de bloqueo para completar el rediseño.&lt;/p>
&lt;p>Los cambios traen consistencia al SDK pero requerirán esfuerzo de migración de proyectos existentes. Los desarrolladores que construyen sobre rust-nostr deberían revisar el changelog cuidadosamente antes de actualizar.&lt;/p>
&lt;h3 id="instagram-to-nostr-v2-habilita-migración-de-contenido">Instagram to Nostr v2 Habilita Migración de Contenido&lt;/h3>
&lt;p>Una nueva herramienta permite a los creadores migrar su contenido existente de plataformas centralizadas a Nostr. &lt;a href="https://github.com/primalpaul1/instagram-to-nostr-v2">Instagram to Nostr v2&lt;/a> soporta importación desde Instagram, TikTok, Twitter y Substack sin requerir acceso a las claves privadas del usuario.&lt;/p>
&lt;p>La herramienta aborda una barrera común de incorporación: usuarios reacios a empezar de cero en una nueva plataforma pueden ahora preservar su historial de contenido. También soporta regalar cuentas Nostr a nuevos usuarios o proponer contenido a cuentas existentes, haciéndola útil para ayudar a otros a transicionar al protocolo.&lt;/p>
&lt;h3 id="pod21-red-descentralizada-de-impresión-3d">Pod21: Red Descentralizada de Impresión 3D&lt;/h3>
&lt;p>&lt;a href="https://github.com/gobrrrme/Pod21">Pod21&lt;/a> (&lt;a href="https://pod21.com">pod21.com&lt;/a>) conecta operadores de impresoras 3D con compradores usando Nostr para coordinación de marketplace. La plataforma incluye un bot de DM compatible con &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17 (Mensajes Directos Privados)&lt;/a> que maneja interacciones de marketplace, permitiendo a compradores solicitar impresiones y negociar con fabricantes a través de mensajes directos cifrados.&lt;/p>
&lt;p>Los fabricantes listan su capacidad y características de impresión; los compradores navegan listados e inician órdenes vía el bot. La arquitectura sigue un patrón similar a otras aplicaciones de comercio Nostr: descubrimiento basado en relay, mensajería cifrada para coordinación de órdenes, y Lightning para liquidación. Pod21 se une a Ridestr y Shopstr como aplicaciones Nostr coordinando transacciones del mundo real a través del protocolo.&lt;/p>
&lt;h3 id="clawstr-red-social-de-agentes-de-ia">Clawstr: Red Social de Agentes de IA&lt;/h3>
&lt;p>&lt;a href="https://github.com/clawstr/clawstr">Clawstr&lt;/a> se lanza como una plataforma inspirada en Reddit donde agentes de IA crean y gestionan comunidades en Nostr. La plataforma permite a agentes autónomos establecer comunidades temáticas, curar contenido e interactuar con usuarios. Las comunidades funcionan como subreddits pero con moderadores y curadores de IA guiando las discusiones. La arquitectura usa el protocolo abierto de Nostr para interacciones agente-a-agente y agente-a-humano, estableciendo un nuevo modelo para formación de comunidades en redes sociales descentralizadas.&lt;/p>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;h3 id="ridestr-v020-lanzamiento-roadflare">Ridestr v0.2.0: Lanzamiento RoadFlare&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a> lanzó &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.0">v0.2.0&lt;/a>, denominado el &amp;ldquo;Lanzamiento RoadFlare&amp;rdquo;, introduciendo redes de viaje compartido personales. La característica permite a los pasajeros agregar conductores favoritos a una red de confianza. Los conductores aprueban seguidores y comparten ubicaciones cifradas, permitiendo a los pasajeros ver cuando conductores de confianza están en línea y cerca. Las solicitudes de viaje van directamente a conductores conocidos.&lt;/p>
&lt;p>La confiabilidad de pagos mejoró con recuperación automática de depósito, mejor sincronización de billetera entre dispositivos, y procesamiento de pagos más rápido vía polling progresivo. &lt;a href="https://github.com/variablefate/ridestr/pull/37">PR #37&lt;/a> añade la infraestructura de Fase 5-6 soportando estas características. &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.1">v0.2.1&lt;/a> siguió con correcciones para bugs del diálogo de pago y el flujo &amp;ldquo;Agregar a Favoritos&amp;rdquo; post-viaje.&lt;/p>
&lt;h3 id="nostria-30">Nostria 3.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>, el cliente multiplataforma de sondreb construido para escala global, lanzó la versión 3.0 con una renovación completa de UI, nuevo logo, y cientos de correcciones. El lanzamiento representa un ciclo de desarrollo intensivo de seis semanas.&lt;/p>
&lt;p>La navegación de panel dual es el mayor cambio de UX, permitiendo a usuarios de escritorio reducir el cambio de contexto al moverse entre listas, detalles e hilos. Una nueva sección Home proporciona una visión general de todas las características disponibles, y todas las pantallas comparten barra de herramientas, diseño y funcionalidad unificados.&lt;/p>
&lt;p>La gestión de listas es la actualización de característica más significativa, integrándose en toda la aplicación. Los usuarios pueden gestionar listas de perfiles y filtrar contenido en cualquier característica: Streams, Música o Feeds. ¿Cansado del spam en hilos? Filtra por favoritos para ver solo sus respuestas. Quick Zaps añade zapping de un toque con valores configurables. Copy/Screenshot genera capturas de pantalla al portapapeles para compartir eventos en cualquier lugar. Muted Words ahora filtra en campos de perfil (name, display_name, NIP-05), permitiendo a usuarios bloquear todos los perfiles de bridge con una sola palabra prohibida. Configuración se volvió buscable para cambios de configuración más rápidos.&lt;/p>
&lt;p>El lanzamiento añade renderizado de solicitudes de pago BOLT11 y BOLT12, selección de tamaño de texto y fuente, y mensajería &amp;ldquo;Nota para Uno Mismo&amp;rdquo; en la sección de Mensajes con renderizado de contenido referenciado como artículos y eventos. El nuevo diálogo de Compartir permite compartir rápidamente vía correo electrónico, sitios web o mensajes directos a múltiples destinatarios. Características adicionales incluyen conjuntos de emoji personalizados, Intereses (listas de hashtags como feeds dinámicos), Marcadores, Feeds de Relay Públicos, y personalización completa del menú incluyendo qué opción abre el icono de Nostria.&lt;/p>
&lt;p>Disponible en Android, iOS, Windows y web en &lt;a href="https://www.nostria.app/">nostria.app&lt;/a>.&lt;/p>
&lt;h3 id="applesauce-v510">Applesauce v5.1.0&lt;/h3>
&lt;p>La suite de bibliotecas &lt;a href="https://github.com/hzrd149/applesauce">Applesauce&lt;/a> de hzrd149 lanzó v5.1.0 en todos los paquetes. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-signers%405.1.0">applesauce-signers&lt;/a> añade soporte para métodos &lt;code>switch_relays&lt;/code> y &lt;code>ping&lt;/code> en firmantes remotos Nostr Connect, útil para gestionar conexiones de firmantes programáticamente. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-loaders%405.1.0">applesauce-loaders&lt;/a> introduce &lt;code>loadAsyncMap&lt;/code> para carga asíncrona paralela. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-react%405.1.0">applesauce-react&lt;/a> añade argumentos de padding a &lt;code>useAction().run()&lt;/code>. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%405.1.0">applesauce-core&lt;/a> actualiza el mapeo de evento a store para manejar strings directamente sin requerir &lt;code>onlyEvents&lt;/code>.&lt;/p>
&lt;h3 id="nak-v0183">nak v0.18.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a> (Nostr Army Knife) de fiatjaf alcanzó &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.18.3">v0.18.3&lt;/a> con correcciones de estabilidad de mattn. El lanzamiento previene panics cuando URLs de mint carecen del separador &lt;code>://&lt;/code>, valida errores de dateparser antes de usar valores de fecha, y maneja casos límite en el parseo de etiquetas de desafío AUTH. Estas correcciones defensivas hacen el CLI más resiliente al procesar entradas malformadas.&lt;/p>
&lt;h3 id="aegis-v037">Aegis v0.3.7&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZharlieW/Aegis">Aegis&lt;/a>, el firmante de escritorio multiplataforma, lanzó &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.3.7">v0.3.7&lt;/a> añadiendo soporte de Navegador de Apps Nostr con firma &lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07 (Interfaz de Extensión de Navegador)&lt;/a>. El lanzamiento registra eventos de cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04 (Mensajes Directos Cifrados)&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44 (Cifrado Versionado)&lt;/a>, permitiendo a usuarios rastrear qué aplicaciones solicitan operaciones de cifrado. El segmento de navegador ahora filtra por plataforma para mostrar solo apps web.&lt;/p>
&lt;h3 id="bitchat-v151-ios">Bitchat v1.5.1 (iOS)&lt;/h3>
&lt;p>&lt;a href="https://github.com/permissionlesstech/bitchat">Bitchat&lt;/a>, la app de mensajería con capacidad offline usando Nostr y mesh Bluetooth, lanzó &lt;a href="https://github.com/permissionlesstech/bitchat/releases/tag/v1.5.1">v1.5.1&lt;/a> con endurecimiento de seguridad para iOS. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/1012">PR #1012&lt;/a> valida firmas de eventos Nostr antes de procesar, rechaza giftwraps y paquetes incrustados inválidos, limita cargas sobredimensionadas, y bloquea IDs de remitente de anuncio BLE falsificados. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/998">PR #998&lt;/a> corrige autenticación de mesh BLE de iOS vinculando IDs de remitente a UUIDs de conexión, previniendo suplantación de identidad en la red mesh. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/972">PR #972&lt;/a> añade limitación de tasa de notificaciones para prevenir inundaciones de descubrimiento de peers cuando múltiples dispositivos mesh están cerca.&lt;/p>
&lt;h3 id="keychat-v1392">KeyChat v1.39.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/keychat-io/keychat-app">KeyChat&lt;/a> lanzó &lt;a href="https://github.com/keychat-io/keychat-app/releases/tag/v1.39.2%2B6495">v1.39.2&lt;/a> añadiendo soporte &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> Nostr Wallet Connect vía &lt;a href="https://github.com/keychat-io/keychat-app/pull/148">PR #148&lt;/a>. Los usuarios pueden ahora conectar billeteras Lightning externas para pagos dentro de la app de mensajería. El lanzamiento también añade notificaciones de escritorio macOS.&lt;/p>
&lt;h3 id="nostrmo-v350">Nostrmo v3.5.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/haorendashu/nostrmo">Nostrmo&lt;/a>, el cliente Flutter multiplataforma, lanzó &lt;a href="https://github.com/haorendashu/nostrmo/releases/tag/3.5.0">v3.5.0&lt;/a> reformulando su sistema de feeds. La actualización reemplaza feeds fijos con alternativas personalizables: Feed General, Feed de Menciones y Feed de Relay, cada uno configurable a través de nuevas páginas de edición. El lanzamiento implementa soporte del modelo outbox para mejor enrutamiento de eventos y expande la funcionalidad de relay local con límites de tamaño configurables y soporte de suscripción.&lt;/p>
&lt;h3 id="shosho-v0111">Shosho v0.11.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a>, la app de streaming en vivo para Nostr, lanzó &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.11.1">v0.11.1&lt;/a> con capacidades de grabación y VOD. La actualización añade indicadores de presencia de sala mostrando quién está viendo streams, conversaciones de chat en hilos para mejor organización de discusiones, y soporte Nostr Connect en iOS vía &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>. Los streamers pueden ahora guardar sus transmisiones para visualización posterior mientras mantienen interacciones de chat en tiempo real con su audiencia.&lt;/p>
&lt;h3 id="noscall-v050">NosCall v0.5.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/sanah9/noscall">NosCall&lt;/a>, la app de llamadas de audio y video para Nostr, lanzó &lt;a href="https://github.com/sanah9/noscall/releases/tag/v0.5.0-release">v0.5.0&lt;/a> con grupos de contactos para organizar llamadas por categoría, gestión de relay para optimización de conexión, y configuración de servidor ICE configurable para mejor traversal de NAT. El lanzamiento también añade soporte de modo oscuro. NosCall usa Nostr para señalización y coordinación de llamadas, habilitando llamadas peer-to-peer sin servidores centralizados.&lt;/p>
&lt;h3 id="divine-104">diVine 1.0.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>, el cliente de video de formato corto en bucle de rabble, lanzó &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.4">1.0.4&lt;/a> como pre-lanzamiento alpha de Android antes de su envío a Zapstore. El lanzamiento se enfoca en probar gestión de claves Nostr, incluyendo importación de nsec, firma remota &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46 (Nostr Connect)&lt;/a> con nsecBunker y Amber, y manejo de URLs nostrconnect://. El equipo está solicitando feedback sobre compatibilidad de relays e interoperabilidad de video con otros clientes. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1265">PR #1265&lt;/a> corrige el manejo de rutas de archivo iOS que causaba que clips de video se volvieran inutilizables después de actualizaciones de app almacenando rutas relativas en lugar de rutas absolutas de contenedor. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1251">PR #1251&lt;/a> corrige problemas de navegación al ver perfiles desde comentarios.&lt;/p>
&lt;h3 id="zeus-v0122">Zeus v0.12.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a> lanzó &lt;a href="https://github.com/ZeusLN/zeus/releases/tag/v0.12.2">v0.12.2&lt;/a> como lanzamiento estable, consolidando las &lt;a href="https://nostrcompass.org/es/newsletters/2026-01-28-newsletter/#zeus-v0122-beta---nwc-fixes">correcciones NWC cubiertas en ediciones anteriores&lt;/a>.&lt;/p>
&lt;h3 id="frostr-igloo-ios-testflight">Frostr Igloo iOS TestFlight&lt;/h3>
&lt;p>&lt;a href="https://github.com/FROSTR-ORG">Frostr&lt;/a> (&lt;a href="https://frostr.org/">frostr.org&lt;/a>) lanzó &lt;a href="https://github.com/FROSTR-ORG/igloo-ios">Igloo para iOS&lt;/a> en &lt;a href="https://testflight.apple.com/join/72hjQe3J">TestFlight&lt;/a>, expandiendo firma de umbral a dispositivos Apple. Frostr usa firmas FROST (Flexible Round-Optimized Schnorr Threshold) para dividir claves nsec en shares distribuidos entre dispositivos, habilitando firma k-de-n con tolerancia a fallos. Los usuarios que se unen en &amp;ldquo;modo demo&amp;rdquo; participan en un experimento de firma de umbral 2-de-2 en vivo, demostrando las capacidades de coordinación en tiempo real del protocolo. El lanzamiento iOS se une a &lt;a href="https://github.com/FROSTR-ORG/igloo-android">Igloo para Android&lt;/a> (v0.1.2), que se lanzó en diciembre con soporte &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55 (Firmante Android)&lt;/a> para solicitudes de firma entre apps. Ambos clientes móviles complementan &lt;a href="https://github.com/FROSTR-ORG/igloo-desktop">Igloo desktop&lt;/a> y la extensión de navegador &lt;a href="https://github.com/FROSTR-ORG/frost2x">Frost2x&lt;/a>.&lt;/p>
&lt;h2 id="actualizaciones-de-proyectos">Actualizaciones de Proyectos&lt;/h2>
&lt;h3 id="damus-implementa-pistas-de-relay-nip-19">Damus Implementa Pistas de Relay NIP-19&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> fusionó &lt;a href="https://github.com/damus-io/damus/pull/3477">PR #3477&lt;/a>, implementando consumo de pistas de relay &lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19&lt;/a> para obtención de eventos. La característica habilita ver notas en relays no incluidos en el pool configurado del usuario extrayendo pistas de referencias &lt;a href="https://nostrcompass.org/es/topics/nip-10/">NIP-10 (Hilos de Respuesta)&lt;/a>, &lt;a href="https://nostrcompass.org/es/topics/nip-18/">NIP-18 (Reposts)&lt;/a> y NIP-19. La implementación usa conexiones de relay efímeras con limpieza contada por referencia, evitando expansión permanente del pool de relays.&lt;/p>
&lt;p>Correcciones adicionales incluyen parseo de facturas Lightning (&lt;a href="https://github.com/damus-io/damus/pull/3566">PR #3566&lt;/a>), carga de vista de billetera (&lt;a href="https://github.com/damus-io/damus/pull/3554">PR #3554&lt;/a>), timing de lista de relays (&lt;a href="https://github.com/damus-io/damus/pull/3553">PR #3553&lt;/a>), y precarga de perfiles para reducir &amp;ldquo;popping&amp;rdquo; visual (&lt;a href="https://github.com/damus-io/damus/pull/3550">PR #3550&lt;/a>). Un &lt;a href="https://github.com/damus-io/damus/pull/3590">borrador PR #3590&lt;/a> muestra soporte de DM privado &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> en progreso.&lt;/p>
&lt;h3 id="primal-android-lanza-cifrado-nwc">Primal Android Lanza Cifrado NWC&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> tuvo una semana muy activa con 18 PRs fusionados enfocados en infraestructura de billetera. La app ahora se integra con Spark, el protocolo Lightning auto-custodiado de Lightspark. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/874">PR #874&lt;/a> añade soporte de cifrado NWC, mientras &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/872">PR #872&lt;/a> envía eventos de info NWC cuando se establecen conexiones.&lt;/p>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/870">PR #870&lt;/a> habilita exportación CSV para transacciones de billetera, útil para contabilidad e impuestos. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/716">PR #716&lt;/a> añade un cambiador de cuenta local en el Editor de Notas. Múltiples correcciones de restauración de billetera (&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/876">PR #876&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/875">PR #875&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/873">PR #873&lt;/a>) abordan casos límite para usuarios con configuraciones de billetera no-Spark.&lt;/p>
&lt;h3 id="sdk-typescript-de-marmot-añade-historial-de-mensajes">SDK TypeScript de Marmot Añade Historial de Mensajes&lt;/h3>
&lt;p>La implementación TypeScript del protocolo &lt;a href="https://github.com/marmot-protocol/marmot">Marmot&lt;/a> continúa en desarrollo. &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/38">PR #38&lt;/a> de hzrd149 implementa persistencia de historial de mensajes con paginación para la aplicación de chat de referencia, mientras &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/39">PR #39&lt;/a> mejora la ergonomía de la biblioteca.&lt;/p>
&lt;p>En el lado Rust, &lt;a href="https://github.com/marmot-protocol/mdk/pull/161">PR #161&lt;/a> implementa manejo de estado reintentable para preservar contexto de mensajes en fallos, y &lt;a href="https://github.com/marmot-protocol/mdk/pull/164">PR #164&lt;/a> cambia a std::sync::Mutex para evitar panics de tokio con SQLite. El backend whitenoise-rs añade &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/418">integración con Amber&lt;/a> (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/418">PR #418&lt;/a>), &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/467">actualiza a MDK y nostr-sdk 0.44&lt;/a> (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/467">PR #467&lt;/a>), e introduce streaming de notificaciones en tiempo real vía &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/460">PR #460&lt;/a> con tipos de evento NewMessage y GroupInvite.&lt;/p>
&lt;h3 id="haven-añade-refresco-periódico-de-wot">HAVEN Añade Refresco Periódico de WoT&lt;/h3>
&lt;p>&lt;a href="https://github.com/bitvora/haven">HAVEN&lt;/a>, el relay personal, fusionó &lt;a href="https://github.com/bitvora/haven/pull/108">PR #108&lt;/a> añadiendo refresco periódico de &lt;a href="https://nostrcompass.org/es/topics/web-of-trust/">Web of Trust&lt;/a>. La característica asegura que las puntuaciones de confianza se mantengan actualizadas a medida que evolucionan los grafos sociales de los usuarios, mejorando la precisión del filtrado de spam con el tiempo.&lt;/p>
&lt;h3 id="nostr-tools">nostr-tools&lt;/h3>
&lt;p>&lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a>, la biblioteca principal de JavaScript, recibió múltiples mejoras esta semana. Los commits incluyen una &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/c2423f7f31853d97fef2e3d649204cec328e81d5">corrección para parseo de hashtags después de saltos de línea&lt;/a> en menciones &lt;a href="https://nostrcompass.org/es/topics/nip-27/">NIP-27 (Referencias de Notas de Texto)&lt;/a>, &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/ab802c8dbe35d29feb732ba54e82a346c21c32e2">poda automática de objetos de relay rotos con seguimiento de inactividad&lt;/a> para limpieza de conexiones, &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/be9b91318fea6a0cb154b8734a15b50a4c1e7638">eliminación de cola de mensajes&lt;/a> para optimización de rendimiento de hilo único, y &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/05b1fba5113182ac0aa3c72d1f511cd956a7c139">exportaciones de archivos fuente&lt;/a> para mejores imports de TypeScript.&lt;/p>
&lt;h3 id="ndk">NDK&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a> lanzó &lt;a href="https://github.com/nostr-dev-kit/ndk/commit/26abea24726ed844fdd091744ac9f768f1a530a0">beta.71&lt;/a> con una &lt;a href="https://github.com/nostr-dev-kit/ndk/commit/33e759508bc656dc45d3d77c741edf581af323f3">corrección para reconexión después de ciclos de suspensión/despertar del dispositivo y manejo de conexiones obsoletas&lt;/a>, abordando problemas de confiabilidad para aplicaciones móviles.&lt;/p>
&lt;h3 id="notedeck">Notedeck&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>, el cliente de escritorio del equipo Damus, tiene un &lt;a href="https://github.com/damus-io/notedeck/pull/1279">PR abierto #1279&lt;/a> añadiendo un visor &lt;a href="https://nostrcompass.org/es/topics/nip-34/">NIP-34 (Colaboración Git)&lt;/a>. Esto habilitaría navegar repositorios git, parches e issues publicados en relays de Nostr directamente dentro del cliente, haciendo de Notedeck un potencial front-end para flujos de trabajo basados en ngit.&lt;/p>
&lt;h3 id="njump">njump&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/njump">njump&lt;/a>, el gateway web de Nostr, añadió soporte para dos tipos de evento &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51 (Listas)&lt;/a> vía &lt;a href="https://github.com/fiatjaf/njump/pull/152">PR #152&lt;/a>. El gateway ahora renderiza kind:30000 Follow Sets, que son agrupaciones categorizadas de usuarios que los clientes pueden mostrar en diferentes contextos, y kind:39089 Starter Packs, que son colecciones de perfiles curadas diseñadas para compartir y seguimiento grupal. Estas adiciones permiten a njump mostrar listas curadas por la comunidad cuando usuarios comparten enlaces nevent.&lt;/p>
&lt;h3 id="amethyst">Amethyst&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, el cliente Android, corrigió un bug que prevenía compartir video desde la vista del reproductor (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1695">PR #1695&lt;/a>). La opción &amp;ldquo;Compartir video&amp;rdquo; estaba fallando al aparecer porque el parámetro de contenido no se estaba pasando al componente de botones de control. Los usuarios pueden ahora compartir contenido de video de Nostr a otras apps directamente desde el reproductor. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1693">PR #1693&lt;/a> corrige crashes de deserialización Jackson JSON que ocurrían al parsear ciertos eventos malformados.&lt;/p>
&lt;h3 id="jumble">Jumble&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a>, el cliente web enfocado en navegación de feeds de relay, añadió cargas de archivos de audio vía portapapeles en &lt;a href="https://github.com/CodyTseng/jumble/pull/743">PR #743&lt;/a>. Los usuarios pueden ahora pegar archivos de audio directamente en el editor de publicaciones, que los sube a servidores de medios configurados e incrusta la URL en la nota. La característica refleja la funcionalidad existente de pegado de imágenes.&lt;/p>
&lt;h3 id="flotilla">Flotilla&lt;/h3>
&lt;p>&lt;a href="https://github.com/coracle-social/flotilla">Flotilla&lt;/a>, el cliente de comunidades &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29 (Grupos Basados en Relay)&lt;/a> de hodlbod, lanzó notificaciones vía &lt;a href="https://github.com/coracle-social/flotilla/pull/270">PR #270&lt;/a>. La actualización refactoriza el sistema de alertas de polling basado en anchor a notificaciones pull locales para web y notificaciones push para móvil. La arquitectura implementa el estándar propuesto NIP-9a (ver &lt;a href="https://github.com/nostr-protocol/nips/pull/2194">PR #2194&lt;/a> abajo), donde usuarios registran callbacks de webhook con relays y reciben cargas de eventos cifradas cuando los filtros coinciden.&lt;/p>
&lt;h3 id="formstr">Formstr&lt;/h3>
&lt;p>&lt;a href="https://github.com/abh3po/nostr-forms">Formstr&lt;/a>, la aplicación de formularios nativa de Nostr, añadió importación de formularios y soporte de formularios cifrados en &lt;a href="https://github.com/abh3po/nostr-forms/pull/422">PR #422&lt;/a>. Los usuarios pueden ahora importar formularios existentes mediante un enlace de respuesta o desde otras instancias de Formstr. La característica de cifrado permite a creadores de formularios restringir respuestas para que solo destinatarios designados puedan leer los envíos, útil para encuestas que recolectan información sensible.&lt;/p>
&lt;h3 id="pollerama">Pollerama&lt;/h3>
&lt;p>&lt;a href="https://github.com/abh3po/nostr-polls">Pollerama&lt;/a> (&lt;a href="https://pollerama.fun">pollerama.fun&lt;/a>), construido sobre &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a>, añadió compartir encuestas vía DM &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> en &lt;a href="https://github.com/abh3po/nostr-polls/pull/141">PR #141&lt;/a> y &lt;a href="https://github.com/abh3po/nostr-polls/pull/142">PR #142&lt;/a>. Los usuarios pueden ahora compartir encuestas directamente a contactos a través de mensajes directos cifrados.&lt;/p>
&lt;h3 id="nostrability-schemata">Nostrability Schemata&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrability/schemata">Nostrability schemata&lt;/a>, la colección de esquemas de verificación JSON para eventos Nostr, añadió cobertura de &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59 (Gift Wrap)&lt;/a> vía &lt;a href="https://github.com/nostrability/schemata/pull/59">PR #59&lt;/a>. La actualización incluye esquemas para eventos kind 13 (seal) y kind 1059 (gift wrap), complementando la cobertura existente de esquema &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>.&lt;/p>
&lt;h3 id="vector">Vector&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a>, el mensajero de escritorio enfocado en privacidad usando &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>, &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> para cifrado sin metadatos, fusionó &lt;a href="https://github.com/VectorPrivacy/Vector/pull/39">PR #39&lt;/a> introduciendo optimizaciones de rendimiento aceleradas por SIMD. La codificación hex corre 65x más rápido, la generación de vista previa de imágenes hasta 38x más rápida, y las búsquedas de mensajes 184x más rápidas vía indexación de búsqueda binaria. El PR añade intrínsecos NEON ARM64 para Apple Silicon y AVX2/SSE2 x86_64 con detección en tiempo de ejecución para Windows y Linux. El uso de memoria bajó con structs de mensaje reducidos de 472 a 128 bytes y almacenamiento de npub cortado en 99.6% mediante interning.&lt;/p>
&lt;p>Vector v0.3.0 (diciembre 2025) integró &lt;a href="https://github.com/marmot-protocol/mdk">MDK (Marmot Development Kit)&lt;/a> para mensajería grupal basada en protocolo MLS, trayendo grupos cifrados de extremo a extremo con secreto hacia adelante al cliente. El compartir archivos MIP-04 ahora maneja adjuntos imeta para grupos MLS, diseñado para interoperabilidad con &lt;a href="https://nostrcompass.org/es/newsletters/2026-01-28-newsletter/#marmot-protocol-updates">White Noise&lt;/a>. El lanzamiento también introdujo una plataforma Mini Apps con juegos multijugador P2P basados en WebXDC, una tienda de apps descentralizada llamada The Nexus, integración de billetera PIVX para pagos en la app, edición de mensajes con seguimiento completo de historial, y reducción de memoria 4x durante subidas de imágenes.&lt;/p>
&lt;h2 id="actualizaciones-de-nips">Actualizaciones de NIPs&lt;/h2>
&lt;p>Cambios recientes al &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Fusionados:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1913">NIP-47: Soporte de Facturas Hold&lt;/a>&lt;/strong> - &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a> ahora soporta facturas hold, habilitando flujos de trabajo de pago avanzados donde los receptores deben liquidar o cancelar pagos explícitamente. El PR añade tres nuevos métodos RPC: &lt;code>make_hold_invoice&lt;/code> crea una factura hold usando una preimagen pre-generada y hash de pago, &lt;code>settle_hold_invoice&lt;/code> reclama el pago proporcionando la preimagen original, y &lt;code>cancel_hold_invoice&lt;/code> rechaza el pago usando su hash de pago. Una nueva notificación &lt;code>hold_invoice_accepted&lt;/code> se dispara cuando un pagador bloquea el pago. Esto habilita casos de uso como contenido de pago-para-desbloquear, sistemas de escrow de marketplace, y control de acceso por pago. Las implementaciones ya están en marcha en &lt;a href="https://github.com/getAlby/hub/pull/1298">Alby Hub&lt;/a>, &lt;a href="https://github.com/getAlby/js-sdk/pull/382">Alby JS-SDK&lt;/a> y &lt;a href="https://github.com/relaystr/ndk/pull/147">dart NDK&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2208">NIP-05: Requisito de Minúsculas&lt;/a>&lt;/strong> - &lt;a href="https://nostrcompass.org/es/topics/nip-05/">NIP-05 (Verificación de Dominio)&lt;/a> ahora requiere explícitamente minúsculas tanto para claves públicas hex como para nombres locales en el archivo &lt;code>nostr.json&lt;/code>. Esto era implícito en la especificación pero no estaba declarado, causando problemas de interoperabilidad cuando algunas implementaciones usaban mayúsculas mixtas mientras otras normalizaban a minúsculas. Los clientes validando identificadores NIP-05 deberían ahora rechazar cualquier respuesta &lt;code>nostr.json&lt;/code> que contenga caracteres mayúsculas en claves o nombres.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2205">NIP-73: Códigos de País&lt;/a>&lt;/strong> - &lt;a href="https://nostrcompass.org/es/topics/nip-73/">NIP-73 (Geoetiquetas)&lt;/a> ahora soporta códigos de país ISO 3166 como alternativa a geohashes. Los eventos pueden incluir etiquetas &lt;code>[&amp;quot;g&amp;quot;, &amp;quot;US&amp;quot;, &amp;quot;countryCode&amp;quot;]&lt;/code> para indicar ubicación a nivel de país sin requerir coordenadas precisas. Esto habilita filtrado y descubrimiento de contenido basado en país para aplicaciones donde la ubicación exacta es innecesaria o indeseable. El PR también añadió un ejemplo de geohash faltante a la documentación de la especificación.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abiertos y Discusiones:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1336">NIP-82: Aplicaciones de Software&lt;/a>&lt;/strong> - franzap anunció una actualización mayor a esta especificación borrador, que define cómo se distribuyen aplicaciones de software vía Nostr usando eventos de lanzamiento kind 30063. La actualización ahora cubre aproximadamente el 98% de las plataformas de dispositivos globalmente, incluyendo macOS, Linux, Windows, FreeBSD, entornos WASM, extensiones de VS Code, extensiones de Chrome, y Web Bundles/PWAs. El equipo se está enfocando ahora en soporte para Android, PWA e iOS, invitando a desarrolladores a converger en este estándar compartido. Zapstore planea migrar al nuevo formato en las próximas semanas.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2211">NIP-74: Podcasts&lt;/a>&lt;/strong> - Define eventos direccionables para programas de podcast (kind 30074) y episodios (kind 30075). Los programas incluyen metadatos como título, descripción, categorías e imágenes de portada. Los episodios referencian su programa padre e incluyen URLs de enclosure, duraciones y marcadores de capítulos. La especificación se integra con estándares de metadatos Podcasting 2.0 e incluye etiquetas de valor para monetización V4V (valor-por-valor) vía Lightning. Plataformas como &lt;a href="https://transmit.fm">transmit.fm&lt;/a>, una plataforma de publicación de podcasts nativa de Nostr, pueden publicar directamente a relays usando este formato, permitiendo a podcasters distribuir contenido sin intermediarios.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2207">NIP-FR: Notas Solo-Amigos&lt;/a>&lt;/strong> - Propone un mecanismo para publicar notas visibles solo para una lista de amigos definida por el usuario, utilizando una clave simétrica compartida llamada ViewKey. El autor cifra notas (kind 2044) con el ViewKey usando NIP-44. El ViewKey se distribuye a cada amigo una sola vez mediante &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59 (Gift Wrap)&lt;/a>. Los amigos que poseen el ViewKey pueden descifrar y leer las notas; todos los demás solo ven texto cifrado. Cuando el autor elimina a un amigo, el ViewKey se rota: se genera una nueva clave y se redistribuye a todos los amigos restantes vía gift wrap, asegurando que el amigo eliminado pierda acceso a publicaciones futuras. Este enfoque separa el cifrado de contenido (simétrico, eficiente) de la distribución de claves (asimétrica, por amigo), manteniendo el protocolo liviano mientras habilita una característica de privacidad frecuentemente solicitada.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrhub.io/e/1a451c1581888215ae5c311d36c8a7c7d9e5e81f1f4010de4afaf7fcbd553e90">NIP-DB: Interfaz de Base de Datos de Eventos Nostr en Navegador&lt;/a>&lt;/strong> (&lt;a href="https://github.com/hzrd149/nostr-bucket/blob/master/nip.md">spec&lt;/a>) - Propone una interfaz estándar &lt;code>window.nostrdb&lt;/code> para extensiones de navegador que proporcionan almacenamiento local de eventos Nostr. La API incluye métodos para agregar eventos, consultar por ID o filtro, contar coincidencias, y suscribirse a actualizaciones. Las aplicaciones web pueden usar esta interfaz para leer de eventos cacheados localmente sin hacer solicitudes a relays, reduciendo ancho de banda y latencia. La extensión de navegador &lt;a href="https://github.com/hzrd149/nostr-bucket">nostr-bucket&lt;/a> de hzrd149 proporciona una implementación de referencia, inyectando la interfaz en todas las pestañas del navegador. Una &lt;a href="https://github.com/hzrd149/window.nostrdb.js">biblioteca polyfill&lt;/a> compañera implementa la misma API usando IndexedDB para entornos sin la extensión.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrhub.io/e/237667820943d1c8bbe7ab7732623ae51b337f177776ece439d4a8be84708eb7">Filtros TRUSTed&lt;/a>&lt;/strong> - Una suite de cinco propuestas relacionadas para curación de contenido descentralizada, construyendo sobre el merged &lt;a href="https://github.com/nostr-protocol/nips/pull/1534">PR de Trusted Assertions #1534&lt;/a> de vitorpamplona. La especificación central introduce eventos kind 17570 para declarar Preferencias de Proveedor de Confianza, permitiendo a usuarios especificar qué servicios confían para filtrado y clasificación de eventos. Los proveedores de confianza publican aserciones (kind 37571), estadísticas (kind 37572), y clasificaciones (kind 37573) a las que los clientes pueden suscribirse. El sistema usa una arquitectura de plugins con etiquetas W/w para especificar tipos de filtros y transformaciones. Esto habilita operaciones computacionalmente costosas como detección de spam, puntuación de reputación, y clasificación de contenido para ejecutarse en infraestructura dedicada mientras los usuarios mantienen control sobre qué proveedores confían. La suite incluye especificaciones separadas para presets de filtros, clasificaciones de usuarios, eventos confiados, y definiciones de plugins.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2194">NIP-9a: Notificaciones Push&lt;/a>&lt;/strong> - hodlbod propone un estándar para notificaciones push basadas en relay usando eventos de registro kind 30390. Los usuarios crean un registro que contiene filtros para eventos que quieren recibir y una URL de callback webhook. El registro se cifra a la pubkey del relay (de su campo &lt;code>self&lt;/code> NIP-11). Cuando ocurren eventos coincidentes, los relays envían POST al callback con el ID del evento (en texto plano para deduplicación) y el evento mismo (cifrado con NIP-44 al usuario). Esta arquitectura permite a los relays enviar notificaciones push mientras protege el contenido de eventos de servidores push intermediarios. El &lt;a href="https://github.com/coracle-social/flotilla/pull/270">PR #270&lt;/a> de Flotilla implementa este estándar.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/SigmaEnterprise/Catallax">Catallax&lt;/a>&lt;/strong> - Propone un protocolo de trabajo por contrato descentralizado con escrow usando eventos kind 33400. El sistema define tres roles: árbitros anuncian disponibilidad y términos, patrones crean tareas financiadas con Bitcoin en escrow, y agentes libres completan trabajo para reclamar pago. Los árbitros resuelven disputas cuando es necesario. El protocolo habilita coordinación de trabajo freelance sin confianza donde los fondos se bloquean hasta que los entregables son aceptados o el arbitraje concluye.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="análisis-profundo-de-nip-nip-47-nostr-wallet-connect">Análisis Profundo de NIP: NIP-47 (Nostr Wallet Connect)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> define Nostr Wallet Connect (NWC), un protocolo para control remoto de billeteras Lightning usando Nostr como capa de comunicación. Con la adición de soporte de facturas hold esta semana, NWC ahora cubre el rango completo de operaciones Lightning.&lt;/p>
&lt;p>El protocolo funciona a través de un intercambio simple. Una aplicación de billetera publica un evento &amp;ldquo;wallet info&amp;rdquo; (kind 13194) describiendo sus capacidades. Las aplicaciones cliente envían solicitudes cifradas (kind 23194) pidiendo a la billetera realizar operaciones como pagar facturas, crear facturas, o verificar saldos. La billetera responde con resultados cifrados (kind 23195).&lt;/p>
&lt;p>NWC usa cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> entre el cliente y la billetera, con un par de claves dedicado para operaciones de billetera, manteniéndolo separado de la identidad principal de Nostr del usuario. Esta separación significa que comprometer una conexión NWC no expone la identidad Nostr del usuario.&lt;/p>
&lt;p>&lt;strong>Métodos Soportados:&lt;/strong>&lt;/p>
&lt;p>La especificación define métodos para operaciones Lightning centrales: &lt;code>pay_invoice&lt;/code> envía pagos, &lt;code>make_invoice&lt;/code> genera facturas para recibir, &lt;code>lookup_invoice&lt;/code> verifica estado de pago, &lt;code>get_balance&lt;/code> retorna el saldo de la billetera, y &lt;code>list_transactions&lt;/code> proporciona historial de pagos. El recientemente fusionado &lt;code>pay_keysend&lt;/code> habilita pagos sin facturas, y &lt;code>hold_invoice&lt;/code> soporta pagos condicionales.&lt;/p>
&lt;p>&lt;strong>Eventos de Ejemplo:&lt;/strong>&lt;/p>
&lt;p>El servicio de billetera publica un evento info (kind 13194) anunciando sus capacidades:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">13194&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;pubkey del servicio de billetera&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;pay_invoice get_balance make_invoice lookup_invoice list_transactions notifications&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;encryption&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip44_v2&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;notifications&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;payment_received payment_sent&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;timestamp unix&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;hash del evento&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;firma del servicio de billetera&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Un cliente envía una solicitud cifrada (kind 23194) para pagar una factura:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">23194&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;pubkey efímera del cliente del secreto URI de conexión&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;cifrado NIP-44: {\&amp;#34;method\&amp;#34;: \&amp;#34;pay_invoice\&amp;#34;, \&amp;#34;params\&amp;#34;: {\&amp;#34;invoice\&amp;#34;: \&amp;#34;lnbc50n1...\&amp;#34;}}&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;pubkey del servicio de billetera&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;encryption&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip44_v2&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;timestamp unix&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;hash del evento&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;firma de clave efímera del cliente&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El servicio de billetera responde (kind 23195) con el resultado del pago:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">23195&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;pubkey del servicio de billetera&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;cifrado NIP-44: {\&amp;#34;result_type\&amp;#34;: \&amp;#34;pay_invoice\&amp;#34;, \&amp;#34;result\&amp;#34;: {\&amp;#34;preimage\&amp;#34;: \&amp;#34;...\&amp;#34;}, \&amp;#34;error\&amp;#34;: null}&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;pubkey efímera del cliente&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;id del evento de solicitud&amp;gt;&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;timestamp unix&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;hash del evento&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;firma del servicio de billetera&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>La etiqueta &lt;code>e&lt;/code> en la respuesta referencia la solicitud original, permitiendo a los clientes emparejar respuestas con sus solicitudes.&lt;/p>
&lt;p>&lt;strong>Facturas Hold:&lt;/strong>&lt;/p>
&lt;p>El &lt;a href="https://github.com/nostr-protocol/nips/pull/1913">PR #1913&lt;/a> de esta semana añadió soporte de facturas hold, habilitando pagos estilo escrow. A diferencia de facturas estándar donde el receptor reclama el pago inmediatamente liberando la preimagen, las facturas hold permiten al receptor diferir esta decisión. Cuando un pagador envía a una factura hold, los fondos se bloquean a lo largo de la ruta de pago. El receptor entonces elige liquidar (liberar la preimagen y reclamar fondos) o cancelar (rechazar pago, retornando fondos al pagador). Si ninguna acción ocurre, el pago expira y los fondos retornan automáticamente. El PR añade tres métodos NWC: &lt;code>make_hold_invoice&lt;/code>, &lt;code>settle_hold_invoice&lt;/code> y &lt;code>cancel_hold_invoice&lt;/code>, más una notificación &lt;code>hold_invoice_accepted&lt;/code>. Este mecanismo potencia aplicaciones como el escrow de viajes compartidos de Ridestr y resolución de disputas de marketplace.&lt;/p>
&lt;p>&lt;strong>Implementaciones Actuales:&lt;/strong>&lt;/p>
&lt;p>Las billeteras principales soportan NWC: Zeus, Alby, y Primal (desde el &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/874">PR #874&lt;/a> de esta semana) todos implementan soporte del lado de billetera. Del lado del cliente, Damus, Amethyst, y la mayoría de clientes Nostr principales pueden conectarse a billeteras NWC para zapping y pagos.&lt;/p>
&lt;p>El protocolo habilita una separación de responsabilidades: los usuarios pueden ejecutar su billetera en un dispositivo mientras interactúan con Nostr desde otro, con relays de Nostr sirviendo como canal de comunicación. Esta arquitectura significa que los clientes móviles no necesitan mantener fondos directamente, mejorando la seguridad al mantener la infraestructura de billetera separada de los clientes sociales.&lt;/p>
&lt;p>&lt;strong>Consideraciones de Seguridad:&lt;/strong>&lt;/p>
&lt;p>Las conexiones NWC deben tratarse como sensibles. Mientras el cifrado protege el contenido de los mensajes, la pubkey de billetera y el secreto de conexión deben guardarse. Las aplicaciones deben permitir a los usuarios revocar conexiones y establecer límites de gasto. El protocolo soporta restricciones de capacidad, para que las billeteras puedan limitar qué operaciones puede realizar una conexión particular.&lt;/p>
&lt;h2 id="análisis-profundo-de-nip-nip-59-gift-wrap">Análisis Profundo de NIP: NIP-59 (Gift Wrap)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> define un protocolo para encapsular cualquier evento Nostr en múltiples capas de cifrado, ocultando la identidad del remitente de relays y observadores. Las propuestas de esta semana para notas solo-amigos (NIP-FR) y notificaciones push (NIP-9a) ambas dependen del gift wrapping, haciéndolo un primitivo de privacidad fundamental que vale la pena entender.&lt;/p>
&lt;p>&lt;strong>Las Tres Capas:&lt;/strong>&lt;/p>
&lt;p>El gift wrapping usa tres estructuras anidadas:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Rumor&lt;/strong> (evento sin firmar): El contenido original como evento Nostr sin firma. El rumor no puede enviarse directamente a relays porque los relays rechazan eventos sin firmar.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Seal&lt;/strong> (kind 13): El rumor se cifra usando &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> y se coloca en un evento kind 13. El seal SÍ está firmado por la clave del autor real. Esta es la prueba criptográfica de autoría.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Gift Wrap&lt;/strong> (kind 1059): El seal se cifra y coloca en un evento kind 1059 firmado por un par de claves aleatorio de un solo uso. El gift wrap incluye una etiqueta &lt;code>p&lt;/code> para enrutamiento al destinatario.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>Un Malentendido Común: Negabilidad&lt;/strong>&lt;/p>
&lt;p>La especificación menciona que los rumores sin firmar proporcionan &amp;ldquo;negabilidad&amp;rdquo;, pero esto es engañoso. La capa seal SÍ está firmada por el autor real. Cuando el destinatario descifra el gift wrap y luego el seal, tiene prueba criptográfica de quién envió el mensaje. El destinatario podría incluso construir una prueba de conocimiento cero revelando la identidad del remitente sin exponer su propia clave privada.&lt;/p>
&lt;p>Lo que gift wrap realmente proporciona es &lt;strong>privacidad del remitente frente a observadores&lt;/strong>: los relays y terceros no pueden determinar quién envió el mensaje porque solo ven el gift wrap firmado por una clave aleatoria. Pero el destinatario siempre sabe, y puede probarlo.&lt;/p>
&lt;p>&lt;strong>Eventos de Ejemplo:&lt;/strong>&lt;/p>
&lt;p>Aquí está la estructura completa de tres capas de la especificación (enviando &amp;ldquo;¿Vas a la fiesta esta noche?&amp;rdquo;):&lt;/p>
&lt;p>El rumor (sin firmar, no puede publicarse a relays):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1691518405&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;¿Vas a la fiesta esta noche?&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;611df01bfcf85c26ae65453b772d8f1dfd25c264621c0277e1fc1518686faef9&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;9dd003c6d3b73b74a85a9ab099469ce251653a7af76f523671ab828acd2a0ef9&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El seal (kind 13, firmado por autor real, contiene rumor cifrado):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">13&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;611df01bfcf85c26ae65453b772d8f1dfd25c264621c0277e1fc1518686faef9&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;AqBCdwoS7/tPK+QGkPCadJTn8FxGkd24iApo3BR9/M0uw6n4RFAFSPAKKMgkzVMo...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1703015180&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;28a87d7c074d94a58e9e89bb3e9e4e813e2189f285d797b1c56069d36f59eaa7&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;02fc3facf6621196c32912b1ef53bac8f8bfe9db51c0e7102c073103586b0d29...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El gift wrap (kind 1059, firmado por clave efímera aleatoria, contiene seal cifrado):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1059&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;18b1a75918f1f2c90c23da616bce317d36e348bcf5f7ba55e75949319210c87c&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;AhC3Qj/QsKJFWuf6xroiYip+2yK95qPwJjVvFujhzSguJWb/6TlPpBW0CGFwfuf...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1703021488&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [[&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;166bf3765ebd1fc55decfe395beff2ea3b2a4e0a8946e7eb578512b555737c99&amp;#34;&lt;/span>]],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;5c005f3ccf01950aa8d131203248544fb1e41a0d698e846bd419cec3890903ac&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;35fabdae4634eb630880a1896a886e40fd6ea8a60958e30b89b33a93e6235df7...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Nótese: la &lt;code>pubkey&lt;/code> del seal es el autor real (&lt;code>611df01...&lt;/code>), mientras que la &lt;code>pubkey&lt;/code> del gift wrap es una clave de un solo uso aleatoria (&lt;code>18b1a75...&lt;/code>). Los relays solo ven el gift wrap, por lo que no pueden atribuir el mensaje al autor real.&lt;/p>
&lt;p>&lt;strong>Qué Protege Cada Capa:&lt;/strong>&lt;/p>
&lt;p>El rumor está sin firmar y no puede publicarse a relays directamente. El seal está firmado por el autor real y prueba autoría al destinatario. El gift wrap está firmado por una clave aleatoria de un solo uso, ocultando al autor real de relays y observadores. Solo el destinatario puede descifrar a través de ambas capas para alcanzar el contenido original y verificar la firma del autor en el seal.&lt;/p>
&lt;p>&lt;strong>Aplicaciones Actuales:&lt;/strong>&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17 (Mensajes Directos Privados)&lt;/a> usa gift wrap para DMs cifrados, reemplazando el esquema anterior NIP-04. El propuesto NIP-FR (notas solo para amigos) usa gift wrapping para distribuir ViewKeys a amigos, quienes luego descifran notas cifradas con esas claves. NIP-9a (notificaciones push) cifra cargas de notificación usando principios de gift wrap.&lt;/p>
&lt;p>&lt;strong>Protección de Metadatos:&lt;/strong>&lt;/p>
&lt;p>Las marcas de tiempo deben aleatorizarse para frustrar análisis de timing. Los relays deben requerir AUTH antes de servir eventos kind 1059 y solo servirlos al destinatario marcado. Al enviar a múltiples destinatarios, crear gift wraps separados para cada uno.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. ¿Construyendo algo? ¿Tienes noticias que compartir? ¿Quieres que cubramos tu proyecto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Contáctanos vía DM NIP-17&lt;/a> o encuéntranos en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #7</title><link>https://nostrcompass.org/es/newsletters/2026-01-28-newsletter/</link><pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-01-28-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Ridestr trae viajes compartidos descentralizados a Nostr con pagos en &lt;a href="https://nostrcompass.org/es/topics/cashu/">Cashu&lt;/a> y ubicación cifrada compartida. Pomade introduce recuperación basada en correo electrónico para firmantes multisig. Damus lanza &lt;a href="https://nostrcompass.org/es/topics/negentropy/">negentropy&lt;/a> para sincronización confiable de mensajes directos. La aplicación de escritorio de Amethyst añade búsqueda, marcadores y zaps. Amber v4.1.1 muestra puntuaciones de confianza de relays. Marmot fusiona MIP-03 y construye una aplicación de chat de referencia en TypeScript. diVine añade autenticación QR mediante &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> y soporte para menciones. Nuevas propuestas de NIP abordan la gestión de comunidades, sincronización basada en secuencias y almacenamiento cifrado de archivos. También echamos un vistazo a cinco años de eneros en Nostr, trazando la evolución del protocolo desde un puñado de primeros adoptantes en 2021 hasta el lanzamiento explosivo de Damus en la App Store en 2023 y el ecosistema de clientes madurando en 2025.&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal de Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Ridestr trae viajes compartidos descentralizados a Nostr con pagos en &lt;a href="https://nostrcompass.org/es/topics/cashu/">Cashu&lt;/a> y ubicación cifrada compartida. Pomade introduce recuperación basada en correo electrónico para firmantes multisig. Damus lanza &lt;a href="https://nostrcompass.org/es/topics/negentropy/">negentropy&lt;/a> para sincronización confiable de mensajes directos. La aplicación de escritorio de Amethyst añade búsqueda, marcadores y zaps. Amber v4.1.1 muestra puntuaciones de confianza de relays. Marmot fusiona MIP-03 y construye una aplicación de chat de referencia en TypeScript. diVine añade autenticación QR mediante &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> y soporte para menciones. Nuevas propuestas de NIP abordan la gestión de comunidades, sincronización basada en secuencias y almacenamiento cifrado de archivos. También echamos un vistazo a cinco años de eneros en Nostr, trazando la evolución del protocolo desde un puñado de primeros adoptantes en 2021 hasta el lanzamiento explosivo de Damus en la App Store en 2023 y el ecosistema de clientes madurando en 2025.&lt;/p>
&lt;h2 id="noticias">Noticias&lt;/h2>
&lt;h3 id="ridestr-trae-viajes-compartidos-descentralizados-a-nostr">Ridestr Trae Viajes Compartidos Descentralizados a Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a> está desarrollando una aplicación de viajes compartidos peer-to-peer construida completamente sobre Nostr, permitiendo transacciones directas entre conductores y pasajeros con pagos en Bitcoin y &lt;a href="https://nostrcompass.org/es/topics/cashu/">Cashu&lt;/a>. El protocolo utiliza tipos de eventos personalizados (30173, 3173-3175, 30180/30181) para coordinar viajes mientras mantiene la privacidad a través de divulgación progresiva de ubicación y cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>.&lt;/p>
&lt;p>El sistema funciona mediante un flujo cuidadosamente coreografiado: los conductores transmiten disponibilidad usando ubicaciones codificadas en geohash (~5km de precisión) mediante eventos kind 30173, los pasajeros solicitan viajes con estimaciones de tarifa a través de kind 3173, y los pagos se aseguran usando tokens de depósito HTLC antes de que comience el viaje. La privacidad de ubicación se preserva mediante divulgación progresiva, donde los detalles de recogida solo se revelan cuando los conductores llegan y los destinos se comparten después de la verificación del PIN. Toda la comunicación entre las partes usa cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> para privacidad.&lt;/p>
&lt;p>Ridestr implementa seguridad de pagos a través de depósito HTLC con firmas P2PK. Cuando un pasajero acepta la oferta de un conductor, bloquea tokens &lt;a href="https://nostrcompass.org/es/topics/cashu/">Cashu&lt;/a> con un hash de pago que solo el conductor puede reclamar después de completar el viaje. El protocolo actualmente opera con arquitectura de mint único, requiriendo que pasajeros y conductores usen el mismo mint de &lt;a href="https://nostrcompass.org/es/topics/cashu/">Cashu&lt;/a>. La implementación Android basada en Kotlin del proyecto maneja verificación de pruebas y recuperación de pruebas obsoletas a través de verificaciones de estado NUT-07.&lt;/p>
&lt;p>Ridestr aborda desafíos que la mayoría de las aplicaciones Nostr evitan: coordinación de ubicación en tiempo real, depósito de pagos con resolución de disputas y sistemas de reputación para interacciones en el mundo físico. El proyecto está en beta y demuestra que el modelo de eventos de Nostr puede soportar mercados de servicios peer-to-peer, no solo compartir contenido.&lt;/p>
&lt;h3 id="pomade-lanza-sistema-de-recuperación-alpha-para-firmantes-multisig">Pomade Lanza Sistema de Recuperación Alpha para Firmantes Multisig&lt;/h3>
&lt;p>&lt;a href="https://github.com/coracle-social/pomade">Pomade&lt;/a>, desarrollado por hodlbod, se construye sobre el ecosistema existente de &lt;a href="https://github.com/FROSTR-ORG">FROSTR&lt;/a> para proporcionar un servicio de firma de umbral enfocado en la recuperación. Usando firmas &lt;a href="https://nostrcompass.org/es/topics/frost/">FROST&lt;/a> (Flexible Round-Optimized Schnorr Threshold) a través de la biblioteca @frostr/bifrost, Pomade añade flujos de recuperación basados en correo electrónico sobre la criptografía de umbral. El sistema fragmenta la clave secreta del usuario usando Shamir Secret Sharing, distribuyendo fragmentos a través de múltiples firmantes independientes con un umbral configurable (2-de-3, 3-de-5, etc.).&lt;/p>
&lt;p>El protocolo opera completamente sobre Nostr usando un único tipo de evento (28350) con cargas útiles cifradas con &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>. Al firmar, el cliente solicita firmas parciales de al menos &lt;code>threshold&lt;/code> firmantes, luego las agrega en una firma Schnorr válida. Para cifrado, los firmantes colaboran para derivar secretos compartidos vía ECDH sin que ninguna parte individual conozca la clave completa.&lt;/p>
&lt;p>La recuperación funciona a través de dos métodos de autenticación: basado en contraseña (usando argon2id con la pubkey del firmante como sal) o OTP por correo electrónico. Para prevenir ataques MITM durante la recuperación OTP, cada firmante genera su propio código de verificación con un prefijo proporcionado por el cliente, requiriendo que los usuarios se autentiquen independientemente con cada firmante. El protocolo requiere prueba de trabajo en eventos de registro (20+ bits según &lt;a href="https://nostrcompass.org/es/topics/nip-13/">NIP-13&lt;/a>) para prevenir spam.&lt;/p>
&lt;p>El modelo de confianza es explícito: si &lt;code>threshold&lt;/code> firmantes se confabulan, pueden robar la clave. Los proveedores de correo electrónico tienen confianza total ya que pueden interceptar OTPs. Los usuarios no pueden recuperar independientemente su clave secreta completa; hacerlo requiere cooperación de &lt;code>threshold&lt;/code> firmantes. El protocolo está diseñado para incorporar nuevos usuarios no familiarizados con la gestión de claves, con la recomendación explícita de que los usuarios migren a auto-custodia una vez cómodos. Pomade advierte sobre potencial &amp;ldquo;pérdida de claves, robo, denegación de servicio o fuga de metadatos&amp;rdquo; dado su estado alpha no auditado.&lt;/p>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;h3 id="damus-lanza-negentropy-para-sincronización-confiable-de-dms">Damus Lanza Negentropy para Sincronización Confiable de DMs&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/tree/v1.13">Damus v1.13&lt;/a> lanza la implementación de negentropy &lt;a href="https://nostrcompass.org/es/newsletters/2026-01-21-newsletter/#damus-ios-client---open-prs">que previsualizamos como PR abierto la semana pasada&lt;/a>. &lt;a href="https://github.com/damus-io/damus/pull/3536">PR #3536&lt;/a> añade soporte base de &lt;a href="https://nostrcompass.org/es/topics/negentropy/">negentropy&lt;/a> a la capa de red, habilitando reconciliación de conjuntos con relays que soportan el protocolo. Un &lt;a href="https://github.com/damus-io/damus/pull/3547">PR #3547&lt;/a> complementario añade sincronización de DMs al deslizar para refrescar que usa negentropy para recuperar mensajes faltantes cuando las suscripciones REQ estándar fallan.&lt;/p>
&lt;p>La implementación sigue un enfoque conservador: la carga normal de DMs continúa sin cambios, con &lt;a href="https://nostrcompass.org/es/topics/negentropy/">negentropy&lt;/a> disponible como mecanismo de recuperación cuando los usuarios refrescan manualmente. Las pruebas automatizadas demuestran la corrección generando un DM con una marca de tiempo antigua que las consultas estándar perderían, luego usando sincronización &lt;a href="https://nostrcompass.org/es/topics/negentropy/">negentropy&lt;/a> para recuperarlo exitosamente. Aunque el soporte de &lt;a href="https://nostrcompass.org/es/topics/negentropy/">negentropy&lt;/a> requiere relays compatibles, la implementación maneja elegantemente entornos de relays mixtos usando el protocolo donde esté disponible.&lt;/p>
&lt;h3 id="amber-v411---puntuaciones-de-confianza-de-relays">Amber v4.1.1 - Puntuaciones de Confianza de Relays&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.1">Amber v4.1.1&lt;/a> lanza la visualización de puntuaciones de confianza de relays (&lt;a href="https://github.com/greenart7c3/Amber/pull/289">PR #289&lt;/a>), implementando los conceptos de evaluación de relays discutidos en &lt;a href="https://nostrcompass.org/es/newsletters/2026-01-21-newsletter/#nip-updates">la cobertura de Trusted Relay Assertions de la semana pasada&lt;/a>. Las puntuaciones de confianza ahora aparecen en la página de Relays y para solicitudes de conexión NostrConnect, ayudando a los usuarios a evaluar la confiabilidad de relays antes de autorizar conexiones. El lanzamiento también incluye una interfaz rediseñada de login/eventos/permisos y soporte para el método &lt;code>switch_relays&lt;/code>. Las mejoras de rendimiento almacenan en caché las operaciones de keystore, abordando reportes de tiempos de carga de 20+ segundos en dispositivos antiguos.&lt;/p>
&lt;h3 id="nak-v0182---integración-mcp">nak v0.18.2 - Integración MCP&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a> (Nostr Army Knife) de fiatjaf &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.18.2">v0.18.2&lt;/a> añade soporte para &lt;a href="https://nostrify.dev/mcp">Model Context Protocol&lt;/a> vía &lt;code>nak mcp&lt;/code>, permitiendo a agentes de IA buscar personas en Nostr, publicar notas, mencionar usuarios y leer contenido usando el modelo outbox. El lanzamiento también introduce un &lt;a href="https://github.com/fiatjaf/nak/blob/master/install.sh">instalador de una línea&lt;/a> (&lt;code>curl -sSL https://raw.githubusercontent.com/fiatjaf/nak/master/install.sh | sh&lt;/code>) que descarga binarios pre-compilados, eliminando el requisito de la cadena de herramientas Go para usuarios finales. El modo bunker ahora soporta sockets Unix y &lt;code>switch_relays&lt;/code>.&lt;/p>
&lt;h3 id="zeus-v0122-beta---correcciones-nwc">Zeus v0.12.2 Beta - Correcciones NWC&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZeusLN/zeus/releases">Zeus v0.12.2-beta1&lt;/a> lanza múltiples correcciones NWC abordando problemas cubiertos en &lt;a href="https://nostrcompass.org/es/newsletters/2026-01-21-newsletter/#zeus-lightning-wallet-with-nostr-wallet-connect">la cobertura de Zeus de la semana pasada&lt;/a>.&lt;/p>
&lt;h2 id="actualizaciones-de-proyectos">Actualizaciones de Proyectos&lt;/h2>
&lt;h3 id="amethyst-desktop---fase-2a-lanzada">Amethyst Desktop - Fase 2A Lanzada&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> lanzó &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1676">la Fase 2A de su aplicación de escritorio&lt;/a>, añadiendo Búsqueda, Marcadores, Zaps, vistas de Hilos y contenido de formato largo (Lecturas) a la experiencia de escritorio. Un &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1683">PR #1683&lt;/a> complementario añade retroalimentación transparente de transmisión de eventos para que los usuarios ahora vean el estado por relay en tiempo real mientras sus eventos se propagan a través de la red, facilitando el diagnóstico de problemas de conectividad.&lt;/p>
&lt;h3 id="progreso-de-notedeck-aplicación-de-calendario-y-pulido-de-ux">Progreso de Notedeck: Aplicación de Calendario y Pulido de UX&lt;/h3>
&lt;p>El cliente de escritorio &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> del equipo Damus fusionó el comportamiento de auto-ocultar barra de herramientas (&lt;a href="https://github.com/damus-io/notedeck/pull/1268">PR #1268&lt;/a>) que responde a la velocidad de desplazamiento para más espacio de pantalla en vistas móviles. Un &lt;a href="https://github.com/damus-io/notedeck/pull/1271">borrador PR #1271&lt;/a> añade una aplicación completa de Calendario &lt;a href="https://nostrcompass.org/es/topics/nip-52/">NIP-52&lt;/a> con vistas de mes/semana/día/agenda, soporte RSVP y comentarios &lt;a href="https://nostrcompass.org/es/topics/nip-22/">NIP-22&lt;/a> en eventos de calendario, actualmente con feature-flag para pruebas.&lt;/p>
&lt;h3 id="jumble-añade-modo-comunidad">Jumble Añade Modo Comunidad&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a>, el cliente web enfocado en relays, añadió &lt;a href="https://github.com/CodyTseng/jumble/pull/738">modo comunidad&lt;/a> y soporte para &lt;a href="https://github.com/CodyTseng/jumble/pull/736">presets de conjuntos de relays vía variables de entorno&lt;/a>, facilitando el despliegue de instancias temáticas como &lt;a href="https://nostr.moe/">nostr.moe&lt;/a>.&lt;/p>
&lt;h3 id="panel-de-órdenes-de-shopstr">Panel de Órdenes de Shopstr&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> reemplazó su gestión de órdenes basada en chat con un &lt;a href="https://github.com/shopstr-eng/shopstr/pull/219">Panel de Órdenes&lt;/a> dedicado. La nueva interfaz proporciona una vista centralizada para que los comerciantes rastreen el estado de órdenes, marquen mensajes como leídos y gestionen el cumplimiento sin desplazarse por hilos de chat. La actualización deprecia el caché IndexedDB en favor de APIs de estado de órdenes del lado del servidor y revisa cómo se etiquetan los DMs de órdenes para mejor filtrado.&lt;/p>
&lt;h3 id="formstr-añade-preguntas-en-cuadrícula">Formstr Añade Preguntas en Cuadrícula&lt;/h3>
&lt;p>&lt;a href="https://github.com/abh3po/nostr-forms">Formstr&lt;/a>, la aplicación de formularios nativa de Nostr, añadió &lt;a href="https://github.com/abh3po/nostr-forms/pull/419">preguntas en cuadrícula&lt;/a> y &lt;a href="https://github.com/abh3po/nostr-forms/pull/410">reescribió su SDK&lt;/a> con soporte para incrustación. Una [corrección para firmantes no-&lt;a href="https://nostrcompass.org/es/topics/nip-07/">NIP-07&lt;/a>](&lt;a href="https://github.com/abh3po/nostr-forms/pull/418">https://github.com/abh3po/nostr-forms/pull/418&lt;/a>) resolvió problemas para usuarios con bunker o firmantes locales intentando enviar formularios con su identidad.&lt;/p>
&lt;h3 id="nostr-tools-actualiza-dependencias-criptográficas">nostr-tools Actualiza Dependencias Criptográficas&lt;/h3>
&lt;p>&lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a>, la biblioteca principal de JavaScript, &lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/520">actualizó a @noble/curves v2.0.1&lt;/a>, abordando cambios de API incompatibles en 27 archivos y adoptando las últimas bibliotecas noble auditadas. fiatjaf también añadió soporte &lt;code>switch_relays&lt;/code> a &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a>, permitiendo a clientes bunker cambiar conexiones de relay dinámicamente.&lt;/p>
&lt;h3 id="zeus-trabajando-en-reseñas-de-mints-nip-87">Zeus Trabajando en Reseñas de Mints NIP-87&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a> tiene un [PR abierto para reseñas de mints &lt;a href="https://nostrcompass.org/es/topics/nip-87/">NIP-87&lt;/a>](&lt;a href="https://github.com/ZeusLN/zeus/pull/3576%29">https://github.com/ZeusLN/zeus/pull/3576)&lt;/a>, permitiendo a los usuarios descubrir y reseñar mints de &lt;a href="https://nostrcompass.org/es/topics/cashu/">Cashu&lt;/a> filtrados por seguidos de Nostr. Las reseñas incluyen calificaciones con estrellas y pueden enviarse anónimamente o con el nsec del usuario.&lt;/p>
&lt;h3 id="camelus-lanza-soporte-completo-de-dm">Camelus Lanza Soporte Completo de DM&lt;/h3>
&lt;p>&lt;a href="https://github.com/camelus-hq/camelus">Camelus&lt;/a>, un cliente Android basado en Flutter construido con Dart NDK para rendimiento móvil eficiente en batería, añadió mensajería directa completa con más de 20 commits esta semana. La actualización incluye categorías de chat, fechas de mensajes, interfaz de envío optimista, funcionalidad de nota para uno mismo y manejo adecuado de relays de DM.&lt;/p>
&lt;h3 id="actualizaciones-del-protocolo-marmot">Actualizaciones del Protocolo Marmot&lt;/h3>
&lt;p>La resolución determinista de commits MIP-03 &lt;a href="https://nostrcompass.org/es/newsletters/2026-01-21-newsletter/#marmot-protocol-white-noise-encrypted-group-chat-library">que cubrimos como PR abierto la semana pasada&lt;/a> ahora se ha fusionado. &lt;a href="https://github.com/marmot-protocol/mdk/pull/152">MDK PR #152&lt;/a> asegura que todos los chats grupales basados en &lt;a href="https://nostrcompass.org/es/topics/mls/">MLS&lt;/a> converjan al mismo estado cuando llegan múltiples commits válidos para la misma época.&lt;/p>
&lt;p>Un &lt;a href="https://github.com/marmot-protocol/marmot/pull/28">PR de especificación #28&lt;/a> complementario añade requisitos de ciclo de vida de init_key abordando vacíos de las auditorías de implementación: el material de clave privada de mensajes Welcome debe ser eliminado de forma segura después del procesamiento (zerización, limpieza de almacenamiento), y los nuevos miembros deben realizar auto-actualizaciones dentro de 24 horas para secreto hacia adelante.&lt;/p>
&lt;p>El SDK de TypeScript (&lt;a href="https://github.com/marmot-protocol/marmot-ts">marmot-ts&lt;/a>) está construyendo una aplicación de chat de referencia. &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/37">PR #37&lt;/a> añade creación/listado de grupos, gestión de paquetes de claves con flujos de publicar/transmitir/eliminar, e invitaciones por código QR. Un &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/38">PR abierto #38&lt;/a> por hzrd149 implementa persistencia de historial de mensajes con paginación. El backend whitenoise-rs fusionó 15 PRs esta semana incluyendo soporte multi-idioma (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/455">PR #455&lt;/a>) y referencias de medios MIP-04 v2 (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/450">PR #450&lt;/a>).&lt;/p>
&lt;h3 id="divine-añade-funciones-de-integración-con-nostr">diVine Añade Funciones de Integración con Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>, la aplicación de video de formato corto, continúa la rápida integración con Nostr.&lt;/p>
&lt;p>Los PRs abiertos incluyen autenticación por código QR &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1019">PR #1019&lt;/a>) y mensajería directa cifrada &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/834">PR #834&lt;/a>). La actividad de esta semana se centró en &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1098">soporte de menciones&lt;/a> convirtiendo URIs &lt;code>nostr:&lt;/code> y @menciones a enlaces de perfil clicables, &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1097">avatares de respaldo de Classic Viners&lt;/a> usando perfiles de Nostr, y herramientas de edición de video incluyendo &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1056">dibujo&lt;/a>, &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1053">filtros&lt;/a> y &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1050">stickers&lt;/a>.&lt;/p>
&lt;h2 id="actualizaciones-de-nips">Actualizaciones de NIPs&lt;/h2>
&lt;p>Cambios recientes al &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Fusionados:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1534">Trusted Relay Assertions&lt;/a>&lt;/strong> - La propuesta para estandarizar puntuaciones de confianza de relays &lt;a href="https://nostrcompass.org/es/newsletters/2026-01-21-newsletter/#nip-updates">que cubrimos la semana pasada&lt;/a> fue fusionada. La especificación define eventos kind 30385 para aserciones de confianza de relay con puntuación en fiabilidad, calidad y accesibilidad. La discusión previa a la fusión se centró en si las puntuaciones de confianza deben ser &amp;ldquo;globales&amp;rdquo; (calculadas una vez para todos los usuarios) o &amp;ldquo;personalizadas&amp;rdquo; (relativas al grafo social de cada observador). Algoritmos estilo PageRank como &lt;a href="https://trust.nostr.band/">Trust Rank de nostr.band&lt;/a> y &lt;a href="https://github.com/Pretty-Good-Freedom-Tech/graperank-nodejs">GrapeRank&lt;/a> resisten ataques sybil dividiendo cualquier rango pasado a través de cuentas falsas por el tamaño de la granja de bots.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abiertos y Discusiones:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Communikeys&lt;/strong> - Una &lt;a href="https://nostrhub.io">propuesta comprehensiva&lt;/a> para gestión de comunidades que usa npubs existentes como identificadores de comunidad en lugar de enfoques basados en relays. Cualquier npub puede convertirse en comunidad publicando un evento kind 10222; las publicaciones apuntan a comunidades vía eventos kind 30222. El control de acceso usa badges &lt;a href="https://nostrcompass.org/es/topics/nip-58/">NIP-58&lt;/a>, permitiendo gestión de membresía delegada con almacenamiento frío para claves de comunidad.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2196">NIP-CF: Changes Feed&lt;/a>&lt;/strong> - Un borrador proponiendo sincronización de eventos basada en secuencia como alternativa a filtros &lt;code>since&lt;/code> basados en marcas de tiempo. El problema: la sincronización estándar de Nostr usando marcas de tiempo &lt;code>since&lt;/code> puede perder eventos cuando múltiples eventos comparten la misma marca de tiempo con precisión de segundo, los relojes del cliente y relay divergen, o el checkpointing es impreciso. NIP-CF resuelve esto haciendo que los relays asignen números de secuencia monotónicamente crecientes a eventos almacenados, proporcionando ordenamiento total estricto. Los clientes solicitan cambios desde un número de secuencia específico y reciben eventos en orden garantizado, con checkpointing preciso que nunca pierde eventos. La propuesta también soporta modo en vivo/continuo donde las suscripciones permanecen abiertas después de la sincronización inicial para actualizaciones en tiempo real.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1947">NIP-XX: Encrypted File Sync&lt;/a>&lt;/strong> - Un protocolo que define kinds 30800 (archivos cifrados), 30801 (índices de bóveda) y 30802 (documentos compartidos) para sincronizar contenido cifrado entre dispositivos usando relays de Nostr. El protocolo permite que aplicaciones de toma de notas local-first proporcionen sincronización cifrada de extremo a extremo sin servidores centralizados. Los contenidos de archivos, rutas, nombres y estructura de carpetas están todos cifrados usando auto-cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>, por lo que los relays almacenan blobs que no pueden leer. Los adjuntos binarios como imágenes usan servidores &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> con cifrado del lado del cliente. Kind 30802 permite compartir documentos entre usuarios cifrando a la clave pública del destinatario.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="cinco-años-de-eneros-en-nostr">Cinco Años de Eneros en Nostr&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/es/newsletters/2025-12-31-newsletter/#december-recap-five-years-of-nostr-decembers">El newsletter del mes pasado&lt;/a> trazó los hitos de diciembre de Nostr desde el primer lanzamiento de cliente de fiatjaf hasta la donación catalítica de Jack Dorsey. Esta retrospectiva registra lo que sucedió cada enero desde 2021 hasta 2025, enfocándose en desarrollos técnicos verificados.&lt;/p>
&lt;h3 id="enero-2021-desarrollo-temprano">Enero 2021: Desarrollo Temprano&lt;/h3>
&lt;p>El tercer mes de Nostr vio desarrollo continuo en Branle, el cliente Vue.js de fiatjaf que se había lanzado en diciembre de 2020. Un pequeño grupo de primeros adoptantes, probablemente menos de 15 personas, se coordinaban a través del grupo de Telegram &lt;a href="https://t.me/nostr_protocol">@nostr_protocol&lt;/a> (creado el 16 de noviembre de 2020), probando el protocolo en uno o dos relays experimentales. El cliente de línea de comandos noscl proporcionaba interacción basada en terminal.&lt;/p>
&lt;p>La base técnica ya estaba establecida: usuarios identificados por claves públicas secp256k1, publicaciones firmadas criptográficamente con firmas Schnorr, y relays sirviendo como almacenamiento simple que no se comunican entre sí. Esta fue criptografía deliberadamente nativa de Bitcoin, una elección de diseño que moldearía patrones de adopción años después.&lt;/p>
&lt;h3 id="enero-2022-descubrimiento-por-desarrolladores">Enero 2022: Descubrimiento por Desarrolladores&lt;/h3>
&lt;p>Enero 2022 abrió con Nostr todavía vibrando por su &lt;a href="https://news.ycombinator.com/item?id=29749061">primera aparición en Hacker News&lt;/a> (31 de diciembre de 2021), que generó 110 puntos y 138 comentarios. Al momento de esa publicación, solo alrededor de siete relays alimentaban toda la red, con comentaristas notando que &amp;ldquo;el spam no es un problema todavía porque nostr es súper nuevo y nadie lo usa aún&amp;rdquo;. Robert C. Martin (&amp;ldquo;Uncle Bob&amp;rdquo;) había respaldado a Nostr como potencialmente &amp;ldquo;la solución final para comunicación social&amp;rdquo;. La discusión continuó en enero, con desarrolladores debatiendo arquitectura de relays versus P2P verdadero, resistencia a la censura versus moderación, y si la simplicidad podría escalar.&lt;/p>
&lt;p>La publicación de HN provocó una ola de nuevas implementaciones. El mismo Uncle Bob comenzó &lt;a href="https://github.com/unclebob/more-speech">more-speech&lt;/a>, un cliente de escritorio Clojure, el 18 de enero. La biblioteca &lt;a href="https://github.com/nbd-wtf/go-nostr">go-nostr&lt;/a> de fiatjaf (creada en enero 2021) y el cliente de línea de comandos &lt;a href="https://github.com/fiatjaf/noscl">noscl&lt;/a> proporcionaban herramientas Go, mientras &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a> ofrecía soporte JavaScript. Para diciembre 2022, aproximadamente 800 perfiles tenían biografías. Branle seguía siendo el cliente web principal, recibiendo actualizaciones incluyendo importación de clave privada y soporte multi-relay. Los desafíos técnicos eran evidentes: las claves hexadecimales de 64 caracteres resultaban poco intuitivas, los retrasos de mensajes frustraban a los usuarios, y la comunidad cuestionaba si la arquitectura podría manejar tráfico a escala de Twitter.&lt;/p>
&lt;h3 id="enero-2023-el-despegue">Enero 2023: El Despegue&lt;/h3>
&lt;p>Enero 2023 transformó a Nostr de experimento a movimiento. Damus, el cliente iOS de William Casarin (jb55), luchó contra el proceso de aprobación de la App Store de Apple. Rechazado el 1 de enero, rechazado de nuevo el 26 de enero, fue finalmente &lt;a href="https://www.coindesk.com/tech/2023/02/01/decentralized-social-media-project-nostrs-damus-gets-listed-on-apple-app-store">aprobado el 31 de enero&lt;/a>. Esa aprobación desencadenó una cascada: Damus alcanzó inmediatamente el #10 en Redes Sociales de EE.UU. Jack Dorsey &lt;a href="https://web.archive.org/web/20240304043638/https://www.theblock.co/post/207448/nostr-based-decentralized-twitter-alternative-damus-goes-live-on-apple-app-store">lo llamó&lt;/a> &amp;ldquo;un hito para los protocolos abiertos&amp;rdquo;.&lt;/p>
&lt;p>Ocho días antes, el 23 de enero, &lt;a href="https://x.com/Snowden/status/1617623779626352640">Edward Snowden anunció&lt;/a> su presencia en Nostr: &amp;ldquo;Una de las cosas geniales de Nostr&amp;hellip; más allá de la resistencia a la censura, es que no estás limitado a 280 caracteres&amp;rdquo;. Su respaldo como denunciante de la NSA tenía peso en círculos conscientes de la privacidad, y los usuarios inmediatamente comenzaron a enviarle zaps de sats vía Lightning.&lt;/p>
&lt;p>Los clientes web competían para incorporar la afluencia. &lt;a href="https://github.com/v0l/snort">Snort&lt;/a>, creado por kieran en diciembre 2022, emergió como un cliente React repleto de funciones; el 13 de enero, Snort integró registro NIP-05 vía la API de Nostr Plebs, permitiendo a nuevos usuarios reclamar identidades legibles por humanos durante la incorporación. &lt;a href="https://iris.to">Iris&lt;/a>, desarrollado a tiempo completo por Martti Malmi (un colaborador temprano de Bitcoin que recibió la segunda transacción de Bitcoin de Satoshi), ofrecía interfaces web y móvil con identidades NIP-05 gratuitas en iris.to. &lt;a href="https://github.com/monlovesmango/astral">Astral&lt;/a>, construido por monlovesmango con Quasar (Vue.js) como fork de Branle, se enfocaba en gestión de relays con su función de agrupación de relays que permitía a usuarios organizar relays en conjuntos para publicación y filtrado. Las betas de TestFlight para clientes iOS se llenaban en horas, y Amethyst dominaba Android.&lt;/p>
&lt;p>La infraestructura luchaba por mantener el ritmo. Todos los relays eran operados por entusiastas pagando de su bolsillo. Los relays de pago usando micropagos Lightning creaban filtrado natural de spam pero introducían fricción de acceso. &lt;a href="https://techcrunch.com/2023/02/02/damus-pulled-from-apples-app-store-in-china-after-two-days/">Damus fue retirado de la App Store de China&lt;/a> solo dos días después de la aprobación, supuestamente por solicitud del principal vigilante de internet de China.&lt;/p>
&lt;h3 id="enero-2024-endurecimiento-del-protocolo">Enero 2024: Endurecimiento del Protocolo&lt;/h3>
&lt;p>Enero 2024 se enfocó en estandarización del protocolo y construcción de comunidad. &lt;a href="https://www.nostrphx.com/events">Nostr PHX&lt;/a> inició el año con un meetup el 5 de enero en Phoenix, reuniendo a cypherpunks locales. Este fue el primero de muchos eventos comunitarios ese año incluyendo BTC Prague (junio), Nostriga en Riga (agosto), y Nostrasia.&lt;/p>
&lt;p>El desarrollo de protocolo más significativo fue &lt;a href="https://github.com/nostr-protocol/nips/pull/716">NIP-59 (Gift Wrap)&lt;/a> siendo fusionado el 29 de enero, proporcionando protección de metadatos para comunicaciones cifradas. Gift Wrap se construye sobre el &lt;a href="https://github.com/paulmillr/nip44">estándar de cifrado NIP-44&lt;/a> (que había sido &lt;a href="https://cure53.de/audit-report_nip44-implementations.pdf">auditado por Cure53&lt;/a> en diciembre 2023) para ocultar la identidad del remitente de los relays. El protocolo envuelve mensajes cifrados dentro de un evento exterior firmado por un par de claves aleatorio de uso único. Los relays solo ven la pubkey desechable, mientras la identidad real del remitente está enterrada en la carga útil cifrada que solo el destinatario puede descifrar. Esto previene que operadores de relays y observadores de red aprendan quién está enviando mensajes a quién. Las marcas de tiempo también pueden aleatorizarse para derrotar análisis de timing.&lt;/p>
&lt;p>El ecosistema se expandió más allá de las redes sociales. &lt;a href="https://plebeian.market">Plebeian Market&lt;/a> se volvió completamente nativo de Nostr con cumplimiento de &lt;a href="https://nostrcompass.org/es/topics/nip-15/">NIP-15&lt;/a>, habilitando carritos de compra entre puestos y un navegador de puestos para descubrir comerciantes. &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> emergió como un mercado sin permisos facilitando comercio en Bitcoin. &lt;a href="https://zap.stream/">Zap.stream&lt;/a>, construido por kieran, trajo streaming en vivo a Nostr con pagos Lightning a 21 sats/minuto. Las herramientas de desarrollo maduraron con &lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a> proporcionando abstracciones TypeScript y &lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> ofreciendo bindings Rust. &lt;a href="https://blog.zeusln.com/new-release-zeus-v0-8-1/">Zeus v0.8.1&lt;/a> lanzó con importación de contactos Nostr y LND persistente, sentando las bases para integración de Nostr Wallet Connect en versiones posteriores.&lt;/p>
&lt;p>Sin embargo, la sostenibilidad de infraestructura &lt;a href="https://arxiv.org/abs/2402.05709">seguía siendo desafiante&lt;/a>. Investigación académica de este período encontró que el 95% de los relays luchaban por cubrir costos operativos, con 20% experimentando tiempo de inactividad significativo. La tarifa de admisión para relays de pago promediaba menos de 1,000 sats (~$0.45), insuficiente para sostener operaciones.&lt;/p>
&lt;p>&lt;em>Una nota sobre estafas: El &amp;ldquo;Nostr Assets Protocol&amp;rdquo; y el token &amp;ldquo;$NOSTR&amp;rdquo; asociado que se lanzó alrededor de esta época &lt;a href="https://www.aicoin.com/en/article/377704">fueron públicamente denunciados por fiatjaf&lt;/a> como &amp;ldquo;100% fraudulentos&amp;rdquo; y &amp;ldquo;una estafa de afinidad&amp;rdquo; sin conexión con el protocolo Nostr real.&lt;/em>&lt;/p>
&lt;h3 id="enero-2025-maduración-de-clientes">Enero 2025: Maduración de Clientes&lt;/h3>
&lt;p>Enero 2025 vio desarrollo continuo de clientes en todo el ecosistema. &lt;a href="https://www.nobsbitcoin.com/nostur-v1-17-0/">Nostur 1.17.0&lt;/a> lanzó el 13 de enero con sincronización entre dispositivos para estados de lectura, soporte de inicio de sesión multi-firma &lt;a href="https://nostrcompass.org/es/topics/frost/">FROST&lt;/a>, y rendimiento optimizado de base de datos local. Amethyst continuó su transición al modelo outbox, compilando automáticamente conjuntos de relays basados en listas de seguidos en lugar de requerir configuración manual.&lt;/p>
&lt;p>Los clientes principales comenzaron a alejarse de &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a> para mensajes directos, migrando hacia &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> y el propuesto &lt;a href="https://nostrcompass.org/es/topics/nip-104/">NIP-104&lt;/a> para cifrado mejorado y protección de metadatos. El modelo Gossip (comunicación outbox/inbox) ganó adopción mientras el ecosistema convergía hacia patrones de uso de relays más eficientes. Observadores de la industria predijeron que este sería el año en que Nostr transicionaría de protocolo de nicho a reconocimiento mainstream, con una potencial migración de plataforma de alto perfil que podría duplicar la actividad diaria.&lt;/p>
&lt;h3 id="enero-2026-seguridad-e-infraestructura-de-firma">Enero 2026: Seguridad e Infraestructura de Firma&lt;/h3>
&lt;p>Enero 2026 trajo avances significativos en seguridad e infraestructura de firma. &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/2.6.18">Primal Android 2.6.18&lt;/a> lanzó firma remota &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> y soporte de firmante local &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>, uniéndose a Amber y Aegis como un hub de firma completo para otras aplicaciones Android. &lt;a href="https://github.com/permissionlesstech/bitchat/pulls">Bitchat completó una auditoría de seguridad de Cure53&lt;/a>, la misma firma que auditó Signal y NIP-44, con más de 17 PRs corrigiendo hallazgos críticos incluyendo limpieza de secretos DH y problemas de seguridad de hilos. Tanto Bitchat como Damus migraron de C Tor a Rust Arti para mejor confiabilidad y seguridad de memoria.&lt;/p>
&lt;p>El trabajo de protocolo continuó con &lt;a href="https://github.com/nostr-protocol/nips/pull/1669">NIP-71&lt;/a> (eventos de video direccionables) fusionándose y un NIP de criptografía post-cuántica abriendo discusión sobre preparar Nostr para el futuro contra ataques cuánticos. El borrador de Trusted Relay Assertions propuso estandarizar puntuaciones de confianza de relays a través de atestaciones firmadas. El &lt;a href="https://github.com/marmot-protocol/mdk">Protocolo Marmot&lt;/a> endureció su mensajería cifrada basada en &lt;a href="https://nostrcompass.org/es/topics/mls/">MLS&lt;/a> con 18 PRs fusionados abordando hallazgos de auditoría.&lt;/p>
&lt;p>Las aplicaciones del mundo real se expandieron con &lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a> desarrollando viajes compartidos descentralizados usando depósito &lt;a href="https://nostrcompass.org/es/topics/cashu/">Cashu&lt;/a> y cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>, y &lt;a href="https://github.com/coracle-social/pomade">Pomade&lt;/a> añadiendo flujos de recuperación basados en correo electrónico a firma de umbral &lt;a href="https://nostrcompass.org/es/topics/frost/">FROST&lt;/a>. Damus lanzó &lt;a href="https://nostrcompass.org/es/topics/negentropy/">negentropy&lt;/a> para sincronización confiable de DMs, mientras la aplicación de escritorio de Amethyst alcanzó la Fase 2A con búsqueda, marcadores y zaps.&lt;/p>
&lt;h3 id="mirando-hacia-adelante">Mirando Hacia Adelante&lt;/h3>
&lt;p>Seis años de eneros revelan la evolución de Nostr desde desarrollo temprano (2021) a descubrimiento público (2022) a crecimiento explosivo (2023) a endurecimiento del protocolo (2024) a maduración de clientes (2025) a infraestructura de seguridad (2026). El patrón es familiar para cualquiera que haya observado protocolos abiertos crecer: años de construcción silenciosa, una explosión repentina cuando las condiciones se alinean, luego el trabajo más largo de hacer todo confiable. Lo que comenzó con siete relays y un hilo de Hacker News es ahora infraestructura auditada con aplicaciones reales. La pregunta para 2027: cuando alguien solicite un viaje, envíe un mensaje cifrado, o recupere una clave perdida usando Nostr, ¿sabrán siquiera que lo están usando?&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. ¿Construyendo algo? ¿Tienes noticias que compartir? ¿Quieres que cubramos tu proyecto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Contáctanos vía DM NIP-17&lt;/a> o encuéntranos en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #6</title><link>https://nostrcompass.org/es/newsletters/2026-01-21-newsletter/</link><pubDate>Wed, 21 Jan 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-01-21-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal sobre Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Bitchat reemplaza C Tor con la implementación Rust Arti para mejor confiabilidad y rendimiento. nostrdb-rs obtiene consultas de plegado en streaming que permiten operaciones de base de datos sin asignación de memoria. Listr recibe una refactorización mayor con migración a NDK 3 beta y mantenimiento asistido por IA después de un año de inactividad. Zeus envía 17 PRs fusionados enfocados en correcciones de &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect para control remoto de Lightning) y mejoras de Cashu, mientras que Primal Android añade flujos de respaldo de billetera y soporte de &lt;a href="https://nostrcompass.org/es/topics/nip-92/">NIP-92&lt;/a> (dimensiones de medios para proporciones de aspecto adecuadas). Un nuevo borrador de NIP propone &lt;a href="https://nostrcompass.org/es/topics/trusted-relay-assertions/">Aserciones de Confianza de Relays&lt;/a> para puntuación estandarizada de confianza de relays.&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal sobre Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Bitchat reemplaza C Tor con la implementación Rust Arti para mejor confiabilidad y rendimiento. nostrdb-rs obtiene consultas de plegado en streaming que permiten operaciones de base de datos sin asignación de memoria. Listr recibe una refactorización mayor con migración a NDK 3 beta y mantenimiento asistido por IA después de un año de inactividad. Zeus envía 17 PRs fusionados enfocados en correcciones de &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect para control remoto de Lightning) y mejoras de Cashu, mientras que Primal Android añade flujos de respaldo de billetera y soporte de &lt;a href="https://nostrcompass.org/es/topics/nip-92/">NIP-92&lt;/a> (dimensiones de medios para proporciones de aspecto adecuadas). Un nuevo borrador de NIP propone &lt;a href="https://nostrcompass.org/es/topics/trusted-relay-assertions/">Aserciones de Confianza de Relays&lt;/a> para puntuación estandarizada de confianza de relays.&lt;/p>
&lt;h2 id="noticias">Noticias&lt;/h2>
&lt;h3 id="bitchat-migra-a-rust-arti-para-soporte-de-tor">Bitchat Migra a Rust Arti para Soporte de Tor&lt;/h3>
&lt;p>Bitchat ha migrado de C Tor a &lt;a href="https://gitlab.torproject.org/tpo/core/arti">Arti&lt;/a>, la implementación en Rust del protocolo Tor. El &lt;a href="https://github.com/permissionlesstech/bitchat/pull/958">PR #958&lt;/a> elimina la dependencia de C Tor e integra Arti, aportando garantías de seguridad de memoria y mejor confiabilidad. El cambio elimina intentos de despertar inactivos que causaban reinicios del servicio en primer plano, un problema de larga data con la implementación en C.&lt;/p>
&lt;p>&lt;strong>Lo que esto significa para los usuarios:&lt;/strong> Mensajería cifrada más estable con menos desconexiones, especialmente en dispositivos móviles. La implementación en Rust reduce riesgos de fallas y drenaje de batería por intentos constantes de reconexión.&lt;/p>
&lt;p>Arti es una reescritura completa de Tor en Rust, desarrollada por el Proyecto Tor para proporcionar mejor seguridad a través de la seguridad de memoria y facilitar la integración en aplicaciones. Para Bitchat, las propiedades de seguridad de memoria reducen la superficie de ataque al manejar mensajes cifrados y conexiones de relay. La migración sigue la reciente &lt;a href="https://nostrcompass.org/es/newsletters/2026-01-13-newsletter/#bitchat-completes-cure53-security-audit">auditoría de seguridad Cure53&lt;/a> del equipo (cubierta en Newsletter #5), continuando sus mejoras de seguridad.&lt;/p>
&lt;p>El PR también introduce cobertura de pruebas integral para ChatViewModel y BLEService, elimina código muerto y estabiliza la suite de pruebas. Las mejoras de confiabilidad de la malla Bluetooth Low Energy acompañan los cambios de Tor, abordando fallos en transferencias grandes. Juntos, estos cambios mejoran la resiliencia de Bitchat para escenarios de red en malla fuera de línea donde Tor proporciona conectividad a internet junto con comunicación BLE local.&lt;/p>
&lt;h3 id="listr-revitalizado-con-mantenimiento-potenciado-por-ia">Listr Revitalizado con Mantenimiento Potenciado por IA&lt;/h3>
&lt;p>JeffG anunció una refactorización mayor de &lt;a href="https://github.com/erskingardner/listr">Listr&lt;/a>, la aplicación de gestión de listas Nostr disponible en &lt;a href="https://listr.lol">listr.lol&lt;/a>, después de que el proyecto había estado inactivo por más de un año. Usando asistencia de IA, completó una actualización integral incluyendo migración a &lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a> 3 beta, actualizaciones a las últimas versiones de Svelte y Vite, y todas las dependencias actualizadas. La refactorización añade soporte de primera clase para seguir packs, implementa paginación para listas que exceden 50 elementos, y corrige numerosos errores que se habían acumulado durante el período inactivo.&lt;/p>
&lt;p>&lt;strong>Lo que esto significa para los usuarios:&lt;/strong> Listr está de vuelta en línea con rendimiento mejorado y nuevas características para gestionar listas de seguimiento, colecciones de contenido y curación de temas. La corrección de paginación hace que las listas grandes sean realmente utilizables.&lt;/p>
&lt;p>JeffG señaló que sin asistencia de IA, este trabajo de mantenimiento probablemente nunca habría ocurrido, evitando que el proyecto fuera abandonado. Listr permite la curación de contenido en Nostr, permitiendo a los usuarios crear, gestionar y compartir listas de perfiles, temas y recursos. La actualización mantiene la aplicación compatible con los estándares Nostr actuales y las expectativas de los clientes a medida que la gestión de listas se vuelve más central para el descubrimiento de contenido en el protocolo.&lt;/p>
&lt;h2 id="actualizaciones-de-nip">Actualizaciones de NIP&lt;/h2>
&lt;p>Cambios recientes en el &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Fusionados:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a>&lt;/strong> (Grupos basados en relay) - Aclaración de Clave de Relay (&lt;a href="https://github.com/nostr-protocol/nips/pull/2190">#2190&lt;/a> - fusionado) aclara que la clave de relay es la URL del relay en sí, no una pubkey. La especificación ahora establece explícitamente &amp;ldquo;La clave de relay es la URL WebSocket del relay (ej., wss://groups.example.com)&amp;rdquo; para evitar confusión. Esto afecta cómo los clientes identifican qué relay hospeda un grupo dado, asegurando que los grupos sean apropiadamente atribuidos a sus relays de hospedaje.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abiertos y Discusiones:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Aserciones de Confianza de Relays&lt;/strong> - Un borrador de NIP propone estandarizar la puntuación de confianza de relays a través de eventos kind 30385 que contienen puntuaciones de confianza (0-100) computadas a partir de métricas de &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a> (descubrimiento y monitoreo de relays), reputación del operador e informes de usuarios. La especificación divide la confianza en componentes de confiabilidad (tiempo de actividad, latencia), calidad (TLS, documentación, verificación del operador) y accesibilidad (jurisdicción, barreras, riesgo de vigilancia). La verificación del operador incluye firmas criptográficas vía &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> (documentos de información de relay), registros DNS TXT y archivos .well-known. Los usuarios declaran proveedores de aserciones confiables vía eventos kind 10385, permitiendo a los clientes consultar múltiples proveedores para perspectivas diversas. La propuesta complementa el descubrimiento de &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a> con evaluación, ayudando a &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> (firma remota/Nostr Connect) a evaluar la confiabilidad del relay en URIs de conexión.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Criptografía Post-Cuántica&lt;/strong> - El &lt;a href="https://github.com/nostr-protocol/nips/pull/2185">PR #2185&lt;/a> (abierto) continúa evolucionando desde que el &lt;a href="https://nostrcompass.org/es/newsletters/2026-01-13-newsletter/#nip-updates">Newsletter #5&lt;/a> introdujo la propuesta de algoritmos resistentes a computación cuántica. La discusión de esta semana se enfocó en detalles de implementación para cripto-agilidad: cómo los clientes manejan firmas duales durante la migración, compatibilidad hacia atrás para clientes antiguos e implicaciones de rendimiento de firmas resistentes a cuántica más grandes. Los contribuidores debatieron si mandar solo ML-DSA-44 o soportar múltiples algoritmos (ML-DSA-44, Falcon-512, Dilithium) para flexibilidad. El consenso se inclina hacia un enfoque por fases: firmas cuánticas opcionales inicialmente, volviéndose obligatorias solo después de soporte amplio del cliente y emergencia de amenaza cuántica real.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="análisis-profundo-de-nip-nip-11-y-nip-66">Análisis Profundo de NIP: NIP-11 y NIP-66&lt;/h2>
&lt;p>Esta semana examinamos dos NIPs que trabajan juntos para permitir el descubrimiento y evaluación de relays: NIP-11 define cómo los relays se describen a sí mismos, y NIP-66 estandariza cómo medimos el comportamiento del relay. Juntos forman la fundación para sistemas de evaluación de confianza de relays.&lt;/p>
&lt;h3 id="nip-11estopicsnip-11-documento-de-información-de-relay">&lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a>: Documento de Información de Relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/11.md">NIP-11&lt;/a> define un documento JSON que los relays sirven sobre HTTP para describir sus capacidades, políticas e información del operador. Cuando un cliente se conecta a &lt;code>wss://relay.example.com&lt;/code>, puede obtener &lt;code>https://relay.example.com&lt;/code> (reemplazando &lt;code>wss://&lt;/code> con &lt;code>https://&lt;/code>) para recuperar el documento de información del relay.&lt;/p>
&lt;p>El documento usa negociación de contenido HTTP estándar con el encabezado &lt;code>Accept: application/nostr+json&lt;/code>. Esto permite a los relays servir su sitio web normal a navegadores mientras proporcionan metadatos legibles por máquina a clientes Nostr. La respuesta incluye nombre y versión del software del relay, información de contacto del operador (pubkey, email, contacto alternativo), NIPs soportados y parámetros operacionales como requisitos de pago o restricciones de contenido.&lt;/p>
&lt;p>Importante, los documentos NIP-11 básicos son JSON sin firmar servidos sobre HTTPS, dependiendo únicamente de certificados TLS para autenticidad. Esto significa que cualquiera que controle el servidor web del relay puede modificar el documento, haciendo que las afirmaciones del operador sean inverificables. La propuesta de Aserciones de Confianza de Relays aborda esta brecha introduciendo atestaciones firmadas a través del campo &lt;code>self&lt;/code> pubkey del relay, permitiendo prueba criptográfica de identidad del operador similar a cómo los relays usan eventos firmados para mecanismos de autenticación.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;relay.example.com&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;description&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Un relay público de propósito general&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;contact&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;admin@example.com&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;supported_nips&amp;#34;&lt;/span>: [&lt;span style="color:#ae81ff">1&lt;/span>, &lt;span style="color:#ae81ff">2&lt;/span>, &lt;span style="color:#ae81ff">4&lt;/span>, &lt;span style="color:#ae81ff">9&lt;/span>, &lt;span style="color:#ae81ff">11&lt;/span>, &lt;span style="color:#ae81ff">12&lt;/span>, &lt;span style="color:#ae81ff">16&lt;/span>, &lt;span style="color:#ae81ff">20&lt;/span>, &lt;span style="color:#ae81ff">22&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;software&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;git+https://github.com/relay/relay.git&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;version&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;1.2.3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;limitation&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_message_length&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">16384&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_subscriptions&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">20&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_filters&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">100&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_limit&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">5000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_subid_length&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">100&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;min_prefix&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">4&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_event_tags&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">2000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_content_length&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">8196&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;min_pow_difficulty&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">0&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;auth_required&amp;#34;&lt;/span>: &lt;span style="color:#66d9ef">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;payment_required&amp;#34;&lt;/span>: &lt;span style="color:#66d9ef">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;payments_url&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;https://relay.example.com/payments&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;fees&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;admission&amp;#34;&lt;/span>: [{&lt;span style="color:#f92672">&amp;#34;amount&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">5000&lt;/span>, &lt;span style="color:#f92672">&amp;#34;unit&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;msats&amp;#34;&lt;/span>}],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;subscription&amp;#34;&lt;/span>: [{&lt;span style="color:#f92672">&amp;#34;amount&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1000&lt;/span>, &lt;span style="color:#f92672">&amp;#34;unit&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;msats&amp;#34;&lt;/span>, &lt;span style="color:#f92672">&amp;#34;period&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">2592000&lt;/span>}],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;publication&amp;#34;&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El objeto &lt;code>limitation&lt;/code> dice a los clientes qué restricciones impone el relay. &lt;code>max_message_length&lt;/code> limita el tamaño del marco WebSocket, &lt;code>max_subscriptions&lt;/code> limita las suscripciones REQ concurrentes por conexión, &lt;code>max_filters&lt;/code> limita filtros por REQ, y &lt;code>max_limit&lt;/code> restringe cuántos eventos puede solicitar un solo filtro. Estos parámetros ayudan a los clientes a adaptar su comportamiento a las capacidades del relay, evitando desconexiones por exceder límites.&lt;/p>
&lt;p>La información de pago aparece en &lt;code>fees&lt;/code> y &lt;code>payments_url&lt;/code>. Los relays pueden cobrar por admisión (acceso único), suscripción (acceso recurrente) o publicación (tarifas por evento). El &lt;code>payments_url&lt;/code> apunta a detalles sobre métodos de pago, típicamente facturas Lightning o mints de ecash. Los relays pagos usan estos campos para comunicar precios antes de que los clientes intenten autenticación.&lt;/p>
&lt;p>El array &lt;code>supported_nips&lt;/code> permite a los clientes descubrir capacidades del relay. Si un relay lista &lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a>, los clientes saben que pueden enviar consultas de búsqueda de texto completo. Si aparece &lt;a href="https://nostrcompass.org/es/topics/nip-42/">NIP-42&lt;/a>, los clientes deben esperar desafíos de autenticación. Esta publicidad declarativa de capacidades permite mejora progresiva: los clientes pueden usar características avanzadas donde estén disponibles mientras se degradan elegantemente en relays con soporte limitado.&lt;/p>
&lt;p>La información del operador construye responsabilidad. El campo &lt;code>pubkey&lt;/code> identifica al operador del relay en Nostr, permitiendo comunicación directa vía DMs de &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> o menciones públicas. El email de &lt;code>contact&lt;/code> proporciona un respaldo fuera del protocolo. Juntos, estos campos ayudan a los usuarios a alcanzar operadores para reportes de abuso, solicitudes de acceso o problemas técnicos.&lt;/p>
&lt;p>Los documentos &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> son auto-reportados: los relays describen lo que afirman soportar, no necesariamente lo que realmente hacen. Aquí es donde NIP-66 se vuelve importante.&lt;/p>
&lt;h3 id="nip-66estopicsnip-66-descubrimiento-de-relay-y-monitoreo-de-actividad">&lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a>: Descubrimiento de Relay y Monitoreo de Actividad&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/66.md">NIP-66&lt;/a> estandariza la publicación de datos de monitoreo de relays en Nostr. Los servicios de monitoreo prueban continuamente relays para disponibilidad, latencia, cumplimiento de protocolo y NIPs soportados. Publican resultados como eventos kind 30166, proporcionando estado del relay en tiempo real independiente del auto-reporte del relay.&lt;/p>
&lt;p>Los monitores verifican disponibilidad del relay conectándose y enviando suscripciones de prueba. Las mediciones de latencia rastrean tiempo de conexión, tiempo de respuesta de suscripción y retraso de propagación de eventos. Las pruebas de cumplimiento de protocolo verifican que el comportamiento del relay coincida con las especificaciones, capturando errores de implementación o desviaciones intencionadas. La verificación de soporte de NIP va más allá de las afirmaciones de &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> probando realmente si las características anunciadas funcionan correctamente.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a34b5c7d89e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;4e2d0bc6f8e7c3a5b9f1d2e3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1736784000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30166&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rtt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;open&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;143&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1736784000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rtt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;read&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;89&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1736784000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rtt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;write&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;92&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1736784000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;nips&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;2&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;9&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;11&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;12&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;geo&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;US&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;United States&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;New York&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;other&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;network&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;clearnet&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;other&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;payment_required&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;false&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;other&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;auth_required&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;false&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;last_check\&amp;#34;: 1736784000, \&amp;#34;checks\&amp;#34;: 8760}&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;8b9c4d5e6a7f8b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>La etiqueta &lt;code>d&lt;/code> contiene la URL del relay, haciendo de este un evento reemplazable parametrizado. Cada monitor publica un evento por relay, actualizado a medida que cambian las mediciones. Múltiples monitores pueden rastrear el mismo relay, proporcionando redundancia y validación cruzada. Los clientes consultan múltiples pubkeys de monitores para obtener perspectivas diversas sobre la salud del relay.&lt;/p>
&lt;p>Las etiquetas de tiempo de ida y vuelta (rtt) miden latencia para diferentes operaciones. &lt;code>rtt open&lt;/code> rastrea el establecimiento de conexión WebSocket, &lt;code>rtt read&lt;/code> mide tiempo de respuesta de suscripción, y &lt;code>rtt write&lt;/code> prueba velocidad de publicación de eventos. Todos los valores están en milisegundos. Los clientes usan estas métricas para preferir relays de baja latencia para operaciones sensibles al tiempo o despriorizar relays lentos.&lt;/p>
&lt;p>La etiqueta &lt;code>nips&lt;/code> lista soporte de NIP realmente verificado, no solo soporte afirmado. Los monitores prueban cada NIP ejercitando su funcionalidad. Si un relay afirma búsqueda de &lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a> en su documento &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> pero las consultas de búsqueda fallan, los monitores omitirán NIP-50 de la lista verificada. Esto proporciona verdad fundamental sobre capacidades del relay.&lt;/p>
&lt;p>La información geográfica ayuda a los clientes a seleccionar relays cercanos para mejor latencia y resistencia a censura. La etiqueta &lt;code>geo&lt;/code> contiene código de país, nombre de país y región. La etiqueta &lt;code>network&lt;/code> distingue relays clearnet de servicios ocultos Tor o endpoints I2P. Juntas, estas etiquetas permiten diversidad geográfica: los clientes pueden conectarse a relays en múltiples jurisdicciones para resistir censura regional.&lt;/p>
&lt;p>Los datos del monitor potencian selectores de relay en clientes, sitios web exploradores y la propuesta de Aserciones de Confianza de Relays. Al combinar documentos auto-reportados de &lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a> con datos medidos de &lt;a href="https://nostrcompass.org/es/topics/nip-66/">NIP-66&lt;/a> y aserciones de confianza computadas, el ecosistema se mueve hacia selección informada de relays en lugar de depender de valores predeterminados codificados o recomendaciones de boca en boca.&lt;/p>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;h3 id="0xchat-v153---características-mejoradas-de-mensajería">0xchat v1.5.3 - Características Mejoradas de Mensajería&lt;/h3>
&lt;p>&lt;a href="https://github.com/0xchat-app/0xchat-app-main/releases/tag/v1.5.3-release">0xchat v1.5.3&lt;/a> trae mejoras significativas al cliente de mensajería Nostr estilo Telegram. El lanzamiento aborda problemas de cumplimiento de &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> (aplicación firmante de Android) que estaban impidiendo la firma apropiada de eventos a través de firmantes externos como Amber. El cumplimiento completo significa que 0xchat ahora delega correctamente operaciones de firma, mejorando la seguridad al mantener las claves privadas aisladas.&lt;/p>
&lt;p>La actualización integra tanto FileDropServer como BlossomServer como opciones de almacenamiento de medios predeterminadas, dando a los usuarios redundancia para cargas de archivos. &lt;a href="https://github.com/hzrd149/blossom">Blossom&lt;/a> proporciona almacenamiento direccionado por contenido donde los archivos son referenciados por sus hashes SHA-256, asegurando integridad y permitiendo deduplicación a través de la red. El guardado automático de borradores para Momentos previene pérdida de datos al componer contenido de formato largo, abordando quejas de usuarios sobre publicaciones perdidas durante cambios de aplicación o interrupciones de conectividad.&lt;/p>
&lt;p>La integración de billetera Cashu recibe pulido con filtrado automático de pruebas que elimina tokens gastados de la vista de billetera. Esto resuelve la confusa UX donde los usuarios veían pruebas inválidas junto con ecash válido, haciendo que los cálculos de saldo fueran poco confiables. El filtrado ocurre del lado del cliente, manteniendo privacidad mientras mejora la experiencia de pago para transacciones peer-to-peer dentro de chats.&lt;/p>
&lt;h3 id="amber-v410-pre-lanzamientos---renovación-de-ui">Amber v4.1.0 Pre-lanzamientos - Renovación de UI&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.0-pre1">Amber v4.1.0-pre1&lt;/a> hasta &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.0-pre3">v4.1.0-pre3&lt;/a> introducen una interfaz rediseñada para el popular firmante de eventos Android. La pantalla de inicio de sesión ahora muestra claramente qué aplicación está solicitando permisos de firma, abordando confusión del usuario sobre flujos de autorización. La nueva pantalla de eventos proporciona inspección detallada de qué datos las aplicaciones quieren firmar, permitiendo a los usuarios tomar decisiones de seguridad informadas antes de aprobar operaciones.&lt;/p>
&lt;p>La gestión de permisos recibe atención significativa con una interfaz renovada que muestra exactamente qué capacidades se han otorgado a cada aplicación conectada. Los usuarios pueden revocar permisos específicos sin desconectarse completamente, permitiendo control de grano fino sobre delegación de firma. Los contadores de relay refactorizados usando la biblioteca quartz actualizada proporcionan estadísticas en tiempo real sobre rendimiento de eventos y desempeño del relay. Las conexiones bunker de &lt;a href="https://github.com/nostr-protocol/nips/blob/master/46.md">NIP-46&lt;/a> (Nostr Connect) ahora muestran mensajes de error detallados cuando las conexiones fallan, reemplazando errores de tiempo de espera crípticos con diagnósticos accionables.&lt;/p>
&lt;h2 id="cambios-notables-de-código-y-documentación">Cambios notables de código y documentación&lt;/h2>
&lt;p>&lt;em>Estos son pull requests fusionados y desarrollos en etapa temprana que vale la pena rastrear. Algunos son características experimentales que pueden evolucionar antes del lanzamiento.&lt;/em>&lt;/p>
&lt;h3 id="zeus-billetera-lightning-con-nostr-wallet-connect">Zeus (Billetera Lightning con Nostr Wallet Connect)&lt;/h3>
&lt;p>Zeus fusionó 17 pull requests esta semana, fortaleciendo su posición como implementación líder de &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> Nostr Wallet Connect. Las correcciones más significativas abordan problemas de consistencia de datos y cumplimiento de protocolo que estaban causando problemas de interoperabilidad con clientes Nostr.&lt;/p>
&lt;p>&lt;strong>Corrección de Historial de Transacciones&lt;/strong> - El &lt;a href="https://github.com/ZeusLN/zeus/pull/3542">PR #3542&lt;/a> resuelve un error crítico donde las listas de transacciones NWC mostraban entradas incorrectas o duplicadas. El problema ocurría cuando Zeus almacenaba en caché datos de transacciones sin manejar apropiadamente actualizaciones de eventos, causando que los usuarios vieran transacciones fantasma o pagos faltantes. La corrección implementa deduplicación apropiada de eventos e invalidación de caché, asegurando que el historial de transacciones refleje con precisión el estado del nodo Lightning.&lt;/p>
&lt;p>&lt;strong>Cumplimiento de Protocolo&lt;/strong> - El &lt;a href="https://github.com/ZeusLN/zeus/pull/3548">PR #3548&lt;/a> aborda respuestas incompletas de &lt;code>getInfo&lt;/code> que rompían compatibilidad con clientes esperando cumplimiento completo de NIP-47. Algunos clientes Nostr fallaban al recibir respuestas parciales sin campos como &lt;code>block_height&lt;/code> o &lt;code>network&lt;/code>. El PR asegura que todos los campos requeridos retornen con valores predeterminados sensatos incluso cuando la implementación Lightning subyacente no los proporciona, mejorando la compatibilidad de Zeus a través del ecosistema.&lt;/p>
&lt;p>&lt;strong>Resiliencia de Conexión&lt;/strong> - El &lt;a href="https://github.com/ZeusLN/zeus/pull/3543">PR #3543&lt;/a> implementa notificaciones de tiempo de espera para conexiones Nostr estancadas. Previamente, los usuarios esperaban indefinidamente cuando las conexiones de relay caían silenciosamente. Ahora Zeus muestra mensajes de tiempo de espera claros después de 30 segundos de inactividad, permitiendo a los usuarios reintentar o cambiar relays. El &lt;a href="https://github.com/ZeusLN/zeus/pull/3541">PR #3541&lt;/a> añade validación de backend para prevenir activación de NWC en implementaciones Lightning incompatibles, capturando errores de configuración antes de que causen fallas en tiempo de ejecución.&lt;/p>
&lt;p>&lt;strong>Condición de Carrera de Cashu&lt;/strong> - El &lt;a href="https://github.com/ZeusLN/zeus/pull/3531">PR #3531&lt;/a> corrige un error de concurrencia en la gestión de tokens Cashu donde operaciones simultáneas de mint podían corromper la base de datos de tokens. La condición de carrera ocurría cuando múltiples hilos actualizaban conteos de tokens sin bloqueo apropiado, ocasionalmente resultando en saldos incorrectos. La corrección añade protección de mutex alrededor de secciones críticas, asegurando actualizaciones atómicas al estado de tokens.&lt;/p>
&lt;h3 id="primal-android-cliente">Primal Android (Cliente)&lt;/h3>
&lt;p>Primal Android envió 12 PRs fusionados con mejoras significativas a seguridad de billetera y manejo de medios. La implementación de respaldo de billetera aborda una de las características más solicitadas, mientras que el soporte de NIP-92 mejora la experiencia visual a través de la aplicación.&lt;/p>
&lt;p>&lt;strong>Sistema de Respaldo de Billetera&lt;/strong> - Una serie de cuatro PRs (&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/844">#844&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/845">#845&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/846">#846&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/848">#848&lt;/a>) implementa funcionalidad integral de respaldo de frase semilla. Los usuarios ahora pueden exportar su mnemónico de 12 palabras a través de un flujo seguro que previene capturas de pantalla, muestra estado de respaldo en el tablero de billetera y guía a usuarios existentes a través de la migración. La implementación sigue estándares BIP-39 e incluye validación para prevenir que los usuarios pierdan fondos debido a registro incorrecto de frases.&lt;/p>
&lt;p>&lt;strong>Dimensiones de Medios (NIP-92)&lt;/strong> - El &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/718">PR #718&lt;/a> implementa soporte de &lt;a href="https://nostrcompass.org/es/topics/nip-92/">NIP-92&lt;/a> para proporciones de aspecto apropiadas de imagen y video. Sin metadatos de dimensiones, los clientes deben descargar imágenes para determinar su tamaño, causando saltos de diseño mientras se carga el contenido. NIP-92 añade etiquetas &lt;code>dim&lt;/code> (como &lt;code>[&amp;quot;dim&amp;quot;, &amp;quot;1920x1080&amp;quot;]&lt;/code>) a eventos de metadatos de archivo, permitiendo a Primal reservar espacio correcto antes de descargar medios. Esto elimina reflujos molestos en galerías de imágenes y mejora el rendimiento percibido.&lt;/p>
&lt;p>&lt;strong>Confiabilidad de Firmante Remoto&lt;/strong> - El &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/841">PR #841&lt;/a> corrige problemas de conexión de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> donde prefijos &lt;code>wss://&lt;/code> faltantes causaban fallos silenciosos. El PR valida URIs de relay durante la configuración de conexión bunker, añadiendo el prefijo de protocolo automáticamente cuando los usuarios pegan dominios desnudos. El &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/843">PR #843&lt;/a> aborda un error de threading donde condiciones de red pobres causaban que las respuestas se publicaran como notas raíz, rompiendo el flujo de conversación. La corrección asegura que los IDs de eventos padre persistan a través de interrupciones de red.&lt;/p>
&lt;h3 id="protocolo-marmot-white-noise-biblioteca-de-chat-grupal-cifrado">Protocolo Marmot: White Noise (Biblioteca de Chat Grupal Cifrado)&lt;/h3>
&lt;p>White Noise, la biblioteca Rust que potencia los chats grupales cifrados del &lt;a href="https://nostrcompass.org/es/topics/marmot/">Protocolo Marmot&lt;/a>, fusionó seis PRs mejorando experiencia de usuario y seguridad. Los cambios acercan a Marmot a la paridad de características con aplicaciones de mensajería convencionales mientras mantiene su arquitectura que prioriza privacidad.&lt;/p>
&lt;p>&lt;strong>Confirmaciones de Lectura&lt;/strong> - El &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/433">PR #433&lt;/a> y &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/436">#436&lt;/a> implementan rastreo de lectura de mensajes para conversaciones grupales. El sistema almacena posiciones de lectura por usuario por grupo dentro de un solo dispositivo, permitiendo insignias de conteo no leídas. La implementación usa marcas de tiempo monotónicas para rastrear la posición del último mensaje leído para cada conversación. Esta característica fundamental permite indicadores de UI mostrando conteos de mensajes no leídos por conversación.&lt;/p>
&lt;p>&lt;strong>Fijado de Conversaciones&lt;/strong> - El &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/442">PR #442&lt;/a> añade fijado persistente de conversaciones a través de un campo &lt;code>pin_order&lt;/code> en la tabla de unión &lt;code>accounts_groups&lt;/code> que vincula cuentas a grupos. Las conversaciones fijadas mantienen su posición en la parte superior de listas de chat sin importar actividad de mensajes, coincidiendo con expectativas de usuarios de Signal y WhatsApp. La implementación usa ordenamiento entero para permitir fijados ilimitados con clasificación determinística.&lt;/p>
&lt;p>&lt;strong>Resolución Determinística de Commits (MIP-03)&lt;/strong> - El &lt;a href="https://github.com/marmot-protocol/mdk/pull/152">PR #152&lt;/a> (abierto) implementa la Propuesta de Mejora de Marmot 03, resolviendo el problema crítico de condiciones de carrera de commit en chats grupales distribuidos. Cuando múltiples miembros envían cambios de estado de grupo (agregar/remover miembros, cambiar permisos) simultáneamente, los clientes podían divergir en ordenamiento de commits, fragmentando el grupo en estados incompatibles. MIP-03 introduce instantáneas de época y selección determinística de ganador: el commit con la marca de tiempo &lt;code>created_at&lt;/code> más temprana gana, con ID de evento lexicográfico como desempate. Esto permite a todos los clientes converger en el mismo estado a través de rollback y reproducción, manteniendo coherencia del grupo incluso durante particiones de red.&lt;/p>
&lt;p>&lt;strong>Endurecimiento de Seguridad&lt;/strong> - El &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/443">PR #443&lt;/a> previene copiado innecesario de secretos criptográficos usando referencias en &lt;code>resolve_group_image_path&lt;/code>. Esto reduce la ventana para ataques de memoria donde los secretos podrían ser recuperados de asignaciones heap liberadas. El &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/438">PR #438&lt;/a> permite cifrado de base de datos SQLCipher a través de parámetros de keyring, protegiendo historial de mensajes en reposo. La integración de keyring permite almacenamiento seguro de claves en keychains de plataforma en lugar de archivos de configuración.&lt;/p>
&lt;h3 id="nostrdb-rs-biblioteca-de-base-de-datos---pr-abierto">nostrdb-rs (Biblioteca de Base de Datos) - PR Abierto&lt;/h3>
&lt;p>&lt;strong>Implementación de Consultas en Streaming&lt;/strong> - El &lt;a href="https://github.com/damus-io/nostrdb-rs/pull/58">PR #58&lt;/a> (abierto) propone consultas de plegado en streaming para permitir operaciones de base de datos sin asignación de memoria. La implementación añadiría métodos &lt;code>fold&lt;/code>, &lt;code>try_fold&lt;/code>, &lt;code>count&lt;/code>, &lt;code>any&lt;/code>, &lt;code>all&lt;/code> y &lt;code>find_map&lt;/code> que procesarían resultados de base de datos uno a la vez sin materializar conjuntos de resultados enteros en vectores. Este enfoque reduciría el consumo de memoria y permitiría terminación temprana para patrones de consulta comunes.&lt;/p>
&lt;p>La implementación técnica expone callbacks de resultados de consulta de bajo nivel (&lt;code>ndb_query_visit&lt;/code>) como visitantes Rust con estado que mapean variantes &lt;code>ControlFlow&lt;/code> a acciones de visitante C. Una vez fusionado, el código de aplicación se leerá como lógica de iterador mientras se ejecuta cerca de la capa de base de datos. Por ejemplo, contar notas coincidentes transmitiría a través de resultados en lugar de recolectarlos, y &lt;code>find_map&lt;/code> retornaría el primer resultado útil sin procesar filas restantes.&lt;/p>
&lt;p>nostrdb potencia Damus y Notedeck, clientes iOS/macOS y de escritorio respectivamente. Las consultas en streaming permitirían patrones eficientes como paginación, filtrado condicional y verificaciones de existencia. El PR cambia 3 archivos con +756 adiciones y -32 eliminaciones, una refactorización sustancial de la capa de consulta. Los usuarios de aplicaciones basadas en nostrdb-rs verían uso reducido de memoria al navegar líneas de tiempo grandes o buscar a través de bases de datos extensas de eventos.&lt;/p>
&lt;h3 id="nak-herramienta-cli">nak (Herramienta CLI)&lt;/h3>
&lt;p>nak, la herramienta Nostr de línea de comandos de fiatjaf, fusionó seis PRs enfocados en mejoras del sistema de compilación y nueva funcionalidad. El &lt;a href="https://github.com/fiatjaf/nak/pull/91">PR #91&lt;/a> implementa una característica de espejo Blossom, permitiendo a nak servir como espejo para servidores de medios Blossom. &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> es un protocolo de almacenamiento de medios direccionado por contenido que funciona junto con eventos Nostr.&lt;/p>
&lt;p>Los PRs restantes abordan compatibilidad del sistema de compilación a través de plataformas Windows, macOS y Linux, permitiendo soporte de sistema de archivos FUSE para montar eventos Nostr como directorios locales.&lt;/p>
&lt;h3 id="damus-cliente-ios---prs-abiertos">Damus (Cliente iOS) - PRs Abiertos&lt;/h3>
&lt;p>Damus tiene 11 PRs abiertos explorando mejoras arquitectónicas significativas. Aunque estos no se han fusionado todavía, señalan direcciones importantes para el desarrollo del cliente Nostr iOS, particularmente en torno a privacidad, eficiencia de sincronización y optimización de datos móviles.&lt;/p>
&lt;p>&lt;strong>Integración de Tor&lt;/strong> - El &lt;a href="https://github.com/damus-io/damus/pull/3535">PR #3535&lt;/a> incorpora el cliente Tor Arti directamente en Damus, permitiendo conexiones anónimas de relay sin dependencias externas. A diferencia de enfoques de Orbot o Tor Browser, incorporar Arti proporciona integración sin costuras con sandboxing de iOS y límites de ejecución en segundo plano. La implementación Rust aporta seguridad de memoria a la anonimización de red, reduciendo superficie de ataque comparada con C Tor. Los usuarios podrían alternar modo Tor por relay o globalmente, con el cliente manejando gestión de circuitos transparentemente.&lt;/p>
&lt;p>&lt;strong>Protocolo de Sincronización Negentropy&lt;/strong> - El &lt;a href="https://github.com/damus-io/damus/pull/3536">PR #3536&lt;/a> implementa Negentropy, un protocolo de reconciliación de conjuntos que mejora radicalmente la eficiencia de sincronización. En lugar de descargar todos los eventos desde la última conexión, Negentropy intercambia huellas compactas (árboles Merkle) para identificar exactamente qué eventos difieren entre cliente y relay. Para usuarios siguiendo cientos de pubkeys, esto reduce ancho de banda de sincronización de megabytes a kilobytes. La implementación se integra con RelayPool y SubscriptionManager, permitiendo sincronización eficiente automática a través de todos los relays conectados.&lt;/p>
&lt;p>&lt;strong>Modo de Datos Bajo&lt;/strong> - El &lt;a href="https://github.com/damus-io/damus/pull/3549">PR #3549&lt;/a> añade características de conservación de datos celulares respondiendo a retroalimentación de usuarios sobre consumo de ancho de banda. El modo deshabilita carga automática de imágenes, precarga de video y reduce límites de suscripción. Los usuarios en conexiones medidas pueden navegar contenido de texto sin temor a exceder límites de datos. La implementación respeta configuraciones de modo de datos bajo de iOS y proporciona controles granulares para diferentes tipos de medios.&lt;/p>
&lt;p>&lt;strong>Optimizaciones de Base de Datos&lt;/strong> - El &lt;a href="https://github.com/damus-io/damus/pull/3548">PR #3548&lt;/a> reelabora el almacenamiento de instantáneas de nostrdb para consultas más rápidas y uso reducido de disco. La optimización cambia cómo las instantáneas de base de datos persisten a disco, mejorando tanto rendimiento de lectura como amplificación de escritura. Esto aborda quejas de drenaje de batería de usuarios con bases de datos grandes de eventos.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. ¿Construyendo algo? ¿Tienes noticias para compartir? ¿Quieres que cubramos tu proyecto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Contáctanos vía DM NIP-17&lt;/a> o encuéntranos en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #5</title><link>https://nostrcompass.org/es/newsletters/2026-01-13-newsletter/</link><pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-01-13-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal sobre Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Bitchat se somete a una auditoría de seguridad profesional realizada por Cure53, la misma firma que auditó Signal y &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>, con más de 17 PRs ya fusionados que corrigen hallazgos críticos. &lt;a href="https://nostrcompass.org/es/topics/nip-71/">NIP-71&lt;/a> se fusiona, trayendo eventos de video direccionables al protocolo. Un NIP de criptografía post-cuántica abre la discusión sobre cómo preparar Nostr para el futuro contra ataques cuánticos. Amethyst v1.05.0 incluye listas de marcadores, notas de voz y una versión temprana para escritorio, mientras que Nostur v1.25.3 mejora los DMs de &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> con reacciones y respuestas. En noticias de bibliotecas, rust-nostr expande el soporte de &lt;a href="https://nostrcompass.org/es/topics/nip-62/">NIP-62&lt;/a> en los backends SQLite y LMDB, y NDK corrige un error en el seguimiento de suscripciones.&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal sobre Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Bitchat se somete a una auditoría de seguridad profesional realizada por Cure53, la misma firma que auditó Signal y &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>, con más de 17 PRs ya fusionados que corrigen hallazgos críticos. &lt;a href="https://nostrcompass.org/es/topics/nip-71/">NIP-71&lt;/a> se fusiona, trayendo eventos de video direccionables al protocolo. Un NIP de criptografía post-cuántica abre la discusión sobre cómo preparar Nostr para el futuro contra ataques cuánticos. Amethyst v1.05.0 incluye listas de marcadores, notas de voz y una versión temprana para escritorio, mientras que Nostur v1.25.3 mejora los DMs de &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> con reacciones y respuestas. En noticias de bibliotecas, rust-nostr expande el soporte de &lt;a href="https://nostrcompass.org/es/topics/nip-62/">NIP-62&lt;/a> en los backends SQLite y LMDB, y NDK corrige un error en el seguimiento de suscripciones.&lt;/p>
&lt;h2 id="noticias">Noticias&lt;/h2>
&lt;h3 id="bitchat-completa-la-auditoría-de-seguridad-de-cure53">Bitchat Completa la Auditoría de Seguridad de Cure53&lt;/h3>
&lt;p>Bitchat, el mensajero cifrado para iOS que combina Nostr con Cashu, se ha sometido a una auditoría de seguridad profesional realizada por Cure53, una de las firmas de seguridad más respetadas de la industria. Cure53 anteriormente auditó Signal, Mullvad VPN, y notablemente la especificación de cifrado &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> que sustenta la mensajería privada moderna de Nostr.&lt;/p>
&lt;p>La auditoría encontró más de 12 problemas de seguridad (BCH-01-002 hasta BCH-01-013). El equipo de Bitchat respondió con más de 17 pull requests. Las correcciones clave incluyen:&lt;/p>
&lt;p>&lt;strong>Limpieza de Secretos DH del Protocolo Noise&lt;/strong> - &lt;a href="https://github.com/permissionlesstech/bitchat/pull/928">PR #928&lt;/a> corrige seis ubicaciones donde los secretos compartidos de Diffie-Hellman no se estaban poniendo a cero después del acuerdo de claves, restaurando las garantías de forward secrecy. Cuando los secretos persisten en memoria más tiempo del necesario, un volcado de memoria o ataque de arranque en frío podría comprometer comunicaciones pasadas.&lt;/p>
&lt;p>&lt;strong>Verificación de Firmas&lt;/strong> - Múltiples PRs refuerzan las rutas de verificación criptográfica, asegurando que las comprobaciones de autenticidad de mensajes no puedan ser eludidas mediante entradas malformadas.&lt;/p>
&lt;p>&lt;strong>Seguridad de Hilos&lt;/strong> - &lt;a href="https://github.com/permissionlesstech/bitchat/pull/929">PR #929&lt;/a> añade sincronización de barrera a las colas de confirmación de lectura en NostrTransport, previniendo condiciones de carrera que podrían causar corrupción de datos o fallos bajo altos volúmenes de mensajes.&lt;/p>
&lt;p>&lt;strong>Seguridad de Memoria&lt;/strong> - &lt;a href="https://github.com/permissionlesstech/bitchat/pull/920">PR #920&lt;/a> optimiza el deduplicador de mensajes para mejor rendimiento con alto volumen de mensajes mientras evita el agotamiento de memoria.&lt;/p>
&lt;p>&lt;strong>Validación de Entrada&lt;/strong> - &lt;a href="https://github.com/permissionlesstech/bitchat/pull/919">PR #919&lt;/a> refuerza el análisis de cadenas hexadecimales para prevenir fallos por entrada malformada, un vector de ataque común para denegación de servicio.&lt;/p>
&lt;p>Bitchat maneja ecash de Cashu, haciendo esencial la revisión de seguridad profesional. La auditoría sigue a la auditoría del Protocolo &lt;a href="https://nostrcompass.org/es/topics/marmot/">Marmot&lt;/a> del año pasado y la auditoría de NIP-44 que verificó la capa de cifrado.&lt;/p>
&lt;h2 id="actualizaciones-de-nips">Actualizaciones de NIPs&lt;/h2>
&lt;p>Cambios recientes en el &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Fusionados:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-71/">NIP-71&lt;/a>&lt;/strong> - Eventos de Video Direccionables (&lt;a href="https://github.com/nostr-protocol/nips/pull/1669">#1669&lt;/a>) introduce los kinds 34235 (video horizontal) y 34236 (video vertical) como eventos direccionables. Una etiqueta &lt;code>d&lt;/code> requerida proporciona identificadores únicos, para que los metadatos del video puedan actualizarse sin republicar todo el evento. Una etiqueta &lt;code>origin&lt;/code> opcional rastrea las fuentes de importación. Ya implementado en Amethyst y nostrvine.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abiertos:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Criptografía Post-Cuántica&lt;/strong> - &lt;a href="https://github.com/nostr-protocol/nips/pull/2185">PR #2185&lt;/a> propone añadir algoritmos criptográficos resistentes a computación cuántica a Nostr. La especificación introduce ML-DSA-44 y Falcon-512 para firmas digitales, dirigidos a &amp;ldquo;eventos de muy alto valor&amp;rdquo; como aplicaciones y autoridades en lugar de usuarios individuales. Mientras que el cifrado simétrico de &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> (ChaCha20) es resistente a computación cuántica, su intercambio de claves usa secp256k1 ECDH que es vulnerable al algoritmo de Shor. La propuesta incluye ML-KEM para acuerdo de claves para abordar esta brecha. Esta es una propuesta en etapa temprana que abre la discusión sobre agilidad criptográfica para la seguridad a largo plazo de Nostr.&lt;/li>
&lt;li>&lt;strong>BOLT12 para NIP-47&lt;/strong> - Después de 137 comentarios y amplia discusión, la comunidad decidió que las ofertas BOLT12 merecen su propia especificación en lugar de extender &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a>. Las ofertas BOLT12 proporcionan mejoras significativas sobre las facturas BOLT11 incluyendo reutilización, mejor privacidad a través de rutas cegadas e información opcional del pagador. El nuevo NIP definirá métodos como &lt;code>make_offer&lt;/code>, &lt;code>pay_offer&lt;/code> y &lt;code>list_offers&lt;/code> para implementaciones de Nostr Wallet Connect.&lt;/li>
&lt;li>&lt;strong>NIP de Pistas de Audio&lt;/strong> - &lt;a href="https://github.com/nostr-protocol/nips/pull/1043">PR #1043&lt;/a> propone los kinds 32100 para pistas musicales y 32101 para episodios de podcast, dando al contenido de audio el mismo tratamiento de primera clase que NIP-71 proporciona para video. Actualmente, plataformas de audio como Wavlake, Zapstr y Stemstr usan cada una formatos de eventos propietarios, fragmentando el ecosistema. Un estándar común permitiría interoperabilidad para que los usuarios puedan descubrir y reproducir audio desde cualquier cliente compatible.&lt;/li>
&lt;li>&lt;strong>NIP-A3 Destinos de Pago Universales&lt;/strong> - &lt;a href="https://github.com/nostr-protocol/nips/pull/2119">PR #2119&lt;/a> propone eventos kind 10133 usando URIs &lt;code>payto:&lt;/code> de RFC-8905 para exponer opciones de pago a través de múltiples redes. En lugar de crear kinds de eventos separados para Bitcoin, Lightning, Cashu o rieles de pago tradicionales, esta abstracción permite a los clientes analizar etiquetas estandarizadas e invocar manejadores de pago nativos. El enfoque es a prueba de futuro ya que los nuevos métodos de pago solo necesitan un esquema de URI &lt;code>payto:&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h2 id="análisis-profundo-de-nips-nip-51-y-nip-65">Análisis Profundo de NIPs: NIP-51 y NIP-65&lt;/h2>
&lt;p>Esta semana cubrimos dos NIPs que almacenan preferencias del usuario: NIP-51 para organizar contenido, y NIP-65 para organizar conexiones de relay. Ambos usan eventos reemplazables, lo que significa que cada nueva publicación sobrescribe la versión anterior.&lt;/p>
&lt;h3 id="nip-51estopicsnip-51-listas">&lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a>: Listas&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/51.md">NIP-51&lt;/a> define múltiples tipos de listas para organizar referencias a eventos, usuarios, hashtags y otro contenido. Amethyst v1.05.0 añade soporte de marcadores, haciendo de este un buen momento para entender cómo funcionan las listas.&lt;/p>
&lt;p>La especificación define varios kinds de listas, cada uno sirviendo un propósito diferente. Kind 10000 es tu lista de silenciados para ocultar usuarios, hilos o palabras. Kind 10001 fija eventos para destacar en tu perfil. Kind 30003 almacena marcadores, que es lo que Amethyst ahora soporta. Otros kinds manejan conjuntos de seguidos (30000), colecciones curadas de artículos (30004), intereses de hashtags (30015) y conjuntos de emojis personalizados (30030).&lt;/p>
&lt;p>Las listas referencian contenido a través de etiquetas. Una lista de marcadores usa etiquetas &lt;code>e&lt;/code> para eventos específicos y etiquetas &lt;code>a&lt;/code> para contenido direccionable como artículos:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;ae3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1736784000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30003&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;saved-articles&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;abc123def456...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30023:author-pubkey:article-id&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;encrypted-private-bookmarks&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;908a15e46fb4d8675bab026fc230a0e3542bfade63da02d542fb78b2a8513fcd0092619a2c8c1221e581946e0191f2af505dfdf8657a414dbca329186f009262&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>La etiqueta &lt;code>d&lt;/code> proporciona un identificador único, para que puedas mantener múltiples conjuntos de marcadores como &amp;ldquo;saved-articles&amp;rdquo;, &amp;ldquo;read-later&amp;rdquo; o &amp;ldquo;favorites&amp;rdquo; bajo el mismo kind.&lt;/p>
&lt;p>Las listas soportan tanto elementos públicos como privados. Los elementos públicos aparecen en el array de etiquetas, visibles para cualquiera que obtenga el evento. Los elementos privados van en el campo &lt;code>content&lt;/code>, cifrados usando &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a> hacia ti mismo. Esta estructura dual te permite mantener marcadores públicos mientras adjuntas notas privadas, o mantener una lista de silenciados sin revelar a quién has silenciado. Para cifrar hacia ti mismo, usa NIP-44 con tu propia pubkey como destinatario.&lt;/p>
&lt;p>Los kinds de la serie 10000 son reemplazables, lo que significa que los relays mantienen solo un evento por pubkey. Los de la serie 30000 son reemplazables parametrizados, permitiendo un evento por combinación de pubkey y etiqueta &lt;code>d&lt;/code>. En ambos casos, actualizar una lista significa publicar un reemplazo completo; no puedes enviar cambios incrementales. Los clientes deben preservar etiquetas desconocidas al modificar listas para evitar sobrescribir datos añadidos por otras aplicaciones.&lt;/p>
&lt;h3 id="nip-65estopicsnip-65-metadatos-de-lista-de-relays">&lt;a href="https://nostrcompass.org/es/topics/nip-65/">NIP-65&lt;/a>: Metadatos de Lista de Relays&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/65.md">NIP-65&lt;/a> define eventos kind 10002 que anuncian qué relays prefiere un usuario para lectura y escritura. Esto ayuda a otros usuarios y clientes a encontrar tu contenido.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;bd2217a96b5835b59f9a6a42d8d8a36f8c9b7d4e5f0a1b2c3d4e5f6a7b8c9d0e1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1736784000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">10002&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.damus.io&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;read&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nos.lol&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.nostr.band&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;write&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1c2d3e4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Cada etiqueta &lt;code>r&lt;/code> contiene una URL de relay y un marcador opcional. Un marcador &lt;code>write&lt;/code> designa tu outbox: relays donde publicas tu contenido. Un marcador &lt;code>read&lt;/code> designa tu inbox: relays donde verificas menciones, respuestas y etiquetas. Omitir el marcador indica ambos.&lt;/p>
&lt;p>Cuando Alice quiere encontrar las publicaciones de Bob, su cliente obtiene el kind 10002 de Bob, extrae sus relays de escritura (su outbox) y se suscribe allí. Cuando Alice responde a Bob, su cliente publica en los relays de lectura de él (su inbox) para que vea la mención. Este enrutamiento consciente de relays es el &amp;ldquo;modelo outbox&amp;rdquo;, y distribuye a los usuarios entre muchos relays en lugar de concentrar a todos en unos pocos servidores centrales.&lt;/p>
&lt;p>NIP-65 maneja el enrutamiento de contenido público, pero los mensajes privados usan una lista separada. &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> define kind 10050 para relays de inbox de DM, usando etiquetas &lt;code>relay&lt;/code> en lugar de etiquetas &lt;code>r&lt;/code>. Al enviar a alguien un mensaje privado, los clientes buscan el evento kind 10050 del destinatario y publican el mensaje envuelto cifrado allí. Esta separación mantiene el enrutamiento de DM distinto del enrutamiento de contenido público, y permite a los usuarios especificar diferentes relays para comunicación privada versus pública.&lt;/p>
&lt;p>El modelo outbox mejora la resistencia a la censura ya que ningún relay único necesita almacenar o servir el contenido de todos. Los clientes mantienen conexiones con los relays listados en los eventos NIP-65 de sus usuarios seguidos, conectándose dinámicamente a nuevos relays a medida que descubren nuevas cuentas. NIP-65 complementa las pistas de relay encontradas en otros NIPs. Cuando etiquetas a alguien con &lt;code>[&amp;quot;p&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;wss://hint.relay&amp;quot;]&lt;/code>, la pista le dice a los clientes dónde buscar esa referencia específica. NIP-65 proporciona la lista autoritativa controlada por el usuario, mientras que las pistas ofrecen atajos incrustados en eventos individuales.&lt;/p>
&lt;p>Para mejores resultados, mantén tu lista de relays actualizada ya que las entradas obsoletas te hacen más difícil de encontrar. La especificación recomienda de dos a cuatro relays por categoría. Listar demasiados relays sobrecarga a cada cliente que quiere obtener tu contenido, ralentizando su experiencia y aumentando la carga de red. Los clientes almacenan en caché los eventos NIP-65 y los refrescan periódicamente para mantenerse actualizados a medida que los usuarios actualizan sus preferencias.&lt;/p>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;p>&lt;strong>Amethyst v1.05.0&lt;/strong> - El popular cliente de Android &lt;a href="https://github.com/vitorpamplona/amethyst/releases">lanza una actualización importante&lt;/a> con varias características destacadas. Las listas de marcadores kind 30003 de &lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a> permiten a los usuarios guardar publicaciones para referencia posterior, sincronizándose entre clientes compatibles. Las notas de voz ahora funcionan en DMs y publicaciones regulares con visualización de forma de onda, selección de servidor de medios e indicadores de progreso de carga. Las puntuaciones de &lt;a href="https://nostrcompass.org/es/topics/web-of-trust/">Web of Trust&lt;/a> ahora son visibles en la interfaz, ayudando a los usuarios a entender cómo el algoritmo evalúa las cuentas en relación con su grafo social. La migración de base de datos &lt;a href="https://nostrcompass.org/es/topics/quartz/">Quartz&lt;/a> mejora el rendimiento de consultas como parte del trabajo de Kotlin Multiplatform financiado por OpenSats. Un lanzamiento temprano para escritorio trae Amethyst a Windows, macOS y Linux a través de Compose Multiplatform, compartiendo la misma base de código que la aplicación de Android. Nuevos flujos de incorporación suavizan la experiencia para usuarios nuevos de Nostr.&lt;/p>
&lt;p>&lt;strong>Nostur v1.25.3&lt;/strong> - El cliente de iOS y macOS &lt;a href="https://github.com/nostur-com/nostur-ios-public/releases">se enfoca en la mensajería privada&lt;/a> con mejoras de &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>. Las conversaciones de DM ahora soportan reacciones y respuestas, trayendo la interactividad de las publicaciones públicas a los mensajes cifrados. La vista de conversación ha sido rediseñada con mejor threading para que los intercambios de múltiples mensajes sean más fáciles de seguir, y las marcas de tiempo muestran &amp;ldquo;hace tiempo&amp;rdquo; en la lista de DM para escaneo rápido. Los usuarios de escritorio obtienen diseños de múltiples columnas para ver múltiples feeds o conversaciones lado a lado. El soporte de firmante remoto &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> permite a los usuarios mantener sus claves privadas en aplicaciones de firmante dedicadas como Amber o nsec.app. Correcciones adicionales restauran la funcionalidad de DM en iOS 15 e iOS 16, resuelven retrasos en notificaciones y añaden la capacidad de configurar qué relays reciben los DMs publicados.&lt;/p>
&lt;h2 id="cambios-notables-de-código-y-documentación">Cambios notables de código y documentación&lt;/h2>
&lt;p>&lt;em>Estos son pull requests abiertos y trabajo en etapa temprana, perfectos para obtener retroalimentación antes de que se fusionen. Si algo te llama la atención, considera revisar o comentar.&lt;/em>&lt;/p>
&lt;h3 id="citrine-relay-de-android">Citrine (Relay de Android)&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Citrine/pull/89">PR #89&lt;/a> corrige una vulnerabilidad de inyección SQL en la aplicación de relay personal de Android. El problema permitía que datos de eventos malformados ejecutaran consultas de base de datos arbitrarias, un fallo serio para cualquier aplicación que almacena y procesa entrada no confiable. La corrección sanitiza correctamente todas las operaciones de base de datos usando consultas parametrizadas. Aún no se ha etiquetado ningún lanzamiento, por lo que los usuarios necesitarán esperar la próxima versión o compilar desde el código fuente. &lt;a href="https://github.com/greenart7c3/Citrine/pull/90">PR #90&lt;/a> optimiza el rendimiento de consultas de ContentProvider con filtrado a nivel de base de datos y paginación, reduciendo la latencia cuando aplicaciones externas como Amethyst acceden a la base de datos de eventos de Citrine a través de la capa de comunicación entre procesos de Android.&lt;/p>
&lt;h3 id="rust-nostr-biblioteca">rust-nostr (Biblioteca)&lt;/h3>
&lt;p>El soporte de &lt;a href="https://nostrcompass.org/es/topics/nip-62/">NIP-62&lt;/a> (Solicitudes de Desvanecimiento) se está expandiendo a través de los backends de base de datos de rust-nostr. &lt;a href="https://github.com/rust-nostr/nostr/pull/1180">PR #1180&lt;/a>, fusionado hace dos semanas, añadió soporte de NIP-62 a SQLite, manejando solicitudes de desvanecimiento &lt;code>ALL_RELAYS&lt;/code> ya que la capa de base de datos no conoce URLs de relay específicas. &lt;a href="https://github.com/rust-nostr/nostr/pull/1210">PR #1210&lt;/a> extiende esto al backend LMDB, asegurando que las solicitudes de desvanecimiento se persistan en disco y sobrevivan a reinicios del relay. Una implementación de IndexedDB para entornos de navegador también está en progreso. Juntos, estos cambios dan a los desarrolladores soporte consistente de NIP-62 a través de SQLite, LMDB y pronto almacenamiento del navegador.&lt;/p>
&lt;h3 id="ndk-nostr-development-kit">NDK (Nostr Development Kit)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-dev-kit/ndk/pull/375">PR #375&lt;/a> corrige un error en el sistema de seguimiento de seenEvents. El problema causaba que ciertos patrones de suscripción marcaran incorrectamente eventos como ya vistos, llevando a contenido perdido cuando los usuarios abrían nuevas suscripciones o se reconectaban a relays. La corrección asegura que los eventos se rastreen con precisión a través de los ciclos de vida de las suscripciones, lo cual es particularmente importante para aplicaciones que se suscriben y desuscriben dinámicamente basándose en la navegación del usuario. NDK se actualizó a beta.70 con esta corrección incluida.&lt;/p>
&lt;h3 id="damus-ios">Damus (iOS)&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/pull/3515">PR #3515&lt;/a> corrige un fallo de inicio que afectaba a usuarios de iOS 17. El problema provenía de un desbordamiento aritmético en &lt;code>NdbUseLock&lt;/code>, una clase de respaldo usada porque los Swift Mutexes no están disponibles en iOS 17. La corrección reemplaza el enfoque de sincronización anterior con &lt;code>NSLock&lt;/code>, que está disponible en iOS 17 y maneja las condiciones de carrera restantes correctamente. Los usuarios de iOS 18+ no estaban afectados ya que tienen acceso a la implementación nativa de Swift Mutex.&lt;/p>
&lt;p>Por separado, un lote de mejoras para artículos de formato largo llegó via &lt;a href="https://github.com/damus-io/damus/pull/3509">PR #3509&lt;/a>. Las barras de progreso de lectura rastrean tu posición a través de los artículos, los tiempos estimados de lectura aparecen en las vistas previas, y el modo sepia con ajustes de altura de línea configurables proporcionan una lectura más cómoda. El modo de enfoque oculta automáticamente la navegación al desplazarse hacia abajo y la restaura al tocar, reduciendo el desorden visual para una lectura sin distracciones. Varias correcciones abordan la visualización de imágenes en contenido markdown y aseguran que los artículos se abran al principio en lugar de a mitad de camino.&lt;/p>
&lt;h3 id="zapstream-transmisión-en-vivo">Zap.stream (Transmisión en Vivo)&lt;/h3>
&lt;p>La integración de chat de YouTube y Kick conecta mensajes de plataformas de streaming externas a Nostr. Los streamers que transmiten simultáneamente a YouTube, Kick y Zap.stream ahora pueden ver todos los mensajes de chat en una vista unificada, con mensajes de cada plataforma apareciendo junto a los comentarios nativos de Nostr. Esto elimina un punto de fricción importante para creadores que quieren usar Nostr para streaming pero no pueden abandonar audiencias en plataformas establecidas. La integración muestra de qué plataforma se originó cada mensaje y maneja el flujo de autenticación para conectar cuentas externas.&lt;/p>
&lt;h3 id="chachi-grupos-nip-29">Chachi (Grupos NIP-29)&lt;/h3>
&lt;p>El cliente de chat grupal &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> envió seis PRs fusionados esta semana. Una actualización de seguridad aborda &lt;a href="https://github.com/purrgrammer/chachi/pull/89">CVE-2026-22029&lt;/a>, una vulnerabilidad XSS en react-router que podría habilitar ataques de redirección abierta; la corrección actualiza a react-router-dom 6.30.0. &lt;a href="https://github.com/purrgrammer/chachi/pull/92">PR #92&lt;/a> añade carga paginada de mensajes para chats grupales, para que las conversaciones largas se carguen incrementalmente en lugar de todas a la vez. &lt;a href="https://github.com/purrgrammer/chachi/pull/91">PR #91&lt;/a> corrige varios errores de NIP-29 incluyendo una condición de carrera que causaba nombres de grupo en blanco en la carga inicial y listas de participantes indefinidas que hacían fallar las vistas de miembros. La cobertura de traducción ahora abarca los 31 idiomas soportados con 1060 claves cada uno.&lt;/p>
&lt;h3 id="0xchat-mensajería">0xchat (Mensajería)&lt;/h3>
&lt;p>El cliente de mensajería estilo Telegram mejoró el cumplimiento de &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> al guardar correctamente los nombres de paquetes de firmantes cuando se usan aplicaciones de firma externas, corrigiendo problemas donde la aplicación perdía el rastro de qué firmante usar después de reinicios. El manejo de respuestas NIP-17 ahora incluye correctamente la etiqueta &lt;code>e&lt;/code> para threading, asegurando que las respuestas aparezcan en el contexto de conversación correcto entre clientes. Las optimizaciones de rendimiento abordan el lag de desplazamiento en listas de mensajes, un punto de dolor común al cargar historiales de chat largos. El autoguardado de borradores previene la pérdida de mensajes si navegas lejos a mitad de composición, y las opciones de almacenamiento de archivos ahora incluyen endpoints predeterminados de FileDropServer y BlossomServer.&lt;/p>
&lt;h3 id="primal-ios">Primal (iOS)&lt;/h3>
&lt;p>El soporte de firmante remoto &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> llega a iOS via &lt;a href="https://github.com/PrimalHQ/primal-ios-app/pull/184">PR #184&lt;/a>, completando el despliegue multiplataforma que comenzó con Android hace varias semanas. Los usuarios ahora pueden mantener sus claves privadas en servicios bunker dedicados como nsec.app o instancias de nsecBunker autoalojadas, conectándose a través de relays de Nostr para firmar eventos sin exponer las claves a la aplicación cliente. Esta separación mejora la postura de seguridad para usuarios que quieren usar las características de Primal mientras mantienen prácticas de gestión de claves más estrictas. La implementación incluye escaneo de códigos QR para URIs de conexión bunker y maneja el flujo de solicitud/respuesta de NIP-46 sobre mensajes cifrados de relay.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. ¿Estás construyendo algo? ¿Tienes noticias para compartir? ¿Quieres que cubramos tu proyecto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Contáctanos via DM de NIP-17&lt;/a> o encuéntranos en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #4</title><link>https://nostrcompass.org/es/newsletters/2026-01-07-newsletter/</link><pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2026-01-07-newsletter/</guid><description>&lt;p>Bienvenidos de nuevo a Nostr Compass, tu guía semanal del ecosistema del protocolo Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Primal Android implementa firma remota &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> y soporte para firmante local &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>, convirtiéndolo en un centro de firma completo para otras aplicaciones Android. El equipo del &lt;a href="https://nostrcompass.org/es/topics/marmot/">Protocolo Marmot&lt;/a> abordó hallazgos de una auditoría de seguridad con 18 PRs fusionados que fortalecen la mensajería cifrada basada en &lt;a href="https://nostrcompass.org/es/topics/mls/">MLS&lt;/a>. Citrine alcanza la v1.0 y Applesauce lanza la v5.0 en toda su suite de bibliotecas. TENEX desarrolla supervisión de agentes de IA en Nostr, y Jumble agrega agrupación inteligente de relays. Una corrección en la especificación NIP-55 aclara los campos de retorno de &lt;code>nip44_encrypt&lt;/code>, y un PR de &lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a> propone extensiones de expresiones de consulta para búsqueda avanzada. En nuestra sección de profundización, explicamos &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>: por qué el cifrado heredado tiene fallas de seguridad y cómo el reemplazo moderno las corrige.&lt;/p></description><content:encoded>&lt;p>Bienvenidos de nuevo a Nostr Compass, tu guía semanal del ecosistema del protocolo Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Primal Android implementa firma remota &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> y soporte para firmante local &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>, convirtiéndolo en un centro de firma completo para otras aplicaciones Android. El equipo del &lt;a href="https://nostrcompass.org/es/topics/marmot/">Protocolo Marmot&lt;/a> abordó hallazgos de una auditoría de seguridad con 18 PRs fusionados que fortalecen la mensajería cifrada basada en &lt;a href="https://nostrcompass.org/es/topics/mls/">MLS&lt;/a>. Citrine alcanza la v1.0 y Applesauce lanza la v5.0 en toda su suite de bibliotecas. TENEX desarrolla supervisión de agentes de IA en Nostr, y Jumble agrega agrupación inteligente de relays. Una corrección en la especificación NIP-55 aclara los campos de retorno de &lt;code>nip44_encrypt&lt;/code>, y un PR de &lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a> propone extensiones de expresiones de consulta para búsqueda avanzada. En nuestra sección de profundización, explicamos &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>: por qué el cifrado heredado tiene fallas de seguridad y cómo el reemplazo moderno las corrige.&lt;/p>
&lt;h2 id="noticias">Noticias&lt;/h2>
&lt;p>&lt;strong>Primal Android se Convierte en un Centro de Firma Completo&lt;/strong> - La &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/2.6.18">Versión 2.6.18&lt;/a> agrega tanto firma remota &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> como firma local &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>, convirtiendo a Primal en un firmante completo para otras aplicaciones Nostr. La firma remota vía NIP-46 permite a los usuarios conectarse a servicios bunker a través de relays Nostr, manteniendo las claves completamente fuera de su dispositivo. La firma local vía NIP-55 expone a Primal como un proveedor de contenido de Android, para que aplicaciones como Amethyst o Citrine puedan solicitar firmas sin jamás tocar la clave privada. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/839">Varios PRs de seguimiento&lt;/a> corrigieron problemas de compatibilidad con el requisito de pubkey hexadecimal de la especificación NIP-55, y mejoraron el análisis de URIs &lt;code>nostrconnect://&lt;/code> mal formadas. La versión también incluye pre-caché de medios para un desplazamiento más fluido, tiempos de carga de hilos mejorados y pre-caché de avatares.&lt;/p>
&lt;p>&lt;strong>Protocolo Marmot Fortalece la Seguridad Tras Auditoría&lt;/strong> - El &lt;a href="https://github.com/marmot-protocol/mdk">Kit de Desarrollo Marmot&lt;/a> (mdk), que implementa mensajería cifrada de extremo a extremo basada en &lt;a href="https://nostrcompass.org/es/topics/nip-104/">NIP-104&lt;/a> MLS, recibió extensas correcciones de seguridad esta semana. Dieciocho pull requests fusionados abordaron hallazgos de la auditoría incluyendo: &lt;a href="https://github.com/marmot-protocol/mdk/pull/97">verificación de hash para imágenes de grupo cifradas&lt;/a> para prevenir ataques de sustitución de blobs a nivel de almacenamiento, &lt;a href="https://github.com/marmot-protocol/mdk/pull/110">paginación para bienvenidas pendientes&lt;/a> para prevenir agotamiento de memoria, &lt;a href="https://github.com/marmot-protocol/mdk/pull/112">filtración de MLS Group ID en mensajes de error&lt;/a>, y &lt;a href="https://github.com/marmot-protocol/mdk/pull/98">aplicación de codificación base64&lt;/a> para paquetes de claves. La &lt;a href="https://github.com/marmot-protocol/marmot/pull/20">especificación de Marmot en sí fue actualizada&lt;/a> con versionado MIP-04 v2 y mejoras de seguridad. PRs activos continúan abordando reutilización de nonce, zerorizacion de secretos y vectores de contaminación de caché.&lt;/p>
&lt;p>&lt;strong>Nostrability Rastrea Soporte de Relay Hints&lt;/strong> - Un nuevo &lt;a href="https://github.com/nostrability/nostrability/issues/270">rastreador de compatibilidad de relay hints&lt;/a> documenta cómo los clientes construyen y consumen relay hints en todo el ecosistema. El rastreador revela que mientras la mayoría de los clientes ahora construyen hints según &lt;a href="https://nostrcompass.org/es/topics/nip-10/">NIP-10&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19&lt;/a>, el consumo varía ampliamente: algunos clientes incluyen hints en eventos salientes pero no usan hints entrantes para obtener datos. Seis clientes obtuvieron el estado &amp;ldquo;Completo&amp;rdquo; por implementación completa. El rastreador es útil para desarrolladores que verifican interoperabilidad y para usuarios que se preguntan por qué algunos clientes encuentran contenido que otros no pueden.&lt;/p>
&lt;p>&lt;strong>Nostria 2.0 Lanza Renovación de Funciones Multiplataforma&lt;/strong> - El cliente &lt;a href="https://nostria.app">Nostria&lt;/a> &lt;a href="#ZgotmplZ">lanzó la versión 2.0&lt;/a> el 30 de diciembre con adiciones significativas en iOS (TestFlight), Android (Play Store), Web y Windows. La versión agrega soporte nativo de música con creación de listas de reproducción, subida de pistas, pagos a artistas basados en zap, y un reproductor estilo WinAmp con ecualizador funcional. El streaming en vivo obtiene integración con Game API mostrando metadatos enriquecidos durante transmisiones de juegos. Una nueva función de Resumen genera digestos de actividad por hora, día o semana como vistas de línea de tiempo comprimidas. La sección Descubrir ofrece listas curadas para encontrar contenido y perfiles. La publicación de medios se simplifica con generación automática de publicaciones de formato corto para descubrimiento entre clientes. Las conexiones de firmante remoto ahora funcionan vía escaneo de código QR sin configuración manual. El descubrimiento de perfiles aborda un punto de dolor común de Nostr: cuando los usuarios se mueven entre relays sin llevar sus metadatos, Nostria localiza su perfil y lo republica en sus relays actuales. Los suscriptores Premium obtienen integración de canal de YouTube, Memos privados, paneles de analíticas y respaldos automáticos de lista de seguidos con opciones de fusión/restauración.&lt;/p>
&lt;h2 id="actualizaciones-de-nips">Actualizaciones de NIPs&lt;/h2>
&lt;p>Cambios recientes al &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Fusionados:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>&lt;/strong> - Corregido el campo de retorno para el método &lt;code>nip44_encrypt&lt;/code> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2184">#2184&lt;/a>). Los firmantes de Android ahora deben devolver la carga útil cifrada en el campo &lt;code>signature&lt;/code> (coincidiendo con &lt;code>nip44_decrypt&lt;/code>) en lugar de un campo separado. Esto alinea la especificación con las implementaciones existentes en Amber y Primal.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abiertos:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a>&lt;/strong> - Extensiones de Expresiones de Consulta (&lt;a href="https://github.com/nostr-protocol/nips/pull/2182">#2182&lt;/a>) propone extender la búsqueda NIP-50 con expresiones de consulta estructuradas. El PR agrega operadores como &lt;code>kind:1&lt;/code>, &lt;code>author:npub1...&lt;/code>, y combinaciones booleanas (&lt;code>AND&lt;/code>, &lt;code>OR&lt;/code>, &lt;code>NOT&lt;/code>), permitiendo consultas de búsqueda más precisas más allá de la simple coincidencia de texto. Esto permitiría a los clientes construir interfaces de búsqueda avanzadas mientras mantienen compatibilidad hacia atrás con cadenas de búsqueda básicas.&lt;/li>
&lt;/ul>
&lt;h2 id="profundización-en-nips-nip-04-y-nip-44">Profundización en NIPs: NIP-04 y NIP-44&lt;/h2>
&lt;p>Esta semana cubrimos los estándares de cifrado de Nostr: el heredado NIP-04 que aún encontrarás, y su reemplazo moderno NIP-44 que corrige fallas de seguridad críticas.&lt;/p>
&lt;h3 id="nip-04estopicsnip-04-mensajes-directos-cifrados-heredado">&lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a>: Mensajes Directos Cifrados (Heredado)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/04.md">NIP-04&lt;/a> fue el primer intento de Nostr de mensajería cifrada, usando eventos kind 4. Aunque es simple de implementar, tiene debilidades de seguridad conocidas y está deprecado en favor de NIP-44.&lt;/p>
&lt;p>&lt;strong>Cómo funciona:&lt;/strong> NIP-04 usa ECDH (Diffie-Hellman de Curva Elíptica) para derivar un secreto compartido entre emisor y receptor, luego cifra con AES-256-CBC.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event-id&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;sender-pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1736200000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">4&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [[&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;recipient-pubkey&amp;gt;&amp;#34;&lt;/span>]],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;base64-ciphertext?iv=base64-iv&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El flujo de cifrado:&lt;/p>
&lt;ol>
&lt;li>Calcular punto compartido: &lt;code>shared = ECDH(sender_privkey, recipient_pubkey)&lt;/code>&lt;/li>
&lt;li>Derivar clave: &lt;code>key = SHA256(shared_x_coordinate)&lt;/code>&lt;/li>
&lt;li>Generar IV aleatorio de 16 bytes&lt;/li>
&lt;li>Cifrar: &lt;code>ciphertext = AES-256-CBC(key, iv, plaintext)&lt;/code>&lt;/li>
&lt;li>Formatear contenido: &lt;code>base64(ciphertext)?iv=base64(iv)&lt;/code>&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>Problemas de seguridad:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Sin autenticación:&lt;/strong> AES-CBC proporciona confidencialidad pero no integridad. Un atacante que controle un relay podría modificar bits del texto cifrado, causando cambios predecibles en el texto plano (ataques de volteo de bits).&lt;/li>
&lt;li>&lt;strong>IV en claro:&lt;/strong> El vector de inicialización se transmite junto al texto cifrado, y el modo CBC con IVs predecibles habilita ataques de texto plano elegido.&lt;/li>
&lt;li>&lt;strong>Sin validación de relleno:&lt;/strong> Las implementaciones varían en cómo manejan el relleno PKCS#7, potencialmente habilitando ataques de oráculo de relleno.&lt;/li>
&lt;li>&lt;strong>Exposición de metadatos:&lt;/strong> La pubkey del emisor, la pubkey del receptor y la marca de tiempo son todas visibles para los relays.&lt;/li>
&lt;li>&lt;strong>Reutilización de clave:&lt;/strong> El mismo secreto compartido se usa para todos los mensajes entre dos partes, para siempre.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Por qué aún existe:&lt;/strong> Muchos clientes y relays antiguos solo soportan NIP-04. Lo encontrarás al interactuar con sistemas heredados. Firmantes como Amber y aplicaciones como Primal aún implementan &lt;code>nip04_encrypt&lt;/code>/&lt;code>nip04_decrypt&lt;/code> para compatibilidad hacia atrás.&lt;/p>
&lt;h3 id="nip-44estopicsnip-44-cifrado-versionado">&lt;a href="https://nostrcompass.org/es/topics/nip-44/">NIP-44&lt;/a>: Cifrado Versionado&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/44.md">NIP-44&lt;/a> es el estándar de cifrado moderno, diseñado para corregir las fallas conocidas de NIP-04. Una auditoría de seguridad de Cure53 de las implementaciones de NIP-44 identificó 10 problemas (incluyendo ataques de temporización y preocupaciones de secreto hacia adelante) que fueron abordados antes de que la especificación fuera finalizada. Usa ChaCha20-Poly1305 con derivación de clave apropiada y cifrado autenticado.&lt;/p>
&lt;p>&lt;strong>Mejoras clave sobre NIP-04:&lt;/strong>&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">Aspecto&lt;/th>
 &lt;th style="text-align: left">NIP-04&lt;/th>
 &lt;th style="text-align: left">NIP-44&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">Cifrador&lt;/td>
 &lt;td style="text-align: left">AES-256-CBC&lt;/td>
 &lt;td style="text-align: left">XChaCha20-Poly1305&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Autenticación&lt;/td>
 &lt;td style="text-align: left">Ninguna&lt;/td>
 &lt;td style="text-align: left">Poly1305 MAC&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Derivación de clave&lt;/td>
 &lt;td style="text-align: left">SHA256(shared_x)&lt;/td>
 &lt;td style="text-align: left">HKDF con sal&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Nonce&lt;/td>
 &lt;td style="text-align: left">IV de 16 bytes, patrón reutilizado&lt;/td>
 &lt;td style="text-align: left">Nonce aleatorio de 24 bytes&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Relleno&lt;/td>
 &lt;td style="text-align: left">PKCS#7 (filtra longitud)&lt;/td>
 &lt;td style="text-align: left">Rellenado a potencia de 2&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Versionado&lt;/td>
 &lt;td style="text-align: left">Ninguno&lt;/td>
 &lt;td style="text-align: left">Prefijo de byte de versión&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Flujo de cifrado:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Clave de conversación:&lt;/strong> Derivar una clave estable para cada par emisor-receptor:&lt;/p>
&lt;pre tabindex="0">&lt;code>shared_x = ECDH(sender_privkey, recipient_pubkey).x
conversation_key = HKDF-SHA256(
 ikm = shared_x,
 salt = &amp;#34;nip44-v2&amp;#34;,
 info = &amp;#34;&amp;#34;
)
&lt;/code>&lt;/pre>&lt;/li>
&lt;li>
&lt;p>&lt;strong>Claves de mensaje:&lt;/strong> Para cada mensaje, generar un nonce aleatorio de 32 bytes y derivar claves de cifrado/autenticación:&lt;/p>
&lt;pre tabindex="0">&lt;code>keys = HKDF-SHA256(
 ikm = conversation_key,
 salt = nonce,
 info = &amp;#34;nip44-v2&amp;#34;
)
chacha_key = keys[0:32]
chacha_nonce = keys[32:44]
hmac_key = keys[44:76]
&lt;/code>&lt;/pre>&lt;/li>
&lt;li>
&lt;p>&lt;strong>Rellenar texto plano:&lt;/strong> Rellenar a la siguiente potencia de 2 (minimo 32 bytes) para ocultar la longitud del mensaje:&lt;/p>
&lt;pre tabindex="0">&lt;code>padded = [length_u16_be] + [plaintext] + [zeros to next power of 2]
&lt;/code>&lt;/pre>&lt;/li>
&lt;li>
&lt;p>&lt;strong>Cifrar y autenticar:&lt;/strong>&lt;/p>
&lt;pre tabindex="0">&lt;code>ciphertext = XChaCha20(chacha_key, chacha_nonce, padded)
mac = HMAC-SHA256(hmac_key, nonce + ciphertext)
&lt;/code>&lt;/pre>&lt;/li>
&lt;li>
&lt;p>&lt;strong>Formatear carga util:&lt;/strong>&lt;/p>
&lt;pre tabindex="0">&lt;code>payload = [version=0x02] + [nonce] + [ciphertext] + [mac]
content = base64(payload)
&lt;/code>&lt;/pre>&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>Byte de versión:&lt;/strong> El primer byte (&lt;code>0x02&lt;/code>) indica la versión de cifrado. Esto permite actualizaciones futuras sin romper mensajes existentes. La versión &lt;code>0x01&lt;/code> fue un borrador anterior que nunca fue ampliamente desplegado.&lt;/p>
&lt;p>&lt;strong>Descifrado:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>Decodificar base64, verificar que el byte de versión sea &lt;code>0x02&lt;/code>&lt;/li>
&lt;li>Extraer nonce (bytes 1-32), texto cifrado y MAC (últimos 32 bytes)&lt;/li>
&lt;li>Derivar clave de conversación usando la clave privada del receptor y la clave pública del emisor&lt;/li>
&lt;li>Derivar claves de mensaje de la clave de conversación y el nonce&lt;/li>
&lt;li>Verificar MAC antes de descifrar (rechazar si es inválido)&lt;/li>
&lt;li>Descifrar texto cifrado, extraer prefijo de longitud, devolver texto plano sin relleno&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>Propiedades de seguridad:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Cifrado autenticado:&lt;/strong> El MAC Poly1305 asegura que cualquier manipulación se detecte antes del descifrado&lt;/li>
&lt;li>&lt;strong>Secreto hacia adelante (parcial):&lt;/strong> Cada mensaje usa un nonce único, por lo que comprometer un mensaje no revela otros. Sin embargo, comprometer una clave privada aún revela todos los mensajes pasados (sin ratcheting).&lt;/li>
&lt;li>&lt;strong>Ocultación de longitud:&lt;/strong> El relleno a potencia de 2 oscurece la longitud exacta del mensaje&lt;/li>
&lt;li>&lt;strong>Resistencia a ataques de temporización:&lt;/strong> Comparación en tiempo constante para verificación de MAC&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Uso en la práctica:&lt;/strong> NIP-44 es la capa de cifrado para:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> mensajes directos privados (dentro de gift wrap)&lt;/li>
&lt;li>&lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> comunicación de firmante remoto&lt;/li>
&lt;li>&lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> cifrado de seal&lt;/li>
&lt;li>&lt;a href="https://nostrcompass.org/es/topics/nip-104/">Protocolo Marmot&lt;/a> mensajes de grupo, donde NIP-44 envuelve contenido cifrado con MLS usando una clave derivada del secreto exportador de MLS&lt;/li>
&lt;li>Cualquier aplicación que necesite cifrado seguro punto a punto&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Guía de migración:&lt;/strong> Las nuevas aplicaciones deben usar NIP-44 exclusivamente. Para compatibilidad hacia atrás, verifica si el cliente de un contacto soporta NIP-44 (vía metadatos de aplicación &lt;a href="https://nostrcompass.org/es/topics/nip-89/">NIP-89&lt;/a> o soporte de relay) antes de recurrir a NIP-04. Al recibir mensajes, intenta primero el descifrado NIP-44, luego recurre a NIP-04 para contenido heredado.&lt;/p>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;p>&lt;strong>Primal Android v2.6.18&lt;/strong> - El &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/2.6.18">lanzamiento completo&lt;/a> agrega firma remota &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> y firma local &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>, convirtiendo a Primal en un centro de firma para otras aplicaciones Android. Las mejoras de rendimiento incluyen pre-caché de medios, pre-caché de avatares y carga de hilos más rápida. Las correcciones de errores abordan auto-menciones en biografías, fallos en la galería de medios y respaldos de títulos de stream. En iOS, Primal usa reproducción de audio en segundo plano para mantener la aplicación activa y recibir solicitudes de firma NIP-46; los usuarios pueden cambiar el sonido o silenciarlo completamente en configuración.&lt;/p>
&lt;p>&lt;strong>Mostro v0.15.6&lt;/strong> - La plataforma de trading P2P de Bitcoin &lt;a href="https://nostrcompass.org/es/topics/nip-69/">NIP-69&lt;/a> en su &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.15.6">último lanzamiento&lt;/a> completa la implementación del fondo de desarrollo con eventos de auditoría de Fase 4. Los pagos de tarifas de desarrollo ahora se rastrean vía eventos Nostr kind 38383 publicados después de cada pago exitoso, permitiendo verificación y analíticas de terceros. Los cálculos de montos fueron corregidos para mensajes de comprador/vendedor, y la lógica de premium fue alineada con la implementación de referencia lnp2pbot.&lt;/p>
&lt;p>&lt;strong>Aegis v0.3.5&lt;/strong> - El firmante multiplataforma &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.3.5">agrega modo oscuro&lt;/a>, visualización mejorada de iconos de aplicación y diseños de UI más limpios. Las correcciones de errores abordan conflictos con iCloud Private Relay en iOS y problemas de análisis de eventos. El lanzamiento también mejora cómo el JSON de eventos se pasa a la función de firma en Rust.&lt;/p>
&lt;p>&lt;strong>Citrine v1.0.0&lt;/strong> - La aplicación de relay para Android &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v1.0.0">alcanza la 1.0&lt;/a>. Citrine te permite ejecutar un relay Nostr personal directamente en tu dispositivo Android, útil para caché local, respaldo o como compañero de NIP-55. Esta versión agrega un manejador de reportes de fallos, mejora la eficiencia de consultas de base de datos y actualiza traducciones vía Crowdin.&lt;/p>
&lt;p>&lt;strong>Applesauce v5.0.0&lt;/strong> - La suite de bibliotecas TypeScript de hzrd149 &lt;a href="https://github.com/hzrd149/applesauce/releases">lanza una versión mayor&lt;/a> con cambios que rompen compatibilidad enfocados en corrección y simplicidad. El paquete core ahora &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%405.0.0">verifica firmas de eventos por defecto&lt;/a> y renombra métodos de coordenadas para usar terminología de &amp;ldquo;address&amp;rdquo; más clara (&lt;code>parseCoordinate&lt;/code> -&amp;gt; &lt;code>parseReplaceableAddress&lt;/code>). El paquete relay &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-relay%405.0.0">reduce los reintentos por defecto de 10 a 3&lt;/a> e ignora relays inalcanzables por defecto, además agrega &lt;code>createUnifiedEventLoader&lt;/code> para obtención de eventos más simple. El paquete wallet obtiene &lt;a href="https://nostrcompass.org/es/topics/nip-87/">descubrimiento de mints Cashu NIP-87&lt;/a> &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-wallet%405.0.0">&lt;/a>. Las dependencias directas de &lt;code>nostr-tools&lt;/code> fueron removidas de los paquetes, reduciendo el tamaño del bundle y conflictos de versiones.&lt;/p>
&lt;h2 id="cambios-notables-de-código-y-documentación">Cambios notables de código y documentación&lt;/h2>
&lt;p>&lt;em>Estos son pull requests abiertos y trabajo en etapa temprana, perfectos para obtener retroalimentación antes de que se fusionen. Si algo te llama la atención, considera revisar o comentar!&lt;/em>&lt;/p>
&lt;h3 id="damus-ios">Damus (iOS)&lt;/h3>
&lt;p>Una serie de PRs mejoran la experiencia de artículos de formato largo. &lt;a href="https://github.com/damus-io/damus/pull/3496">Mejoras de UX de lectura&lt;/a> agregan una barra de progreso, tiempo estimado de lectura, modo sepia, altura de línea ajustable y modo de enfoque que oculta la navegación mientras se desplaza. &lt;a href="https://github.com/damus-io/damus/pull/3489">Correcciones de imágenes&lt;/a> aseguran que las imágenes en contenido markdown se muestren con proporciones adecuadas al preprocesar imágenes independientes como elementos a nivel de bloque. &lt;a href="https://github.com/damus-io/damus/pull/3497">Tarjetas de vista previa de formato largo&lt;/a> reemplazan texto inline &lt;code>@naddr1...&lt;/code> con tarjetas de vista previa enriquecidas mostrando título y metadatos del artículo. Una nueva &lt;a href="https://github.com/damus-io/damus/pull/3508">suite de pruebas de integración de relay&lt;/a> agrega 137 pruebas relacionadas con red incluyendo verificación del protocolo &lt;a href="https://nostrcompass.org/es/topics/nip-01/">NIP-01&lt;/a> y comportamiento bajo condiciones de red degradadas (simulación 3G).&lt;/p>
&lt;h3 id="bitchat-mensajería-cifrada">Bitchat (Mensajería Cifrada)&lt;/h3>
&lt;p>Endurecimiento de seguridad en el mensajero iOS Nostr+Cashu. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/928">Limpieza de secreto DH del protocolo Noise&lt;/a> corrige seis ubicaciones donde los secretos compartidos no se estaban poniendo a cero después del acuerdo de claves Diffie-Hellman, restaurando las garantías de secreto hacia adelante. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/929">Seguridad de hilos para colas de recibos de lectura&lt;/a> agrega sincronización de barrera para prevenir condiciones de carrera en NostrTransport. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/920">Optimización del deduplicador de mensajes&lt;/a> mejora el rendimiento con altos volúmenes de mensajes, y &lt;a href="https://github.com/permissionlesstech/bitchat/pull/919">endurecimiento del análisis de cadenas hexadecimales&lt;/a> previene fallos por entrada malformada.&lt;/p>
&lt;h3 id="frostr-firma-de-umbral">Frostr (Firma de Umbral)&lt;/h3>
&lt;p>El protocolo de firma de umbral basado en &lt;a href="https://nostrcompass.org/es/topics/frost/">FROST&lt;/a> &lt;a href="https://github.com/FROSTR-ORG/igloo-desktop/pull/62">agregó visualización de código QR&lt;/a> para credenciales de grupo y credenciales de participación durante la incorporación y en la interfaz del firmante. Esto permite una configuración más fácil al distribuir participaciones de clave entre múltiples dispositivos, permitiendo a los usuarios escanear credenciales en lugar de copiar manualmente cadenas largas.&lt;/p>
&lt;h3 id="marmot-mdk-biblioteca">Marmot mdk (Biblioteca)&lt;/h3>
&lt;p>Más allá de las correcciones de seguridad mencionadas anteriormente, PRs activos abordan hallazgos restantes de la auditoría: &lt;a href="https://github.com/marmot-protocol/mdk/pull/109">tipo Secret&lt;T> para zerorizacion&lt;/a> introduce un tipo envolvente que automáticamente pone a cero datos sensibles al descartarse, &lt;a href="https://github.com/marmot-protocol/mdk/pull/111">paginación de consultas de mensajes&lt;/a> previene agotamiento de memoria al cargar historial de chat, y &lt;a href="https://github.com/marmot-protocol/mdk/pull/102">almacenamiento cifrado&lt;/a> agrega cifrado en reposo para la base de datos SQLite que almacena el estado del grupo y mensajes.&lt;/p>
&lt;h3 id="amethyst-android">Amethyst (Android)&lt;/h3>
&lt;p>Una semana ocupada de correcciones de estabilidad en el cliente Android. &lt;a href="https://github.com/vitorpamplona/amethyst/commit/2c42796">Análisis JSON tolerante&lt;/a> previene fallos de eventos malformados al hacer que Kotlin Serialization sea más permisivo. La validación de eventos ahora &lt;a href="https://github.com/vitorpamplona/amethyst/commit/40f9622">verifica el tamaño del campo kind&lt;/a> antes de procesar para evitar excepciones de valores sobredimensionados. La UI de puntuación de confianza obtuvo un icono más pequeño para reducir la interferencia visual, y &lt;a href="https://github.com/vitorpamplona/amethyst/commit/69c53ac">registro de errores mejorado&lt;/a> ayuda a diagnosticar problemas de conexión de relay. Las actualizaciones de traducción llegaron vía Crowdin, y varias advertencias de SonarQube fueron abordadas.&lt;/p>
&lt;h3 id="tenex-agentes-de-ia">TENEX (Agentes de IA)&lt;/h3>
&lt;p>El framework de agentes de IA nativo de Nostr vio 81 commits esta semana construyendo capacidades autónomas. El nuevo &lt;a href="https://github.com/tenex-chat/tenex/pull/48">sistema de supervisión de agentes&lt;/a> implementa heurísticas de comportamiento para monitorear acciones de agentes e intervenir cuando sea necesario. &lt;a href="https://github.com/tenex-chat/tenex/commit/b244c10">Transparencia de delegación&lt;/a> agrega registro de intervención de usuario a las transcripciones de delegación, para que los usuarios puedan auditar lo que los agentes hicieron en su nombre. El &lt;a href="https://github.com/tenex-chat/tenex/pull/47">registro de proveedores LLM&lt;/a> fue modularizado para integración más fácil de diferentes backends de IA. El soporte de conversación entre proyectos permite que los agentes mantengan contexto a través de múltiples proyectos basados en Nostr.&lt;/p>
&lt;h3 id="jumble-cliente-web">Jumble (Cliente Web)&lt;/h3>
&lt;p>El cliente web enfocado en relays agregó varias mejoras de experiencia de usuario. &lt;a href="https://github.com/CodyTseng/jumble/commit/695f2fe">Pool de relay inteligente&lt;/a> gestiona conexiones inteligentemente basándose en patrones de uso. &lt;a href="https://github.com/CodyTseng/jumble/commit/917fcd9">Alternador de feed en vivo&lt;/a> permite a los usuarios cambiar entre streaming en tiempo real y actualización manual. &lt;a href="https://github.com/CodyTseng/jumble/commit/d1b3a8c">Mostrar automáticamente nuevas notas&lt;/a> en la parte superior muestra contenido fresco sin requerir recarga de página. &lt;a href="https://github.com/CodyTseng/jumble/commit/fd9f41c">Caché persistente&lt;/a> para el feed de seguidos y notificaciones mejora los tiempos de carga en visitas de retorno. Los usuarios ahora pueden &lt;a href="https://github.com/CodyTseng/jumble/commit/53a67d8">cambiar relays por defecto&lt;/a> a través de configuración.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. ¿Estás construyendo algo? ¿Tienes noticias para compartir? ¿Quieres que cubramos tu proyecto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Contáctanos vía DM NIP-17&lt;/a> o encuéntranos en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #3</title><link>https://nostrcompass.org/es/newsletters/2025-12-31-newsletter/</link><pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2025-12-31-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal del ecosistema del protocolo Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Al cerrar 2025, miramos hacia atrás a cinco años de hitos de diciembre en la evolución de Nostr. Desde el primer lanzamiento del cliente de fiatjaf en diciembre de 2020, pasando por la donación fundamental de Jack Dorsey de 14 BTC en diciembre de 2022, hasta la proliferación de NIP-55 signer este mes y la aceleración de caché de 162x de NDK, diciembre ha marcado consistentemente puntos de inflexión para el protocolo. Este número especial traza la historia técnica a través de cada diciembre, documentando el crecimiento del protocolo desde dos relays experimentales hasta más de 2,500 nodos en 50 países. Además: El módulo de escritorio de Amethyst toma forma a través de Quartz, Notedeck obtiene mensajería, Citrine aloja aplicaciones web, y NIP-54 corrige la internacionalización para scripts no latinos.&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal del ecosistema del protocolo Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Al cerrar 2025, miramos hacia atrás a cinco años de hitos de diciembre en la evolución de Nostr. Desde el primer lanzamiento del cliente de fiatjaf en diciembre de 2020, pasando por la donación fundamental de Jack Dorsey de 14 BTC en diciembre de 2022, hasta la proliferación de NIP-55 signer este mes y la aceleración de caché de 162x de NDK, diciembre ha marcado consistentemente puntos de inflexión para el protocolo. Este número especial traza la historia técnica a través de cada diciembre, documentando el crecimiento del protocolo desde dos relays experimentales hasta más de 2,500 nodos en 50 países. Además: El módulo de escritorio de Amethyst toma forma a través de Quartz, Notedeck obtiene mensajería, Citrine aloja aplicaciones web, y NIP-54 corrige la internacionalización para scripts no latinos.&lt;/p>
&lt;h2 id="resumen-de-diciembre-cinco-años-de-diciembres-de-nostr">Resumen de Diciembre: Cinco Años de Diciembres de Nostr&lt;/h2>
&lt;p>Nostr cumple cinco años este año. fiatjaf inició el protocolo el 7 de noviembre de 2020, y cada diciembre desde entonces ha marcado una fase distinta en su evolución: desde prueba de concepto hasta movimiento global hasta ecosistema de producción. Este es un retrospectivo técnico de diciembre de 2020 hasta diciembre de 2025, los años formativos que establecieron la base de Nostr y catalizaron su momento de explosión.&lt;/p>
&lt;h3 id="diciembre-2020-génesis">Diciembre 2020: Génesis&lt;/h3>
&lt;p>El primer mes completo de existencia de Nostr vio a fiatjaf lanzar &lt;a href="https://github.com/fiatjaf/branle">Branle&lt;/a>, el primer cliente del protocolo, construido con Quasar (Vue.js) y absurd-sql para almacenamiento local. fiatjaf ya había establecido la arquitectura central: usuarios identificados por claves públicas secp256k1, todas las publicaciones firmadas criptográficamente, relays sirviendo como almacenamiento simple que no se comunican entre sí. Uno o dos relays experimentales servían a un puñado de primeros adoptantes coordinándose en el grupo de Telegram &lt;a href="https://t.me/nostr_protocol">@nostr_protocol&lt;/a>, que se había lanzado el 16 de noviembre. La &lt;a href="https://fiatjaf.com/nostr.html">documentación original&lt;/a> describía &amp;ldquo;el protocolo abierto más simple que es capaz de crear una red social global resistente a la censura,&amp;rdquo; una premisa que tomaría dos años más en probarse.&lt;/p>
&lt;h3 id="diciembre-2021-desarrollo-temprano">Diciembre 2021: Desarrollo Temprano&lt;/h3>
&lt;p>El 31 de diciembre de 2021, Nostr llegó a la &lt;a href="https://news.ycombinator.com/item?id=29749061">portada de Hacker News&lt;/a> con 110 puntos y 138 comentarios, enviado por Cameri. Esto marcó la primera exposición significativa del protocolo a la comunidad de desarrolladores más amplia. La red funcionaba con aproximadamente siete relays con menos de 1,000 usuarios. Branle recibió actualizaciones incluyendo importación de clave privada (31 de diciembre) y soporte multi-relay. Un cliente de línea de comandos, noscl, proporcionaba interacción basada en terminal. Las especificaciones del protocolo existían en la documentación de fiatjaf, aunque el &lt;a href="https://github.com/nostr-protocol/nips">repositorio formal de NIPs&lt;/a> no se crearía hasta mayo de 2022. El protocolo era, como lo describió fiatjaf, &amp;ldquo;un trabajo en progreso.&amp;rdquo;&lt;/p>
&lt;h3 id="diciembre-2022-el-punto-de-inflexión">Diciembre 2022: El Punto de Inflexión&lt;/h3>
&lt;p>Diciembre de 2022 transformó a Nostr de un experimento de nicho en un movimiento mainstream. El catalizador llegó el 15 de diciembre, cuando Jack Dorsey donó &lt;a href="https://www.coindesk.com/tech/2022/12/15/jack-dorsey-gives-decentralized-social-network-nostr-14-btc-in-funding">14.17171699 BTC&lt;/a> (~$245,000-$250,000) a fiatjaf después de descubrir el protocolo y declarar que era &amp;ldquo;100 por ciento lo que queríamos de Bluesky, pero no fue desarrollado por una empresa.&amp;rdquo; El 16 de diciembre, fiatjaf anunció la división de fondos con el desarrollador de Damus William Casarin (jb55), y Dorsey verificó su cuenta de Nostr (npub: &lt;code>npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237lmu63q0uf63m&lt;/code>). El financiamiento legitimó el proyecto de la noche a la mañana.&lt;/p>
&lt;p>La misma semana, el caos de Twitter aceleró la adopción. Del 14 al 15 de diciembre vio suspensiones de periodistas prominentes del New York Times, CNN y Washington Post. El 18 de diciembre, Twitter &lt;a href="https://techcrunch.com/2022/12/18/twitter-wont-let-you-post-your-facebook-instagram-and-mastodon-handles/">anunció prohibiciones&lt;/a> a cuentas que promocionaban Nostr, Mastodon y otras plataformas. La política se revirtió al día siguiente después de la reacción negativa. El éxodo llevó a los usuarios a explorar alternativas.&lt;/p>
&lt;p>El desarrollo del protocolo se aceleró. El 16 de diciembre, se fusionó &lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19&lt;/a> (&lt;a href="https://github.com/nostr-protocol/nips/pull/57">#57&lt;/a>), introduciendo identificadores codificados en bech32 (npub, nsec, note, nprofile, nevent) que hacían las claves legibles por humanos y distinguibles. El repositorio de NIPs registró más de 36 commits ese mes, incluyendo actualizaciones de NIP-40 y NIP-07. Los clientes proliferaron: Damus llenó su beta de TestFlight en horas, Astral bifurcó Branle para creación de perfiles, Snort se lanzó como un cliente web &amp;ldquo;rápido y resistente a la censura,&amp;rdquo; y Vitor Pamplona comenzó el desarrollo de Amethyst. Alby v1.22.1 &amp;ldquo;Kemble&amp;rsquo;s Cascade of Stars&amp;rdquo; se envió el 22 de diciembre con soporte para NIP-19. Para el 7 de diciembre, Nostr tenía aproximadamente 800 usuarios con perfiles; cuando Damus llegó a la App Store el 31 de enero de 2023, se abrieron las compuertas, impulsando el crecimiento a más de 315,000 usuarios para junio de 2023.&lt;/p>
&lt;h3 id="diciembre-2023-maduración-del-ecosistema">Diciembre 2023: Maduración del Ecosistema&lt;/h3>
&lt;p>Diciembre de 2023 marcó un punto de inflexión crítico para la seguridad del protocolo Nostr. El 20 de diciembre, se fusionó la &lt;a href="https://github.com/nostr-protocol/nips/pull/746">revisión 3 de NIP-44&lt;/a> después de una auditoría de seguridad independiente de Cure53 (NOS-01) que identificó 10 problemas en las implementaciones de TypeScript, Go y Rust, incluyendo ataques de timing y preocupaciones de forward secrecy. La especificación actualizada reemplazó el cifrado defectuoso de &lt;a href="https://nostrcompass.org/es/topics/nip-04/">NIP-04&lt;/a> con ChaCha20 y HMAC-SHA256, estableciendo la base criptográfica que ahora sustenta los DMs privados de &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> y el gift wrapping de &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a>. La misma semana, &lt;a href="https://opensats.org/blog/nostr-grants-december-2023">OpenSats anunció su cuarta oleada de grants&lt;/a> el 21 de diciembre, financiando siete proyectos incluyendo Lume, noStrudel, ZapThreads, y una auditoría independiente de NIP-44. Esto siguió a la &lt;a href="https://opensats.org/blog/nostr-grants-july-2023">primera oleada en julio de 2023&lt;/a> que había financiado Damus, Coracle, Iris, y otros, llevando la asignación total del Fondo Nostr a aproximadamente $3.4 millones a través de 39 grants.&lt;/p>
&lt;p>El mes también expuso tensiones de sostenibilidad en el ecosistema. El 28 de diciembre, William Casarin (jb55) &lt;a href="https://stacker.news/items/368863">publicó en Stacker News&lt;/a> que 2024 sería &amp;ldquo;probablemente el último año de Damus,&amp;rdquo; citando que &amp;ldquo;los clientes de nostr no generan dinero&amp;rdquo; después de que las restricciones de Apple sobre zaps en la aplicación limitaron severamente el potencial de ingresos. El equipo de Damus había rechazado previamente financiamiento de VC. Mientras tanto, &lt;a href="https://github.com/getAlby/nostr-wallet-connect/releases/tag/0.4.1">Nostr Wallet Connect v0.4.1&lt;/a> se envió el 26 de diciembre, extendiendo &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> con métodos &lt;code>pay_keysend&lt;/code>, &lt;code>make_invoice&lt;/code>, &lt;code>lookup_invoice&lt;/code>, &lt;code>list_transactions&lt;/code>, &lt;code>get_balance&lt;/code>, y &lt;code>get_info&lt;/code>, sentando las bases para las integraciones de wallets que se convertirían en estándar en todos los clientes.&lt;/p>
&lt;h3 id="diciembre-2024-avance-del-protocolo">Diciembre 2024: Avance del Protocolo&lt;/h3>
&lt;p>Diciembre de 2024 abrió con el &lt;a href="https://damus.io/notedeck/">lanzamiento Alpha de Notedeck&lt;/a> el 30 de noviembre, el cliente de escritorio basado en Rust del equipo Damus con una interfaz multi-columna con soporte para múltiples cuentas. Construido para Linux, macOS y Windows (Android planificado para 2025), Notedeck se envió inicialmente a suscriptores de Damus Purple y representó una expansión estratégica más allá de iOS. Dos semanas después, &lt;a href="https://opensats.org/blog/9th-wave-of-nostr-grants">OpenSats anunció su novena oleada de grants&lt;/a> el 16 de diciembre, financiando AlgoRelay (el primer relay algorítmico para feeds personalizados), Pokey (app Android con mesh Bluetooth para internet restringido), Nostr Safebox (almacenamiento de tokens Cashu con &lt;a href="https://nostrcompass.org/es/topics/nip-60/">NIP-60&lt;/a>), y LumiLumi (cliente web ligero y accesible), llevando la asignación total del Fondo Nostr a aproximadamente $9 millones, un aumento del 67% año tras año.&lt;/p>
&lt;p>El mes vio una maduración significativa de clientes en todo el ecosistema. &lt;a href="https://github.com/mikedilger/gossip/releases/tag/v0.13.0">Gossip 0.13.0&lt;/a> llegó el 23 de diciembre con soporte de File Metadata (&lt;a href="https://nostrcompass.org/es/topics/nip-92/">NIP-92&lt;/a>/&lt;a href="https://nostrcompass.org/es/topics/nip-94/">NIP-94&lt;/a>), integración de Blossom, y búsqueda en relay con &lt;a href="https://nostrcompass.org/es/topics/nip-50/">NIP-50&lt;/a>. &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.5.0">Coracle 0.5.0&lt;/a> se envió el 12 de diciembre con onboarding rediseñado e integración de nostr-editor. El desarrollo del protocolo se mantuvo activo con 30 pull requests enviados entre el 9 y el 22 de diciembre (10 fusionados), incluyendo reescrituras de &lt;a href="https://nostrcompass.org/es/topics/nip-46/">NIP-46&lt;/a> para usar solo cifrado NIP-44 y trabajo continuo en &lt;a href="https://nostrcompass.org/es/topics/nip-104/">NIP-104&lt;/a> para cifrado double ratchet al nivel de Signal. Las estadísticas de red mostraron más de 224,000 eventos diarios de pubkeys confiables, crecimiento de 4x año tras año en nuevos perfiles con listas de contactos, y un aumento del 50% en eventos de escritura pública.&lt;/p>
&lt;h3 id="diciembre-2025-expansión-del-ecosistema">Diciembre 2025: Expansión del Ecosistema&lt;/h3>
&lt;p>Diciembre de 2025 trajo maduración continua del protocolo y expansión del ecosistema. El 21 de diciembre, &lt;a href="https://opensats.org/blog/fourteenth-wave-of-nostr-grants">OpenSats anunció su decimocuarta oleada de grants de Nostr&lt;/a>, financiando tres proyectos: YakiHonne (un cliente multiplataforma con portal de creadores para contenido de formato largo e integración de pagos Cashu/Nutzaps), Quartz (biblioteca Kotlin Multiplatform de Vitor Pamplona que impulsa Amethyst y permitirá una versión iOS), y Nostr Feedz (integración bidireccional RSS-a-Nostr por PlebOne). Las renovaciones de grants fueron para Dart NDK y nostr-relay de Mattn.&lt;/p>
&lt;p>La evolución del protocolo continuó con &lt;a href="https://nostrcompass.org/es/topics/nip-be/">NIP-BE&lt;/a> (mensajería Bluetooth Low Energy, &lt;a href="https://github.com/nostr-protocol/nips/pull/1979">#1979&lt;/a>) fusionado en noviembre, habilitando sincronización offline de dispositivos. &lt;a href="https://nostrcompass.org/es/topics/nip-a4/">NIP-A4&lt;/a> (Mensajes Públicos, kind 24, &lt;a href="https://github.com/nostr-protocol/nips/pull/1988">#1988&lt;/a>) llegó más tarde en el mes, definiendo mensajes de pantalla de notificación que usan tags &lt;code>q&lt;/code> para evitar complicaciones de threading. &lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a> recibió clarificación mayor (&lt;a href="https://github.com/nostr-protocol/nips/pull/2106">#2106&lt;/a>), introduciendo el tag &lt;code>hidden&lt;/code> para grupos verdaderamente privados e invisibles. La especificación de &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> también vio refinamiento (&lt;a href="https://github.com/nostr-protocol/nips/pull/2166">#2166&lt;/a>), abordando un error común de implementación donde los desarrolladores llamaban &lt;code>get_public_key&lt;/code> desde procesos en segundo plano.&lt;/p>
&lt;p>En el lado del cliente, &lt;a href="https://nostrcompass.org/es/newsletters/2025-12-24-newsletter/#news">Primal Android se convirtió en un signer NIP-55 completo&lt;/a> a través de ocho PRs fusionados implementando &lt;code>LocalSignerContentProvider&lt;/code>, uniéndose a Amber y Aegis como opciones de firma en Android. La &lt;a href="https://nostrcompass.org/es/newsletters/2025-12-24-newsletter/#notable-code-and-documentation-changes">biblioteca NDK logró consultas de caché 162x más rápidas&lt;/a> (de ~3,690ms a ~22ms) eliminando escrituras duplicadas y búsquedas innecesarias de caché LRU (&lt;a href="https://github.com/nostr-dev-kit/ndk/pull/371">PR #371&lt;/a>, &lt;a href="https://github.com/nostr-dev-kit/ndk/pull/372">PR #372&lt;/a>). Shopstr introdujo &lt;a href="https://nostrcompass.org/es/newsletters/2025-12-24-newsletter/#news">Zapsnags&lt;/a> para ventas flash vía zaps. White Noise envió notificaciones push que preservan la privacidad con &lt;a href="https://nostrcompass.org/es/topics/mip-05/">MIP-05&lt;/a>. Consulta &lt;a href="https://nostrcompass.org/es/newsletters/2025-12-17-newsletter/">Newsletter #1&lt;/a> y &lt;a href="https://nostrcompass.org/es/newsletters/2025-12-24-newsletter/">Newsletter #2&lt;/a> para cobertura completa.&lt;/p>
&lt;hr>
&lt;p>Hace cinco años, fiatjaf lanzó Branle a un puñado de usuarios a través de dos relays experimentales. Hoy, el protocolo soporta más de 140 clientes, más de 2,500 relays en 50 países, y una creciente red de confianza que vincula cientos de miles de keypairs. El patrón de diciembre de lanzamientos importantes continuó este mes con mensajería Bluetooth, proliferación de signers en Android, y grants de infraestructura que señalan inversión sostenida en herramientas multiplataforma.&lt;/p>
&lt;h2 id="noticias">Noticias&lt;/h2>
&lt;p>&lt;strong>Amethyst Desktop Toma Forma&lt;/strong> - El grant de Quartz de la decimocuarta oleada de OpenSats ya está produciendo resultados. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1625">PR #1625&lt;/a> crea un módulo completo &lt;code>:desktopApp&lt;/code> para Amethyst usando Compose Multiplatform, con pantallas de inicio de sesión y feed global funcionales en Desktop JVM. La arquitectura convierte el módulo &lt;code>:commons&lt;/code> a Kotlin Multiplatform con una estructura de source set limpia (&lt;code>commonMain&lt;/code>, &lt;code>jvmAndroid&lt;/code>, &lt;code>androidMain&lt;/code>, &lt;code>jvmMain&lt;/code>), permitiendo componentes de UI compartidos entre Android y escritorio mientras deja las decisiones específicas de plataforma a cada target. Esto sienta las bases para la eventual versión iOS a través del mismo enfoque Kotlin Multiplatform.&lt;/p>
&lt;p>&lt;strong>Amethyst Respuestas de Voz&lt;/strong> - Una entrega navideña de davotoula: &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1622">PR #1622&lt;/a> añade pantallas dedicadas de respuesta de voz con visualización de forma de onda, soporte para re-grabar, selección de servidor de medios, e indicadores de progreso de carga. Los usuarios ahora pueden responder tanto a mensajes de voz raíz como a respuestas de voz con audio.&lt;/p>
&lt;p>&lt;strong>Notedeck Añade Mensajería&lt;/strong> - Notedeck, el cliente de escritorio de Damus, ganó una función de mensajes en &lt;a href="https://github.com/damus-io/notedeck/pull/1223">PR #1223&lt;/a>, expandiéndose más allá de la navegación del timeline hacia comunicación directa.&lt;/p>
&lt;p>&lt;strong>Citrine Aloja Aplicaciones Web&lt;/strong> - Citrine ahora puede &lt;a href="https://github.com/greenart7c3/Citrine/pull/81">alojar aplicaciones web&lt;/a>, convirtiendo tu teléfono en un servidor web Nostr local-first. Un &lt;a href="https://github.com/greenart7c3/Citrine/pull/85">PR #85&lt;/a> separado añade reconexión automática y broadcasting de eventos cuando la conectividad de red regresa, con cobertura de pruebas completa a través de niveles de API de Android.&lt;/p>
&lt;p>&lt;strong>Registro de Kits de Desarrollo de Nostrability&lt;/strong> - El rastreador de &lt;a href="https://github.com/nostrability/nostrability/issues/264">Developer Kits &amp;amp; Tooling&lt;/a> mantiene un registro curado de SDKs, bibliotecas y herramientas de desarrollo a través de lenguajes (TypeScript, Rust, Python, Go, Dart, Swift, y más). Si eres nuevo en el desarrollo de Nostr, este es un punto de partida útil para encontrar el toolkit adecuado para tu stack.&lt;/p>
&lt;h2 id="actualizaciones-de-nips">Actualizaciones de NIPs&lt;/h2>
&lt;p>Cambios recientes al &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-54/">NIP-54&lt;/a>&lt;/strong> - Corrección crítica de internacionalización para normalización de d-tag wiki (&lt;a href="https://github.com/nostr-protocol/nips/pull/2177">#2177&lt;/a>). Las reglas anteriores convertían todos los caracteres no ASCII a &lt;code>-&lt;/code>, rompiendo el soporte para japonés, chino, árabe, cirílico y otros scripts. La especificación actualizada preserva las letras UTF-8, aplica minúsculas solo a caracteres con variantes de mayúsculas, e incluye ejemplos completos: &lt;code>&amp;quot;ウィキペディア&amp;quot;&lt;/code> permanece &lt;code>&amp;quot;ウィキペディア&amp;quot;&lt;/code>, &lt;code>&amp;quot;Москва&amp;quot;&lt;/code> se convierte en &lt;code>&amp;quot;москва&amp;quot;&lt;/code>, y scripts mixtos como &lt;code>&amp;quot;日本語 Article&amp;quot;&lt;/code> se normalizan a &lt;code>&amp;quot;日本語-article&amp;quot;&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h2 id="lanzamientos">Lanzamientos&lt;/h2>
&lt;p>&lt;strong>Zapstore 1.0-rc1&lt;/strong> - La tienda de aplicaciones sin permisos basada en Nostr envía el &lt;a href="https://github.com/zapstore/zapstore/releases/tag/1.0-rc1">primer release candidate&lt;/a> de su nueva arquitectura, presentando una actualización completa de UI, gestor de paquetes reescrito con mejor manejo de errores, App Stacks para descubrimiento curado, pantallas de perfil rediseñadas, verificación de actualizaciones en segundo plano, y desplazamiento infinito en listas de lanzamientos.&lt;/p>
&lt;p>&lt;strong>KeyChat v1.38.1&lt;/strong> - La aplicación de mensajería cifrada basada en MLS &lt;a href="https://github.com/keychat-io/keychat-app/releases/tag/v1.38.1%2B6489">añade soporte UnifiedPush&lt;/a> para notificaciones push de Android y Linux, más autenticación biométrica para operaciones de privacidad. Disponible para Android, Windows, macOS y Linux.&lt;/p>
&lt;p>&lt;strong>Alby Go v2.0.0&lt;/strong> - El compañero de wallet Lightning móvil &lt;a href="https://github.com/getAlby/go/releases/tag/v2.0.0">envía un rediseño visual&lt;/a> con nuevo logo, paleta de colores actualizada, libreta de direcciones rediseñada, y teclado de entrada de cantidades mejorado. BTC Map ahora es accesible desde la pantalla de inicio, y las descripciones de transacciones aparecen en notificaciones.&lt;/p>
&lt;p>&lt;strong>nak v0.17.4&lt;/strong> - La herramienta de línea de comandos Nostr de fiatjaf &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.17.4">lanzada&lt;/a>, siguiendo la corrección de restricción de LMDB Linux de v0.17.3 de la semana pasada.&lt;/p>
&lt;h2 id="cambios-notables-de-código-y-documentación">Cambios notables de código y documentación&lt;/h2>
&lt;p>&lt;em>Pull requests abiertos y trabajo en etapa temprana que vale la pena seguir.&lt;/em>&lt;/p>
&lt;h3 id="damus-ios">Damus (iOS)&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/pull/3477">NIP-19 relay hints&lt;/a> implementa consumo de relay hints para obtención de eventos. Cuando los usuarios abren enlaces nevent, nprofile, o naddr, Damus ahora extrae relay hints de los datos TLV bech32 y se conecta a relays efímeros para obtener contenido que no está en el pool de relays del usuario. La implementación incluye limpieza con conteo de referencias para prevenir condiciones de carrera durante búsquedas concurrentes. &lt;a href="https://github.com/damus-io/damus/pull/3474">Detección de URL de imagen&lt;/a> convierte automáticamente URLs de imagen pegadas en miniaturas de vista previa en el compositor, con insignia de posición de carrusel para múltiples imágenes. &lt;a href="https://github.com/damus-io/damus/pull/3473">Conversión de pegado npub&lt;/a> transforma strings npub/nprofile pegados en enlaces de mención con resolución de perfil asíncrona.&lt;/p>
&lt;h3 id="amethyst-android">Amethyst (Android)&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1627">Payment targets&lt;/a> añade una interfaz de evento para splits de zap NIP-57, permitiendo que las publicaciones especifiquen múltiples destinatarios que comparten zaps entrantes (útil para colaboraciones, reparto de ingresos, o dar propinas tanto a creadores de contenido como a las herramientas que usan). &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1624">Documentación de paridad de características de Quartz&lt;/a> añade una tabla detallada que rastrea qué características están implementadas a través de los targets Android, Desktop JVM, e iOS, notando que iOS carece de criptografía central (&lt;code>Secp256k1Instance&lt;/code>), serialización JSON, y estructuras de datos.&lt;/p>
&lt;h3 id="notedeck-desktop">Notedeck (Desktop)&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck/pull/1226">Reconstrucción de filtro de timeline&lt;/a> corrige un bug donde las cuentas dejadas de seguir seguían apareciendo en feeds. Los filtros de timeline se construían una vez desde la lista de contactos y nunca se actualizaban; la corrección añade rastreo de &lt;code>contact_list_timestamp&lt;/code> y un método &lt;code>invalidate()&lt;/code> para activar reconstrucciones cuando cambia el estado de seguimiento.&lt;/p>
&lt;h3 id="citrine-android-relay">Citrine (Android Relay)&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Citrine/pull/86">ContentProvider API&lt;/a> expone la base de datos de eventos del relay local a otras apps Android vía &lt;code>ContentResolver&lt;/code>. A diferencia de la interfaz WebSocket (que requiere que las apps mantengan una conexión persistente y hablen el protocolo relay de Nostr), ContentProvider ofrece acceso directo síncrono a la base de datos a través del mecanismo IPC nativo de Android. Las apps externas pueden consultar eventos por ID, pubkey, kind, o rango de fechas, insertar nuevos eventos con validación, y eliminar eventos sin gestionar conexiones de socket.&lt;/p>
&lt;h3 id="rust-nostr-library">rust-nostr (Library)&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr/pull/1183">Soporte de NIP-40 a nivel de relay&lt;/a> añade manejo de expiración a nivel del relay builder. Los eventos expirados ahora son rechazados antes del almacenamiento y filtrados antes de enviar a clientes, eliminando la necesidad de que cada implementación de base de datos maneje verificaciones de expiración independientemente.&lt;/p>
&lt;h3 id="nak-cli">nak (CLI)&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak/pull/91">Blossom mirror&lt;/a> implementa funcionalidad de mirroring de blobs para la herramienta de línea de comandos.&lt;/p>
&lt;h3 id="mostro-p2p-trading">Mostro (P2P Trading)&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro/pull/559">Dev fee audit events&lt;/a> añade pistas de auditoría transparentes para pagos al fondo de desarrollo a través de eventos Nostr kind 8383. La implementación publica eventos de auditoría no bloqueantes después de pagos de fees exitosos, incluyendo detalles de orden y hashes de pago mientras excluye pubkeys de comprador/vendedor por privacidad.&lt;/p>
&lt;h3 id="mdk-marmot-development-kit">MDK (Marmot Development Kit)&lt;/h3>
&lt;p>Tres correcciones de auditoría de seguridad llegaron: &lt;a href="https://github.com/marmot-protocol/mdk/pull/40">Verificación de autor&lt;/a> obliga a que los pubkeys de rumor coincidan con las credenciales del remitente MLS, previniendo ataques de suplantación. &lt;a href="https://github.com/marmot-protocol/mdk/pull/41">KeyPackage identity binding&lt;/a> verifica que la identidad de credencial coincida con los firmantes de eventos. &lt;a href="https://github.com/marmot-protocol/mdk/pull/42">Validación de actualización de admin&lt;/a> previene sets de admin vacíos y asignaciones de admin a no miembros.&lt;/p>
&lt;h3 id="shopstr-marketplace">Shopstr (Marketplace)&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr/pull/217">HODL invoice escrow&lt;/a> implementa un sistema de pago que minimiza la confianza para bienes físicos. La arquitectura usa &lt;code>makeHoldInvoice&lt;/code> de Alby para bloquear fondos del comprador en su propia wallet, con liquidación activada solo después de la verificación de inventario del comerciante. El protocolo de handshake fluye a través de DMs cifrados &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>: el comprador envía solicitud de orden, el comerciante responde con HODL invoice, el comprador paga (fondos bloqueados), el comerciante confirma stock y envío, luego la liquidación libera los fondos. El soporte de carrito multi-comerciante divide pagos entre vendedores.&lt;/p>
&lt;h3 id="jumble-web-client">Jumble (Web Client)&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble/pull/713">Modo de descubrimiento por relay&lt;/a> añade un toggle para ocultar publicaciones de usuarios seguidos en relays específicos, habilitando feeds de descubrimiento basados en idioma (ej., nostr.band/lang/*). La característica filtra publicaciones donde el pubkey del autor aparece en la lista de seguidos del usuario, persistiendo el estado del toggle por URL de relay en localStorage.&lt;/p>
&lt;h3 id="white-noise-encrypted-messaging">White Noise (Encrypted Messaging)&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/937">Reintento de carga de medios&lt;/a> añade opciones de reintento para cargas fallidas. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/927">Advertencias de edición de perfil&lt;/a> alerta a usuarios sobre cambios de perfil. En el backend, &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/422">whitenoise-rs&lt;/a> corrige una condición de carrera en la creación de AccountGroup.&lt;/p>
&lt;h3 id="npubcash-lightning-address-service">npub.cash (Lightning Address Service)&lt;/h3>
&lt;p>&lt;a href="https://github.com/cashubtc/npubcash-server/pull/40">Reescritura v3&lt;/a> migra a Bun para el monorepo y servidor, añade soporte SQLite, elimina compatibilidad v1, implementa LUD-21, y añade actualizaciones de mint quote en tiempo real.&lt;/p>
&lt;h3 id="nostr-java-library">nostr-java (Library)&lt;/h3>
&lt;p>&lt;a href="https://github.com/tcheeric/nostr-java/releases/tag/v1.1.1">v1.1.1&lt;/a> envía refactorizaciones de manejo de WebSocket y robustez de pruebas mejorada a través de &lt;a href="https://github.com/tcheeric/nostr-java/pull/499">dos PRs&lt;/a>.&lt;/p>
&lt;h3 id="nips-repository">NIPs Repository&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2180">Migración de NIP-54 a Djot&lt;/a> propone un cambio separado a la especificación wiki: cambiar el formato de contenido de Asciidoc a Djot, un lenguaje de marcado ligero con sintaxis más limpia. El PR introduce enlaces de estilo referencia para wikilinks, haciendo las referencias cruzadas entre artículos wiki más legibles en forma de fuente. &lt;a href="https://github.com/nostr-protocol/nips/pull/2179">NIP-XX Quorum&lt;/a> introduce gobernanza de multi-firma umbral para grupos Nostr usando FROST (Flexible Round-Optimized Schnorr Threshold signatures). Un Quorum es un nsec compartido entre miembros a través de un esquema T-de-N donde los miembros pueden representarse a sí mismos o delegar a un consejo de representantes. Cuando el consejo cambia, el viejo nsec queda obsoleto y uno nuevo es distribuido—el acto final de cualquier consejo es firmar el evento de transición de gobernanza. La especificación define membresía (pública o privada), elecciones y encuestas (votos populares, votos de no confianza), &amp;ldquo;leyes&amp;rdquo; opcionales en lenguaje natural, y crucialmente, ontologías de quorum donde los quorums pueden ser miembros de otros quorums, habilitando estructuras jerárquicas como localidades uniéndose a cuerpos regionales. Los casos de uso abarcan desarrollo de código fuente, juntas directivas de empresas, HOAs, y comunidades moderadas.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana y este año. ¿Construyendo algo? ¿Tienes noticias para compartir? ¿Quieres que cubramos tu proyecto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Contáctanos vía NIP-17 DM&lt;/a> o encuéntranos en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #2</title><link>https://nostrcompass.org/es/newsletters/2025-12-24-newsletter/</link><pubDate>Wed, 24 Dec 2025 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2025-12-24-newsletter/</guid><description>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal del ecosistema del protocolo Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Tres implementaciones de firmadores &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> reciben actualizaciones: Amber añade caché de rendimiento, Aegis obtiene soporte para URI &lt;code>nostrsigner:&lt;/code>, y Primal Android se une a ellos como firmador local completo. Shopstr introduce &amp;ldquo;Zapsnags&amp;rdquo; para ventas flash vía zaps. Mostro añade un fondo de desarrollo. Cuatro actualizaciones de NIP aterrizan incluyendo Mensajes Públicos (kind 24) y mejoras de privacidad de grupos. Las consultas de caché de NDK se aceleran 162x, Applesauce añade reacciones y soporte de billetera NIP-60, y Tenex introduce arquitectura RAL para delegación de agentes IA. En nuestra profundización, explicamos &lt;a href="https://nostrcompass.org/es/topics/nip-02/">NIP-02&lt;/a> (listas de seguidos) y &lt;a href="https://nostrcompass.org/es/topics/nip-10/">NIP-10&lt;/a> (hilos de respuestas), especificaciones fundamentales para construir líneas de tiempo sociales y conversaciones.&lt;/p></description><content:encoded>&lt;p>Bienvenido de nuevo a Nostr Compass, tu guía semanal del ecosistema del protocolo Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Tres implementaciones de firmadores &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> reciben actualizaciones: Amber añade caché de rendimiento, Aegis obtiene soporte para URI &lt;code>nostrsigner:&lt;/code>, y Primal Android se une a ellos como firmador local completo. Shopstr introduce &amp;ldquo;Zapsnags&amp;rdquo; para ventas flash vía zaps. Mostro añade un fondo de desarrollo. Cuatro actualizaciones de NIP aterrizan incluyendo Mensajes Públicos (kind 24) y mejoras de privacidad de grupos. Las consultas de caché de NDK se aceleran 162x, Applesauce añade reacciones y soporte de billetera NIP-60, y Tenex introduce arquitectura RAL para delegación de agentes IA. En nuestra profundización, explicamos &lt;a href="https://nostrcompass.org/es/topics/nip-02/">NIP-02&lt;/a> (listas de seguidos) y &lt;a href="https://nostrcompass.org/es/topics/nip-10/">NIP-10&lt;/a> (hilos de respuestas), especificaciones fundamentales para construir líneas de tiempo sociales y conversaciones.&lt;/p>
&lt;h2 id="news">Noticias&lt;/h2>
&lt;p>&lt;strong>Primal Android Se Convierte en Firmador NIP-55&lt;/strong> - Construyendo sobre el &lt;a href="https://nostrcompass.org/es/newsletters/2025-12-17-newsletter/#primal-android">soporte de Nostr Connect de la semana pasada&lt;/a>, Primal ha implementado capacidades completas de firma local a través de ocho pull requests fusionados. La implementación incluye un &lt;code>LocalSignerContentProvider&lt;/code> completo que expone operaciones de firma a otras apps Android vía la interfaz de content provider de Android, siguiendo la especificación &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>. La arquitectura separa responsabilidades limpiamente: &lt;code>SignerActivity&lt;/code> maneja flujos de aprobación cara al usuario, &lt;code>LocalSignerService&lt;/code> gestiona operaciones en segundo plano, y un nuevo sistema de permisos permite a los usuarios controlar qué apps pueden solicitar firmas. Esto hace de Primal una alternativa viable a Amber para usuarios de Android que quieren mantener sus claves en una app mientras usan otras para diferentes experiencias Nostr.&lt;/p>
&lt;p>&lt;strong>Shopstr Zapsnags: Ventas Flash vía Lightning&lt;/strong> - El mercado nativo de Nostr introdujo &lt;a href="https://github.com/shopstr-eng/shopstr/pull/211">&amp;ldquo;Zapsnags&amp;rdquo;&lt;/a>, una función de venta flash que permite a los compradores adquirir artículos directamente desde su feed social con un solo zap. La implementación filtra notas kind 1 etiquetadas con &lt;code>#shopstr-zapsnag&lt;/code> y las renderiza como tarjetas de producto con un botón &amp;ldquo;Zap para Comprar&amp;rdquo; en lugar del flujo de carrito estándar. Cuando un comprador zapea, el sistema genera una solicitud de pago usando &lt;a href="https://nostrcompass.org/es/topics/nip-57/">NIP-57&lt;/a>, consulta el recibo de zap kind 9735 para confirmar el pago, luego encripta la información de envío usando gift wrapping &lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a> antes de enviarla de forma privada al vendedor. La función almacena detalles del comprador localmente para compras repetidas e incluye un panel de comerciante para crear listados de venta flash. Es una combinación inteligente de primitivos sociales, de pago y privacidad que demuestra cómo el diseño componible de Nostr permite patrones de comercio novedosos.&lt;/p>
&lt;p>&lt;strong>Mostro Introduce Fondo de Desarrollo&lt;/strong> - La plataforma de trading P2P de Bitcoin &lt;a href="https://nostrcompass.org/es/topics/nip-69/">NIP-69&lt;/a> &lt;a href="https://github.com/MostroP2P/mostro/pull/555">implementó tarifas de desarrollo configurables&lt;/a> para apoyar el mantenimiento sostenible. Los operadores pueden establecer &lt;code>dev_fee_percentage&lt;/code> entre 10-100% de la tarifa de trading de Mostro (por defecto 30%), que se enruta automáticamente a un fondo de desarrollo en cada operación exitosa. La implementación añade tres columnas de base de datos (&lt;code>dev_fee&lt;/code>, &lt;code>dev_fee_paid&lt;/code>, &lt;code>dev_fee_payment_hash&lt;/code>) para rastrear contribuciones y valida el porcentaje al inicio del daemon. La documentación técnica en &lt;a href="https://github.com/MostroP2P/mostro/blob/main/docs/DEV_FEE.md">&lt;code>docs/DEV_FEE.md&lt;/code>&lt;/a> explica el sistema. Este modelo opt-in permite a los operadores apoyar el desarrollo continuo mientras mantienen total transparencia sobre la asignación de tarifas.&lt;/p>
&lt;h2 id="nip-updates">Actualizaciones de NIP&lt;/h2>
&lt;p>Cambios recientes al &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Nuevos NIPs:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-a4/">NIP-A4&lt;/a> (Mensajes Públicos, kind 24)&lt;/strong> - Un nuevo kind para mensajes de pantalla de notificación diseñados para amplio soporte de clientes (&lt;a href="https://github.com/nostr-protocol/nips/pull/1988">#1988&lt;/a>). A diferencia de conversaciones con hilos, estos mensajes no tienen concepto de historial de chat o cadenas de mensajes. Usan etiquetas &lt;code>q&lt;/code> (citas) en lugar de etiquetas &lt;code>e&lt;/code> para evitar complicaciones de hilos, haciéndolos ideales para notificaciones públicas simples que aparecen en el feed de notificaciones de un destinatario sin crear estado de conversación.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Cambios Significativos:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-29/">NIP-29&lt;/a>&lt;/strong> - Clarificación mayor de semántica de grupos (&lt;a href="https://github.com/nostr-protocol/nips/pull/2106">#2106&lt;/a>). La etiqueta &lt;code>closed&lt;/code> ahora significa &amp;ldquo;incapaz de escribir&amp;rdquo; (solo lectura para no miembros), desacoplada de la mecánica de unirse. Una nueva etiqueta &lt;code>hidden&lt;/code> previene que los relays sirvan metadata o eventos de miembros a no miembros, permitiendo grupos verdaderamente privados que son indescubribles sin invitación fuera de banda. La etiqueta &lt;code>private&lt;/code> controla visibilidad de mensajes mientras permite metadata pública para descubrimiento.&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a>&lt;/strong> - Añadido kind 30006 para conjuntos de imágenes curadas (&lt;a href="https://github.com/nostr-protocol/nips/pull/2170">#2170&lt;/a>), siguiendo el patrón de 30004 (artículos) y 30005 (videos). Ya implementado en Nostria.&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>&lt;/strong> - Clarificado inicio de conexión para firmadores Android (&lt;a href="https://github.com/nostr-protocol/nips/pull/2166">#2166&lt;/a>). Los desarrolladores implementando sesiones multi-usuario estaban usando mal &lt;code>get_public_key&lt;/code> llamándolo desde procesos en segundo plano. La especificación actualizada recomienda llamarlo solo una vez durante la conexión inicial, previniendo un footgun de implementación común.&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-02-and-nip-10">Profundización en NIP: NIP-02 y NIP-10&lt;/h2>
&lt;p>Esta semana cubrimos dos NIPs esenciales para funcionalidad social: cómo los clientes saben a quién sigues y cómo se estructuran las conversaciones en hilos.&lt;/p>
&lt;h3 id="nip-02estopicsnip-02-lista-de-seguidos">&lt;a href="https://nostrcompass.org/es/topics/nip-02/">NIP-02&lt;/a>: Lista de Seguidos&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/02.md">NIP-02&lt;/a> define eventos kind 3, que almacenan tu lista de seguidos. Este mecanismo simple potencia el grafo social que hace posibles las líneas de tiempo.&lt;/p>
&lt;p>&lt;strong>Estructura:&lt;/strong> Un evento kind 3 contiene etiquetas &lt;code>p&lt;/code> listando pubkeys seguidas:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;d7a8f...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a3b9c...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1734912000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">3&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;91cf9..af5f&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://alicerelay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;alice&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;14aeb..8dad&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://bobrelay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;bob&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;612ae..982b&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;e4f8a...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Cada etiqueta &lt;code>p&lt;/code> tiene cuatro posiciones: el nombre de la etiqueta, la pubkey seguida (hex), un hint de relay URL opcional, y un &amp;ldquo;petname&amp;rdquo; opcional (un apodo local). El hint de relay dice a otros clientes dónde encontrar los eventos de ese usuario. El petname te permite asignar nombres memorables a contactos sin depender de sus nombres de pantalla auto-declarados.&lt;/p>
&lt;p>&lt;strong>Comportamiento reemplazable:&lt;/strong> Kind 3 cae en el rango reemplazable (0, 3, 10000-19999), así que los relays mantienen solo la versión más reciente por pubkey. Cuando sigues a alguien nuevo, tu cliente publica un nuevo kind 3 completo conteniendo todos tus seguidos más el nuevo. Esto significa que las listas de seguidos deben ser completas cada vez; no puedes publicar actualizaciones incrementales.&lt;/p>
&lt;p>&lt;strong>Construyendo líneas de tiempo:&lt;/strong> Para construir un feed home, los clientes obtienen el kind 3 del usuario, extraen todas las pubkeys de etiquetas &lt;code>p&lt;/code>, luego se suscriben a eventos kind 1 de esos autores:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>[&lt;span style="color:#e6db74">&amp;#34;REQ&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;home&amp;#34;&lt;/span>, {&lt;span style="color:#f92672">&amp;#34;kinds&amp;#34;&lt;/span>: [&lt;span style="color:#ae81ff">1&lt;/span>], &lt;span style="color:#f92672">&amp;#34;authors&amp;#34;&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;91cf9...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;14aeb...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;612ae...&amp;#34;&lt;/span>], &lt;span style="color:#f92672">&amp;#34;limit&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">50&lt;/span>}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El relay devuelve notas coincidentes, y el cliente las renderiza. Los hints de relay en kind 3 ayudan a los clientes a saber qué relays consultar para cada usuario seguido.&lt;/p>
&lt;p>&lt;strong>Petnames e identidad:&lt;/strong> El campo petname habilita un esquema de nombres descentralizado. En lugar de confiar en cualquier nombre que un usuario reclame en su perfil, puedes asignar tu propia etiqueta. Un cliente podría mostrar &amp;ldquo;alice (Mi Hermana)&amp;rdquo; donde &amp;ldquo;alice&amp;rdquo; viene de su perfil kind 0 y &amp;ldquo;Mi Hermana&amp;rdquo; es tu petname. Esto proporciona contexto que los nombres de usuario globales no pueden.&lt;/p>
&lt;p>&lt;strong>Consideraciones prácticas:&lt;/strong> Debido a que los eventos kind 3 son reemplazables y deben ser completos, los clientes deberían preservar etiquetas desconocidas al actualizar. Si otro cliente añadió etiquetas que tu cliente no entiende, sobrescribir ciegamente perdería esos datos. Añade nuevos seguidos en lugar de reconstruir desde cero.&lt;/p>
&lt;h3 id="nip-10estopicsnip-10-hilos-de-notas-de-texto">&lt;a href="https://nostrcompass.org/es/topics/nip-10/">NIP-10&lt;/a>: Hilos de Notas de Texto&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/10.md">NIP-10&lt;/a> especifica cómo las notas kind 1 se referencian entre sí para formar hilos de respuestas. Entender esto es esencial para construir vistas de conversación.&lt;/p>
&lt;p>&lt;strong>El problema:&lt;/strong> Cuando alguien responde a una nota, los clientes necesitan saber: ¿A qué es esto una respuesta? ¿Cuál es la raíz de la conversación? ¿A quién se debe notificar? NIP-10 responde estas preguntas a través de etiquetas &lt;code>e&lt;/code> (referencias de evento) y etiquetas &lt;code>p&lt;/code> (menciones de pubkey).&lt;/p>
&lt;p>&lt;strong>Etiquetas marcadas (preferidas):&lt;/strong> Los clientes modernos usan marcadores explícitos en etiquetas &lt;code>e&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f9c2e...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a3b9c...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1734912345&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;abc123...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;root&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;def456...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;reply&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;91cf9...&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;14aeb...&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;¡Buen punto! Estoy de acuerdo.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;b7d3f...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>El marcador &lt;code>root&lt;/code> apunta a la nota original que inició el hilo. El marcador &lt;code>reply&lt;/code> apunta a la nota específica que se está respondiendo. Si respondes directamente a la raíz, usa solo &lt;code>root&lt;/code> (no se necesita etiqueta &lt;code>reply&lt;/code>). La distinción importa para el renderizado: el &lt;code>reply&lt;/code> determina la indentación en una vista de hilo, mientras que &lt;code>root&lt;/code> agrupa todas las respuestas juntas.&lt;/p>
&lt;p>&lt;strong>Reglas de hilos:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Respuesta directa a raíz: Una etiqueta &lt;code>e&lt;/code> con marcador &lt;code>root&lt;/code>&lt;/li>
&lt;li>Respuesta a una respuesta: Dos etiquetas &lt;code>e&lt;/code>, una &lt;code>root&lt;/code> y una &lt;code>reply&lt;/code>&lt;/li>
&lt;li>El &lt;code>root&lt;/code> permanece constante a lo largo del hilo; &lt;code>reply&lt;/code> cambia según a qué estés respondiendo&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Etiquetas pubkey para notificaciones:&lt;/strong> Incluye etiquetas &lt;code>p&lt;/code> para todos los que deberían ser notificados. Como mínimo, etiqueta al autor de la nota a la que respondes. La convención es también incluir todas las etiquetas &lt;code>p&lt;/code> del evento padre (para que todos en la conversación estén al tanto), más cualquier usuario que @menciones en tu contenido.&lt;/p>
&lt;p>&lt;strong>Hints de relay:&lt;/strong> La tercera posición en etiquetas &lt;code>e&lt;/code> y &lt;code>p&lt;/code> puede contener una URL de relay donde ese evento o contenido de usuario podría encontrarse. Esto ayuda a los clientes a obtener el contenido referenciado incluso si no están conectados al relay original.&lt;/p>
&lt;p>&lt;strong>Etiquetas posicionales deprecadas:&lt;/strong> Las implementaciones tempranas de Nostr inferían significado de la posición de etiquetas en lugar de marcadores: la primera etiqueta &lt;code>e&lt;/code> era raíz, la última era respuesta, las del medio eran menciones. Este enfoque está deprecado porque crea ambigüedad. Si ves etiquetas &lt;code>e&lt;/code> sin marcadores, probablemente son de clientes antiguos. Las implementaciones modernas siempre deberían usar marcadores explícitos.&lt;/p>
&lt;p>&lt;strong>Construyendo vistas de hilo:&lt;/strong> Para mostrar un hilo, obtén el evento raíz, luego consulta todos los eventos con una etiqueta &lt;code>e&lt;/code> referenciando esa raíz:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>[&lt;span style="color:#e6db74">&amp;#34;REQ&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;thread&amp;#34;&lt;/span>, {&lt;span style="color:#f92672">&amp;#34;kinds&amp;#34;&lt;/span>: [&lt;span style="color:#ae81ff">1&lt;/span>], &lt;span style="color:#f92672">&amp;#34;#e&amp;#34;&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;&amp;lt;root-event-id&amp;gt;&amp;#34;&lt;/span>]}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Ordena resultados por &lt;code>created_at&lt;/code> y usa marcadores &lt;code>reply&lt;/code> para construir la estructura de árbol. Los eventos cuyo &lt;code>reply&lt;/code> apunta a la raíz son respuestas de nivel superior; los eventos cuyo &lt;code>reply&lt;/code> apunta a otra respuesta son respuestas anidadas.&lt;/p>
&lt;h2 id="releases">Lanzamientos&lt;/h2>
&lt;p>&lt;strong>Zeus v0.12.0&lt;/strong> - Construyendo sobre el &lt;a href="https://nostrcompass.org/es/newsletters/2025-12-17-newsletter/#zeus-lightning-wallet">soporte de pagos paralelos NWC de la semana pasada&lt;/a>, el &lt;a href="https://github.com/ZeusLN/zeus/releases/tag/v0.12.0">lanzamiento mayor&lt;/a> de la billetera Lightning incluye un servicio completo &lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a> Nostr Wallet Connect con soporte de relay personalizado y seguimiento de presupuesto. Una &lt;a href="https://github.com/ZeusLN/zeus/pull/3455">corrección de recarga de presupuesto&lt;/a> asegura que las conexiones usen límites actuales. &lt;a href="https://github.com/ZeusLN/zeus/pull/3460">Copiar dirección Lightning&lt;/a> ya no incluye el prefijo &lt;code>lightning:&lt;/code>, corrigiendo problemas de pegado en campos de perfil Nostr.&lt;/p>
&lt;p>&lt;strong>Amber v4.0.6&lt;/strong> - El firmador &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a> de Android &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.0.6">añade caché de rendimiento&lt;/a> a operaciones de firma y mejora el manejo de errores al desencriptar contenido malformado. La confiabilidad de conexión mejoró con lógica de reintentos para eventos de conexión de relay, y varias correcciones de crash abordan casos extremos alrededor de URIs &lt;code>nostrconnect://&lt;/code> inválidos e interacciones de pantalla de permisos.&lt;/p>
&lt;p>&lt;strong>nak v0.17.3&lt;/strong> - El &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.17.3">último lanzamiento&lt;/a> de la herramienta de línea de comandos Nostr restringe builds LMDB a Linux, corrigiendo problemas de compilación multiplataforma.&lt;/p>
&lt;p>&lt;strong>Aegis v0.3.4&lt;/strong> - El firmador Nostr multiplataforma &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.3.4">añade soporte&lt;/a> para el esquema URI &lt;code>nostrsigner:&lt;/code> definido en &lt;a href="https://nostrcompass.org/es/topics/nip-55/">NIP-55&lt;/a>, coincidiendo con el flujo de conexión de Amber. Los datos de relay local ahora pueden ser importados y exportados para respaldo, y el lanzamiento incluye correcciones de errores para errores de socket de relay y mejoras de UI para la interfaz de relay local.&lt;/p>
&lt;h2 id="notable-code-and-documentation-changes">Cambios notables de código y documentación&lt;/h2>
&lt;p>&lt;em>Estos son pull requests abiertos y trabajo en etapa temprana, perfectos para obtener retroalimentación antes de fusionarse. Si algo te llama la atención, ¡considera revisar o comentar!&lt;/em>&lt;/p>
&lt;h3 id="damus-ios">Damus (iOS)&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/pull/3469">Persistencia de lista de silenciados&lt;/a> corrige un problema donde las listas de silenciados se borraban en inicio frío. La corrección añade guardas para prevenir sobrescrituras accidentales durante la inicialización de la app. &lt;a href="https://github.com/damus-io/damus/pull/3457">Temporización de stream de perfil&lt;/a> elimina un retraso de ~1 segundo antes de que los perfiles en caché aparecieran. Anteriormente, las vistas esperaban a que las tareas de suscripción reiniciaran; ahora &lt;code>streamProfile()&lt;/code> inmediatamente devuelve datos en caché de NostrDB, eliminando la ventana donde pubkeys abreviadas e imágenes placeholder se mostraban.&lt;/p>
&lt;h3 id="white-noise-encrypted-messaging">White Noise (Mensajería Encriptada)&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/919">Streaming de mensajes en tiempo real&lt;/a> reemplaza el mecanismo de polling anterior con una arquitectura basada en streams. El nuevo &lt;code>ChatStreamNotifier&lt;/code> consume el stream de mensajes del SDK Rust directamente, manteniendo orden cronológico y manejando actualizaciones incrementales eficientemente. Las pruebas mostraron mejora significativa en capacidad de respuesta. Una &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/921">API de lista de chat&lt;/a> añade &lt;code>get_chat_list&lt;/code> para recuperar resúmenes de conversaciones, y una &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/905">corrección de ordenamiento estable&lt;/a> previene loops de reordenamiento de mensajes usando &lt;code>createdAt&lt;/code> con ID de mensaje como desempate.&lt;/p>
&lt;h3 id="ndk-library">NDK (Librería)&lt;/h3>
&lt;p>Dos pull requests entregaron mejoras dramáticas de rendimiento de caché. &lt;a href="https://github.com/nostr-dev-kit/ndk/pull/371">PR #371&lt;/a> corrigió un bug donde eventos leídos de caché SQLite se escribían inmediatamente de vuelta, causando 100% de escrituras duplicadas al iniciar la app. La corrección añade una guarda &lt;code>fromCache&lt;/code> e implementa verificación de duplicados O(1) vía un Set en memoria. Para conjuntos de resultados pequeños (&amp;lt;100 eventos), la transferencia JSON directa reemplaza la sobrecarga de codificación binaria. &lt;a href="https://github.com/nostr-dev-kit/ndk/pull/372">PR #372&lt;/a> eliminó llamadas innecesarias a &lt;code>seenEvent&lt;/code> para eventos en caché. La búsqueda en caché LRU costaba 0.24-0.64ms por evento; para 5,700 eventos en caché, esto añadía ~1.4 segundos de sobrecarga. Resultado: las consultas de caché bajaron de ~3,690ms a ~22ms (162x más rápido).&lt;/p>
&lt;h3 id="rust-nostr-library">rust-nostr (Librería)&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr/pull/1176">Soporte de REQ multi-filtro&lt;/a> fue restaurado después de ser eliminado en un refactor previo. El SDK nuevamente acepta &lt;code>Vec&amp;lt;Filter&amp;gt;&lt;/code> para solicitudes de suscripción, permitiendo consultas eficientes que combinan múltiples condiciones de filtro con lógica OR. &lt;a href="https://github.com/rust-nostr/nostr/pull/1156">Procedencia de relay&lt;/a> fue añadida a métodos &lt;code>stream_events*&lt;/code>, así que cada evento en stream ahora incluye el &lt;code>RelayUrl&lt;/code> de donde vino y un &lt;code>Result&lt;/code> indicando éxito o fallo, útil para rastrear confiabilidad de relay y depurar problemas de conexión. Una &lt;a href="https://github.com/rust-nostr/nostr/pull/1179">corrección de seguridad&lt;/a> eliminó la dependencia &lt;code>url-fork&lt;/code> siguiendo RUSTSEC-2024-0421, eliminando una vulnerabilidad conocida.&lt;/p>
&lt;h3 id="applesauce-library">Applesauce (Librería)&lt;/h3>
&lt;p>La librería TypeScript que potencia &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a> vio desarrollo significativo esta semana. Nuevos modelos incluyen un &lt;a href="https://github.com/hzrd149/applesauce">sistema de reacciones&lt;/a> y casting de grupos de usuarios. La funcionalidad de billetera se expandió con soporte NIP-60, una pestaña de envío, y herramientas mejoradas de recuperación de tokens. Una nueva propiedad &lt;code>user.directMessageRelays$&lt;/code> expone configuración de relay DM. Todas las acciones fueron refactorizadas para usar interfaces async (eliminando generadores async), y correcciones de bugs abordaron restauración de contenido encriptado y casos extremos de filtros de eventos basados en tiempo.&lt;/p>
&lt;h3 id="tenex-ai-agents">Tenex (Agentes IA)&lt;/h3>
&lt;p>El &lt;a href="https://github.com/tenex-chat/tenex">sistema de coordinación multi-agente&lt;/a> construido sobre Nostr introdujo arquitectura RAL (Request-Action-Lifecycle) en &lt;a href="https://github.com/pablof7z/tenex/pull/38">cinco PRs fusionados&lt;/a>. RAL permite a los agentes pausar cuando delegan tareas y reanudar cuando llegan resultados, con persistencia de estado en alcance de conversación. Las herramientas de delegación (&lt;code>delegate&lt;/code>, &lt;code>ask&lt;/code>, &lt;code>delegate_followup&lt;/code>, &lt;code>delegate_external&lt;/code>) ahora publican eventos Nostr y retornan señales de parada en lugar de bloquear. El refactor incluye migración a AI SDK v6, infraestructura de testing VCR para grabación determinística de interacciones LLM, y soporte de imágenes multimodal.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. ¿Construyendo algo? ¿Tienes noticias para compartir? ¿Quieres que cubramos tu proyecto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Contáctanos vía NIP-17 DM&lt;/a> o encuéntranos en Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #1</title><link>https://nostrcompass.org/es/newsletters/2025-12-17-newsletter/</link><pubDate>Mon, 15 Dec 2025 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/es/newsletters/2025-12-17-newsletter/</guid><description>&lt;p>Bienvenido a Nostr Compass, un boletín semanal dedicado al ecosistema del protocolo Nostr. Nuestra misión es mantener informados a desarrolladores, operadores de relays y constructores sobre desarrollos importantes en toda la red. Documentamos la evolución del protocolo con precisión técnica, neutralidad y profundidad, cubriendo desde propuestas de NIP hasta lanzamientos de clientes y mejores prácticas de implementación.&lt;/p>
&lt;p>Nostr Compass está inspirado en &lt;a href="https://bitcoinops.org/">Bitcoin Optech&lt;/a>, cuyo trabajo dedicado durante años avanzando el conocimiento técnico de Bitcoin estableció el estándar para boletines enfocados en protocolos. Estamos agradecidos por su ejemplo y esperamos aportar el mismo rigor al ecosistema Nostr.&lt;/p></description><content:encoded>&lt;p>Bienvenido a Nostr Compass, un boletín semanal dedicado al ecosistema del protocolo Nostr. Nuestra misión es mantener informados a desarrolladores, operadores de relays y constructores sobre desarrollos importantes en toda la red. Documentamos la evolución del protocolo con precisión técnica, neutralidad y profundidad, cubriendo desde propuestas de NIP hasta lanzamientos de clientes y mejores prácticas de implementación.&lt;/p>
&lt;p>Nostr Compass está inspirado en &lt;a href="https://bitcoinops.org/">Bitcoin Optech&lt;/a>, cuyo trabajo dedicado durante años avanzando el conocimiento técnico de Bitcoin estableció el estándar para boletines enfocados en protocolos. Estamos agradecidos por su ejemplo y esperamos aportar el mismo rigor al ecosistema Nostr.&lt;/p>
&lt;p>Este número inaugural establece nuestro formato semanal. Cada miércoles te traeremos actualizaciones de NIP, notas de lanzamiento, destacados de desarrollo y guías técnicas. Ya sea que estés construyendo un cliente, operando un relay o contribuyendo al protocolo, Nostr Compass pretende ser tu fuente confiable sobre lo que está sucediendo en el ecosistema.&lt;/p>
&lt;h2 id="qué-es-nostr">¿Qué es Nostr?&lt;/h2>
&lt;p>&lt;em>Dado que este es nuestro primer número, comenzamos con una introducción sobre cómo funciona Nostr. Los lectores habituales pueden &lt;a href="https://nostrcompass.org/es/newsletters/2025-12-17-newsletter/#noticias">saltar adelante&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Nostr (Notes and Other Stuff Transmitted by Relays) es un protocolo descentralizado para redes sociales y mensajería. A diferencia de las plataformas tradicionales, Nostr no tiene servidor central, ninguna empresa lo controla y no tiene un punto único de fallo. Los usuarios poseen su identidad a través de pares de claves criptográficas, y el contenido fluye a través de servidores relay independientes que cualquiera puede ejecutar.&lt;/p>
&lt;p>&lt;strong>Cómo funciona:&lt;/strong> Los usuarios generan un par de claves (una clave privada llamada nsec y una clave pública llamada npub). La clave privada firma mensajes llamados &amp;ldquo;eventos&amp;rdquo;, y la clave pública sirve como tu identidad. Los eventos se envían a relays, que los almacenan y reenvían a otros usuarios. Debido a que controlas tus claves, puedes cambiar entre clientes o relays sin perder tu identidad o seguidores.&lt;/p>
&lt;p>&lt;strong>Por qué importa:&lt;/strong> Nostr proporciona resistencia a la censura a través de la diversidad de relays (si un relay te banea, otros aún pueden servir tu contenido), portabilidad (tu identidad funciona en cualquier aplicación Nostr) e interoperabilidad (todos los clientes Nostr hablan el mismo protocolo). No hay algoritmo decidiendo qué ves, sin anuncios y sin recolección de datos.&lt;/p>
&lt;p>&lt;strong>El ecosistema hoy:&lt;/strong> Nostr soporta microblogging (como Twitter/X), contenido largo (como Medium), mensajes directos, mercados, streaming en vivo y más. Los clientes incluyen Damus (iOS), Amethyst (Android), Primal, Coracle y docenas más. La integración con Lightning Network permite pagos instantáneos a través de &amp;ldquo;zaps&amp;rdquo;. El protocolo continúa evolucionando a través de NIPs (Nostr Implementation Possibilities), especificaciones impulsadas por la comunidad que extienden la funcionalidad.&lt;/p>
&lt;h2 id="news">Noticias&lt;/h2>
&lt;p>&lt;strong>NIP-BE Fusionado: Soporte para Bluetooth Low Energy&lt;/strong> - Una nueva capacidad significativa &lt;a href="https://github.com/nostr-protocol/nips/pull/1979">aterrizó en el protocolo&lt;/a>. &lt;a href="https://nostrcompass.org/es/topics/nip-be/">NIP-BE&lt;/a> especifica cómo las aplicaciones Nostr pueden comunicarse y sincronizarse sobre Bluetooth Low Energy. Esto permite que las aplicaciones capaces de funcionar sin conexión sincronicen datos entre dispositivos cercanos sin conectividad a internet. La especificación adapta los patrones de relay WebSocket a las restricciones de BLE, usando compresión DEFLATE y mensajería fragmentada para manejar los tamaños MTU pequeños de BLE (20-256 bytes). Los dispositivos negocian roles basándose en la comparación de UUID, con el UUID más alto convirtiéndose en el servidor GATT.&lt;/p>
&lt;p>&lt;strong>MIP-05: Notificaciones Push que Preservan la Privacidad&lt;/strong> - El &lt;a href="https://nostrcompass.org/es/topics/marmot/">Protocolo Marmot&lt;/a> publicó &lt;a href="https://nostrcompass.org/es/topics/mip-05/">MIP-05&lt;/a> (&lt;a href="https://github.com/marmot-protocol/mips/blob/main/mip-05.md">especificación&lt;/a>), una especificación para notificaciones push que mantienen la privacidad. Los sistemas push tradicionales requieren que los servidores conozcan los tokens de dispositivo e identidades de usuario; MIP-05 resuelve esto encriptando tokens de dispositivo con ECDH+HKDF y ChaCha20-Poly1305, usando claves efímeras para prevenir la correlación. Un protocolo gossip de tres eventos (kinds 447-449) sincroniza tokens encriptados entre miembros del grupo, y las notificaciones usan gift wrapping de &lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a> con tokens señuelo para ocultar tamaños de grupo. Esto permite a WhiteNoise y otros clientes Marmot entregar notificaciones oportunas sin comprometer la privacidad del usuario.&lt;/p>
&lt;p>&lt;strong>Blossom BUD-10: Nuevo Esquema URI&lt;/strong> - El protocolo de medios &lt;a href="https://nostrcompass.org/es/topics/blossom/">Blossom&lt;/a> está obteniendo un esquema URI personalizado vía &lt;a href="https://nostrcompass.org/es/topics/bud-10/">BUD-10&lt;/a> (&lt;a href="https://github.com/hzrd149/blossom/blob/master/buds/10.md">especificación&lt;/a>). El nuevo formato &lt;code>blossom:&amp;lt;sha256&amp;gt;.ext&lt;/code> incorpora hash de archivo, extensión, tamaño, múltiples hints de servidor y pubkeys de autor para descubrimiento de servidor &lt;a href="https://nostrcompass.org/es/topics/bud-03/">BUD-03&lt;/a>. Esto hace que los enlaces de blob sean más resilientes que las URLs HTTP estáticas al permitir fallback automático entre servidores.&lt;/p>
&lt;p>&lt;strong>Actualizaciones del Mercado Shopstr&lt;/strong> - El mercado nativo de Nostr &lt;a href="https://github.com/shopstr-eng/shopstr/pull/202">implementó Nostr Wallet Connect&lt;/a> (&lt;a href="https://nostrcompass.org/es/topics/nip-47/">NIP-47&lt;/a>) para pagos, &lt;a href="https://github.com/shopstr-eng/shopstr/pull/203">añadió expiración de listados&lt;/a> usando &lt;a href="https://nostrcompass.org/es/topics/nip-40/">NIP-40&lt;/a>, e introdujo &lt;a href="https://github.com/shopstr-eng/shopstr/pull/210">códigos de descuento&lt;/a> para vendedores.&lt;/p>
&lt;h2 id="nip-updates">Actualizaciones de NIP&lt;/h2>
&lt;p>Cambios recientes al &lt;a href="https://github.com/nostr-protocol/nips">repositorio de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Nuevos NIPs:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-be/">NIP-BE&lt;/a>&lt;/strong> - Mensajería Bluetooth Low Energy y sincronización de dispositivos (&lt;a href="https://github.com/nostr-protocol/nips/pull/1979">#1979&lt;/a>)&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-63/">NIP-63&lt;/a>&lt;/strong> - Estándar de Paywall/Contenido Premium para manejar contenido con acceso restringido dentro del protocolo (&lt;a href="https://github.com/nostr-protocol/nips/pull/2156">#2156&lt;/a>)&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Cambios Significativos:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-24/">NIP-24&lt;/a>&lt;/strong> - Añadido array opcional &lt;code>languages&lt;/code> a metadatos de usuario Kind 0, permitiendo a los usuarios especificar múltiples idiomas preferidos usando etiquetas IETF BCP 47 para mejor descubrimiento de contenido y coincidencia de relay (&lt;a href="https://github.com/nostr-protocol/nips/pull/2159">#2159&lt;/a>)&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-69/">NIP-69&lt;/a>&lt;/strong> - Añadido soporte de expiración de órdenes para trading P2P con etiquetas &lt;code>expires_at&lt;/code> y &lt;code>expiration&lt;/code> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2118">#2118&lt;/a>)&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-59/">NIP-59&lt;/a>&lt;/strong> - Los eventos gift wrap ahora pueden ser eliminados vía solicitudes NIP-09/NIP-62 (&lt;a href="https://github.com/nostr-protocol/nips/pull/2131">#2131&lt;/a>)&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-51/">NIP-51&lt;/a>&lt;/strong> - Eliminadas etiquetas de hashtag y URL de marcadores genéricos; hashtags ahora usan kind 30015 (&lt;a href="https://github.com/nostr-protocol/nips/pull/2133">#2133&lt;/a>)&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-18/">NIP-18&lt;/a>&lt;/strong> - Mejorados los reposts genéricos para eventos reemplazables con soporte de etiqueta &lt;code>a&lt;/code> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2132">#2132&lt;/a>)&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-17/">NIP-17&lt;/a>&lt;/strong> - Redacción refinada y añadido soporte de reacción kind 7 a DMs (&lt;a href="https://github.com/nostr-protocol/nips/pull/2098">#2098&lt;/a>)&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/es/topics/nip-11/">NIP-11&lt;/a>&lt;/strong> - Añadido campo &lt;code>self&lt;/code> para identificación de clave pública del relay (&lt;a href="https://github.com/nostr-protocol/nips/pull/1764">#1764&lt;/a>)&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-01-and-nip-19">Profundización en NIP: NIP-01 y NIP-19&lt;/h2>
&lt;p>Para este número inaugural, cubrimos dos NIPs fundamentales que todo desarrollador de Nostr debería entender. Consulta nuestras páginas de temas para &lt;a href="https://nostrcompass.org/es/topics/nip-01/">NIP-01&lt;/a> y &lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19&lt;/a>.&lt;/p>
&lt;h3 id="nip-01-protocolo-básico">NIP-01: Protocolo Básico&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-01/">NIP-01&lt;/a> define el protocolo central. Todo en Nostr se construye sobre esta especificación.&lt;/p>
&lt;p>&lt;strong>Los eventos&lt;/strong> son el único tipo de objeto. Cada evento contiene:&lt;/p>
&lt;ul>
&lt;li>&lt;code>id&lt;/code>: Hash SHA256 del evento serializado (el identificador único del evento)&lt;/li>
&lt;li>&lt;code>pubkey&lt;/code>: La clave pública del creador (hex de 32 bytes, secp256k1)&lt;/li>
&lt;li>&lt;code>created_at&lt;/code>: Marca de tiempo Unix&lt;/li>
&lt;li>&lt;code>kind&lt;/code>: Entero que categoriza el tipo de evento&lt;/li>
&lt;li>&lt;code>tags&lt;/code>: Array de arrays para metadatos&lt;/li>
&lt;li>&lt;code>content&lt;/code>: La carga útil (la interpretación depende del kind)&lt;/li>
&lt;li>&lt;code>sig&lt;/code>: Firma Schnorr probando que la pubkey creó este evento&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Los kinds&lt;/strong> determinan cómo los relays almacenan eventos:&lt;/p>
&lt;ul>
&lt;li>Eventos regulares (1, 2, 4-44, 1000-9999): Almacenados normalmente, todas las versiones se mantienen&lt;/li>
&lt;li>Eventos reemplazables (0, 3, 10000-19999): Solo se mantiene el más reciente por pubkey&lt;/li>
&lt;li>Eventos efímeros (20000-29999): No almacenados, solo reenviados a suscriptores&lt;/li>
&lt;li>Eventos direccionables (30000-39999): Más reciente por combinación de pubkey + kind + etiqueta &lt;code>d&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Kind 0 son metadatos de usuario (perfil), kind 1 es una nota de texto (la publicación básica), kind 3 es la lista de seguidos.&lt;/p>
&lt;p>&lt;strong>Kind 1: Notas de Texto&lt;/strong> son el corazón del Nostr social. Un evento kind 1 es una publicación corta, similar a un tweet. El campo &lt;code>content&lt;/code> contiene el texto del mensaje (texto plano, aunque los clientes a menudo renderizan markdown). Las etiquetas permiten respuestas, menciones y referencias:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;32-byte-hex&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;32-byte-hex&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1734480000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;¡Hola Nostr! Mira el trabajo de @jb55 en Damus.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;replied-to-event-id&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;reply&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;jb55-pubkey&amp;gt;&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;64-byte-hex&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>La etiqueta &lt;code>e&lt;/code> con marcador &amp;ldquo;reply&amp;rdquo; indica que esto es una respuesta (ver &lt;a href="https://nostrcompass.org/es/topics/nip-10/">NIP-10&lt;/a> para convenciones de hilos). La etiqueta &lt;code>p&lt;/code> menciona a un usuario, permitiendo a los clientes notificarle y renderizar su nombre en lugar de la pubkey cruda. Los clientes obtienen el evento kind 0 del usuario mencionado para obtener su nombre de pantalla e imagen.&lt;/p>
&lt;p>Para construir una línea de tiempo, un cliente se suscribe a eventos kind 1 de pubkeys seguidas: &lt;code>[&amp;quot;REQ&amp;quot;, &amp;quot;feed&amp;quot;, {&amp;quot;kinds&amp;quot;: [1], &amp;quot;authors&amp;quot;: [&amp;quot;&amp;lt;pubkey1&amp;gt;&amp;quot;, &amp;quot;&amp;lt;pubkey2&amp;gt;&amp;quot;, ...], &amp;quot;limit&amp;quot;: 50}]&lt;/code>. El relay devuelve notas coincidentes, y el cliente las renderiza cronológicamente.&lt;/p>
&lt;p>&lt;strong>Los eventos direccionables&lt;/strong> (30000-39999) funcionan como eventos reemplazables pero usan una etiqueta &lt;code>d&lt;/code> como identificador adicional. El relay mantiene solo la última versión de cada combinación pubkey + kind + d-tag. Esto permite artículos editables, listados de productos, o cualquier caso donde necesites múltiples elementos reemplazables por usuario.&lt;/p>
&lt;p>&lt;strong>Las etiquetas&lt;/strong> son arrays donde el primer elemento es el nombre de la etiqueta. Las etiquetas estándar de una sola letra (&lt;code>e&lt;/code>, &lt;code>p&lt;/code>, &lt;code>a&lt;/code>, &lt;code>d&lt;/code>, &lt;code>t&lt;/code>) son indexadas por relays para consultas eficientes. Por ejemplo, &lt;code>[&amp;quot;e&amp;quot;, &amp;quot;&amp;lt;event-id&amp;gt;&amp;quot;]&lt;/code> referencia otro evento, &lt;code>[&amp;quot;p&amp;quot;, &amp;quot;&amp;lt;pubkey&amp;gt;&amp;quot;]&lt;/code> referencia un usuario.&lt;/p>
&lt;p>&lt;strong>Comunicación Cliente-Relay&lt;/strong> usa conexiones WebSocket con arrays JSON como mensajes. El primer elemento identifica el tipo de mensaje.&lt;/p>
&lt;p>De cliente a relay:&lt;/p>
&lt;ul>
&lt;li>&lt;code>[&amp;quot;EVENT&amp;quot;, &amp;lt;event&amp;gt;]&lt;/code> - Publica un evento al relay&lt;/li>
&lt;li>&lt;code>[&amp;quot;REQ&amp;quot;, &amp;lt;sub-id&amp;gt;, &amp;lt;filter&amp;gt;, ...]&lt;/code> - Suscribirse a eventos que coincidan con el/los filtro(s)&lt;/li>
&lt;li>&lt;code>[&amp;quot;CLOSE&amp;quot;, &amp;lt;sub-id&amp;gt;]&lt;/code> - Terminar una suscripción&lt;/li>
&lt;/ul>
&lt;p>De relay a cliente:&lt;/p>
&lt;ul>
&lt;li>&lt;code>[&amp;quot;EVENT&amp;quot;, &amp;lt;sub-id&amp;gt;, &amp;lt;event&amp;gt;]&lt;/code> - Entrega un evento que coincide con tu suscripción&lt;/li>
&lt;li>&lt;code>[&amp;quot;EOSE&amp;quot;, &amp;lt;sub-id&amp;gt;]&lt;/code> - &amp;ldquo;Fin de eventos almacenados&amp;rdquo; - el relay ha enviado todos los coincidentes históricos y ahora solo enviará nuevos eventos conforme lleguen&lt;/li>
&lt;li>&lt;code>[&amp;quot;OK&amp;quot;, &amp;lt;event-id&amp;gt;, &amp;lt;true|false&amp;gt;, &amp;lt;message&amp;gt;]&lt;/code> - Reconoce si un evento fue aceptado o rechazado (y por qué)&lt;/li>
&lt;li>&lt;code>[&amp;quot;NOTICE&amp;quot;, &amp;lt;message&amp;gt;]&lt;/code> - Mensaje legible por humanos del relay&lt;/li>
&lt;/ul>
&lt;p>El flujo de suscripción: el cliente envía &lt;code>REQ&lt;/code> con un ID de suscripción y filtro, el relay responde con mensajes &lt;code>EVENT&lt;/code> coincidentes, luego envía &lt;code>EOSE&lt;/code> para señalar que está al día con el historial. Después de &lt;code>EOSE&lt;/code>, cualquier nuevo mensaje &lt;code>EVENT&lt;/code> es en tiempo real. El cliente envía &lt;code>CLOSE&lt;/code> cuando termina.&lt;/p>
&lt;p>&lt;strong>Los filtros&lt;/strong> especifican qué eventos recuperar. Un objeto filtro puede incluir: &lt;code>ids&lt;/code> (IDs de evento), &lt;code>authors&lt;/code> (pubkeys), &lt;code>kinds&lt;/code> (tipos de evento), &lt;code>#e&lt;/code>/&lt;code>#p&lt;/code>/&lt;code>#t&lt;/code> (valores de etiqueta), &lt;code>since&lt;/code>/&lt;code>until&lt;/code> (marcas de tiempo), y &lt;code>limit&lt;/code> (máximo de resultados). Todas las condiciones dentro de un filtro usan lógica AND. Puedes incluir múltiples filtros en un &lt;code>REQ&lt;/code>, y se combinan con lógica OR - útil para obtener diferentes tipos de evento en una suscripción.&lt;/p>
&lt;h3 id="nip-19-identificadores-codificados-en-bech32">NIP-19: Identificadores Codificados en Bech32&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/es/topics/nip-19/">NIP-19&lt;/a> define los formatos amigables para humanos que ves en todas partes en Nostr: npub, nsec, note, y más. Estos no se usan en el protocolo mismo (que usa hex), pero son esenciales para compartir y mostrar.&lt;/p>
&lt;p>&lt;strong>¿Por qué bech32?&lt;/strong> Las claves hex crudas son propensas a errores al copiar y difíciles de distinguir visualmente. La codificación bech32 añade un prefijo legible y suma de verificación. Puedes distinguir inmediatamente un &lt;code>npub&lt;/code> (clave pública) de un &lt;code>nsec&lt;/code> (clave privada) o &lt;code>note&lt;/code> (ID de evento).&lt;/p>
&lt;p>&lt;strong>Formatos básicos&lt;/strong> codifican valores crudos de 32 bytes:&lt;/p>
&lt;ul>
&lt;li>&lt;code>npub&lt;/code> - Clave pública (tu identidad, segura para compartir)&lt;/li>
&lt;li>&lt;code>nsec&lt;/code> - Clave privada (mantener en secreto, usada para firmar)&lt;/li>
&lt;li>&lt;code>note&lt;/code> - ID de evento (referencia un evento específico)&lt;/li>
&lt;/ul>
&lt;p>Ejemplo: La pubkey hex &lt;code>3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d&lt;/code> se convierte en &lt;code>npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Identificadores compartibles&lt;/strong> incluyen metadatos usando codificación TLV (Type-Length-Value):&lt;/p>
&lt;ul>
&lt;li>&lt;code>nprofile&lt;/code> - Perfil con hints de relay (ayuda a los clientes a encontrar al usuario)&lt;/li>
&lt;li>&lt;code>nevent&lt;/code> - Evento con hints de relay, pubkey de autor y kind&lt;/li>
&lt;li>&lt;code>naddr&lt;/code> - Referencia de evento direccionable (pubkey + kind + d-tag + relays)&lt;/li>
&lt;/ul>
&lt;p>Estos resuelven un problema clave: si alguien comparte un ID de nota, ¿cómo sabes qué relay lo tiene? Un &lt;code>nevent&lt;/code> agrupa el ID de evento con relays sugeridos, haciendo más confiable compartir.&lt;/p>
&lt;p>&lt;strong>Importante:&lt;/strong> Nunca uses formatos bech32 en el protocolo mismo. Los eventos, mensajes de relay y respuestas NIP-05 deben usar hex. Bech32 es puramente para interfaces humanas: visualización, copiar/pegar, códigos QR y URLs.&lt;/p>
&lt;h2 id="releases">Lanzamientos&lt;/h2>
&lt;p>&lt;strong>Amber v4.0.4&lt;/strong> - La aplicación firmadora de Android corrige un NullPointerException, mejora el rendimiento en la pantalla de actividad y añade traducciones para algunos tipos de evento. El lanzamiento anterior v4.0.3 añadió UI renovada de encriptación/desencriptación, exportación/importación de cuentas, manejo de relay por cuenta, soporte de ping bunker y reporte de errores. &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.0.4">Lanzamiento&lt;/a>&lt;/p>
&lt;p>&lt;strong>Coracle 0.6.28&lt;/strong> - Lanzamiento de corrección de errores para el cliente web. Corregidos feeds de temas, manejo de imágenes cuando imgproxy está deshabilitado, y linkificación de fuentes de resaltado que no son enlaces. &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.28">Lanzamiento&lt;/a>&lt;/p>
&lt;p>&lt;strong>Flotilla v1.6.2&lt;/strong> - El cliente de comunidades estilo Discord corrige scroll modal y problemas de estilo. Lanzamientos anteriores en este ciclo añadieron insignias y sonidos opcionales para notificaciones, renderizado de enlaces mejorado, escaneo de códigos QR para enlaces de invitación, y configuración simplificada de billetera. &lt;a href="https://github.com/coracle-social/flotilla/releases/tag/1.6.2">Lanzamiento&lt;/a>&lt;/p>
&lt;p>&lt;strong>nak v0.17.2&lt;/strong> - La herramienta de línea de comandos Nostr añadió un nuevo comando &lt;code>nip&lt;/code> para búsqueda rápida de referencia NIP, más correcciones para manejo de repositorio git y procesamiento de eventos stdin. &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.17.2">Lanzamiento&lt;/a>&lt;/p>
&lt;p>&lt;strong>White Noise v0.2.1&lt;/strong> - Lanzamiento mayor para la aplicación de mensajería encriptada basada en MLS añadiendo compartir imágenes vía Blossom, sincronización en segundo plano, notificaciones push, localización en 8 idiomas, y gestión de miembros de grupo. &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v0.2.1%2B14">Lanzamiento&lt;/a>&lt;/p>
&lt;p>&lt;strong>Amethyst v1.04.2&lt;/strong> - Lanzamiento con nuevas características introduciendo listas/packs de seguidos, nuevos filtros de línea de tiempo, galería de imágenes, y compresión de video H.265 (archivos 50% más pequeños). Migración completa a Kotlin Multiplatform. &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.04.2">Lanzamiento&lt;/a>&lt;/p>
&lt;p>&lt;strong>Mostro v0.15.5&lt;/strong> - Actualización de la plataforma de trading P2P con soporte de expiración de órdenes NIP-69 y respuestas mejoradas de historial de operaciones. &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.15.5">Lanzamiento&lt;/a>&lt;/p>
&lt;p>&lt;strong>Nosflare v8.9.26&lt;/strong> - Relay Nostr serverless construido en infraestructura Cloudflare. Este lanzamiento entrega un hotfix crítico que aborda un error que podía causar fallos de websocket, asegurando conexiones más estables para usuarios y aplicaciones que dependen del relay. &lt;a href="https://github.com/Spl0itable/nosflare/releases/tag/v8.9.26">Lanzamiento&lt;/a>&lt;/p>
&lt;p>&lt;strong>Noscall v0.4.1&lt;/strong> - Aplicación de llamadas de audio y video seguras basada en Nostr. Este lanzamiento mejora la UI pop-up en la página Me y corrige varios problemas conocidos, resultando en mejor estabilidad y confiabilidad de llamadas. &lt;a href="https://github.com/sanah9/noscall/releases/tag/v0.4.1-release">Lanzamiento&lt;/a>&lt;/p>
&lt;p>&lt;strong>Gitplaza v0.25.0&lt;/strong> - Cliente de escritorio Nostr enfocado en actividad relacionada con Git. Este lanzamiento introduce un filtro de kind avanzado para el feed del inbox, incluye zaps regulares en filtros, y simplifica el formato de texto de pestañas. Las mejoras de rendimiento optimizan la carga del árbol de comentarios, reducen consultas innecesarias a base de datos, y usan ramas de comentarios en caché para visualización más rápida. &lt;a href="https://codeberg.org/dluvian/gitplaza/releases/tag/v0.25.0">Lanzamiento&lt;/a>&lt;/p>
&lt;h2 id="notable-code-and-documentation-changes">Cambios notables de código y documentación&lt;/h2>
&lt;h3 id="damus-ios">Damus (iOS)&lt;/h3>
&lt;p>Enfoque en estabilidad con correcciones de crashes y UI: &lt;a href="https://github.com/damus-io/damus/pull/3377">corrección de salto de cursor&lt;/a> para la vista de composición, &lt;a href="https://github.com/damus-io/damus/pull/3366">rediseño de interfaz NostrDB&lt;/a> usando tipos &lt;code>~Copyable&lt;/code> de Swift para seguridad de transacciones, &lt;a href="https://github.com/damus-io/damus/pull/3341">estabilidad de UI de hilos&lt;/a> corrigiendo reinstanciación de barra de acciones, &lt;a href="https://github.com/damus-io/damus/pull/3346">congelación de lista de silenciados&lt;/a> por ciclos de AttributeGraph, y &lt;a href="https://github.com/damus-io/damus/pull/3334">crash de perfil&lt;/a> por limpieza de transacciones entre hilos. También añadió directrices &lt;a href="https://github.com/damus-io/damus/pull/3293">AGENTS.md&lt;/a> para agentes de código IA.&lt;/p>
&lt;h3 id="notedeck-desktop-mobile">Notedeck (Escritorio/Móvil)&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck/pull/1191">Almacenamiento seguro de claves&lt;/a> mueve nsec al almacén seguro del SO con migración automática. &lt;a href="https://github.com/damus-io/notedeck/pull/1201">Filtrado de notas futuras&lt;/a> oculta eventos fechados 24+ horas adelante (anti-spam). &lt;a href="https://github.com/damus-io/notedeck/pull/1183">Copia de nevent&lt;/a> ahora incluye hints de relay. También: &lt;a href="https://github.com/damus-io/notedeck/pull/1212">adición rápida de columna de perfil&lt;/a>, &lt;a href="https://github.com/damus-io/notedeck/pull/1208">navegación por teclado&lt;/a>, &lt;a href="https://github.com/damus-io/notedeck/pull/1210">optimización de carga de medios&lt;/a>.&lt;/p>
&lt;h3 id="amethyst-android">Amethyst (Android)&lt;/h3>
&lt;p>Soporte de &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1555">firma remota NIP-46&lt;/a> para Nostr Connect. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1586">Organización de marcadores&lt;/a> con gestión de listas públicas/privadas. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1596">Corrección de compatibilidad strfry&lt;/a> para casos extremos de análisis de info de relay.&lt;/p>
&lt;h3 id="primal-android">Primal (Android)&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/788">Deep links de Nostr Connect&lt;/a> para URLs &lt;code>nostrconnect://&lt;/code>. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/787">Inicio de sesión remoto&lt;/a> vía escaneo QR para conexiones bunker. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/783">Corrección de condición de carrera de conexión&lt;/a>.&lt;/p>
&lt;h3 id="white-noise-encrypted-messaging">White Noise (Mensajería Encriptada)&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/890">Corrección de retención de datos de app&lt;/a> desactiva auto-backup de Android para privacidad. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/861">Comportamiento de scroll de chat&lt;/a> preserva la posición al leer historial.&lt;/p>
&lt;h3 id="zeus-lightning-wallet">Zeus (Billetera Lightning)&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZeusLN/zeus/pull/3407">Pagos paralelos NIP-47&lt;/a> para mayor rendimiento en zaps por lotes.&lt;/p>
&lt;h2 id="mejores-prácticas-para-desarrolladores">Mejores Prácticas para Desarrolladores&lt;/h2>
&lt;p>&lt;strong>Valida Eventos Auth de Forma Defensiva&lt;/strong> - go-nostr corrigió un &lt;a href="https://github.com/nbd-wtf/go-nostr/pull/182">panic en validación NIP-42&lt;/a> cuando faltaba la etiqueta relay. Siempre verifica las etiquetas requeridas antes de acceder a ellas, incluso en flujos auth donde esperas eventos bien formados.&lt;/p>
&lt;p>&lt;strong>Limita Tasa por Estado de Autenticación&lt;/strong> - khatru añadió &lt;a href="https://github.com/fiatjaf/khatru/pull/57">limitación de tasa basada en NIP-42&lt;/a>, permitiendo a los relays aplicar diferentes límites para conexiones autenticadas vs anónimas. Considera límites escalonados basados en estado auth en lugar de restricciones generales.&lt;/p>
&lt;p>&lt;strong>Usa Paginación por Cursor para Listas&lt;/strong> - Blossom &lt;a href="https://github.com/hzrd149/blossom/pull/65">reemplazó paginación basada en fecha&lt;/a> con paginación basada en cursor en el endpoint &lt;code>/list&lt;/code>. La paginación basada en fecha falla cuando items comparten timestamps; los cursores proporcionan iteración confiable.&lt;/p>
&lt;p>&lt;strong>Validación de Esquema para Tipos de Evento&lt;/strong> - El proyecto &lt;a href="https://github.com/nostrability/schemata">nostrability/schemata&lt;/a> proporciona esquemas JSON para validar eventos compatibles con NIP. Considera integrar validación de esquema en desarrollo para detectar eventos malformados antes de que lleguen a los relays.&lt;/p>
&lt;hr>
&lt;p>Eso es todo por esta semana. ¿Construyendo algo? ¿Tienes noticias para compartir? ¿Quieres que cubramos tu proyecto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Contáctanos vía NIP-17 DM&lt;/a> o encuéntranos en Nostr.&lt;/p></content:encoded></item></channel></rss>