Un cliente Nostr web integrado en el framework ExtFW. Resumen de funcionalidades, soporte de NIPs y comparativa con otros clientes.
Cliente Web · Arquitectura Abierta · Self-hostedNoxtr es un cliente Nostr web integrado en el framework PHP ExtFW. Funciona como un módulo dentro de un sitio web auto-alojado, combinando el acceso al protocolo Nostr con funcionalidades del servidor como cuentas de usuario, hosting de direcciones Lightning y verificación de identidad NIP-05.
Está diseñado como una aplicación de página única sin frameworks JavaScript externos — vanilla JS con un helper DOM ligero (wquery).
Se ejecuta en tu propio servidor (Apache/nginx, PHP, MySQL/SQLite). Tú controlas tus datos, tu lista de relays y tus endpoints Lightning.
Sin React, sin Vue, sin npm, sin paso de compilación. JavaScript vanilla puro en un solo archivo. Criptografía vía noble-secp256k1 y noble-ciphers.
La verificación NIP-05 y las direcciones Lightning LNURL-pay se auto-configuran desde las cuentas de usuario del servidor.
Soporta extensiones de navegador NIP-07, clave privada nsec, NIP-46 Nostr Connect (firma remota con QR) y modo sólo lectura con npub.
Posibilidades de Implementación de Nostr (NIPs) soportadas por Noxtr:
| Kind | Descripción | Uso |
|---|---|---|
| 0 | Metadatos de perfil | Nombre, avatar, banner, bio, nip05, lud16 |
| 1 | Nota de texto | Contenido principal del feed, hashtags, menciones |
| 3 | Lista de contactos | Seguir/dejar de seguir, petnames, hints de relay |
| 4 | DM cifrado | AES-CBC con IV, descifrado vía NIP-07 o privkey |
| 5 | Eliminación | Borrar notas propias y mensajes de canal propios (kind 42) |
| 6 | Repost | Compartir notas |
| 7 | Reacción | Like/unlike en notas |
| 40 | Crear canal | Canal de chat público NIP-28 |
| 41 | Metadatos de canal | Nombre, descripción, imagen del canal |
| 42 | Mensaje de canal | Mensajes en canales públicos (eliminación propia vía kind 5) |
| 1984 | Reporte | Reportes de spam NIP-56 |
| 30023 | Artículo (NIP-23) | Contenido largo: mezclado en el feed con badge “Read”, vista completa con Markdown, composición de artículos |
| 38383 | Orden P2P (NIP-69) | Órdenes de compraventa Bitcoin de robots Mostro. Tab P2P ₿ con listado de órdenes, explicación didáctica y flujo de compra guiado |
| 9734 | Solicitud de Zap | Metadatos de pago Lightning |
| 9735 | Recibo de Zap | Confirmación de pago desde el servidor |
| 24133 | Nostr Connect | Firma remota NIP-46 |
Global, Siguiendo, Seguidores, Temas (suscripciones por hashtag) y Tendencias (ranking por engagement).
DMs cifrados con NIP-04 con hilos de conversación, caché en base de datos local y descifrado vía extensión.
Crear, unirse y chatear en canales públicos. Metadatos de canal, fijar canales, enlaces de invitación y configuración exclusiva del creador. Eliminación de mensajes propios (NIP-09).
Contenido largo (kind 30023) mezclado en el feed con badge “Read” y deduplicación. Vista completa con renderizado Markdown. Compositor con campos de título, resumen, imagen y etiquetas.
Vista completa de hilos con marcadores root/reply, conteo de respuestas, orden cronológico y enlaces permanentes.
Zaps NIP-57 con transferencias internas entre usuarios registrados y facturas externas vía BTCPay y LNURL-pay.
Infraestructura Lightning auto-alojada vía BTCPay Server. El endpoint LNURL-pay sirve facturas, crea solicitudes de pago BOLT11 y procesa recibos de zap (kind 9735) con firmas Schnorr del servidor. Los sats recibidos se acumulan en el balance del usuario para transferencias internas o retiro.
Búsqueda de texto NIP-50 con fallback multi-relay. Búsqueda de perfiles con @usuario. Detección de entidades npub/note/nevent.
Suscríbete a hashtags (#bitcoin, #nostr, etc.) y filtra tu feed. Temas sugeridos, activación masiva, filtro de tendencias.
Guarda notas como favoritos localmente. Silencia usuarios con reporte de spam NIP-56 opcional. Gestión de silenciados en ajustes.
Imágenes embebidas (carga diferida), reproductores de vídeo, embeds de YouTube/Vimeo. Detección de dominios caídos con reintento a las 24h.
Editar nombre, bio, avatar, banner. NIP-05 y dirección Lightning auto-configurados desde la cuenta del servidor.
Añadir/eliminar/activar relays. Estado de conexión en tiempo real. Reconexión con backoff exponencial. Rebalanceo de suscripciones.
Tab dedicado para comprar Bitcoin sin inter/mediarios usando el protocolo Mostro sobre Nostr. Muestra órdenes de venta (kind 38383, NIP-69) con explicación didáctica en lenguaje llano. Flujo guiado: tomar orden → DM cifrado al robot → enviar factura Lightning de cobro → recibir sats. Sin nodo Lightning propio; compatible con Phoenix, Breez, Zeus.
Parsea y renderiza broadcasts de perfiles de redes mesh AR (ar_profile, ar_collaboration) como tarjetas visuales con avatar, ubicación y acciones sociales.
Una comparación imparcial de Noxtr frente a clientes Nostr establecidos. Cada cliente tiene fortalezas diferentes — esta tabla pretende ser factual, no promocional.
| Noxtr | Damus | Amethyst | Primal | Snort | Iris | Coracle | Nostur | |
|---|---|---|---|---|---|---|---|---|
| Plataforma | Web | iOS | Android | Web/iOS/Android | Web | Web/Multi | Web (PWA) | iOS/macOS |
| Código abierto | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Auto-alojado | ✓ | — | — | — | ✓ | ✓ | ✓ | — |
| Sin paso de compilación | ✓ | n/a | n/a | — | — | — | — | n/a |
| NIPs documentados | 18 | ~15 | 60+ | ~20 | 42 | ~15 | ~15 | ~15 |
| NIP | Noxtr | Damus | Amethyst | Primal | Snort | Iris | Coracle | Nostur | |
|---|---|---|---|---|---|---|---|---|---|
| 01 | Protocolo básico | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 02 | Lista de contactos | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 04 | DMs cifrados (legacy) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | lectura | ✓ |
| 05 | Identidad DNS | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 07 | Firmante del navegador | ✓ | n/a | n/a | ✓ | ✓ | ✓ | ✓ | n/a |
| 09 | Eliminación de eventos | ✓ | ~ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 10 | Hilos de respuesta | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 19 | Entidades Bech32 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 23 | Contenido largo (artículos) | ✓ | — | ✓ | ✓ | ✓ | — | — | — |
| 25 | Reacciones | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 28 | Canales públicos | ✓ | — | ✓ | — | ✓ | — | — | — |
| 44 | Cifrado versionado | ✓ | ~ | ✓ | — | ✓ | ✓ | ✓ | ✓ |
| 46 | Nostr Connect | ✓ | — | ~ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 50 | Búsqueda | ✓ | ~ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 57 | Zaps Lightning | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 65 | Metadatos de relays | ✓ | ✓ | ~ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Funcionalidad | Noxtr | Damus | Amethyst | Primal | Snort | Iris | Coracle | Nostur |
|---|---|---|---|---|---|---|---|---|
| DMs modernos (NIP-17/44) | — | ~ | ✓ | — | ✓ | ✓ | ✓ | ✓ |
| Wallet integrado | balance | Coinos | — | ✓ | — | Cashu | — | — |
| Búsqueda de perfiles (@user) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Canales públicos (NIP-28) | ✓ | — | ✓ | — | ✓ | — | — | — |
| Feed de tendencias | ✓ | — | ✓ | ✓ | ✓ | — | — | — |
| Suscripción a temas/hashtags | ✓ | — | ✓ | ~ | ~ | — | — | ~ |
| Hosting NIP-05 | ✓ | — | — | premium | pago | — | — | — |
| Hosting dirección Lightning | ✓ | — | — | ✓ | pago | — | — | — |
| Múltiples cuentas | logout/login | — | ✓ | — | ✓ | — | ✓ | ✓ |
| Contenido largo (NIP-23) | ✓ | — | ✓ | ✓ | ✓ | — | — | — |
| Comunidades (NIP-72) | — | — | ✓ | — | — | — | ✓ | — |
| Subida de archivos (NIP-96) | — | — | ✓ | — | ✓ | — | ✓ | — |
| Integración BTCPay Server | ✓ | — | — | — | — | — | — | — |
| Compra Bitcoin P2P (Mostro) | único | — | — | — | — | — | — | — |
| Renderizado de perfiles AR | único | — | — | — | — | — | — | — |
Áreas donde Noxtr está por detrás de otros clientes:
Noxtr incluye soporte nativo para Mostro, un protocolo de intercambio de Bitcoin entre pares (P2P) que funciona sobre Nostr. Puedes comprar o vender Bitcoin directamente con otras personas, sin inter/mediarios ni custodios, pagando con transferencia bancaria, Bizum, efectivo o cualquier otro método acordado.
El tab P2P ₿ en la barra de navegación te da acceso al order book en tiempo real con todas las ofertas disponibles.
No necesitas ninguna experiencia previa con Bitcoin. Solo necesitas una wallet Lightning en el móvil (Phoenix, Breez, Zeus, Wallet of Satoshi…).
usuario@wallet.com) o una factura bolt11 generada desde tu wallet — ahí es donde recibirás los sats.Si la wallet del vendedor o el nodo del robot no puede enrutar el pago a tu dirección, la ficha del trade mostrará un campo para introducir otra dirección Lightning alternativa. Tus sats están siempre a salvo con el robot.
Si ya usas la app Mostro Mobile, puedes importar tu identidad en Noxtr sin crear una cuenta nueva:
m/44'/1237'/38383'/0/0).Los trades terminados (cancelados o completados) no se recuperan porque el robot no los rastrea. El historial pasado solo está disponible si las 12 palabras y la interfaz son las mismas que iniciaron esos trades.
Al completar un trade puedes valorar a la contraparte de 1 a 5 estrellas. Las valoraciones recibidas aparecen en tu ficha de reputación (⭐ promedio · número de trades). Los robots Mostro publican la reputación acumulada de cada usuario en sus órdenes del order book.
Para enviar mensajes al robot es necesario que wss://relay.mostro.network esté activo en la lista de relays del usuario. El order book funciona con cualquier relay general, pero la comunicación con el robot requiere ese relay específico. Noxtr lo añade automáticamente como relay por defecto en las nuevas instalaciones.
Noxtr no requiere que el servidor tenga un nodo Lightning para el flujo Mostro. La wallet Lightning es del usuario final (Phoenix, Breez, Zeus, etc.). BTCPay Server solo es necesario para el sistema de zaps y direcciones Lightning de perfil, no para Mostro.
Los trades activos se guardan en NSTR_MOSTRO_TRADES y los eventos Mostro en NSTR_MOSTRO_EVENTS. Ambas tablas se crean automáticamente. Los datos de reputación se calculan a partir de NSTR_MOSTRO_EVENTS sin tabla adicional.
El Monitor del servidor puede configurarse para tomar órdenes automáticamente cuando coincidan con reglas predefinidas (importe, moneda, antigüedad del robot). Ver sección Monitor más abajo.
El Monitor es un proceso PHP que corre en el servidor en segundo plano y vigila los trades Mostro activos aunque ningún usuario tenga la web abierta. Escucha los relays Nostr continuamente y actúa cuando recibe eventos relevantes.
Si el administrador del sitio tiene el Monitor activo, recibirás avisos automáticos cuando ocurra algo en tus trades:
| Evento | Notificación recibida |
|---|---|
| Alguien toma tu orden publicada | Email: “Han tomado tu orden #XXXXXXXX” |
| El robot te pide pagar la hold invoice (vendes BTC) | Email: “Debes pagar la hold invoice” |
| El comprador confirma que envió el fiat (vendes BTC) | Email: “El comprador ha enviado el pago” |
| El trade se completa | Email: “Trade completado” |
| Mensaje privado nuevo en tu buzón | Telegram (si tienes el bot vinculado) |
Cada notificación se envía una sola vez por trade y tipo de evento — no hay spam.
/start CODIGO que aparece en pantalla y pégalo en el chat del bot en Telegram.El Monitor se gestiona desde el panel de administración web (/noxtr/server_admin) con los botones Start / Stop / Status, o directamente desde la consola del servidor:
php /ruta/index.php noxtr/server/action=monitor --verbose
Para dejarlo corriendo en background:
nohup php /ruta/index.php noxtr/server/action=monitor > /var/log/monitor.log 2>&1 &
El Monitor tiene su propia identidad Nostr. Los administradores autorizados pueden enviarle DMs con comandos de texto plano desde cualquier cliente Nostr (incluyendo Noxtr). Su npub aparece en el mensaje de arranque y en el panel web.
| Comando | Acción |
|---|---|
ping | Comprueba que el canal responde. Devuelve pong. |
status | Versión, trades vigilados, filtros activos, uptime, relays. |
trades | Order book en tiempo real (opciones: age 4h, amount 50 EUR, status pending). |
relays | Relays conectados en la sesión actual. |
filter_trade list | Reglas de auto-take activas. |
filter_trade amount 50 EUR | Añade regla: tomar órdenes de exactamente 50 EUR. |
filter_trade days 0 | Añade regla: tomar órdenes de robots con 0 días de antigüedad. |
filter_trade remove amount 50 | Elimina la regla de 50 EUR. |
filter_trade clear | Elimina todas las reglas de auto-take. |
email | Envía un email de prueba al admin. |
reload | Reconecta a los relays sin reiniciar el proceso. |
stop | Para el proceso limpiamente. |
help | Ayuda contextual completa. |
Además de vigilar trades propios, el Monitor notifica al administrador cada nueva orden que aparece en el order book Mostro:
Para recibir notificaciones de nuevas órdenes por Telegram, el administrador debe tener el bot vinculado y su pubkey Nostr añadida a admin_pubkeys en la configuración del Monitor.
El Monitor puede tomar órdenes automáticamente cuando coincidan con reglas configuradas. Es útil para situaciones como “tomar siempre órdenes de robots de 0 días” o “tomar siempre órdenes de exactamente 88 EUR”.
El auto-take es efímero: el Monitor genera un keypair temporal, toma la orden y notifica al admin, pero no crea un trade persistente en la base de datos. El seguimiento posterior del trade debe hacerse manualmente desde otro cliente Mostro.
admin_pubkeys pueden enviar comandos. Los eventos se verifican criptográficamente con firma Schnorr. Los comandos con más de 5 minutos de antigüedad se ignoran automáticamente.
| Componente | Tecnología |
|---|---|
| Frontend | JavaScript vanilla (IIFE único), helper DOM wquery |
| Backend | PHP (módulo del framework ExtFW) |
| Base de datos | MySQL o SQLite (SQL dual-compatible) |
| Servidor web | Apache (mod_rewrite) o nginx |
| Criptografía | noble-secp256k1 (BIP-340 Schnorr), noble-ciphers (XChaCha20-Poly1305), Web Crypto API (AES-CBC, HKDF) |
| Lightning | BTCPay Server (LNURL-pay, facturas BOLT11) |
| Almacenamiento | BD del servidor (contactos, temas, favoritos, DMs, relays, silenciados, canales) + localStorage/IndexedDB (claves, estado UI) |